Skip to content
Success

Console Output

Skipping 3,834 KB.. Full Log
FINEST: [VERBOSE] DoorLog - [RoomJdbcImplHelper - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] - useNewConnectionAsyncInternal connection #4 : end transaction #4
Jan 29, 2025 10:31:17 AM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [DatabaseBuilder.build - jdbc:sqlite::memory:] : created tables
Jan 29, 2025 10:31:17 AM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [DatabaseBuilder.build - jdbc:sqlite::memory:] : created tables
Jan 29, 2025 10:31:17 AM io.github.aakira.napier.DebugAntilog performLog
INFO: [INFO] DoorLog - [DatabaseBuilder.build - jdbc:sqlite::memory:] database build complete
Jan 29, 2025 10:31:17 AM io.github.aakira.napier.DebugAntilog performLog
INFO: [INFO] DoorLog - [DatabaseBuilder.build - jdbc:sqlite::memory:] database build complete
Jan 29, 2025 10:31:17 AM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [DatabaseBuilder.build - jdbc:sqlite::memory:] : created tables
Jan 29, 2025 10:31:17 AM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - [DatabaseBuilder.build - jdbc:sqlite::memory:] : created tables
Jan 29, 2025 10:31:17 AM io.github.aakira.napier.DebugAntilog performLog
INFO: [INFO] DoorLog - [DatabaseBuilder.build - jdbc:sqlite::memory:] database build complete
Jan 29, 2025 10:31:17 AM io.github.aakira.napier.DebugAntilog performLog
INFO: [INFO] DoorLog - [DatabaseBuilder.build - jdbc:sqlite::memory:] database build complete
Jan 29, 2025 10:31:17 AM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - InvalidationTracker: tables invalidated: RequestedEntry
Jan 29, 2025 10:31:17 AM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - InvalidationTracker: tables invalidated: RequestedEntry
Jan 29, 2025 10:31:17 AM io.github.aakira.napier.DebugAntilog performLog
INFO: [INFO] DoorLog - [DatabaseBuilder.build - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] database build complete
Jan 29, 2025 10:31:17 AM io.github.aakira.napier.DebugAntilog performLog
INFO: [INFO] DoorLog - [DatabaseBuilder.build - jdbc:sqlite:build/tmp/UmAppDatabase.sqlite] database build complete
Jan 29, 2025 10:31:17 AM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - InvalidationTracker: tables invalidated: Person, SyncNode, Site, PersonAuth2, SystemPermission
Jan 29, 2025 10:31:17 AM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - InvalidationTracker: tables invalidated: Person, SyncNode, Site, PersonAuth2, SystemPermission
Jan 29, 2025 10:31:17 AM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - InvalidationTracker: tables invalidated: SyncNode
Jan 29, 2025 10:31:17 AM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - InvalidationTracker: tables invalidated: SyncNode
Jan 29, 2025 10:31:17 AM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - InvalidationTracker: tables invalidated: Site
Jan 29, 2025 10:31:17 AM io.github.aakira.napier.DebugAntilog performLog
FINEST: [VERBOSE] DoorLog - InvalidationTracker: tables invalidated: Site
Verification result: AuthenticationData(userHandle=6FDF668AFC1B876CE2EE3DB2, collectedClientData=CollectedClientData(type=webauthn.get, challenge=8ED75EC77ADFEDD736CEB873, origin=android:apk-key-hash:FhOh2f8Wsm1hMaBCSV7CTSYUddVQLmzf82reTfJr4OY, crossOrigin=null, tokenBinding=null), clientExtensions=null)
Verification error: Assertion signature is not valid.
Verification error: The actual challenge does not match the expected challenge
> Task :app-ktor-server:test
> Task :app-ktor-server:check
> Task :app-ktor-server:build
> Task :sharedse:allTests
> Task :sharedse:check
> Task :sharedse:build

> Task :core:compileTestKotlinJvm
w: file:///home/jenkins/.jenkins/workspace/Release-Maktab/core/src/jvmTest/kotlin/com/ustadmobile/core/account/AuthManagerTest.kt:47:18 'insertPersonAndGroup(T, Int = ...): T' is deprecated. Should use AddNewPersonUseCase instead
w: file:///home/jenkins/.jenkins/workspace/Release-Maktab/core/src/jvmTest/kotlin/com/ustadmobile/core/cachestoragepath/GetStoragePathForUrlUseCaseCommonJvmTest.kt:39:13 Variable 'getStoragePathUseCase' is never used
w: file:///home/jenkins/.jenkins/workspace/Release-Maktab/core/src/jvmTest/kotlin/com/ustadmobile/core/domain/blob/saveandmanifest/SaveLocalUriAndManifestUploadIntegrationTest.kt:210:80 Parameter 'prev' is never used, could be renamed to _
w: file:///home/jenkins/.jenkins/workspace/Release-Maktab/core/src/jvmTest/kotlin/com/ustadmobile/core/domain/blob/upload/BlobUploadServerUseCaseTest.kt:113:51 Parameter 'invocation' is never used, could be renamed to _
w: file:///home/jenkins/.jenkins/workspace/Release-Maktab/core/src/jvmTest/kotlin/com/ustadmobile/core/domain/blob/upload/BlobUploadServerUseCaseTest.kt:161:51 Parameter 'invocation' is never used, could be renamed to _
w: file:///home/jenkins/.jenkins/workspace/Release-Maktab/core/src/jvmTest/kotlin/com/ustadmobile/core/domain/clazzenrolment/pendingenrolment/RequestEnrolmentUseCaseJvmTest.kt:32:40 'insertPersonAndGroup(T, Int = ...): T' is deprecated. Should use AddNewPersonUseCase instead
w: file:///home/jenkins/.jenkins/workspace/Release-Maktab/core/src/jvmTest/kotlin/com/ustadmobile/core/domain/invite/ProcessInviteUseCaseTest.kt:65:17 Variable 'inviteLink' is never used
w: file:///home/jenkins/.jenkins/workspace/Release-Maktab/core/src/jvmTest/kotlin/com/ustadmobile/core/impl/UstadAccountManagerTest.kt:277:18 'insertPersonAndGroup(T, Int = ...): T' is deprecated. Should use AddNewPersonUseCase instead
w: file:///home/jenkins/.jenkins/workspace/Release-Maktab/core/src/jvmTest/kotlin/com/ustadmobile/core/impl/UstadAccountManagerTest.kt:317:13 Variable 'savedAccount' is never used
w: file:///home/jenkins/.jenkins/workspace/Release-Maktab/core/src/jvmTest/kotlin/com/ustadmobile/core/impl/UstadAccountManagerTest.kt:319:18 'insertPersonAndGroup(T, Int = ...): T' is deprecated. Should use AddNewPersonUseCase instead
w: file:///home/jenkins/.jenkins/workspace/Release-Maktab/core/src/jvmTest/kotlin/com/ustadmobile/core/impl/UstadAccountManagerTest.kt:328:18 'insertPersonAndGroup(T, Int = ...): T' is deprecated. Should use AddNewPersonUseCase instead
w: file:///home/jenkins/.jenkins/workspace/Release-Maktab/core/src/jvmTest/kotlin/com/ustadmobile/core/impl/UstadAccountManagerTest.kt:445:18 'insertPersonAndGroup(T, Int = ...): T' is deprecated. Should use AddNewPersonUseCase instead
w: file:///home/jenkins/.jenkins/workspace/Release-Maktab/core/src/jvmTest/kotlin/com/ustadmobile/core/impl/UstadAccountManagerTest.kt:453:18 'insertPersonAndGroup(T, Int = ...): T' is deprecated. Should use AddNewPersonUseCase instead
w: file:///home/jenkins/.jenkins/workspace/Release-Maktab/core/src/jvmTest/kotlin/com/ustadmobile/core/impl/UstadAccountManagerTest.kt:560:16 'insertPersonAndGroup(T, Int = ...): T' is deprecated. Should use AddNewPersonUseCase instead
w: file:///home/jenkins/.jenkins/workspace/Release-Maktab/core/src/jvmTest/kotlin/com/ustadmobile/core/test/clientservertest/ClientServerIntegrationTest.kt:73:5 Parameter 'baseTmpDir' is never used
w: file:///home/jenkins/.jenkins/workspace/Release-Maktab/core/src/jvmTest/kotlin/com/ustadmobile/core/test/clientservertest/ClientServerIntegrationTest.kt:197:37 Parameter 'call' is never used, could be renamed to _
w: file:///home/jenkins/.jenkins/workspace/Release-Maktab/core/src/jvmTest/kotlin/com/ustadmobile/core/test/clientservertest/ClientServerIntegrationTest.kt:206:47 'insertPersonAndGroup(T, Int = ...): T' is deprecated. Should use AddNewPersonUseCase instead
w: file:///home/jenkins/.jenkins/workspace/Release-Maktab/core/src/jvmTest/kotlin/com/ustadmobile/core/test/viewmodeltest/ViewModelTestBuilder.kt:323:33 'insertPersonAndGroup(T, Int = ...): T' is deprecated. Should use AddNewPersonUseCase instead
w: file:///home/jenkins/.jenkins/workspace/Release-Maktab/core/src/jvmTest/kotlin/com/ustadmobile/core/util/test/MainDispatcherRule.kt:17:31 This declaration needs opt-in. Its usage should be marked with '@kotlinx.coroutines.ExperimentalCoroutinesApi' or '@OptIn(kotlinx.coroutines.ExperimentalCoroutinesApi::class)'
w: file:///home/jenkins/.jenkins/workspace/Release-Maktab/core/src/jvmTest/kotlin/com/ustadmobile/core/util/test/MainDispatcherRule.kt:18:21 This declaration needs opt-in. Its usage should be marked with '@kotlinx.coroutines.ExperimentalCoroutinesApi' or '@OptIn(kotlinx.coroutines.ExperimentalCoroutinesApi::class)'
w: file:///home/jenkins/.jenkins/workspace/Release-Maktab/core/src/jvmTest/kotlin/com/ustadmobile/core/util/test/MainDispatcherRule.kt:22:21 This declaration needs opt-in. Its usage should be marked with '@kotlinx.coroutines.ExperimentalCoroutinesApi' or '@OptIn(kotlinx.coroutines.ExperimentalCoroutinesApi::class)'
w: file:///home/jenkins/.jenkins/workspace/Release-Maktab/core/src/jvmTest/kotlin/com/ustadmobile/core/viewmodel/clazz/list/ClazzListViewModelTest.kt:66:36 'grantScopedPermission(Person, Long, Int, Long): ScopedGrantResult' is deprecated. This has been replaced with SystemPermission and CoursePermission
w: file:///home/jenkins/.jenkins/workspace/Release-Maktab/core/src/jvmTest/kotlin/com/ustadmobile/core/viewmodel/clazzlog/edit/ClazzLogEditAttendanceViewModelTest.kt:69:50 'insertPersonAndGroup(T, Int = ...): T' is deprecated. Should use AddNewPersonUseCase instead
w: file:///home/jenkins/.jenkins/workspace/Release-Maktab/core/src/jvmTest/kotlin/com/ustadmobile/core/viewmodel/parentalconsentmanagement/ParentalConsentManagementViewModelTest.kt:60:40 'insertPersonAndGroup(T, Int = ...): T' is deprecated. Should use AddNewPersonUseCase instead
w: file:///home/jenkins/.jenkins/workspace/Release-Maktab/core/src/jvmTest/kotlin/com/ustadmobile/core/viewmodel/person/PersonIntegrationTest.kt:29:40 'insertPersonAndGroup(T, Int = ...): T' is deprecated. Should use AddNewPersonUseCase instead
w: file:///home/jenkins/.jenkins/workspace/Release-Maktab/core/src/jvmTest/kotlin/com/ustadmobile/core/viewmodel/person/detail/PersonDetailViewModelTest.kt:187:20 'insertPersonAndGroup(T, Int = ...): T' is deprecated. Should use AddNewPersonUseCase instead

> Task :core:jvmTestClasses
OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended
com.ustadmobile.core.domain.blob.upload.BlobUploadClientUseCaseJvmTest$TestUploadException
	at com.ustadmobile.core.domain.blob.upload.BlobUploadClientUseCaseJvmTest.stubToThrowException$lambda$11$lambda$10(BlobUploadClientUseCaseJvmTest.kt:209)
	at org.mockito.internal.stubbing.StubbedInvocationMatcher.answer(StubbedInvocationMatcher.java:42)
	at org.mockito.internal.handler.MockHandlerImpl.handle(MockHandlerImpl.java:103)
	at org.mockito.internal.handler.NullResultGuardian.handle(NullResultGuardian.java:29)
	at org.mockito.internal.handler.InvocationNotifierHandler.handle(InvocationNotifierHandler.java:34)
	at org.mockito.internal.creation.bytebuddy.MockMethodInterceptor.doIntercept(MockMethodInterceptor.java:82)
	at org.mockito.internal.creation.bytebuddy.MockMethodAdvice.handle(MockMethodAdvice.java:134)
	at com.ustadmobile.core.domain.upload.ChunkedUploadClientUseCaseKtorImpl.invoke(ChunkedUploadClientUseCaseKtorImpl.kt:107)
	at com.ustadmobile.core.domain.blob.upload.BlobUploadClientUseCaseJvm$asyncUploadItemsFromChannelProcessor$2$1.invokeSuspend(BlobUploadClientUseCaseJvm.kt:120)
	at _COROUTINE._BOUNDARY._(CoroutineDebugging.kt:42)
	at com.ustadmobile.core.domain.blob.upload.BlobUploadClientUseCaseJvm$invoke$2.invokeSuspend(BlobUploadClientUseCaseJvm.kt:244)
	at com.ustadmobile.core.domain.blob.upload.BlobUploadClientUseCaseJvm$invoke$4.invokeSuspend(BlobUploadClientUseCaseJvm.kt:272)
	at com.ustadmobile.core.domain.blob.upload.BlobUploadClientUseCaseJvm.invoke(BlobUploadClientUseCaseJvm.kt:269)
	at com.ustadmobile.core.domain.blob.upload.BlobUploadClientUseCaseJvmTest$givenTransferJobInDatabase_whenErrorOccurs_thenAttemptCountIncrementAndExceptionThrown$1.invokeSuspend(BlobUploadClientUseCaseJvmTest.kt:384)
Caused by: com.ustadmobile.core.domain.blob.upload.BlobUploadClientUseCaseJvmTest$TestUploadException
	at com.ustadmobile.core.domain.blob.upload.BlobUploadClientUseCaseJvmTest.stubToThrowException$lambda$11$lambda$10(BlobUploadClientUseCaseJvmTest.kt:209)
	at org.mockito.internal.stubbing.StubbedInvocationMatcher.answer(StubbedInvocationMatcher.java:42)
	at org.mockito.internal.handler.MockHandlerImpl.handle(MockHandlerImpl.java:103)
	at org.mockito.internal.handler.NullResultGuardian.handle(NullResultGuardian.java:29)
	at org.mockito.internal.handler.InvocationNotifierHandler.handle(InvocationNotifierHandler.java:34)
	at org.mockito.internal.creation.bytebuddy.MockMethodInterceptor.doIntercept(MockMethodInterceptor.java:82)
	at org.mockito.internal.creation.bytebuddy.MockMethodAdvice.handle(MockMethodAdvice.java:134)
	at com.ustadmobile.core.domain.upload.ChunkedUploadClientUseCaseKtorImpl.invoke(ChunkedUploadClientUseCaseKtorImpl.kt:107)
	at com.ustadmobile.core.domain.blob.upload.BlobUploadClientUseCaseJvm$asyncUploadItemsFromChannelProcessor$2$1.invokeSuspend(BlobUploadClientUseCaseJvm.kt:120)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:104)
	at kotlinx.coroutines.EventLoopImplBase.processNextEvent(EventLoop.common.kt:277)
	at kotlinx.coroutines.BlockingCoroutine.joinBlocking(Builders.kt:95)
	at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking(Builders.kt:69)
	at kotlinx.coroutines.BuildersKt.runBlocking(Unknown Source)
	at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking$default(Builders.kt:48)
	at kotlinx.coroutines.BuildersKt.runBlocking$default(Unknown Source)
	at com.ustadmobile.core.domain.blob.upload.BlobUploadClientUseCaseJvmTest.givenTransferJobInDatabase_whenErrorOccurs_thenAttemptCountIncrementAndExceptionThrown(BlobUploadClientUseCaseJvmTest.kt:356)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:569)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
	at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
	at org.junit.rules.ExternalResource$1.evaluate(ExternalResource.java:54)
	at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
	at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
	at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
	at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
	at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.runTestClass(JUnitTestClassExecutor.java:112)
	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:58)
	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:40)
	at org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:54)
	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:53)
	at jdk.internal.reflect.GeneratedMethodAccessor65.invoke(Unknown Source)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:569)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92)
	at jdk.proxy1/jdk.proxy1.$Proxy4.processTestClass(Unknown Source)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker$2.run(TestWorker.java:181)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:130)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:101)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:61)
	at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56)
	at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:122)
	at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:69)
	at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)
	at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)
===SQLITE===
add("""
                        CREATE TRIGGER IF NOT EXISTS Retain_PersonPicture_Ins_personPictureUri
                        AFTER INSERT ON PersonPicture
                        FOR EACH ROW WHEN NEW.personPictureUri IS NOT NULL
                        BEGIN
                        INSERT OR REPLACE INTO CacheLockJoin(cljTableId, cljEntityUid, cljUrl, cljLockId, cljStatus, cljType)
                        VALUES(50, NEW.personPictureUid, NEW.personPictureUri, 0, 1, 1);
                        END
                    """)

add("""
                        CREATE TRIGGER IF NOT EXISTS Retain_PersonPicture_Ins_personPictureThumbnailUri
                        AFTER INSERT ON PersonPicture
                        FOR EACH ROW WHEN NEW.personPictureThumbnailUri IS NOT NULL
                        BEGIN
                        INSERT OR REPLACE INTO CacheLockJoin(cljTableId, cljEntityUid, cljUrl, cljLockId, cljStatus, cljType)
                        VALUES(50, NEW.personPictureUid, NEW.personPictureThumbnailUri, 0, 1, 1);
                        END
                    """)

add("""
                    CREATE TRIGGER IF NOT EXISTS Retain_PersonPicture_Upd_personPictureUri_New
                    AFTER UPDATE ON PersonPicture
                    FOR EACH ROW WHEN NEW.personPictureUri != OLD.personPictureUri AND NEW.personPictureUri IS NOT NULL
                    BEGIN
                        INSERT OR REPLACE INTO CacheLockJoin(cljTableId, cljEntityUid, cljUrl, cljLockId, cljStatus, cljType)
                        VALUES(50, NEW.personPictureUid, NEW.personPictureUri, 0, 1, 1);
                    END   
                """)

add("""CREATE TRIGGER IF NOT EXISTS Retain_PersonPicture_Upd_personPictureUri_Old
AFTER UPDATE ON PersonPicture
FOR EACH ROW WHEN NEW.personPictureUri != OLD.personPictureUri AND OLD.personPictureUri IS NOT NULL
BEGIN
    UPDATE CacheLockJoin 
       SET cljStatus = 3
     WHERE cljTableId = 50
       AND cljEntityUid = OLD.personPictureUid
       AND cljUrl = OLD.personPictureUri;
END        """)

add("""
                    CREATE TRIGGER IF NOT EXISTS Retain_PersonPicture_Upd_personPictureThumbnailUri_New
                    AFTER UPDATE ON PersonPicture
                    FOR EACH ROW WHEN NEW.personPictureThumbnailUri != OLD.personPictureThumbnailUri AND NEW.personPictureThumbnailUri IS NOT NULL
                    BEGIN
                        INSERT OR REPLACE INTO CacheLockJoin(cljTableId, cljEntityUid, cljUrl, cljLockId, cljStatus, cljType)
                        VALUES(50, NEW.personPictureUid, NEW.personPictureThumbnailUri, 0, 1, 1);
                    END   
                """)

add("""CREATE TRIGGER IF NOT EXISTS Retain_PersonPicture_Upd_personPictureThumbnailUri_Old
AFTER UPDATE ON PersonPicture
FOR EACH ROW WHEN NEW.personPictureThumbnailUri != OLD.personPictureThumbnailUri AND OLD.personPictureThumbnailUri IS NOT NULL
BEGIN
    UPDATE CacheLockJoin 
       SET cljStatus = 3
     WHERE cljTableId = 50
       AND cljEntityUid = OLD.personPictureUid
       AND cljUrl = OLD.personPictureThumbnailUri;
END        """)

add("""CREATE TRIGGER IF NOT EXISTS Retain_PersonPicture_Del_personPictureUri
AFTER DELETE ON PersonPicture
FOR EACH ROW WHEN OLD.personPictureUri IS NOT NULL
BEGIN
    UPDATE CacheLockJoin 
       SET cljStatus = 3
     WHERE cljTableId = 50
       AND cljEntityUid = OLD.personPictureUid
       AND cljUrl = OLD.personPictureUri;
END       """)

add("""CREATE TRIGGER IF NOT EXISTS Retain_PersonPicture_Del_personPictureThumbnailUri
AFTER DELETE ON PersonPicture
FOR EACH ROW WHEN OLD.personPictureThumbnailUri IS NOT NULL
BEGIN
    UPDATE CacheLockJoin 
       SET cljStatus = 3
     WHERE cljTableId = 50
       AND cljEntityUid = OLD.personPictureUid
       AND cljUrl = OLD.personPictureThumbnailUri;
END       """)

add("""
                        CREATE TRIGGER IF NOT EXISTS Retain_CoursePicture_Ins_coursePictureUri
                        AFTER INSERT ON CoursePicture
                        FOR EACH ROW WHEN NEW.coursePictureUri IS NOT NULL
                        BEGIN
                        INSERT OR REPLACE INTO CacheLockJoin(cljTableId, cljEntityUid, cljUrl, cljLockId, cljStatus, cljType)
                        VALUES(125, NEW.coursePictureUid, NEW.coursePictureUri, 0, 1, 1);
                        END
                    """)

add("""
                        CREATE TRIGGER IF NOT EXISTS Retain_CoursePicture_Ins_coursePictureThumbnailUri
                        AFTER INSERT ON CoursePicture
                        FOR EACH ROW WHEN NEW.coursePictureThumbnailUri IS NOT NULL
                        BEGIN
                        INSERT OR REPLACE INTO CacheLockJoin(cljTableId, cljEntityUid, cljUrl, cljLockId, cljStatus, cljType)
                        VALUES(125, NEW.coursePictureUid, NEW.coursePictureThumbnailUri, 0, 1, 1);
                        END
                    """)

add("""
                    CREATE TRIGGER IF NOT EXISTS Retain_CoursePicture_Upd_coursePictureUri_New
                    AFTER UPDATE ON CoursePicture
                    FOR EACH ROW WHEN NEW.coursePictureUri != OLD.coursePictureUri AND NEW.coursePictureUri IS NOT NULL
                    BEGIN
                        INSERT OR REPLACE INTO CacheLockJoin(cljTableId, cljEntityUid, cljUrl, cljLockId, cljStatus, cljType)
                        VALUES(125, NEW.coursePictureUid, NEW.coursePictureUri, 0, 1, 1);
                    END   
                """)

add("""CREATE TRIGGER IF NOT EXISTS Retain_CoursePicture_Upd_coursePictureUri_Old
AFTER UPDATE ON CoursePicture
FOR EACH ROW WHEN NEW.coursePictureUri != OLD.coursePictureUri AND OLD.coursePictureUri IS NOT NULL
BEGIN
    UPDATE CacheLockJoin 
       SET cljStatus = 3
     WHERE cljTableId = 125
       AND cljEntityUid = OLD.coursePictureUid
       AND cljUrl = OLD.coursePictureUri;
END        """)

add("""
                    CREATE TRIGGER IF NOT EXISTS Retain_CoursePicture_Upd_coursePictureThumbnailUri_New
                    AFTER UPDATE ON CoursePicture
                    FOR EACH ROW WHEN NEW.coursePictureThumbnailUri != OLD.coursePictureThumbnailUri AND NEW.coursePictureThumbnailUri IS NOT NULL
                    BEGIN
                        INSERT OR REPLACE INTO CacheLockJoin(cljTableId, cljEntityUid, cljUrl, cljLockId, cljStatus, cljType)
                        VALUES(125, NEW.coursePictureUid, NEW.coursePictureThumbnailUri, 0, 1, 1);
                    END   
                """)

add("""CREATE TRIGGER IF NOT EXISTS Retain_CoursePicture_Upd_coursePictureThumbnailUri_Old
AFTER UPDATE ON CoursePicture
FOR EACH ROW WHEN NEW.coursePictureThumbnailUri != OLD.coursePictureThumbnailUri AND OLD.coursePictureThumbnailUri IS NOT NULL
BEGIN
    UPDATE CacheLockJoin 
       SET cljStatus = 3
     WHERE cljTableId = 125
       AND cljEntityUid = OLD.coursePictureUid
       AND cljUrl = OLD.coursePictureThumbnailUri;
END        """)

add("""CREATE TRIGGER IF NOT EXISTS Retain_CoursePicture_Del_coursePictureUri
AFTER DELETE ON CoursePicture
FOR EACH ROW WHEN OLD.coursePictureUri IS NOT NULL
BEGIN
    UPDATE CacheLockJoin 
       SET cljStatus = 3
     WHERE cljTableId = 125
       AND cljEntityUid = OLD.coursePictureUid
       AND cljUrl = OLD.coursePictureUri;
END       """)

add("""CREATE TRIGGER IF NOT EXISTS Retain_CoursePicture_Del_coursePictureThumbnailUri
AFTER DELETE ON CoursePicture
FOR EACH ROW WHEN OLD.coursePictureThumbnailUri IS NOT NULL
BEGIN
    UPDATE CacheLockJoin 
       SET cljStatus = 3
     WHERE cljTableId = 125
       AND cljEntityUid = OLD.coursePictureUid
       AND cljUrl = OLD.coursePictureThumbnailUri;
END       """)

add("""
                        CREATE TRIGGER IF NOT EXISTS Retain_CourseAssignmentSubmissionFile_Ins_casaUri
                        AFTER INSERT ON CourseAssignmentSubmissionFile
                        FOR EACH ROW WHEN NEW.casaUri IS NOT NULL
                        BEGIN
                        INSERT OR REPLACE INTO CacheLockJoin(cljTableId, cljEntityUid, cljUrl, cljLockId, cljStatus, cljType)
                        VALUES(90, NEW.casaUid, NEW.casaUri, 0, 1, 1);
                        END
                    """)

add("""
                    CREATE TRIGGER IF NOT EXISTS Retain_CourseAssignmentSubmissionFile_Upd_casaUri_New
                    AFTER UPDATE ON CourseAssignmentSubmissionFile
                    FOR EACH ROW WHEN NEW.casaUri != OLD.casaUri AND NEW.casaUri IS NOT NULL
                    BEGIN
                        INSERT OR REPLACE INTO CacheLockJoin(cljTableId, cljEntityUid, cljUrl, cljLockId, cljStatus, cljType)
                        VALUES(90, NEW.casaUid, NEW.casaUri, 0, 1, 1);
                    END   
                """)

add("""CREATE TRIGGER IF NOT EXISTS Retain_CourseAssignmentSubmissionFile_Upd_casaUri_Old
AFTER UPDATE ON CourseAssignmentSubmissionFile
FOR EACH ROW WHEN NEW.casaUri != OLD.casaUri AND OLD.casaUri IS NOT NULL
BEGIN
    UPDATE CacheLockJoin 
       SET cljStatus = 3
     WHERE cljTableId = 90
       AND cljEntityUid = OLD.casaUid
       AND cljUrl = OLD.casaUri;
END        """)

add("""CREATE TRIGGER IF NOT EXISTS Retain_CourseAssignmentSubmissionFile_Del_casaUri
AFTER DELETE ON CourseAssignmentSubmissionFile
FOR EACH ROW WHEN OLD.casaUri IS NOT NULL
BEGIN
    UPDATE CacheLockJoin 
       SET cljStatus = 3
     WHERE cljTableId = 90
       AND cljEntityUid = OLD.casaUid
       AND cljUrl = OLD.casaUri;
END       """)

add("""
                        CREATE TRIGGER IF NOT EXISTS Retain_CourseBlockPicture_Ins_cbpPictureUri
                        AFTER INSERT ON CourseBlockPicture
                        FOR EACH ROW WHEN NEW.cbpPictureUri IS NOT NULL
                        BEGIN
                        INSERT OR REPLACE INTO CacheLockJoin(cljTableId, cljEntityUid, cljUrl, cljLockId, cljStatus, cljType)
                        VALUES(6677, NEW.cbpUid, NEW.cbpPictureUri, 0, 1, 1);
                        END
                    """)

add("""
                        CREATE TRIGGER IF NOT EXISTS Retain_CourseBlockPicture_Ins_cbpThumbnailUri
                        AFTER INSERT ON CourseBlockPicture
                        FOR EACH ROW WHEN NEW.cbpThumbnailUri IS NOT NULL
                        BEGIN
                        INSERT OR REPLACE INTO CacheLockJoin(cljTableId, cljEntityUid, cljUrl, cljLockId, cljStatus, cljType)
                        VALUES(6677, NEW.cbpUid, NEW.cbpThumbnailUri, 0, 1, 1);
                        END
                    """)

add("""
                    CREATE TRIGGER IF NOT EXISTS Retain_CourseBlockPicture_Upd_cbpPictureUri_New
                    AFTER UPDATE ON CourseBlockPicture
                    FOR EACH ROW WHEN NEW.cbpPictureUri != OLD.cbpPictureUri AND NEW.cbpPictureUri IS NOT NULL
                    BEGIN
                        INSERT OR REPLACE INTO CacheLockJoin(cljTableId, cljEntityUid, cljUrl, cljLockId, cljStatus, cljType)
                        VALUES(6677, NEW.cbpUid, NEW.cbpPictureUri, 0, 1, 1);
                    END   
                """)

add("""CREATE TRIGGER IF NOT EXISTS Retain_CourseBlockPicture_Upd_cbpPictureUri_Old
AFTER UPDATE ON CourseBlockPicture
FOR EACH ROW WHEN NEW.cbpPictureUri != OLD.cbpPictureUri AND OLD.cbpPictureUri IS NOT NULL
BEGIN
    UPDATE CacheLockJoin 
       SET cljStatus = 3
     WHERE cljTableId = 6677
       AND cljEntityUid = OLD.cbpUid
       AND cljUrl = OLD.cbpPictureUri;
END        """)

add("""
                    CREATE TRIGGER IF NOT EXISTS Retain_CourseBlockPicture_Upd_cbpThumbnailUri_New
                    AFTER UPDATE ON CourseBlockPicture
                    FOR EACH ROW WHEN NEW.cbpThumbnailUri != OLD.cbpThumbnailUri AND NEW.cbpThumbnailUri IS NOT NULL
                    BEGIN
                        INSERT OR REPLACE INTO CacheLockJoin(cljTableId, cljEntityUid, cljUrl, cljLockId, cljStatus, cljType)
                        VALUES(6677, NEW.cbpUid, NEW.cbpThumbnailUri, 0, 1, 1);
                    END   
                """)

add("""CREATE TRIGGER IF NOT EXISTS Retain_CourseBlockPicture_Upd_cbpThumbnailUri_Old
AFTER UPDATE ON CourseBlockPicture
FOR EACH ROW WHEN NEW.cbpThumbnailUri != OLD.cbpThumbnailUri AND OLD.cbpThumbnailUri IS NOT NULL
BEGIN
    UPDATE CacheLockJoin 
       SET cljStatus = 3
     WHERE cljTableId = 6677
       AND cljEntityUid = OLD.cbpUid
       AND cljUrl = OLD.cbpThumbnailUri;
END        """)

add("""CREATE TRIGGER IF NOT EXISTS Retain_CourseBlockPicture_Del_cbpPictureUri
AFTER DELETE ON CourseBlockPicture
FOR EACH ROW WHEN OLD.cbpPictureUri IS NOT NULL
BEGIN
    UPDATE CacheLockJoin 
       SET cljStatus = 3
     WHERE cljTableId = 6677
       AND cljEntityUid = OLD.cbpUid
       AND cljUrl = OLD.cbpPictureUri;
END       """)

add("""CREATE TRIGGER IF NOT EXISTS Retain_CourseBlockPicture_Del_cbpThumbnailUri
AFTER DELETE ON CourseBlockPicture
FOR EACH ROW WHEN OLD.cbpThumbnailUri IS NOT NULL
BEGIN
    UPDATE CacheLockJoin 
       SET cljStatus = 3
     WHERE cljTableId = 6677
       AND cljEntityUid = OLD.cbpUid
       AND cljUrl = OLD.cbpThumbnailUri;
END       """)

add("""
                        CREATE TRIGGER IF NOT EXISTS Retain_ContentEntryPicture2_Ins_cepPictureUri
                        AFTER INSERT ON ContentEntryPicture2
                        FOR EACH ROW WHEN NEW.cepPictureUri IS NOT NULL
                        BEGIN
                        INSERT OR REPLACE INTO CacheLockJoin(cljTableId, cljEntityUid, cljUrl, cljLockId, cljStatus, cljType)
                        VALUES(6678, NEW.cepUid, NEW.cepPictureUri, 0, 1, 1);
                        END
                    """)

add("""
                        CREATE TRIGGER IF NOT EXISTS Retain_ContentEntryPicture2_Ins_cepThumbnailUri
                        AFTER INSERT ON ContentEntryPicture2
                        FOR EACH ROW WHEN NEW.cepThumbnailUri IS NOT NULL
                        BEGIN
                        INSERT OR REPLACE INTO CacheLockJoin(cljTableId, cljEntityUid, cljUrl, cljLockId, cljStatus, cljType)
                        VALUES(6678, NEW.cepUid, NEW.cepThumbnailUri, 0, 1, 1);
                        END
                    """)

add("""
                    CREATE TRIGGER IF NOT EXISTS Retain_ContentEntryPicture2_Upd_cepPictureUri_New
                    AFTER UPDATE ON ContentEntryPicture2
                    FOR EACH ROW WHEN NEW.cepPictureUri != OLD.cepPictureUri AND NEW.cepPictureUri IS NOT NULL
                    BEGIN
                        INSERT OR REPLACE INTO CacheLockJoin(cljTableId, cljEntityUid, cljUrl, cljLockId, cljStatus, cljType)
                        VALUES(6678, NEW.cepUid, NEW.cepPictureUri, 0, 1, 1);
                    END   
                """)

add("""CREATE TRIGGER IF NOT EXISTS Retain_ContentEntryPicture2_Upd_cepPictureUri_Old
AFTER UPDATE ON ContentEntryPicture2
FOR EACH ROW WHEN NEW.cepPictureUri != OLD.cepPictureUri AND OLD.cepPictureUri IS NOT NULL
BEGIN
    UPDATE CacheLockJoin 
       SET cljStatus = 3
     WHERE cljTableId = 6678
       AND cljEntityUid = OLD.cepUid
       AND cljUrl = OLD.cepPictureUri;
END        """)

add("""
                    CREATE TRIGGER IF NOT EXISTS Retain_ContentEntryPicture2_Upd_cepThumbnailUri_New
                    AFTER UPDATE ON ContentEntryPicture2
                    FOR EACH ROW WHEN NEW.cepThumbnailUri != OLD.cepThumbnailUri AND NEW.cepThumbnailUri IS NOT NULL
                    BEGIN
                        INSERT OR REPLACE INTO CacheLockJoin(cljTableId, cljEntityUid, cljUrl, cljLockId, cljStatus, cljType)
                        VALUES(6678, NEW.cepUid, NEW.cepThumbnailUri, 0, 1, 1);
                    END   
                """)

add("""CREATE TRIGGER IF NOT EXISTS Retain_ContentEntryPicture2_Upd_cepThumbnailUri_Old
AFTER UPDATE ON ContentEntryPicture2
FOR EACH ROW WHEN NEW.cepThumbnailUri != OLD.cepThumbnailUri AND OLD.cepThumbnailUri IS NOT NULL
BEGIN
    UPDATE CacheLockJoin 
       SET cljStatus = 3
     WHERE cljTableId = 6678
       AND cljEntityUid = OLD.cepUid
       AND cljUrl = OLD.cepThumbnailUri;
END        """)

add("""CREATE TRIGGER IF NOT EXISTS Retain_ContentEntryPicture2_Del_cepPictureUri
AFTER DELETE ON ContentEntryPicture2
FOR EACH ROW WHEN OLD.cepPictureUri IS NOT NULL
BEGIN
    UPDATE CacheLockJoin 
       SET cljStatus = 3
     WHERE cljTableId = 6678
       AND cljEntityUid = OLD.cepUid
       AND cljUrl = OLD.cepPictureUri;
END       """)

add("""CREATE TRIGGER IF NOT EXISTS Retain_ContentEntryPicture2_Del_cepThumbnailUri
AFTER DELETE ON ContentEntryPicture2
FOR EACH ROW WHEN OLD.cepThumbnailUri IS NOT NULL
BEGIN
    UPDATE CacheLockJoin 
       SET cljStatus = 3
     WHERE cljTableId = 6678
       AND cljEntityUid = OLD.cepUid
       AND cljUrl = OLD.cepThumbnailUri;
END       """)

===POSTGRES===
add("""
                            CREATE OR REPLACE FUNCTION retain_c_clj_50_personPictureUri() RETURNS TRIGGER AS $$
                            BEGIN
                            INSERT INTO CacheLockJoin(cljTableId, cljEntityUid, cljUrl, cljLockId, cljStatus, cljType)
                            VALUES(50, NEW.personPictureUid, NEW.personPictureUri, 0, 1, 1);
                            RETURN NEW;
                            END $$ LANGUAGE plpgsql
                        """)

add("""
                            CREATE OR REPLACE FUNCTION retain_d_clj_50_personPictureUri() RETURNS TRIGGER AS $$
                            BEGIN
                            UPDATE CacheLockJoin 
                               SET cljStatus = 3
                             WHERE cljTableId = 50
                               AND cljEntityUid = OLD.personPictureUid
                               AND cljUrl = OLD.personPictureUri;
                            RETURN OLD;
                            END $$ LANGUAGE plpgsql   
                        """)

add("""
                            CREATE TRIGGER retain_c_clj_50_personPictureUri_ins_t
                            AFTER INSERT ON PersonPicture
                            FOR EACH ROW
                            WHEN (NEW.personPictureUri IS NOT NULL)
                            EXECUTE FUNCTION retain_c_clj_50_personPictureUri();
                        """)

add("""
                            CREATE TRIGGER retain_c_clj_50_personPictureUri_upd_t
                            AFTER UPDATE ON PersonPicture
                            FOR EACH ROW
                            WHEN (NEW.personPictureUri IS DISTINCT FROM OLD.personPictureUri AND OLD.personPictureUri IS NOT NULL)
                            EXECUTE FUNCTION retain_c_clj_50_personPictureUri();
                        """)

add("""
                            CREATE TRIGGER retain_d_clj_50_personPictureUri_upd_t
                            AFTER UPDATE ON PersonPicture
                            FOR EACH ROW
                            WHEN (NEW.personPictureUri IS DISTINCT FROM OLD.personPictureUri AND NEW.personPictureUri IS NOT NULL)
                            EXECUTE FUNCTION retain_d_clj_50_personPictureUri();
                        """)

add("""
                            CREATE OR REPLACE FUNCTION retain_c_clj_50_personPictureThumbnailUr() RETURNS TRIGGER AS $$
                            BEGIN
                            INSERT INTO CacheLockJoin(cljTableId, cljEntityUid, cljUrl, cljLockId, cljStatus, cljType)
                            VALUES(50, NEW.personPictureUid, NEW.personPictureThumbnailUri, 0, 1, 1);
                            RETURN NEW;
                            END $$ LANGUAGE plpgsql
                        """)

add("""
                            CREATE OR REPLACE FUNCTION retain_d_clj_50_personPictureThumbnailUr() RETURNS TRIGGER AS $$
                            BEGIN
                            UPDATE CacheLockJoin 
                               SET cljStatus = 3
                             WHERE cljTableId = 50
                               AND cljEntityUid = OLD.personPictureUid
                               AND cljUrl = OLD.personPictureThumbnailUri;
                            RETURN OLD;
                            END $$ LANGUAGE plpgsql   
                        """)

add("""
                            CREATE TRIGGER retain_c_clj_50_personPictureThumbnailUr_ins_t
                            AFTER INSERT ON PersonPicture
                            FOR EACH ROW
                            WHEN (NEW.personPictureThumbnailUri IS NOT NULL)
                            EXECUTE FUNCTION retain_c_clj_50_personPictureThumbnailUr();
                        """)

add("""
                            CREATE TRIGGER retain_c_clj_50_personPictureThumbnailUr_upd_t
                            AFTER UPDATE ON PersonPicture
                            FOR EACH ROW
                            WHEN (NEW.personPictureThumbnailUri IS DISTINCT FROM OLD.personPictureThumbnailUri AND OLD.personPictureThumbnailUri IS NOT NULL)
                            EXECUTE FUNCTION retain_c_clj_50_personPictureThumbnailUr();
                        """)

add("""
                            CREATE TRIGGER retain_d_clj_50_personPictureThumbnailUr_upd_t
                            AFTER UPDATE ON PersonPicture
                            FOR EACH ROW
                            WHEN (NEW.personPictureThumbnailUri IS DISTINCT FROM OLD.personPictureThumbnailUri AND NEW.personPictureThumbnailUri IS NOT NULL)
                            EXECUTE FUNCTION retain_d_clj_50_personPictureThumbnailUr();
                        """)

add("""
                            CREATE OR REPLACE FUNCTION retain_c_clj_125_coursePictureUri() RETURNS TRIGGER AS $$
                            BEGIN
                            INSERT INTO CacheLockJoin(cljTableId, cljEntityUid, cljUrl, cljLockId, cljStatus, cljType)
                            VALUES(125, NEW.coursePictureUid, NEW.coursePictureUri, 0, 1, 1);
                            RETURN NEW;
                            END $$ LANGUAGE plpgsql
                        """)

add("""
                            CREATE OR REPLACE FUNCTION retain_d_clj_125_coursePictureUri() RETURNS TRIGGER AS $$
                            BEGIN
                            UPDATE CacheLockJoin 
                               SET cljStatus = 3
                             WHERE cljTableId = 125
                               AND cljEntityUid = OLD.coursePictureUid
                               AND cljUrl = OLD.coursePictureUri;
                            RETURN OLD;
                            END $$ LANGUAGE plpgsql   
                        """)

add("""
                            CREATE TRIGGER retain_c_clj_125_coursePictureUri_ins_t
                            AFTER INSERT ON CoursePicture
                            FOR EACH ROW
                            WHEN (NEW.coursePictureUri IS NOT NULL)
                            EXECUTE FUNCTION retain_c_clj_125_coursePictureUri();
                        """)

add("""
                            CREATE TRIGGER retain_c_clj_125_coursePictureUri_upd_t
                            AFTER UPDATE ON CoursePicture
                            FOR EACH ROW
                            WHEN (NEW.coursePictureUri IS DISTINCT FROM OLD.coursePictureUri AND OLD.coursePictureUri IS NOT NULL)
                            EXECUTE FUNCTION retain_c_clj_125_coursePictureUri();
                        """)

add("""
                            CREATE TRIGGER retain_d_clj_125_coursePictureUri_upd_t
                            AFTER UPDATE ON CoursePicture
                            FOR EACH ROW
                            WHEN (NEW.coursePictureUri IS DISTINCT FROM OLD.coursePictureUri AND NEW.coursePictureUri IS NOT NULL)
                            EXECUTE FUNCTION retain_d_clj_125_coursePictureUri();
                        """)

add("""
                            CREATE OR REPLACE FUNCTION retain_c_clj_125_coursePictureThumbnailUr() RETURNS TRIGGER AS $$
                            BEGIN
                            INSERT INTO CacheLockJoin(cljTableId, cljEntityUid, cljUrl, cljLockId, cljStatus, cljType)
                            VALUES(125, NEW.coursePictureUid, NEW.coursePictureThumbnailUri, 0, 1, 1);
                            RETURN NEW;
                            END $$ LANGUAGE plpgsql
                        """)

add("""
                            CREATE OR REPLACE FUNCTION retain_d_clj_125_coursePictureThumbnailUr() RETURNS TRIGGER AS $$
                            BEGIN
                            UPDATE CacheLockJoin 
                               SET cljStatus = 3
                             WHERE cljTableId = 125
                               AND cljEntityUid = OLD.coursePictureUid
                               AND cljUrl = OLD.coursePictureThumbnailUri;
                            RETURN OLD;
                            END $$ LANGUAGE plpgsql   
                        """)

add("""
                            CREATE TRIGGER retain_c_clj_125_coursePictureThumbnailUr_ins_t
                            AFTER INSERT ON CoursePicture
                            FOR EACH ROW
                            WHEN (NEW.coursePictureThumbnailUri IS NOT NULL)
                            EXECUTE FUNCTION retain_c_clj_125_coursePictureThumbnailUr();
                        """)

add("""
                            CREATE TRIGGER retain_c_clj_125_coursePictureThumbnailUr_upd_t
                            AFTER UPDATE ON CoursePicture
                            FOR EACH ROW
                            WHEN (NEW.coursePictureThumbnailUri IS DISTINCT FROM OLD.coursePictureThumbnailUri AND OLD.coursePictureThumbnailUri IS NOT NULL)
                            EXECUTE FUNCTION retain_c_clj_125_coursePictureThumbnailUr();
                        """)

add("""
                            CREATE TRIGGER retain_d_clj_125_coursePictureThumbnailUr_upd_t
                            AFTER UPDATE ON CoursePicture
                            FOR EACH ROW
                            WHEN (NEW.coursePictureThumbnailUri IS DISTINCT FROM OLD.coursePictureThumbnailUri AND NEW.coursePictureThumbnailUri IS NOT NULL)
                            EXECUTE FUNCTION retain_d_clj_125_coursePictureThumbnailUr();
                        """)

add("""
                            CREATE OR REPLACE FUNCTION retain_c_clj_90_casaUri() RETURNS TRIGGER AS $$
                            BEGIN
                            INSERT INTO CacheLockJoin(cljTableId, cljEntityUid, cljUrl, cljLockId, cljStatus, cljType)
                            VALUES(90, NEW.casaUid, NEW.casaUri, 0, 1, 1);
                            RETURN NEW;
                            END $$ LANGUAGE plpgsql
                        """)

add("""
                            CREATE OR REPLACE FUNCTION retain_d_clj_90_casaUri() RETURNS TRIGGER AS $$
                            BEGIN
                            UPDATE CacheLockJoin 
                               SET cljStatus = 3
                             WHERE cljTableId = 90
                               AND cljEntityUid = OLD.casaUid
                               AND cljUrl = OLD.casaUri;
                            RETURN OLD;
                            END $$ LANGUAGE plpgsql   
                        """)

add("""
                            CREATE TRIGGER retain_c_clj_90_casaUri_ins_t
                            AFTER INSERT ON CourseAssignmentSubmissionFile
                            FOR EACH ROW
                            WHEN (NEW.casaUri IS NOT NULL)
                            EXECUTE FUNCTION retain_c_clj_90_casaUri();
                        """)

add("""
                            CREATE TRIGGER retain_c_clj_90_casaUri_upd_t
                            AFTER UPDATE ON CourseAssignmentSubmissionFile
                            FOR EACH ROW
                            WHEN (NEW.casaUri IS DISTINCT FROM OLD.casaUri AND OLD.casaUri IS NOT NULL)
                            EXECUTE FUNCTION retain_c_clj_90_casaUri();
                        """)

add("""
                            CREATE TRIGGER retain_d_clj_90_casaUri_upd_t
                            AFTER UPDATE ON CourseAssignmentSubmissionFile
                            FOR EACH ROW
                            WHEN (NEW.casaUri IS DISTINCT FROM OLD.casaUri AND NEW.casaUri IS NOT NULL)
                            EXECUTE FUNCTION retain_d_clj_90_casaUri();
                        """)

add("""
                            CREATE OR REPLACE FUNCTION retain_c_clj_6677_cbpPictureUri() RETURNS TRIGGER AS $$
                            BEGIN
                            INSERT INTO CacheLockJoin(cljTableId, cljEntityUid, cljUrl, cljLockId, cljStatus, cljType)
                            VALUES(6677, NEW.cbpUid, NEW.cbpPictureUri, 0, 1, 1);
                            RETURN NEW;
                            END $$ LANGUAGE plpgsql
                        """)

add("""
                            CREATE OR REPLACE FUNCTION retain_d_clj_6677_cbpPictureUri() RETURNS TRIGGER AS $$
                            BEGIN
                            UPDATE CacheLockJoin 
                               SET cljStatus = 3
                             WHERE cljTableId = 6677
                               AND cljEntityUid = OLD.cbpUid
                               AND cljUrl = OLD.cbpPictureUri;
                            RETURN OLD;
                            END $$ LANGUAGE plpgsql   
                        """)

add("""
                            CREATE TRIGGER retain_c_clj_6677_cbpPictureUri_ins_t
                            AFTER INSERT ON CourseBlockPicture
                            FOR EACH ROW
                            WHEN (NEW.cbpPictureUri IS NOT NULL)
                            EXECUTE FUNCTION retain_c_clj_6677_cbpPictureUri();
                        """)

add("""
                            CREATE TRIGGER retain_c_clj_6677_cbpPictureUri_upd_t
                            AFTER UPDATE ON CourseBlockPicture
                            FOR EACH ROW
                            WHEN (NEW.cbpPictureUri IS DISTINCT FROM OLD.cbpPictureUri AND OLD.cbpPictureUri IS NOT NULL)
                            EXECUTE FUNCTION retain_c_clj_6677_cbpPictureUri();
                        """)

add("""
                            CREATE TRIGGER retain_d_clj_6677_cbpPictureUri_upd_t
                            AFTER UPDATE ON CourseBlockPicture
                            FOR EACH ROW
                            WHEN (NEW.cbpPictureUri IS DISTINCT FROM OLD.cbpPictureUri AND NEW.cbpPictureUri IS NOT NULL)
                            EXECUTE FUNCTION retain_d_clj_6677_cbpPictureUri();
                        """)

add("""
                            CREATE OR REPLACE FUNCTION retain_c_clj_6677_cbpThumbnailUri() RETURNS TRIGGER AS $$
                            BEGIN
                            INSERT INTO CacheLockJoin(cljTableId, cljEntityUid, cljUrl, cljLockId, cljStatus, cljType)
                            VALUES(6677, NEW.cbpUid, NEW.cbpThumbnailUri, 0, 1, 1);
                            RETURN NEW;
                            END $$ LANGUAGE plpgsql
                        """)

add("""
                            CREATE OR REPLACE FUNCTION retain_d_clj_6677_cbpThumbnailUri() RETURNS TRIGGER AS $$
                            BEGIN
                            UPDATE CacheLockJoin 
                               SET cljStatus = 3
                             WHERE cljTableId = 6677
                               AND cljEntityUid = OLD.cbpUid
                               AND cljUrl = OLD.cbpThumbnailUri;
                            RETURN OLD;
                            END $$ LANGUAGE plpgsql   
                        """)

add("""
                            CREATE TRIGGER retain_c_clj_6677_cbpThumbnailUri_ins_t
                            AFTER INSERT ON CourseBlockPicture
                            FOR EACH ROW
                            WHEN (NEW.cbpThumbnailUri IS NOT NULL)
                            EXECUTE FUNCTION retain_c_clj_6677_cbpThumbnailUri();
                        """)

add("""
                            CREATE TRIGGER retain_c_clj_6677_cbpThumbnailUri_upd_t
                            AFTER UPDATE ON CourseBlockPicture
                            FOR EACH ROW
                            WHEN (NEW.cbpThumbnailUri IS DISTINCT FROM OLD.cbpThumbnailUri AND OLD.cbpThumbnailUri IS NOT NULL)
                            EXECUTE FUNCTION retain_c_clj_6677_cbpThumbnailUri();
                        """)

add("""
                            CREATE TRIGGER retain_d_clj_6677_cbpThumbnailUri_upd_t
                            AFTER UPDATE ON CourseBlockPicture
                            FOR EACH ROW
                            WHEN (NEW.cbpThumbnailUri IS DISTINCT FROM OLD.cbpThumbnailUri AND NEW.cbpThumbnailUri IS NOT NULL)
                            EXECUTE FUNCTION retain_d_clj_6677_cbpThumbnailUri();
                        """)

add("""
                            CREATE OR REPLACE FUNCTION retain_c_clj_6678_cepPictureUri() RETURNS TRIGGER AS $$
                            BEGIN
                            INSERT INTO CacheLockJoin(cljTableId, cljEntityUid, cljUrl, cljLockId, cljStatus, cljType)
                            VALUES(6678, NEW.cepUid, NEW.cepPictureUri, 0, 1, 1);
                            RETURN NEW;
                            END $$ LANGUAGE plpgsql
                        """)

add("""
                            CREATE OR REPLACE FUNCTION retain_d_clj_6678_cepPictureUri() RETURNS TRIGGER AS $$
                            BEGIN
                            UPDATE CacheLockJoin 
                               SET cljStatus = 3
                             WHERE cljTableId = 6678
                               AND cljEntityUid = OLD.cepUid
                               AND cljUrl = OLD.cepPictureUri;
                            RETURN OLD;
                            END $$ LANGUAGE plpgsql   
                        """)

add("""
                            CREATE TRIGGER retain_c_clj_6678_cepPictureUri_ins_t
                            AFTER INSERT ON ContentEntryPicture2
                            FOR EACH ROW
                            WHEN (NEW.cepPictureUri IS NOT NULL)
                            EXECUTE FUNCTION retain_c_clj_6678_cepPictureUri();
                        """)

add("""
                            CREATE TRIGGER retain_c_clj_6678_cepPictureUri_upd_t
                            AFTER UPDATE ON ContentEntryPicture2
                            FOR EACH ROW
                            WHEN (NEW.cepPictureUri IS DISTINCT FROM OLD.cepPictureUri AND OLD.cepPictureUri IS NOT NULL)
                            EXECUTE FUNCTION retain_c_clj_6678_cepPictureUri();
                        """)

add("""
                            CREATE TRIGGER retain_d_clj_6678_cepPictureUri_upd_t
                            AFTER UPDATE ON ContentEntryPicture2
                            FOR EACH ROW
                            WHEN (NEW.cepPictureUri IS DISTINCT FROM OLD.cepPictureUri AND NEW.cepPictureUri IS NOT NULL)
                            EXECUTE FUNCTION retain_d_clj_6678_cepPictureUri();
                        """)

add("""
                            CREATE OR REPLACE FUNCTION retain_c_clj_6678_cepThumbnailUri() RETURNS TRIGGER AS $$
                            BEGIN
                            INSERT INTO CacheLockJoin(cljTableId, cljEntityUid, cljUrl, cljLockId, cljStatus, cljType)
                            VALUES(6678, NEW.cepUid, NEW.cepThumbnailUri, 0, 1, 1);
                            RETURN NEW;
                            END $$ LANGUAGE plpgsql
                        """)

add("""
                            CREATE OR REPLACE FUNCTION retain_d_clj_6678_cepThumbnailUri() RETURNS TRIGGER AS $$
                            BEGIN
                            UPDATE CacheLockJoin 
                               SET cljStatus = 3
                             WHERE cljTableId = 6678
                               AND cljEntityUid = OLD.cepUid
                               AND cljUrl = OLD.cepThumbnailUri;
                            RETURN OLD;
                            END $$ LANGUAGE plpgsql   
                        """)

add("""
                            CREATE TRIGGER retain_c_clj_6678_cepThumbnailUri_ins_t
                            AFTER INSERT ON ContentEntryPicture2
                            FOR EACH ROW
                            WHEN (NEW.cepThumbnailUri IS NOT NULL)
                            EXECUTE FUNCTION retain_c_clj_6678_cepThumbnailUri();
                        """)

add("""
                            CREATE TRIGGER retain_c_clj_6678_cepThumbnailUri_upd_t
                            AFTER UPDATE ON ContentEntryPicture2
                            FOR EACH ROW
                            WHEN (NEW.cepThumbnailUri IS DISTINCT FROM OLD.cepThumbnailUri AND OLD.cepThumbnailUri IS NOT NULL)
                            EXECUTE FUNCTION retain_c_clj_6678_cepThumbnailUri();
                        """)

add("""
                            CREATE TRIGGER retain_d_clj_6678_cepThumbnailUri_upd_t
                            AFTER UPDATE ON ContentEntryPicture2
                            FOR EACH ROW
                            WHEN (NEW.cepThumbnailUri IS DISTINCT FROM OLD.cepThumbnailUri AND NEW.cepThumbnailUri IS NOT NULL)
                            EXECUTE FUNCTION retain_d_clj_6678_cepThumbnailUri();
                        """)

[000073be52cac7c0] vlcpulse audio output error: PulseAudio server connection failure: Connection refused
[000073be52cac7c0] vlcpulse audio output error: PulseAudio server connection failure: Connection refused
[000073be5306d3f0] vlcpulse audio output error: PulseAudio server connection failure: Connection refused
[000073be5306d3f0] vlcpulse audio output error: PulseAudio server connection failure: Connection refused
error: XDG_RUNTIME_DIR is invalid or not set in the environment.
error: XDG_RUNTIME_DIR is invalid or not set in the environment.
error: XDG_RUNTIME_DIR is invalid or not set in the environment.
error: XDG_RUNTIME_DIR is invalid or not set in the environment.
com.ustadmobile.core.domain.interop.HttpApiException: State content too large: 262145 exceeds limit of 262144
	at com.ustadmobile.core.domain.xapi.state.StoreXapiStateUseCase.invoke(StoreXapiStateUseCase.kt:131)
	at com.ustadmobile.core.domain.xapi.state.XapiStateUseCaseIntegrationTest$givenTextBodyTooLarge_whenStored_thenShouldThrowException$1.invokeSuspend(XapiStateUseCaseIntegrationTest.kt:289)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:104)
	at kotlinx.coroutines.EventLoopImplBase.processNextEvent(EventLoop.common.kt:277)
	at kotlinx.coroutines.BlockingCoroutine.joinBlocking(Builders.kt:95)
	at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking(Builders.kt:69)
	at kotlinx.coroutines.BuildersKt.runBlocking(Unknown Source)
	at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking$default(Builders.kt:48)
	at kotlinx.coroutines.BuildersKt.runBlocking$default(Unknown Source)
	at com.ustadmobile.core.domain.xapi.state.XapiStateUseCaseIntegrationTest.givenTextBodyTooLarge_whenStored_thenShouldThrowException(XapiStateUseCaseIntegrationTest.kt:280)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:569)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
	at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
	at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
	at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
	at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
	at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.runTestClass(JUnitTestClassExecutor.java:112)
	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:58)
	at org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecutor.execute(JUnitTestClassExecutor.java:40)
	at org.gradle.api.internal.tasks.testing.junit.AbstractJUnitTestClassProcessor.processTestClass(AbstractJUnitTestClassProcessor.java:54)
	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:53)
	at jdk.internal.reflect.GeneratedMethodAccessor65.invoke(Unknown Source)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:569)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:92)
	at jdk.proxy1/jdk.proxy1.$Proxy4.processTestClass(Unknown Source)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker$2.run(TestWorker.java:181)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:130)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:101)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:61)
	at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56)
	at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:122)
	at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:69)
	at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)
	at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)
Delaying...
process.waitForAsync
canceling result
Canceled
Exception in thread "UI Thread @coroutine#2478" java.lang.NullPointerException: Cannot invoke "java.sql.Connection.setAutoCommit(boolean)" because "connection" is null
	at com.zaxxer.hikari.pool.PoolBase.resetConnectionState(PoolBase.java:206)
	at com.zaxxer.hikari.pool.PoolEntry.resetConnectionState(PoolEntry.java:108)
	at com.zaxxer.hikari.pool.ProxyConnection.close(ProxyConnection.java:236)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:197)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.access$useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:21)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useNewConnectionAsyncInternal$1.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:102)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:585)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:802)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:706)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:693)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineId(2478), "coroutine#2478":StandaloneCoroutine{Cancelling}@467a50fa, Dispatchers.Main]
Exception in thread "UI Thread @coroutine#2494" java.lang.NullPointerException: Cannot invoke "java.sql.Connection.setAutoCommit(boolean)" because "connection" is null
	at com.zaxxer.hikari.pool.PoolBase.resetConnectionState(PoolBase.java:206)
	at com.zaxxer.hikari.pool.PoolEntry.resetConnectionState(PoolEntry.java:108)
	at com.zaxxer.hikari.pool.ProxyConnection.close(ProxyConnection.java:236)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:197)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.access$useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:21)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useNewConnectionAsyncInternal$1.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:102)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:585)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:802)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:706)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:693)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineId(2494), "coroutine#2494":StandaloneCoroutine{Cancelling}@1f12cbe4, Dispatchers.Main]
Exception in thread "UI Thread @coroutine#2510" java.lang.NullPointerException: Cannot invoke "java.sql.Connection.setAutoCommit(boolean)" because "connection" is null
	at com.zaxxer.hikari.pool.PoolBase.resetConnectionState(PoolBase.java:206)
	at com.zaxxer.hikari.pool.PoolEntry.resetConnectionState(PoolEntry.java:108)
	at com.zaxxer.hikari.pool.ProxyConnection.close(ProxyConnection.java:236)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:197)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.access$useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:21)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useNewConnectionAsyncInternal$1.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:102)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:585)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:802)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:706)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:693)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineId(2510), "coroutine#2510":StandaloneCoroutine{Cancelling}@6ca7521f, Dispatchers.Main]
Exception in thread "UI Thread @coroutine#2561" java.lang.NullPointerException: Cannot invoke "java.sql.Connection.setAutoCommit(boolean)" because "connection" is null
	at com.zaxxer.hikari.pool.PoolBase.resetConnectionState(PoolBase.java:206)
	at com.zaxxer.hikari.pool.PoolEntry.resetConnectionState(PoolEntry.java:108)
	at com.zaxxer.hikari.pool.ProxyConnection.close(ProxyConnection.java:236)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:197)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.access$useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:21)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useNewConnectionAsyncInternal$1.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:102)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:585)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:802)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:706)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:693)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineId(2561), "coroutine#2561":StandaloneCoroutine{Cancelling}@5f10dae3, Dispatchers.Main]
Exception in thread "UI Thread @coroutine#2597" java.lang.NullPointerException: Cannot invoke "java.sql.Connection.setAutoCommit(boolean)" because "connection" is null
	at com.zaxxer.hikari.pool.PoolBase.resetConnectionState(PoolBase.java:206)
	at com.zaxxer.hikari.pool.PoolEntry.resetConnectionState(PoolEntry.java:108)
	at com.zaxxer.hikari.pool.ProxyConnection.close(ProxyConnection.java:236)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:197)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.access$useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:21)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useNewConnectionAsyncInternal$1.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:102)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:585)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:802)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:706)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:693)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineId(2597), "coroutine#2597":StandaloneCoroutine{Cancelling}@489c2e01, Dispatchers.Main]

Invalidated PagingSource com.ustadmobile.core.db.dao.CommentsDao_JdbcImpl$findCourseCommentsByAssignmentUid$1@2a6b09df
Invalidated PagingSource com.ustadmobile.core.db.dao.CommentsDao_JdbcImpl$findCourseCommentsByAssignmentUid$1@b2132de
Invalidated PagingSource com.ustadmobile.core.db.dao.CommentsDao_JdbcImpl$findPrivateCommentsForUserByAssignmentUid$1@28a08923
Invalidated PagingSource com.ustadmobile.core.db.dao.CommentsDao_JdbcImpl$findPrivateCommentsForUserByAssignmentUid$1@70f5180bException in thread "UI Thread @coroutine#4195" java.lang.IllegalStateException: com.ustadmobile.door.room.RoomDatabaseJdbcImplHelper@52847552 is closed!
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.assertNotClosed(RoomDatabaseJdbcImplHelperCommon.kt:96)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:103)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.access$useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:21)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useConnectionAsync$2$2.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt:237)
	at _COROUTINE._BOUNDARY._(CoroutineDebugging.kt:42)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useConnectionAsync$2.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt:235)
	at com.ustadmobile.door.ext.DoorDatabaseExtJvmJsKt.prepareAndUseStatementAsync(DoorDatabaseExtJvmJs.kt:24)
	at com.ustadmobile.core.db.dao.CourseAssignmentSubmissionFileDao_JdbcImpl$getBySubmissionUid$1.invokeSuspend(CourseAssignmentSubmissionFileDao_JdbcImpl.kt:104)
	at com.ustadmobile.door.flow.DoorFlowKt$doorFlow$1$1.invokeSuspend(DoorFlow.kt:40)
	at com.ustadmobile.core.viewmodel.clazzassignment.detailoverview.ClazzAssignmentDetailOverviewViewModel$2$3$5$2.invokeSuspend(ClazzAssignmentDetailOverviewViewModel.kt:432)
	at kotlinx.coroutines.flow.FlowKt__MergeKt$mapLatest$1.invokeSuspend(Merge.kt:213)
	at kotlinx.coroutines.flow.internal.ChannelFlowTransformLatest$flowCollect$3$1$2.invokeSuspend(Merge.kt:30)
	at kotlinx.coroutines.flow.internal.ChannelFlow$collectToFun$1.invokeSuspend(ChannelFlow.kt:56)
	at com.ustadmobile.core.viewmodel.clazzassignment.detailoverview.ClazzAssignmentDetailOverviewViewModel$2$3$5.invokeSuspend(ClazzAssignmentDetailOverviewViewModel.kt:429)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineId(4149), "coroutine#4149":StandaloneCoroutine{Cancelling}@2bbed962, Dispatchers.Main]
Caused by: java.lang.IllegalStateException: com.ustadmobile.door.room.RoomDatabaseJdbcImplHelper@52847552 is closed!
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.assertNotClosed(RoomDatabaseJdbcImplHelperCommon.kt:96)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:103)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.access$useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:21)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useConnectionAsync$2$2.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt:237)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:104)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:585)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:802)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:706)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:693)
Exception in thread "UI Thread @coroutine#4259" java.lang.NullPointerException: Cannot invoke "java.sql.Connection.setAutoCommit(boolean)" because "connection" is null
	at com.zaxxer.hikari.pool.PoolBase.resetConnectionState(PoolBase.java:206)
	at com.zaxxer.hikari.pool.PoolEntry.resetConnectionState(PoolEntry.java:108)
	at com.zaxxer.hikari.pool.ProxyConnection.close(ProxyConnection.java:236)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:197)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.access$useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:21)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useNewConnectionAsyncInternal$1.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:102)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:585)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:802)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:706)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:693)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineId(4259), "coroutine#4259":StandaloneCoroutine{Cancelling}@1d442bb7, Dispatchers.Main]
Exception in thread "UI Thread @coroutine#4292" java.lang.NullPointerException: Cannot invoke "java.sql.Connection.setAutoCommit(boolean)" because "connection" is null
	at com.zaxxer.hikari.pool.PoolBase.resetConnectionState(PoolBase.java:206)
	at com.zaxxer.hikari.pool.PoolEntry.resetConnectionState(PoolEntry.java:108)
	at com.zaxxer.hikari.pool.ProxyConnection.close(ProxyConnection.java:236)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:197)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.access$useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:21)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useNewConnectionAsyncInternal$1.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:102)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:585)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:802)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:706)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:693)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineId(4292), "coroutine#4292":StandaloneCoroutine{Cancelling}@76e1fda6, Dispatchers.Main]
Exception in thread "UI Thread @coroutine#4325" java.lang.NullPointerException: Cannot invoke "java.sql.Connection.setAutoCommit(boolean)" because "connection" is null
	at com.zaxxer.hikari.pool.PoolBase.resetConnectionState(PoolBase.java:206)
	at com.zaxxer.hikari.pool.PoolEntry.resetConnectionState(PoolEntry.java:108)
	at com.zaxxer.hikari.pool.ProxyConnection.close(ProxyConnection.java:236)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:197)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.access$useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:21)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useNewConnectionAsyncInternal$1.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:102)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:585)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:802)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:706)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:693)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineId(4325), "coroutine#4325":StandaloneCoroutine{Cancelling}@734ced4d, Dispatchers.Main]
Exception in thread "UI Thread @coroutine#4357" java.lang.NullPointerException: Cannot invoke "java.sql.Connection.setAutoCommit(boolean)" because "connection" is null
	at com.zaxxer.hikari.pool.PoolBase.resetConnectionState(PoolBase.java:206)
	at com.zaxxer.hikari.pool.PoolEntry.resetConnectionState(PoolEntry.java:108)
	at com.zaxxer.hikari.pool.ProxyConnection.close(ProxyConnection.java:236)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:197)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.access$useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:21)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useNewConnectionAsyncInternal$1.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:102)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:585)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:802)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:706)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:693)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineId(4357), "coroutine#4357":StandaloneCoroutine{Cancelling}@3264f9d4, Dispatchers.Main]
Exception in thread "UI Thread @coroutine#4389" java.lang.NullPointerException: Cannot invoke "java.sql.Connection.setAutoCommit(boolean)" because "connection" is null
	at com.zaxxer.hikari.pool.PoolBase.resetConnectionState(PoolBase.java:206)
	at com.zaxxer.hikari.pool.PoolEntry.resetConnectionState(PoolEntry.java:108)
	at com.zaxxer.hikari.pool.ProxyConnection.close(ProxyConnection.java:236)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:197)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.access$useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:21)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useNewConnectionAsyncInternal$1.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:230)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:585)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:802)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:706)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:693)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineId(4389), "coroutine#4389":StandaloneCoroutine{Cancelling}@5122bc9, Dispatchers.Main]
Exception in thread "UI Thread @coroutine#4985" java.lang.IllegalStateException: com.ustadmobile.door.room.RoomDatabaseJdbcImplHelper@6650d9b4 is closed!
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.assertNotClosed(RoomDatabaseJdbcImplHelperCommon.kt:96)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:103)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.access$useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:21)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useConnectionAsync$2$2.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt:237)
	at _COROUTINE._BOUNDARY._(CoroutineDebugging.kt:42)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useConnectionAsync$2.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt:235)
	at com.ustadmobile.door.ext.DoorDatabaseExtJvmJsKt.prepareAndUseStatementAsync(DoorDatabaseExtJvmJs.kt:24)
	at com.ustadmobile.core.db.dao.ContentEntryVersionDao_JdbcImpl$findLatestByContentEntryUidAsFlow$1.invokeSuspend(ContentEntryVersionDao_JdbcImpl.kt:154)
	at com.ustadmobile.door.flow.DoorFlowKt$doorFlow$1$1.invokeSuspend(DoorFlow.kt:40)
	at kotlinx.coroutines.flow.internal.ChannelFlowTransformLatest$flowCollect$3.invokeSuspend(Merge.kt:23)
	at kotlinx.coroutines.flow.internal.ChannelFlow$collectToFun$1.invokeSuspend(ChannelFlow.kt:56)
	at com.ustadmobile.core.viewmodel.contententry.detailoverviewtab.ContentEntryDetailOverviewViewModel$2$1$4.invokeSuspend(ContentEntryDetailOverviewViewModel.kt:206)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineId(4979), "coroutine#4979":StandaloneCoroutine{Cancelling}@6c57ca70, Dispatchers.Main]
Caused by: java.lang.IllegalStateException: com.ustadmobile.door.room.RoomDatabaseJdbcImplHelper@6650d9b4 is closed!
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.assertNotClosed(RoomDatabaseJdbcImplHelperCommon.kt:96)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:103)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.access$useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:21)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useConnectionAsync$2$2.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt:237)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:104)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:585)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:802)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:706)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:693)
Exception in thread "UI Thread @coroutine#5042" java.lang.NullPointerException: Cannot invoke "java.sql.Connection.setAutoCommit(boolean)" because "connection" is null
	at com.zaxxer.hikari.pool.PoolBase.resetConnectionState(PoolBase.java:206)
	at com.zaxxer.hikari.pool.PoolEntry.resetConnectionState(PoolEntry.java:108)
	at com.zaxxer.hikari.pool.ProxyConnection.close(ProxyConnection.java:236)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:197)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.access$useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:21)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useNewConnectionAsyncInternal$1.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:102)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:585)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:802)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:706)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:693)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineId(5042), "coroutine#5042":StandaloneCoroutine{Cancelling}@273ead0d, Dispatchers.Main]
Exception in thread "UI Thread @coroutine#5062" java.lang.NullPointerException: Cannot invoke "java.sql.Connection.setAutoCommit(boolean)" because "connection" is null
	at com.zaxxer.hikari.pool.PoolBase.resetConnectionState(PoolBase.java:206)
	at com.zaxxer.hikari.pool.PoolEntry.resetConnectionState(PoolEntry.java:108)
	at com.zaxxer.hikari.pool.ProxyConnection.close(ProxyConnection.java:236)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:197)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.access$useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:21)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useNewConnectionAsyncInternal$1.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:102)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:585)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:802)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:706)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:693)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineId(5062), "coroutine#5062":StandaloneCoroutine{Cancelling}@e25704d, Dispatchers.Main]
> Task :core:jvmTest

Exception in thread "UI Thread @coroutine#5419" java.lang.NullPointerException: Cannot invoke "java.sql.Connection.setAutoCommit(boolean)" because "connection" is null
	at com.zaxxer.hikari.pool.PoolBase.resetConnectionState(PoolBase.java:206)
	at com.zaxxer.hikari.pool.PoolEntry.resetConnectionState(PoolEntry.java:108)
	at com.zaxxer.hikari.pool.ProxyConnection.close(ProxyConnection.java:236)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:197)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.access$useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:21)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useNewConnectionAsyncInternal$1.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:102)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:585)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:802)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:706)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:693)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineId(5419), "coroutine#5419":StandaloneCoroutine{Cancelling}@31f88307, Dispatchers.Main]
Exception in thread "UI Thread @coroutine#5440" java.lang.NullPointerException: Cannot invoke "java.sql.Connection.setAutoCommit(boolean)" because "connection" is null
	at com.zaxxer.hikari.pool.PoolBase.resetConnectionState(PoolBase.java:206)
	at com.zaxxer.hikari.pool.PoolEntry.resetConnectionState(PoolEntry.java:108)
	at com.zaxxer.hikari.pool.ProxyConnection.close(ProxyConnection.java:236)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:197)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.access$useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:21)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useNewConnectionAsyncInternal$1.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:102)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:585)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:802)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:706)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:693)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineId(5440), "coroutine#5440":StandaloneCoroutine{Cancelling}@30ecb6be, Dispatchers.Main]
Exception in thread "UI Thread @coroutine#5458" java.lang.NullPointerException: Cannot invoke "java.sql.Connection.setAutoCommit(boolean)" because "connection" is null
	at com.zaxxer.hikari.pool.PoolBase.resetConnectionState(PoolBase.java:206)
	at com.zaxxer.hikari.pool.PoolEntry.resetConnectionState(PoolEntry.java:108)
	at com.zaxxer.hikari.pool.ProxyConnection.close(ProxyConnection.java:236)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:197)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.access$useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:21)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useNewConnectionAsyncInternal$1.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:102)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:585)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:802)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:706)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:693)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineId(5458), "coroutine#5458":StandaloneCoroutine{Cancelling}@58541280, Dispatchers.Main]
Exception in thread "UI Thread @coroutine#5883" java.lang.NullPointerException: Cannot invoke "java.sql.Connection.setAutoCommit(boolean)" because "connection" is null
	at com.zaxxer.hikari.pool.PoolBase.resetConnectionState(PoolBase.java:206)
	at com.zaxxer.hikari.pool.PoolEntry.resetConnectionState(PoolEntry.java:108)
	at com.zaxxer.hikari.pool.ProxyConnection.close(ProxyConnection.java:236)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:197)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.access$useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:21)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useNewConnectionAsyncInternal$1.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:102)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:585)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:802)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:706)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:693)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineId(5883), "coroutine#5883":StandaloneCoroutine{Cancelling}@754e6d4, Dispatchers.Main]
Exception in thread "UI Thread @coroutine#5996" java.lang.NullPointerException: Cannot invoke "java.sql.Connection.setAutoCommit(boolean)" because "connection" is null
	at com.zaxxer.hikari.pool.PoolBase.resetConnectionState(PoolBase.java:206)
	at com.zaxxer.hikari.pool.PoolEntry.resetConnectionState(PoolEntry.java:108)
	at com.zaxxer.hikari.pool.ProxyConnection.close(ProxyConnection.java:236)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:197)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.access$useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:21)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useNewConnectionAsyncInternal$1.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:102)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:585)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:802)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:706)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:693)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineId(5996), "coroutine#5996":StandaloneCoroutine{Cancelling}@594fc93d, Dispatchers.Main]
Exception in thread "UI Thread @coroutine#6023" java.lang.NullPointerException: Cannot invoke "java.sql.Connection.setAutoCommit(boolean)" because "connection" is null
	at com.zaxxer.hikari.pool.PoolBase.resetConnectionState(PoolBase.java:206)
	at com.zaxxer.hikari.pool.PoolEntry.resetConnectionState(PoolEntry.java:108)
	at com.zaxxer.hikari.pool.ProxyConnection.close(ProxyConnection.java:236)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:197)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.access$useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:21)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useNewConnectionAsyncInternal$1.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:102)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:585)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:802)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:706)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:693)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineId(6023), "coroutine#6023":StandaloneCoroutine{Cancelling}@34d463a0, Dispatchers.Main]
Exception in thread "UI Thread @coroutine#6045" java.lang.NullPointerException: Cannot invoke "java.sql.Connection.setAutoCommit(boolean)" because "connection" is null
	at com.zaxxer.hikari.pool.PoolBase.resetConnectionState(PoolBase.java:206)
	at com.zaxxer.hikari.pool.PoolEntry.resetConnectionState(PoolEntry.java:108)
	at com.zaxxer.hikari.pool.ProxyConnection.close(ProxyConnection.java:236)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:197)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.access$useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:21)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useNewConnectionAsyncInternal$1.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:102)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:585)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:802)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:706)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:693)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineId(6045), "coroutine#6045":StandaloneCoroutine{Cancelling}@67c94409, Dispatchers.Main]
Exception in thread "UI Thread @coroutine#6084" java.lang.NullPointerException: Cannot invoke "java.sql.Connection.setAutoCommit(boolean)" because "connection" is null
	at com.zaxxer.hikari.pool.PoolBase.resetConnectionState(PoolBase.java:206)
	at com.zaxxer.hikari.pool.PoolEntry.resetConnectionState(PoolEntry.java:108)
	at com.zaxxer.hikari.pool.ProxyConnection.close(ProxyConnection.java:236)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:197)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.access$useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:21)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useNewConnectionAsyncInternal$1.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:102)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:585)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:802)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:706)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:693)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineId(6084), "coroutine#6084":StandaloneCoroutine{Cancelling}@54fb7b33, Dispatchers.Main]
Exception in thread "UI Thread @coroutine#6100" java.lang.NullPointerException: Cannot invoke "java.sql.Connection.setAutoCommit(boolean)" because "connection" is null
	at com.zaxxer.hikari.pool.PoolBase.resetConnectionState(PoolBase.java:206)
	at com.zaxxer.hikari.pool.PoolEntry.resetConnectionState(PoolEntry.java:108)
	at com.zaxxer.hikari.pool.ProxyConnection.close(ProxyConnection.java:236)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:197)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.access$useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:21)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useNewConnectionAsyncInternal$1.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:102)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:585)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:802)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:706)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:693)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineId(6100), "coroutine#6100":StandaloneCoroutine{Cancelling}@1dd9911b, Dispatchers.Main]
Exception in thread "UI Thread @coroutine#6116" java.lang.NullPointerException: Cannot invoke "java.sql.Connection.setAutoCommit(boolean)" because "connection" is null
	at com.zaxxer.hikari.pool.PoolBase.resetConnectionState(PoolBase.java:206)
	at com.zaxxer.hikari.pool.PoolEntry.resetConnectionState(PoolEntry.java:108)
	at com.zaxxer.hikari.pool.ProxyConnection.close(ProxyConnection.java:236)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:197)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.access$useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:21)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useNewConnectionAsyncInternal$1.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:102)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:585)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:802)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:706)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:693)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineId(6116), "coroutine#6116":StandaloneCoroutine{Cancelling}@b89643b, Dispatchers.Main]
Exception in thread "UI Thread @coroutine#6132" java.lang.NullPointerException: Cannot invoke "java.sql.Connection.setAutoCommit(boolean)" because "connection" is null
	at com.zaxxer.hikari.pool.PoolBase.resetConnectionState(PoolBase.java:206)
	at com.zaxxer.hikari.pool.PoolEntry.resetConnectionState(PoolEntry.java:108)
	at com.zaxxer.hikari.pool.ProxyConnection.close(ProxyConnection.java:236)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:197)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.access$useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:21)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useNewConnectionAsyncInternal$1.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:102)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:585)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:802)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:706)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:693)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineId(6132), "coroutine#6132":StandaloneCoroutine{Cancelling}@457bee84, Dispatchers.Main]
Exception in thread "UI Thread @coroutine#6153" java.lang.NullPointerException: Cannot invoke "java.sql.Connection.setAutoCommit(boolean)" because "connection" is null
	at com.zaxxer.hikari.pool.PoolBase.resetConnectionState(PoolBase.java:206)
	at com.zaxxer.hikari.pool.PoolEntry.resetConnectionState(PoolEntry.java:108)
	at com.zaxxer.hikari.pool.ProxyConnection.close(ProxyConnection.java:236)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:197)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.access$useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:21)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useNewConnectionAsyncInternal$1.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:102)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:585)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:802)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:706)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:693)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineId(6153), "coroutine#6153":StandaloneCoroutine{Cancelling}@6ebb2653, Dispatchers.Main]
Exception in thread "UI Thread @coroutine#6172" java.lang.NullPointerException: Cannot invoke "java.sql.Connection.setAutoCommit(boolean)" because "connection" is null
	at com.zaxxer.hikari.pool.PoolBase.resetConnectionState(PoolBase.java:206)
	at com.zaxxer.hikari.pool.PoolEntry.resetConnectionState(PoolEntry.java:108)
	at com.zaxxer.hikari.pool.ProxyConnection.close(ProxyConnection.java:236)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:197)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.access$useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:21)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useNewConnectionAsyncInternal$1.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:102)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:585)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:802)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:706)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:693)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineId(6172), "coroutine#6172":StandaloneCoroutine{Cancelling}@723714d5, Dispatchers.Main]
Exception in thread "UI Thread @coroutine#6193" java.lang.NullPointerException: Cannot invoke "java.sql.Connection.setAutoCommit(boolean)" because "connection" is null
	at com.zaxxer.hikari.pool.PoolBase.resetConnectionState(PoolBase.java:206)
	at com.zaxxer.hikari.pool.PoolEntry.resetConnectionState(PoolEntry.java:108)
	at com.zaxxer.hikari.pool.ProxyConnection.close(ProxyConnection.java:236)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:197)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.access$useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:21)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useNewConnectionAsyncInternal$1.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:230)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:585)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:802)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:706)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:693)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineId(6193), "coroutine#6193":StandaloneCoroutine{Cancelling}@5d6bc1d, Dispatchers.Main]
Exception in thread "UI Thread @coroutine#6211" java.lang.NullPointerException: Cannot invoke "java.sql.Connection.setAutoCommit(boolean)" because "connection" is null
	at com.zaxxer.hikari.pool.PoolBase.resetConnectionState(PoolBase.java:206)
	at com.zaxxer.hikari.pool.PoolEntry.resetConnectionState(PoolEntry.java:108)
	at com.zaxxer.hikari.pool.ProxyConnection.close(ProxyConnection.java:236)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:197)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.access$useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:21)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useNewConnectionAsyncInternal$1.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:102)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:585)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:802)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:706)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:693)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineId(6211), "coroutine#6211":StandaloneCoroutine{Cancelling}@6c2ac4ff, Dispatchers.Main]
Exception in thread "UI Thread @coroutine#6233" java.lang.NullPointerException: Cannot invoke "java.sql.Connection.setAutoCommit(boolean)" because "connection" is null
	at com.zaxxer.hikari.pool.PoolBase.resetConnectionState(PoolBase.java:206)
	at com.zaxxer.hikari.pool.PoolEntry.resetConnectionState(PoolEntry.java:108)
	at com.zaxxer.hikari.pool.ProxyConnection.close(ProxyConnection.java:236)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:197)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon.access$useNewConnectionAsyncInternal(RoomDatabaseJdbcImplHelperCommon.kt:21)
	at com.ustadmobile.door.room.RoomDatabaseJdbcImplHelperCommon$useNewConnectionAsyncInternal$1.invokeSuspend(RoomDatabaseJdbcImplHelperCommon.kt)
	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:102)
	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:585)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:802)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:706)
	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:693)
	Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [CoroutineId(6233), "coroutine#6233":StandaloneCoroutine{Cancelling}@596f2392, Dispatchers.Main]

> Task :core:allTests
> Task :core:check
> Task :core:build

Deprecated Gradle features were used in this build, making it incompatible with Gradle 9.0.

You can use '--warning-mode all' to show the individual deprecation warnings and determine if they come from your own scripts or plugins.

For more on this, please refer to https://docs.gradle.org/8.9/userguide/command_line_interface.html#sec:command_line_warnings in the Gradle documentation.

BUILD SUCCESSFUL in 17m 44s
2030 actionable tasks: 1849 executed, 181 up-to-date
Build step 'Invoke Gradle script' changed build result to SUCCESS
[Release-Maktab] $ /bin/sh -xe /tmp/jenkins12814501196467462333.sh
+ /usr/bin/conveyor make site
  0.00 secs │        │ Including config from Gradle
  4.36 secs │  done  │ Including config from Gradle
  5.04 secs │   0.0% │   0 /  71 │ Building
  5.07 secs │        │           │ 1. Base Configured Inputs for Windows Intel: Preparing to copy file tree
  5.07 secs │   0.0% │   0 / 225 │ 1. Base Configured Inputs for Windows Intel: Copying 225 file(s)
  5.08 secs │        │           │ 3. Base Configured Inputs for Linux Intel: Preparing to copy file tree
  5.08 secs │   0.0% │   0 / 225 │ 3. Base Configured Inputs for Linux Intel: Copying 225 file(s)
  5.11 secs │ 100.0% │ 225 / 225 │ 1. Base Configured Inputs for Windows Intel: Copying 225 file(s)
  5.11 secs │        │           │ 1. Base Configured Inputs for Windows Intel: Copying directory permissions
  5.11 secs │  done  │           │ 1. Base Configured Inputs for Windows Intel: Copying directory permissions
  5.11 secs │        │           │ 1. Base Configured Inputs for Windows Intel: Preparing to copy file tree
  5.11 secs │   0.0% │   0 / 548 │ 1. Base Configured Inputs for Windows Intel: Copying 548 file(s)
  5.11 secs │ 100.0% │ 225 / 225 │ 3. Base Configured Inputs for Linux Intel: Copying 225 file(s)
  5.11 secs │        │           │ 3. Base Configured Inputs for Linux Intel: Copying directory permissions
  5.11 secs │  done  │           │ 3. Base Configured Inputs for Linux Intel: Copying directory permissions
  5.12 secs │        │           │ 3. Base Configured Inputs for Linux Intel: Preparing to copy file tree
  5.12 secs │   0.0% │   0 / 548 │ 3. Base Configured Inputs for Linux Intel: Copying 548 file(s)
  5.14 secs │ 100.0% │ 548 / 548 │ 1. Base Configured Inputs for Windows Intel: Copying 548 file(s)
  5.14 secs │   0.0% │   0 / 126 │ 1. Base Configured Inputs for Windows Intel: Copying directory permissions
  5.14 secs │ 100.0% │ 126 / 126 │ 1. Base Configured Inputs for Windows Intel: Copying directory permissions
  5.15 secs │ 100.0% │ 548 / 548 │ 3. Base Configured Inputs for Linux Intel: Copying 548 file(s)
  5.15 secs │   0.0% │   0 / 126 │ 3. Base Configured Inputs for Linux Intel: Copying directory permissions
  5.15 secs │ 100.0% │ 126 / 126 │ 3. Base Configured Inputs for Linux Intel: Copying directory permissions
  5.17 secs │        │           │ 1. Base Configured Inputs for Windows Intel: Preparing to copy file tree
  5.17 secs │   0.0% │   0 /  64 │ 1. Base Configured Inputs for Windows Intel: Copying 64 file(s)
  5.25 secs │ 100.0% │  64 /  64 │ 1. Base Configured Inputs for Windows Intel: Copying 64 file(s)
  5.25 secs │   0.0% │   0 /   7 │ 1. Base Configured Inputs for Windows Intel: Copying directory permissions
  5.25 secs │ 100.0% │   7 /   7 │ 1. Base Configured Inputs for Windows Intel: Copying directory permissions
  6.60 secs │        │           │ 2. Base Configured Inputs for macOS Intel: Preparing to copy file tree
  6.60 secs │   0.0% │   0 / 225 │ 2. Base Configured Inputs for macOS Intel: Copying 225 file(s)
  6.60 secs │        │           │ 3. Base Configured Inputs for macOS ARM: Preparing to copy file tree
  6.60 secs │   0.0% │   0 / 225 │ 3. Base Configured Inputs for macOS ARM: Copying 225 file(s)
  6.61 secs │ 100.0% │ 225 / 225 │ 2. Base Configured Inputs for macOS Intel: Copying 225 file(s)
  6.61 secs │        │           │ 2. Base Configured Inputs for macOS Intel: Copying directory permissions
  6.61 secs │  done  │           │ 2. Base Configured Inputs for macOS Intel: Copying directory permissions
  6.61 secs │        │           │ 2. Base Configured Inputs for macOS Intel: Preparing to copy file tree
  6.62 secs │ 100.0% │ 225 / 225 │ 3. Base Configured Inputs for macOS ARM: Copying 225 file(s)
  6.62 secs │        │           │ 3. Base Configured Inputs for macOS ARM: Copying directory permissions
  6.62 secs │  done  │           │ 3. Base Configured Inputs for macOS ARM: Copying directory permissions
  6.62 secs │        │           │ 3. Base Configured Inputs for macOS ARM: Preparing to copy file tree
  6.62 secs │   0.0% │   0 / 548 │ 2. Base Configured Inputs for macOS Intel: Copying 548 file(s)
  6.62 secs │   0.0% │   0 / 548 │ 3. Base Configured Inputs for macOS ARM: Copying 548 file(s)
  6.64 secs │ 100.0% │ 548 / 548 │ 2. Base Configured Inputs for macOS Intel: Copying 548 file(s)
  6.64 secs │   0.0% │   0 / 126 │ 2. Base Configured Inputs for macOS Intel: Copying directory permissions
  6.64 secs │ 100.0% │ 126 / 126 │ 2. Base Configured Inputs for macOS Intel: Copying directory permissions
  6.64 secs │ 100.0% │ 548 / 548 │ 3. Base Configured Inputs for macOS ARM: Copying 548 file(s)
  6.64 secs │   0.0% │   0 / 126 │ 3. Base Configured Inputs for macOS ARM: Copying directory permissions
  6.64 secs │ 100.0% │ 126 / 126 │ 3. Base Configured Inputs for macOS ARM: Copying directory permissions
  7.04 secs │   0.0% │   0 / 223 │ 3. Processed Jars for Windows Intel: Repacking JARs
  7.07 secs │   0.0% │   0 / 224 │ 0. Processed Jars for Linux Intel: Repacking JARs
Warning: lwjgl-tinyfd-3.3.1-natives-linux-d5f7f67aa151641b66b4928b7f1ebdba.jar
doesn't seem to contain artifacts for windows.amd64
Warning:
lwjgl-tinyfd-3.3.1-natives-linux-arm32-f9a8e549fff9564787a9d860c6175183.jar
doesn't seem to contain artifacts for windows.amd64
Warning: lwjgl-3.3.1-natives-linux-arm32-84b140bcc73c2e606e915460bb2736.jar
doesn't seem to contain artifacts for windows.amd64
Warning:
lwjgl-tinyfd-3.3.1-natives-linux-arm64-4ea416793260fb7140f9f47e8b3662.jar
doesn't seem to contain artifacts for windows.amd64
Warning: lwjgl-3.3.1-natives-linux-arm64-9998baa1e723ad9cd8cae402e3398d9.jar
doesn't seem to contain artifacts for windows.amd64
Warning: lwjgl-3.3.1-natives-linux-aeba195b5e56e5033b41bddf95541d1.jar doesn't
seem to contain artifacts for windows.amd64
  7.20 secs │   0.0% │   0 / 223 │ 1. Processed Jars for macOS Intel: Repacking JARs
Warning: lwjgl-3.3.1-natives-linux-arm32-84b140bcc73c2e606e915460bb2736.jar
doesn't seem to contain artifacts for mac.amd64
  7.21 secs │   0.0% │   0 / 223 │ 2. Processed Jars for macOS ARM: Repacking JARs
Warning: lwjgl-3.3.1-natives-linux-arm32-84b140bcc73c2e606e915460bb2736.jar
doesn't seem to contain artifacts for mac.aarch64
Warning:
lwjgl-tinyfd-3.3.1-natives-linux-arm32-f9a8e549fff9564787a9d860c6175183.jar
doesn't seem to contain artifacts for mac.amd64
Warning: lwjgl-3.3.1-natives-linux-arm64-9998baa1e723ad9cd8cae402e3398d9.jar
doesn't seem to contain artifacts for mac.amd64
Warning: lwjgl-3.3.1-natives-linux-aeba195b5e56e5033b41bddf95541d1.jar doesn't
seem to contain artifacts for mac.amd64
Warning: lwjgl-tinyfd-3.3.1-natives-linux-d5f7f67aa151641b66b4928b7f1ebdba.jar
doesn't seem to contain artifacts for mac.amd64
Warning:
lwjgl-tinyfd-3.3.1-natives-linux-arm64-4ea416793260fb7140f9f47e8b3662.jar
doesn't seem to contain artifacts for mac.amd64
  7.43 secs │ 100.0% │ 223 / 223 │ 3. Processed Jars for Windows Intel: Repacking JARs
  7.44 secs │   0.0% │   0 / 223 │ 3. Processed Jars for Windows Intel: Scanning JARs
Warning:
lwjgl-tinyfd-3.3.1-natives-linux-arm32-f9a8e549fff9564787a9d860c6175183.jar
doesn't seem to contain artifacts for mac.aarch64
  7.48 secs │ 100.0% │ 224 / 224 │ 0. Processed Jars for Linux Intel: Repacking JARs
  7.48 secs │   0.0% │   0 / 224 │ 0. Processed Jars for Linux Intel: Scanning JARs
Warning: lwjgl-tinyfd-3.3.1-natives-linux-d5f7f67aa151641b66b4928b7f1ebdba.jar
doesn't seem to contain artifacts for mac.aarch64
Warning:
lwjgl-tinyfd-3.3.1-natives-linux-arm64-4ea416793260fb7140f9f47e8b3662.jar
doesn't seem to contain artifacts for mac.aarch64
Warning: lwjgl-3.3.1-natives-linux-arm64-9998baa1e723ad9cd8cae402e3398d9.jar
doesn't seem to contain artifacts for mac.aarch64
Warning: lwjgl-3.3.1-natives-linux-aeba195b5e56e5033b41bddf95541d1.jar doesn't
seem to contain artifacts for mac.aarch64
  7.54 secs │ 100.0% │ 223 / 223 │ 1. Processed Jars for macOS Intel: Repacking JARs
  7.54 secs │   0.0% │   0 / 223 │ 1. Processed Jars for macOS Intel: Scanning JARs
  7.66 secs │ 100.0% │ 223 / 223 │ 2. Processed Jars for macOS ARM: Repacking JARs
  7.66 secs │   0.0% │   0 / 223 │ 2. Processed Jars for macOS ARM: Scanning JARs
  7.71 secs │ 100.0% │ 223 / 223 │ 3. Processed Jars for Windows Intel: Scanning JARs
  7.71 secs │ 100.0% │ 223 / 223 │ 1. Processed Jars for macOS Intel: Scanning JARs
  7.71 secs │ 100.0% │ 224 / 224 │ 0. Processed Jars for Linux Intel: Scanning JARs
  7.71 secs │   0.0% │   0 / 224 │ 0. Processed Jars for Linux Intel: Scanning with jdeps
  7.71 secs │   0.0% │   0 / 223 │ 3. Processed Jars for Windows Intel: Scanning with jdeps
  7.72 secs │   0.0% │   0 / 223 │ 1. Processed Jars for macOS Intel: Scanning with jdeps
  7.78 secs │ 100.0% │ 223 / 223 │ 2. Processed Jars for macOS ARM: Scanning JARs
  7.78 secs │   0.0% │   0 / 223 │ 2. Processed Jars for macOS ARM: Scanning with jdeps
 13.94 secs │ 100.0% │ 224 / 224 │ 0. Processed Jars for Linux Intel: Scanning with jdeps
 13.94 secs │ 100.0% │ 223 / 223 │ 3. Processed Jars for Windows Intel: Scanning with jdeps
 14.16 secs │ 100.0% │ 223 / 223 │ 2. Processed Jars for macOS ARM: Scanning with jdeps
 14.16 secs │ 100.0% │ 223 / 223 │ 1. Processed Jars for macOS Intel: Scanning with jdeps
 14.43 secs │        │           │ 3. Windows App for Intel: Preparing to copy file tree
 14.43 secs │        │           │ 1. Linux App for Intel: Preparing to copy file tree
 14.43 secs │   0.0% │   0 / 834 │ 3. Windows App for Intel: Copying 834 file(s)
 14.43 secs │   0.0% │   0 / 772 │ 1. Linux App for Intel: Copying 772 file(s)
 14.46 secs │ 100.0% │ 772 / 772 │ 1. Linux App for Intel: Copying 772 file(s)
 14.46 secs │   0.0% │   0 / 126 │ 1. Linux App for Intel: Copying directory permissions
 14.46 secs │ 100.0% │ 126 / 126 │ 1. Linux App for Intel: Copying directory permissions
 14.46 secs │        │           │ 1. Linux App for Intel: Preparing to copy file tree
 14.46 secs │   0.0% │   0 / 144 │ 1. Linux App for Intel: Copying 144 file(s)
 14.46 secs │        │           │ 2. Mac App for ARM: Preparing to copy file tree
 14.47 secs │   0.0% │   0 / 771 │ 2. Mac App for ARM: Copying 771 file(s)
 14.47 secs │        │           │ 0. Mac App for Intel: Preparing to copy file tree
 14.47 secs │ 100.0% │ 834 / 834 │ 3. Windows App for Intel: Copying 834 file(s)
 14.48 secs │   0.0% │   0 / 132 │ 3. Windows App for Intel: Copying directory permissions
 14.48 secs │   0.0% │   0 / 771 │ 0. Mac App for Intel: Copying 771 file(s)
 14.48 secs │ 100.0% │ 132 / 132 │ 3. Windows App for Intel: Copying directory permissions
 14.48 secs │        │           │ 3. Windows App for Intel: Preparing to copy file tree
 14.48 secs │   0.0% │   0 / 192 │ 3. Windows App for Intel: Copying 192 file(s)
 14.49 secs │ 100.0% │ 771 / 771 │ 2. Mac App for ARM: Copying 771 file(s)
 14.49 secs │   0.0% │   0 / 126 │ 2. Mac App for ARM: Copying directory permissions
 14.49 secs │ 100.0% │ 126 / 126 │ 2. Mac App for ARM: Copying directory permissions
 14.49 secs │        │           │ 2. Mac App for ARM: Preparing to copy file tree
 14.50 secs │   0.0% │   0 / 153 │ 2. Mac App for ARM: Copying 153 file(s)
 14.50 secs │ 100.0% │ 771 / 771 │ 0. Mac App for Intel: Copying 771 file(s)
 14.50 secs │   0.0% │   0 / 126 │ 0. Mac App for Intel: Copying directory permissions
 14.50 secs │ 100.0% │ 126 / 126 │ 0. Mac App for Intel: Copying directory permissions
 14.50 secs │        │           │ 0. Mac App for Intel: Preparing to copy file tree
 14.51 secs │   0.0% │   0 / 153 │ 0. Mac App for Intel: Copying 153 file(s)
 14.51 secs │ 100.0% │ 144 / 144 │ 1. Linux App for Intel: Copying 144 file(s)
 14.51 secs │   0.0% │   0 /  27 │ 1. Linux App for Intel: Copying directory permissions
 14.51 secs │ 100.0% │  27 /  27 │ 1. Linux App for Intel: Copying directory permissions
 14.53 secs │ 100.0% │ 192 / 192 │ 3. Windows App for Intel: Copying 192 file(s)
 14.53 secs │   0.0% │   0 /  27 │ 3. Windows App for Intel: Copying directory permissions
 14.53 secs │ 100.0% │  27 /  27 │ 3. Windows App for Intel: Copying directory permissions
 14.54 secs │ 100.0% │ 153 / 153 │ 2. Mac App for ARM: Copying 153 file(s)
 14.54 secs │   0.0% │   0 /  29 │ 2. Mac App for ARM: Copying directory permissions
 14.54 secs │ 100.0% │  29 /  29 │ 2. Mac App for ARM: Copying directory permissions
 14.55 secs │ 100.0% │ 153 / 153 │ 0. Mac App for Intel: Copying 153 file(s)
 14.55 secs │   0.0% │   0 /  29 │ 0. Mac App for Intel: Copying directory permissions
 14.55 secs │ 100.0% │  29 /  29 │ 0. Mac App for Intel: Copying directory permissions
 14.68 secs │        │           │ 3. Windows App for Intel: Preparing to copy file tree
 14.68 secs │        │           │ 3. Windows App for Intel: Copying 1 file(s)
 14.68 secs │  done  │           │ 3. Windows App for Intel: Copying 1 file(s)
 14.68 secs │        │           │ 3. Windows App for Intel: Copying directory permissions
 14.68 secs │  done  │           │ 3. Windows App for Intel: Copying directory permissions
 14.69 secs │        │           │ 2. Mac App for ARM: Preparing to copy file tree
 14.69 secs │   0.0% │   0 / 103 │ 3. Windows App for Intel: Signing
 14.69 secs │   0.0% │   0 / 183 │ 2. Mac App for ARM: Copying 183 file(s)
 14.70 secs │        │           │ 0. Mac App for Intel: Preparing to copy file tree
 14.70 secs │ 100.0% │ 183 / 183 │ 2. Mac App for ARM: Copying 183 file(s)
 14.70 secs │   0.0% │   0 /  57 │ 2. Mac App for ARM: Copying directory permissions
 14.70 secs │ 100.0% │  57 /  57 │ 2. Mac App for ARM: Copying directory permissions
 14.70 secs │        │           │ 2. Mac App for ARM: Scanning app to calculate min required OS version
 14.71 secs │   0.0% │   0 / 183 │ 0. Mac App for Intel: Copying 183 file(s)
 14.71 secs │ 100.0% │ 183 / 183 │ 0. Mac App for Intel: Copying 183 file(s)
 14.71 secs │   0.0% │   0 /  57 │ 0. Mac App for Intel: Copying directory permissions
 14.71 secs │ 100.0% │  57 /  57 │ 0. Mac App for Intel: Copying directory permissions
 14.71 secs │        │           │ 0. Mac App for Intel: Scanning app to calculate min required OS version
 14.78 secs │  done  │           │ 2. Mac App for ARM: Scanning app to calculate min required OS version
 14.78 secs │  done  │           │ 0. Mac App for Intel: Scanning app to calculate min required OS version
 14.81 secs │   0.0% │   0 /  40 │ 2. Mac App for ARM: Saving permissions for app bundle Maktab Mobile
 14.81 secs │ 100.0% │  40 /  40 │ 2. Mac App for ARM: Saving permissions for app bundle Maktab Mobile
 14.81 secs │        │           │ 2. Mac App for ARM: Signing app bundle Maktab Mobile
 14.81 secs │   0.0% │   0 /  40 │ 0. Mac App for Intel: Saving permissions for app bundle Maktab Mobile
 14.81 secs │ 100.0% │  40 /  40 │ 0. Mac App for Intel: Saving permissions for app bundle Maktab Mobile
 14.81 secs │        │           │ 0. Mac App for Intel: Signing app bundle Maktab Mobile
 15.36 secs │   0.0% │   0 /  33 │ 1. Debian Package for Intel: Reading ELF library dependencies
 15.36 secs │ 100.0% │  33 /  33 │ 1. Debian Package for Intel: Reading ELF library dependencies
 16.03 secs │ 100.0% │ 103 / 103 │ 3. Windows App for Intel: Signing
 16.26 secs │ 100.0% │ 39.01 MB / 39.01 MB │ 1. Debian Package for Intel: Scanning Debian package index
 16.28 secs │        │                     │ 1. Debian Package for Intel: Preparing to copy file tree
 16.28 secs │        │                     │ 1. Debian Package for Intel: Copying 1 file(s)
 16.28 secs │  done  │                     │ 1. Debian Package for Intel: Copying 1 file(s)
 16.28 secs │        │                     │ 1. Debian Package for Intel: Copying directory permissions
 16.28 secs │  done  │                     │ 1. Debian Package for Intel: Copying directory permissions
 16.30 secs │        │                     │ 1. Debian Package for Intel: Creating control.tar.xz
 16.30 secs │   0.0% │   0.00 MB / 0.00 MB │ 1. Debian Package for Intel: Creating control.tar.xz
 16.31 secs │ 100.0% │   0.00 MB / 0.00 MB │ 1. Debian Package for Intel: Creating control.tar.xz
 16.31 secs │        │                     │ 1. Debian Package for Intel: Creating data.tar.xz
 16.32 secs │        │                     │ 3. Linux Tarball for Intel: Creating maktab-mobile-0.4.150-linux-amd64.tar.gz
 16.32 secs │   0.0% │   0.00 MB / 188.34 MB │ 1. Debian Package for Intel: Creating data.tar.xz
 16.33 secs │   0.0% │   0.00 MB / 188.34 MB │ 3. Linux Tarball for Intel: Creating maktab-mobile-0.4.150-linux-amd64.tar.gz
 20.89 secs │        │                       │ 3. Windows Zip for Intel: Preparing to zip file tree
 20.89 secs │  done  │                       │ 3. Windows Zip for Intel: Preparing to zip file tree
 20.89 secs │   0.0% │              0 / 1036 │ 3. Windows Zip for Intel: Zip: Compressing files
 20.92 secs │ 100.0% │           1036 / 1036 │ 3. Windows Zip for Intel: Zip: Compressing files
 20.92 secs │        │                       │ 3. Windows Zip for Intel: Zip: Combining files
 22.57 secs │  done  │                       │ 3. Windows Zip for Intel: Zip: Combining files
 23.14 secs │   0.0% │               0 / 896 │ 3. Windows MSIX for Intel: Zipping
 26.97 secs │  done  │                       │ 2. Mac App for ARM: Signing app bundle Maktab Mobile
 26.97 secs │   0.0% │               0 /  40 │ 2. Mac App for ARM: Restoring permissions for app bundle Maktab Mobile
 26.97 secs │ 100.0% │              40 /  40 │ 2. Mac App for ARM: Restoring permissions for app bundle Maktab Mobile
 26.97 secs │  done  │                       │ 0. Mac App for Intel: Signing app bundle Maktab Mobile
 26.97 secs │   0.0% │               0 /  40 │ 0. Mac App for Intel: Restoring permissions for app bundle Maktab Mobile
 26.97 secs │ 100.0% │              40 /  40 │ 0. Mac App for Intel: Restoring permissions for app bundle Maktab Mobile
 27.19 secs │        │                       │ 2. Unnotarized Mac Zip for ARM: Preparing to zip file tree
 27.19 secs │        │                       │ 0. Unnotarized Mac Zip for Intel: Preparing to zip file tree
 27.20 secs │  done  │                       │ 2. Unnotarized Mac Zip for ARM: Preparing to zip file tree
 27.20 secs │   0.0% │              0 / 1120 │ 2. Unnotarized Mac Zip for ARM: Zip: Compressing files
 27.20 secs │  done  │                       │ 0. Unnotarized Mac Zip for Intel: Preparing to zip file tree
 27.20 secs │   0.0% │              0 / 1120 │ 0. Unnotarized Mac Zip for Intel: Zip: Compressing files
 27.24 secs │ 100.0% │           1120 / 1120 │ 2. Unnotarized Mac Zip for ARM: Zip: Compressing files
 27.24 secs │        │                       │ 2. Unnotarized Mac Zip for ARM: Zip: Combining files
 27.25 secs │ 100.0% │           1120 / 1120 │ 0. Unnotarized Mac Zip for Intel: Zip: Compressing files
 27.25 secs │        │                       │ 0. Unnotarized Mac Zip for Intel: Zip: Combining files
 28.72 secs │  done  │                       │ 2. Unnotarized Mac Zip for ARM: Zip: Combining files
 28.81 secs │  done  │                       │ 0. Unnotarized Mac Zip for Intel: Zip: Combining files
 29.30 secs │   0.0% │              0 / 1119 │ 2. Mac Updates for ARM: Extracting maktab-mobile-0.4.150-mac-aarch64.zip
 29.48 secs │   0.0% │              0 / 1119 │ 0. Mac Updates for Intel: Extracting maktab-mobile-0.4.150-mac-amd64.zip
 29.93 secs │ 100.0% │           1119 / 1119 │ 2. Mac Updates for ARM: Extracting maktab-mobile-0.4.150-mac-aarch64.zip
 30.14 secs │ 100.0% │           1119 / 1119 │ 0. Mac Updates for Intel: Extracting maktab-mobile-0.4.150-mac-amd64.zip
 30.23 secs │ 100.0% │   89.06 MB / 89.06 MB │ 2. Mac Updates for ARM: Downloading maktab-mobile-0.4.145-mac-aarch64.zip
 30.28 secs │   0.0% │              0 / 1119 │ 2. Mac Updates for ARM: Extracting maktab-mobile-0.4.145-mac-aarch64.zip
 30.31 secs │ 100.0% │   90.82 MB / 90.82 MB │ 0. Mac Updates for Intel: Downloading maktab-mobile-0.4.145-mac-amd64.zip
 30.34 secs │   0.0% │              0 / 1119 │ 0. Mac Updates for Intel: Extracting maktab-mobile-0.4.145-mac-amd64.zip
 30.91 secs │ 100.0% │           1119 / 1119 │ 2. Mac Updates for ARM: Extracting maktab-mobile-0.4.145-mac-aarch64.zip
 30.96 secs │   0.0% │              0 / 1119 │ 2. Mac Updates for ARM: Delta from 0.4.145 to 0.4.150: Computing hash of source tree
 30.97 secs │ 100.0% │           1119 / 1119 │ 0. Mac Updates for Intel: Extracting maktab-mobile-0.4.145-mac-amd64.zip
 30.99 secs │   0.0% │              0 / 1119 │ 0. Mac Updates for Intel: Delta from 0.4.145 to 0.4.150: Computing hash of source tree
 31.11 secs │ 100.0% │           1119 / 1119 │ 2. Mac Updates for ARM: Delta from 0.4.145 to 0.4.150: Computing hash of source tree
 31.12 secs │ 100.0% │           1119 / 1119 │ 0. Mac Updates for Intel: Delta from 0.4.145 to 0.4.150: Computing hash of source tree
 31.13 secs │   0.0% │              0 / 1119 │ 2. Mac Updates for ARM: Delta from 0.4.145 to 0.4.150: Computing hash of destination tree
 31.13 secs │   0.0% │              0 / 1119 │ 0. Mac Updates for Intel: Delta from 0.4.145 to 0.4.150: Computing hash of destination tree
 31.27 secs │ 100.0% │           1119 / 1119 │ 0. Mac Updates for Intel: Delta from 0.4.145 to 0.4.150: Computing hash of destination tree
 31.28 secs │ 100.0% │           1119 / 1119 │ 2. Mac Updates for ARM: Delta from 0.4.145 to 0.4.150: Computing hash of destination tree
 31.55 secs │   0.0% │               0 /  49 │ 2. Mac Updates for ARM: Delta from 0.4.145 to 0.4.150: Computing binary diffs
 31.71 secs │   0.0% │               0 /  49 │ 0. Mac Updates for Intel: Delta from 0.4.145 to 0.4.150: Computing binary diffs
 34.40 secs │ 100.0% │ 120.84 MB / 120.84 MB │ 3. Windows MSIX for Intel: Hashing
 34.40 secs │        │                       │ 3. Windows MSIX for Intel: Signing
 34.78 secs │  done  │                       │ 3. Windows MSIX for Intel: Signing
 34.78 secs │ 100.0% │             896 / 896 │ 3. Windows MSIX for Intel: Zipping
 35.03 secs │        │                       │ 3. App Installer for Intel: Preparing to copy file tree
 35.03 secs │   0.0% │               0 /   2 │ 3. App Installer for Intel: Copying 2 file(s)
 35.11 secs │ 100.0% │               2 /   2 │ 3. App Installer for Intel: Copying 2 file(s)
 35.11 secs │        │                       │ 3. App Installer for Intel: Copying directory permissions
 35.11 secs │  done  │                       │ 3. App Installer for Intel: Copying directory permissions
 38.21 secs │ 100.0% │              49 /  49 │ 0. Mac Updates for Intel: Delta from 0.4.145 to 0.4.150: Computing binary diffs
 38.49 secs │ 100.0% │              49 /  49 │ 2. Mac Updates for ARM: Delta from 0.4.145 to 0.4.150: Computing binary diffs
 42.43 secs │ 100.0% │   90.82 MB / 90.82 MB │ 0. Mac Updates for Intel: Downloading maktab-mobile-0.4.146-mac-amd64.zip
 42.45 secs │   0.0% │              0 / 1119 │ 0. Mac Updates for Intel: Extracting maktab-mobile-0.4.146-mac-amd64.zip
 42.59 secs │ 100.0% │   89.06 MB / 89.06 MB │ 2. Mac Updates for ARM: Downloading maktab-mobile-0.4.146-mac-aarch64.zip
 42.61 secs │   0.0% │              0 / 1119 │ 2. Mac Updates for ARM: Extracting maktab-mobile-0.4.146-mac-aarch64.zip
 43.11 secs │ 100.0% │           1119 / 1119 │ 0. Mac Updates for Intel: Extracting maktab-mobile-0.4.146-mac-amd64.zip
 43.13 secs │   0.0% │              0 / 1119 │ 0. Mac Updates for Intel: Delta from 0.4.146 to 0.4.150: Computing hash of source tree
 43.25 secs │ 100.0% │           1119 / 1119 │ 0. Mac Updates for Intel: Delta from 0.4.146 to 0.4.150: Computing hash of source tree
 43.27 secs │   0.0% │              0 / 1119 │ 0. Mac Updates for Intel: Delta from 0.4.146 to 0.4.150: Computing hash of destination tree
 43.32 secs │ 100.0% │           1119 / 1119 │ 2. Mac Updates for ARM: Extracting maktab-mobile-0.4.146-mac-aarch64.zip
 43.34 secs │   0.0% │              0 / 1119 │ 2. Mac Updates for ARM: Delta from 0.4.146 to 0.4.150: Computing hash of source tree
 43.40 secs │ 100.0% │           1119 / 1119 │ 0. Mac Updates for Intel: Delta from 0.4.146 to 0.4.150: Computing hash of destination tree
 43.47 secs │ 100.0% │           1119 / 1119 │ 2. Mac Updates for ARM: Delta from 0.4.146 to 0.4.150: Computing hash of source tree
 43.50 secs │   0.0% │              0 / 1119 │ 2. Mac Updates for ARM: Delta from 0.4.146 to 0.4.150: Computing hash of destination tree
 43.59 secs │   0.0% │               0 /  49 │ 0. Mac Updates for Intel: Delta from 0.4.146 to 0.4.150: Computing binary diffs
 43.67 secs │ 100.0% │           1119 / 1119 │ 2. Mac Updates for ARM: Delta from 0.4.146 to 0.4.150: Computing hash of destination tree
 43.92 secs │   0.0% │               0 /  49 │ 2. Mac Updates for ARM: Delta from 0.4.146 to 0.4.150: Computing binary diffs
 49.48 secs │ 100.0% │              49 /  49 │ 0. Mac Updates for Intel: Delta from 0.4.146 to 0.4.150: Computing binary diffs
 49.91 secs │ 100.0% │              49 /  49 │ 2. Mac Updates for ARM: Delta from 0.4.146 to 0.4.150: Computing binary diffs
 53.44 secs │ 100.0% │   90.82 MB / 90.82 MB │ 0. Mac Updates for Intel: Downloading maktab-mobile-0.4.147-mac-amd64.zip
 53.46 secs │   0.0% │              0 / 1119 │ 0. Mac Updates for Intel: Extracting maktab-mobile-0.4.147-mac-amd64.zip
 54.05 secs │ 100.0% │   89.06 MB / 89.06 MB │ 2. Mac Updates for ARM: Downloading maktab-mobile-0.4.147-mac-aarch64.zip
 54.07 secs │   0.0% │              0 / 1119 │ 2. Mac Updates for ARM: Extracting maktab-mobile-0.4.147-mac-aarch64.zip
 54.07 secs │ 100.0% │           1119 / 1119 │ 0. Mac Updates for Intel: Extracting maktab-mobile-0.4.147-mac-amd64.zip
 54.09 secs │   0.0% │              0 / 1119 │ 0. Mac Updates for Intel: Delta from 0.4.147 to 0.4.150: Computing hash of source tree
 54.23 secs │ 100.0% │           1119 / 1119 │ 0. Mac Updates for Intel: Delta from 0.4.147 to 0.4.150: Computing hash of source tree
 54.25 secs │   0.0% │              0 / 1119 │ 0. Mac Updates for Intel: Delta from 0.4.147 to 0.4.150: Computing hash of destination tree
 54.39 secs │ 100.0% │           1119 / 1119 │ 0. Mac Updates for Intel: Delta from 0.4.147 to 0.4.150: Computing hash of destination tree
 54.58 secs │   0.0% │               0 /  49 │ 0. Mac Updates for Intel: Delta from 0.4.147 to 0.4.150: Computing binary diffs
 54.75 secs │ 100.0% │           1119 / 1119 │ 2. Mac Updates for ARM: Extracting maktab-mobile-0.4.147-mac-aarch64.zip
 54.80 secs │   0.0% │              0 / 1119 │ 2. Mac Updates for ARM: Delta from 0.4.147 to 0.4.150: Computing hash of source tree
 54.95 secs │ 100.0% │           1119 / 1119 │ 2. Mac Updates for ARM: Delta from 0.4.147 to 0.4.150: Computing hash of source tree
 54.97 secs │   0.0% │              0 / 1119 │ 2. Mac Updates for ARM: Delta from 0.4.147 to 0.4.150: Computing hash of destination tree
 55.14 secs │ 100.0% │           1119 / 1119 │ 2. Mac Updates for ARM: Delta from 0.4.147 to 0.4.150: Computing hash of destination tree
 55.37 secs │   0.0% │               0 /  49 │ 2. Mac Updates for ARM: Delta from 0.4.147 to 0.4.150: Computing binary diffs
 60.39 secs │ 100.0% │              49 /  49 │ 0. Mac Updates for Intel: Delta from 0.4.147 to 0.4.150: Computing binary diffs
 60.88 secs │ 100.0% │              49 /  49 │ 2. Mac Updates for ARM: Delta from 0.4.147 to 0.4.150: Computing binary diffs
 64.21 secs │ 100.0% │   90.82 MB / 90.82 MB │ 0. Mac Updates for Intel: Downloading maktab-mobile-0.4.148-mac-amd64.zip
 64.26 secs │   0.0% │              0 / 1119 │ 0. Mac Updates for Intel: Extracting maktab-mobile-0.4.148-mac-amd64.zip
 64.79 secs │ 100.0% │   89.06 MB / 89.06 MB │ 2. Mac Updates for ARM: Downloading maktab-mobile-0.4.148-mac-aarch64.zip
 64.83 secs │   0.0% │              0 / 1119 │ 2. Mac Updates for ARM: Extracting maktab-mobile-0.4.148-mac-aarch64.zip
 64.87 secs │ 100.0% │           1119 / 1119 │ 0. Mac Updates for Intel: Extracting maktab-mobile-0.4.148-mac-amd64.zip
 64.89 secs │   0.0% │              0 / 1119 │ 0. Mac Updates for Intel: Delta from 0.4.148 to 0.4.150: Computing hash of source tree
 65.01 secs │ 100.0% │           1119 / 1119 │ 0. Mac Updates for Intel: Delta from 0.4.148 to 0.4.150: Computing hash of source tree
 65.03 secs │   0.0% │              0 / 1119 │ 0. Mac Updates for Intel: Delta from 0.4.148 to 0.4.150: Computing hash of destination tree
 65.16 secs │ 100.0% │           1119 / 1119 │ 0. Mac Updates for Intel: Delta from 0.4.148 to 0.4.150: Computing hash of destination tree
 65.35 secs │   0.0% │               0 /  49 │ 0. Mac Updates for Intel: Delta from 0.4.148 to 0.4.150: Computing binary diffs
 65.50 secs │ 100.0% │           1119 / 1119 │ 2. Mac Updates for ARM: Extracting maktab-mobile-0.4.148-mac-aarch64.zip
 65.55 secs │   0.0% │              0 / 1119 │ 2. Mac Updates for ARM: Delta from 0.4.148 to 0.4.150: Computing hash of source tree
 65.76 secs │ 100.0% │           1119 / 1119 │ 2. Mac Updates for ARM: Delta from 0.4.148 to 0.4.150: Computing hash of source tree
 65.80 secs │   0.0% │              0 / 1119 │ 2. Mac Updates for ARM: Delta from 0.4.148 to 0.4.150: Computing hash of destination tree
 66.01 secs │ 100.0% │           1119 / 1119 │ 2. Mac Updates for ARM: Delta from 0.4.148 to 0.4.150: Computing hash of destination tree
 66.31 secs │   0.0% │               0 /  49 │ 2. Mac Updates for ARM: Delta from 0.4.148 to 0.4.150: Computing binary diffs
 71.19 secs │ 100.0% │              49 /  49 │ 0. Mac Updates for Intel: Delta from 0.4.148 to 0.4.150: Computing binary diffs
 71.57 secs │ 100.0% │              49 /  49 │ 2. Mac Updates for ARM: Delta from 0.4.148 to 0.4.150: Computing binary diffs
 75.22 secs │ 100.0% │   90.85 MB / 90.85 MB │ 0. Mac Updates for Intel: Downloading maktab-mobile-0.4.149-mac-amd64.zip
 75.24 secs │   0.0% │              0 / 1119 │ 0. Mac Updates for Intel: Extracting maktab-mobile-0.4.149-mac-amd64.zip
 75.52 secs │ 100.0% │   89.08 MB / 89.08 MB │ 2. Mac Updates for ARM: Downloading maktab-mobile-0.4.149-mac-aarch64.zip
 75.56 secs │   0.0% │              0 / 1119 │ 2. Mac Updates for ARM: Extracting maktab-mobile-0.4.149-mac-aarch64.zip
 75.87 secs │ 100.0% │           1119 / 1119 │ 0. Mac Updates for Intel: Extracting maktab-mobile-0.4.149-mac-amd64.zip
 75.89 secs │   0.0% │              0 / 1119 │ 0. Mac Updates for Intel: Delta from 0.4.149 to 0.4.150: Computing hash of source tree
 76.02 secs │ 100.0% │           1119 / 1119 │ 0. Mac Updates for Intel: Delta from 0.4.149 to 0.4.150: Computing hash of source tree
 76.04 secs │   0.0% │              0 / 1119 │ 0. Mac Updates for Intel: Delta from 0.4.149 to 0.4.150: Computing hash of destination tree
 76.15 secs │ 100.0% │           1119 / 1119 │ 2. Mac Updates for ARM: Extracting maktab-mobile-0.4.149-mac-aarch64.zip
 76.17 secs │   0.0% │              0 / 1119 │ 2. Mac Updates for ARM: Delta from 0.4.149 to 0.4.150: Computing hash of source tree
 76.18 secs │ 100.0% │           1119 / 1119 │ 0. Mac Updates for Intel: Delta from 0.4.149 to 0.4.150: Computing hash of destination tree
 76.31 secs │ 100.0% │           1119 / 1119 │ 2. Mac Updates for ARM: Delta from 0.4.149 to 0.4.150: Computing hash of source tree
 76.34 secs │   0.0% │              0 / 1119 │ 2. Mac Updates for ARM: Delta from 0.4.149 to 0.4.150: Computing hash of destination tree
 76.38 secs │   0.0% │               0 /  43 │ 0. Mac Updates for Intel: Delta from 0.4.149 to 0.4.150: Computing binary diffs
 76.49 secs │ 100.0% │           1119 / 1119 │ 2. Mac Updates for ARM: Delta from 0.4.149 to 0.4.150: Computing hash of destination tree
 76.72 secs │   0.0% │               0 /  43 │ 2. Mac Updates for ARM: Delta from 0.4.149 to 0.4.150: Computing binary diffs
 82.15 secs │ 100.0% │              43 /  43 │ 0. Mac Updates for Intel: Delta from 0.4.149 to 0.4.150: Computing binary diffs
 82.69 secs │ 100.0% │              43 /  43 │ 2. Mac Updates for ARM: Delta from 0.4.149 to 0.4.150: Computing binary diffs
 84.50 secs │ 100.0% │   90.85 MB / 90.85 MB │ 0. Mac Updates for Intel: Signing maktab-mobile-0.4.150-mac-amd64.zip
 84.68 secs │ 100.0% │   10.47 MB / 10.47 MB │ 0. Mac Updates for Intel: Signing maktab-mobile-0.4.145-0.4.150-mac-amd64.delta
 84.71 secs │ 100.0% │   10.47 MB / 10.47 MB │ 0. Mac Updates for Intel: Signing maktab-mobile-0.4.146-0.4.150-mac-amd64.delta
 84.73 secs │ 100.0% │   10.47 MB / 10.47 MB │ 0. Mac Updates for Intel: Signing maktab-mobile-0.4.147-0.4.150-mac-amd64.delta
 84.76 secs │ 100.0% │   10.29 MB / 10.29 MB │ 0. Mac Updates for Intel: Signing maktab-mobile-0.4.148-0.4.150-mac-amd64.delta
 84.78 secs │ 100.0% │     6.61 MB / 6.61 MB │ 0. Mac Updates for Intel: Signing maktab-mobile-0.4.149-0.4.150-mac-amd64.delta
 85.04 secs │ 100.0% │   89.09 MB / 89.09 MB │ 2. Mac Updates for ARM: Signing maktab-mobile-0.4.150-mac-aarch64.zip
 85.22 secs │ 100.0% │   10.47 MB / 10.47 MB │ 2. Mac Updates for ARM: Signing maktab-mobile-0.4.145-0.4.150-mac-aarch64.delta
 85.25 secs │ 100.0% │   10.47 MB / 10.47 MB │ 2. Mac Updates for ARM: Signing maktab-mobile-0.4.146-0.4.150-mac-aarch64.delta
 85.27 secs │ 100.0% │   10.47 MB / 10.47 MB │ 2. Mac Updates for ARM: Signing maktab-mobile-0.4.147-0.4.150-mac-aarch64.delta
 85.30 secs │ 100.0% │   10.29 MB / 10.29 MB │ 2. Mac Updates for ARM: Signing maktab-mobile-0.4.148-0.4.150-mac-aarch64.delta
 85.32 secs │ 100.0% │     6.61 MB / 6.61 MB │ 2. Mac Updates for ARM: Signing maktab-mobile-0.4.149-0.4.150-mac-aarch64.delta
 91.36 secs │        │                       │ 1. Debian Package for Intel: Completing DEB
 91.42 secs │  done  │                       │ 1. Debian Package for Intel: Completing DEB
 91.57 secs │ 100.0% │   78.75 MB / 78.75 MB │ 3. Apt Repository: Hashing maktab-mobile_0.4.150_amd64.deb
 91.58 secs │ 100.0% │     0.00 MB / 0.00 MB │ 3. Apt Repository: Hashing Packages
 91.58 secs │ 100.0% │     0.00 MB / 0.00 MB │ 3. Apt Repository: Hashing Packages.xz
 91.58 secs │ 100.0% │     0.00 MB / 0.00 MB │ 3. Apt Repository: Hashing Packages
 91.58 secs │ 100.0% │     0.00 MB / 0.00 MB │ 3. Apt Repository: Hashing Packages.xz
 91.58 secs │ 100.0% │     0.00 MB / 0.00 MB │ 3. Apt Repository: Hashing Packages
 91.58 secs │ 100.0% │     0.00 MB / 0.00 MB │ 3. Apt Repository: Hashing Packages.xz
 91.58 secs │ 100.0% │     0.00 MB / 0.00 MB │ 3. Apt Repository: Hashing Packages
 91.58 secs │ 100.0% │     0.00 MB / 0.00 MB │ 3. Apt Repository: Hashing Packages.xz
 91.82 secs │        │                       │ 0. Site: Preparing to copy file tree
 91.82 secs │   0.0% │               0 /   5 │ 0. Site: Copying 5 file(s)
 91.88 secs │ 100.0% │               5 /   5 │ 0. Site: Copying 5 file(s)
 91.88 secs │        │                       │ 0. Site: Copying directory permissions
 91.88 secs │  done  │                       │ 0. Site: Copying directory permissions
 91.88 secs │        │                       │ 0. Site: Preparing to copy file tree
 91.88 secs │   0.0% │               0 /   7 │ 0. Site: Copying 7 file(s)
 91.92 secs │ 100.0% │               7 /   7 │ 0. Site: Copying 7 file(s)
 91.92 secs │   0.0% │               0 /   2 │ 0. Site: Copying directory permissions
 91.92 secs │ 100.0% │               2 /   2 │ 0. Site: Copying directory permissions
 92.04 secs │        │                       │ 0. Site: Preparing to copy file tree
 92.04 secs │   0.0% │               0 /   2 │ 0. Site: Copying 2 file(s)
 92.04 secs │ 100.0% │               2 /   2 │ 0. Site: Copying 2 file(s)
 92.04 secs │        │                       │ 0. Site: Copying directory permissions
 92.04 secs │  done  │                       │ 0. Site: Copying directory permissions
 92.04 secs │        │                       │ 0. Site: Preparing to copy file tree
 92.04 secs │   0.0% │               0 /   8 │ 0. Site: Copying 8 file(s)
 92.09 secs │ 100.0% │               8 /   8 │ 0. Site: Copying 8 file(s)
 92.09 secs │        │                       │ 0. Site: Copying directory permissions
 92.09 secs │  done  │                       │ 0. Site: Copying directory permissions
 92.09 secs │        │                       │ 0. Site: Preparing to copy file tree
 92.09 secs │   0.0% │               0 /   8 │ 0. Site: Copying 8 file(s)
 92.14 secs │ 100.0% │               8 /   8 │ 0. Site: Copying 8 file(s)
 92.14 secs │        │                       │ 0. Site: Copying directory permissions
 92.14 secs │  done  │                       │ 0. Site: Copying directory permissions
 92.70 secs │ 100.0% │              71 /  71 │ Building
+ mkdir -p /var/www/html/conveyor/Release-Maktab
+ cp -r output/appcast-aarch64.rss output/appcast-amd64.rss output/debian output/download.html output/icon.svg output/install.ps1 output/launch.mac output/maktab-mobile-0.4.145-0.4.150-mac-aarch64.delta output/maktab-mobile-0.4.145-0.4.150-mac-amd64.delta output/maktab-mobile-0.4.146-0.4.150-mac-aarch64.delta output/maktab-mobile-0.4.146-0.4.150-mac-amd64.delta output/maktab-mobile-0.4.147-0.4.150-mac-aarch64.delta output/maktab-mobile-0.4.147-0.4.150-mac-amd64.delta output/maktab-mobile-0.4.148-0.4.150-mac-aarch64.delta output/maktab-mobile-0.4.148-0.4.150-mac-amd64.delta output/maktab-mobile-0.4.149-0.4.150-mac-aarch64.delta output/maktab-mobile-0.4.149-0.4.150-mac-amd64.delta output/maktab-mobile-0.4.150-linux-amd64.tar.gz output/maktab-mobile-0.4.150-mac-aarch64.zip output/maktab-mobile-0.4.150-mac-amd64.zip output/maktab-mobile-0.4.150-windows-amd64.zip output/maktab-mobile-0.4.150.x64.msix output/maktab-mobile.appinstaller output/maktab-mobile.crt output/maktab-mobile.exe output/metadata.properties /var/www/html/conveyor/Release-Maktab
Archiving artifacts
Finished: SUCCESS