From 83c9db0f0adbbf7232cd8177f7b1a36b693b47e3 Mon Sep 17 00:00:00 2001 From: andreia Date: Fri, 27 Feb 2026 18:10:00 +0100 Subject: [PATCH 1/7] create :share:ui and :share:domain kmp modules --- app/build.gradle | 14 +++++----- build.gradle | 11 +++----- core/domain/.gitignore | 1 + core/domain/build.gradle.kts | 28 ++++++++++++++++++++ core/ui/.gitignore | 1 + core/ui/build.gradle.kts | 51 ++++++++++++++++++++++++++++++++++++ e2eTest/build.gradle | 8 +++--- gradle/libs.versions.toml | 26 +++++++++++++++--- settings.gradle | 2 ++ 9 files changed, 120 insertions(+), 22 deletions(-) create mode 100644 core/domain/.gitignore create mode 100644 core/domain/build.gradle.kts create mode 100644 core/ui/.gitignore create mode 100644 core/ui/build.gradle.kts diff --git a/app/build.gradle b/app/build.gradle index e06ae733fd..e11fc9c678 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -56,7 +56,7 @@ static def getGitHash() { } android { - compileSdk rootProject.androidCompileSdk + compileSdk = libs.versions.androidCompileSdk.get().toInteger() sourceSets { main { proto { @@ -75,8 +75,8 @@ android { } defaultConfig { applicationId "org.groundplatform.android" - minSdkVersion rootProject.androidMinSdk - targetSdkVersion rootProject.androidTargetSdk + minSdkVersion libs.versions.androidMinSdk.get().toInteger() + targetSdkVersion libs.versions.androidTargetSdk.get().toInteger() versionCode getGitCommitCount() versionName "${getGitBranchName()}-${getGitHash()}-debug" @@ -177,6 +177,8 @@ configurations { dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') + implementation project(':core:ui') + implementation project(':core:domain') implementation libs.androidx.multidex implementation libs.androidx.preference.ktx @@ -261,10 +263,6 @@ dependencies { implementation libs.androidx.navigation.fragment.ktx implementation libs.androidx.navigation.ui.ktx - // Auto-value - compileOnly libs.auto.value.annotations - ksp libs.auto.value - // Logging implementation libs.timber @@ -371,7 +369,7 @@ apply plugin: 'androidx.navigation.safeargs' apply plugin: 'com.google.gms.google-services' kotlin { - jvmToolchain rootProject.jvmToolchainVersion + jvmToolchain libs.versions.jvmToolchainVersion.get().toInteger() } secrets { diff --git a/build.gradle b/build.gradle index 2413694ffd..fcd21c1fcb 100644 --- a/build.gradle +++ b/build.gradle @@ -61,6 +61,10 @@ plugins { alias libs.plugins.hilt.android apply false alias libs.plugins.detekt alias libs.plugins.protobuf apply false + alias libs.plugins.kotlin.multiplatform apply false + alias libs.plugins.android.kotlin.multiplatform.library apply false + alias libs.plugins.android.lint apply false + alias libs.plugins.compose.multiplatform apply false } allprojects { @@ -100,10 +104,3 @@ detekt { tasks.register('checkCode', GradleBuild) { tasks = ['checkstyle', 'lintLocalDebug', 'ktfmtCheck', 'detekt'] } - -ext { - androidCompileSdk = 36 - androidMinSdk = 24 - androidTargetSdk = 36 - jvmToolchainVersion = 17 -} diff --git a/core/domain/.gitignore b/core/domain/.gitignore new file mode 100644 index 0000000000..42afabfd2a --- /dev/null +++ b/core/domain/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/core/domain/build.gradle.kts b/core/domain/build.gradle.kts new file mode 100644 index 0000000000..26521414d8 --- /dev/null +++ b/core/domain/build.gradle.kts @@ -0,0 +1,28 @@ +plugins { + alias(libs.plugins.kotlin.multiplatform) + alias(libs.plugins.kotlin.serialization) +} + +kotlin { + // We do not add an Android target here because this is a pure domain module. + // Adding an Android target would require the Android Gradle Plugin (AGP) and SDK configuration, + // which would couple the domain layer to platform-specific infrastructure. + // iOS targets are included because Kotlin can compile to iOS without any platform plugin. + jvm() + jvmToolchain(libs.versions.jvmToolchainVersion.get().toInt()) + + iosX64() + iosArm64() + iosSimulatorArm64() + + sourceSets { + commonMain { + dependencies { + implementation(libs.kotlin.stdlib) + implementation(libs.kotlinx.serialization.json) + } + } + + commonTest { dependencies { implementation(libs.kotlin.test) } } + } +} diff --git a/core/ui/.gitignore b/core/ui/.gitignore new file mode 100644 index 0000000000..42afabfd2a --- /dev/null +++ b/core/ui/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/core/ui/build.gradle.kts b/core/ui/build.gradle.kts new file mode 100644 index 0000000000..fe7ea08e2d --- /dev/null +++ b/core/ui/build.gradle.kts @@ -0,0 +1,51 @@ +import org.jetbrains.kotlin.gradle.plugin.mpp.apple.XCFramework + +plugins { + alias(libs.plugins.kotlin.multiplatform) + alias(libs.plugins.android.kotlin.multiplatform.library) + alias(libs.plugins.android.lint) + alias(libs.plugins.compose.multiplatform) + alias(libs.plugins.compose.compiler) +} + +kotlin { + jvmToolchain(libs.versions.jvmToolchainVersion.get().toInt()) + androidLibrary { + namespace = "org.groundplatform.core.ui" + compileSdk = libs.versions.androidCompileSdk.get().toInt() + minSdk = libs.versions.androidMinSdk.get().toInt() + } + + val xcfName = "GroundUI" + val xcf = XCFramework(xcfName) + + listOf(iosX64(), iosArm64(), iosSimulatorArm64()).forEach { + it.binaries.framework { + baseName = xcfName + xcf.add(this) + } + } + + sourceSets { + commonMain { + dependencies { + implementation(libs.compose.runtime) + implementation(libs.compose.foundation) + implementation(libs.compose.material3) + implementation(libs.compose.ui) + implementation(libs.compose.ui.tooling.preview) + implementation(libs.compose.components.resources) + implementation(libs.androidx.lifecycle.runtime.compose) + implementation(libs.network.chaintech.qr.kit) + } + } + + commonTest { dependencies { implementation(libs.kotlin.test) } } + + androidMain { dependencies { implementation(libs.compose.ui.tooling.preview) } } + + iosMain { dependencies {} } + } +} + +dependencies { androidRuntimeClasspath(libs.compose.ui.tooling.preview) } diff --git a/e2eTest/build.gradle b/e2eTest/build.gradle index f76fbe1d9f..91d0e27424 100644 --- a/e2eTest/build.gradle +++ b/e2eTest/build.gradle @@ -21,11 +21,11 @@ plugins { android { targetProjectPath ':app' namespace = 'org.groundplatform.android.e2etest' - compileSdk rootProject.androidCompileSdk + compileSdk = libs.versions.androidCompileSdk.get().toInteger() defaultConfig { - minSdkVersion rootProject.androidMinSdk - targetSdkVersion rootProject.androidTargetSdk + minSdkVersion libs.versions.androidMinSdk.get().toInteger() + targetSdkVersion libs.versions.androidTargetSdk.get().toInteger() testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunnerArguments clearPackageData: 'true' } @@ -80,5 +80,5 @@ dependencies { } kotlin { - jvmToolchain rootProject.jvmToolchainVersion + jvmToolchain libs.versions.jvmToolchainVersion.get().toInteger() } \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 9a3b0d2704..68125c9c7a 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -13,11 +13,16 @@ # limitations under the License. [versions] +androidCompileSdk = "36" +androidMinSdk = "24" +androidTargetSdk = "36" androidMapsUtilsVersion = "4.1.0" +androidXLifecycleVersion = "2.9.6" appcompatVersion = "1.7.1" autoValueVersion = "1.11.1" coilComposeVersion = "2.7.0" composeBom = "2026.02.00" +composeMultiplatformVersion = "1.10.1" constraintlayoutVersion = "2.2.1" coreKtxVersion = "1.17.0" coreTesting = "2.2.0" @@ -35,6 +40,7 @@ groundPlatformVersion = "bc2596d" gsonVersion = "2.13.2" hiltJetpackVersion = "1.3.0" hiltVersion = "2.59.2" +jvmToolchainVersion = "17" jsonVersion = "20251224" junitKtx = "1.3.0" junitVersion = "4.13.2" @@ -46,6 +52,7 @@ ktfmtVersion = "0.25.0" lifecycleVersion = "2.10.0" markdownVersion = "0.7.3" materialVersion = "1.13.0" +material3Version = "1.9.0" mockitoBom = "5.21.0" mockitoInlineVersion = "5.2.0" mockitoKotlinVersion = "6.2.3" @@ -60,6 +67,7 @@ playServicesOssLicensesVersion = "17.4.0" preferenceKtx = "1.2.1" protobufKotlinLiteVersion = "4.26.1" protobufVersion = "0.9.6" +qrKitVersion = "3.1.3" robolectricVersion = "4.16.1" roomVersion = "2.8.4" secretsGradlePluginVersion = "2.0.1" @@ -112,8 +120,6 @@ androidx-ui-tooling-preview-android = { module = "androidx.compose.ui:ui-tooling androidx-uiautomator = { module = "androidx.test.uiautomator:uiautomator", version.ref = "uiautomatorVersion" } androidx-work-testing = { module = "androidx.work:work-testing", version.ref = "workVersion" } androidx-work-runtime-ktx = { module = "androidx.work:work-runtime-ktx", version.ref = "workVersion" } -auto-value = { module = "com.google.auto.value:auto-value", version.ref = "autoValueVersion" } -auto-value-annotations = { module = "com.google.auto.value:auto-value-annotations", version.ref = "autoValueVersion" } coil-compose = { module = "io.coil-kt:coil-compose", version.ref = "coilComposeVersion" } core-testing = { module = "android.arch.core:core-testing", version.ref = "coreTestingVersion" } firebase-bom = { module = "com.google.firebase:firebase-bom", version.ref = "firebaseBomVersion" } @@ -149,7 +155,7 @@ kotlinx-coroutines-bom = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-bo kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core" } kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test" } kotlinx-serialization-bom = { module = "org.jetbrains.kotlinx:kotlinx-serialization-bom", version.ref = "kotlinxBom" } -kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json" } +kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlinxBom" } kotlinx-serialization-protobuf = { module = "org.jetbrains.kotlinx:kotlinx-serialization-protobuf" } markdown = { module = "org.jetbrains:markdown", version.ref = "markdownVersion" } material = { module = "com.google.android.material:material", version.ref = "materialVersion" } @@ -171,9 +177,20 @@ testing = { module = "com.jraska.livedata:testing", version.ref = "testingVersio timber = { module = "com.jakewharton.timber:timber", version.ref = "timberVersion" } truth = { module = "com.google.truth:truth", version.ref = "truthVersion" } turbine = { module = "app.cash.turbine:turbine", version.ref = "turbineVersion" } +#Multiplatform +androidx-lifecycle-runtime-compose = { module = "org.jetbrains.androidx.lifecycle:lifecycle-runtime-compose", version.ref = "androidXLifecycleVersion" } +compose-components-resources = { module = "org.jetbrains.compose.components:components-resources", version.ref = "composeMultiplatformVersion" } +compose-foundation = { module = "org.jetbrains.compose.foundation:foundation", version.ref = "composeMultiplatformVersion" } +compose-material3 = { module = "org.jetbrains.compose.material3:material3", version.ref = "material3Version" } +compose-material-icons-core = { module = "org.jetbrains.compose.material:material-icons-core", version.ref = "composeMultiplatformVersion" } +compose-runtime = { module = "org.jetbrains.compose.runtime:runtime", version.ref = "composeMultiplatformVersion" } +compose-ui = { module = "org.jetbrains.compose.ui:ui", version.ref = "composeMultiplatformVersion" } +compose-ui-tooling-preview = { module = "org.jetbrains.compose.ui:ui-tooling-preview", version.ref = "composeMultiplatformVersion" } +network-chaintech-qr-kit = { module = "network.chaintech:qr-kit", version.ref = "qrKitVersion" } [plugins] compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlinVersion" } +compose-multiplatform = { id = "org.jetbrains.compose", version.ref = "composeMultiplatformVersion" } kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlinVersion" } kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlinVersion" } ksp = { id = "com.google.devtools.ksp", version.ref = "kspVersion" } @@ -182,3 +199,6 @@ hilt-android = { id = "com.google.dagger.hilt.android", version.ref = "hiltVersi detekt = { id = "io.gitlab.arturbosch.detekt", version.ref = "detektVersion" } protobuf = { id = "com.google.protobuf", version.ref = "protobufVersion" } room = { id = "androidx.room", version.ref = "roomVersion" } +kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlinVersion" } +android-kotlin-multiplatform-library = { id = "com.android.kotlin.multiplatform.library", version.ref = "gradleVersion" } +android-lint = { id = "com.android.lint", version.ref = "gradleVersion" } diff --git a/settings.gradle b/settings.gradle index 608ca8879c..25c57d436a 100644 --- a/settings.gradle +++ b/settings.gradle @@ -27,3 +27,5 @@ plugins { } include ':app', ':e2eTest' +include ':core:domain' +include ':core:ui' From 6887a3d6d8736629b699c1345d0d76dfe7b77c0b Mon Sep 17 00:00:00 2001 From: andreia Date: Fri, 27 Feb 2026 18:10:50 +0100 Subject: [PATCH 2/7] add GroundQrCode.kt --- app/src/main/AndroidManifest.xml | 4 +- .../ui/components/GroundQrCode.kt | 79 +++++++++++++++++++ 2 files changed, 82 insertions(+), 1 deletion(-) create mode 100644 core/ui/src/commonMain/kotlin/org/groundplatform/ui/components/GroundQrCode.kt diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index da7a80e4c8..7c81f5496a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -17,6 +17,7 @@ --> @@ -42,7 +43,8 @@ android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme.Base" - android:usesCleartextTraffic="${usesCleartextTraffic}"> + android:usesCleartextTraffic="${usesCleartextTraffic}" + tools:replace="android:name"> Date: Fri, 27 Feb 2026 19:08:53 +0100 Subject: [PATCH 3/7] move theme to :core:ui --- app/src/main/AndroidManifest.xml | 18 +++--- .../basemapselector/BasemapSelectorScreen.kt | 2 +- .../ui/components/ConfirmationDialog.kt | 2 +- .../android/ui/components/HtmlText.kt | 2 +- .../android/ui/components/LoadingDialog.kt | 4 +- .../ui/components/MapFloatingActionButton.kt | 2 +- .../ui/components/PermissionDeniedDialog.kt | 2 +- .../android/ui/components/RecenterButton.kt | 2 +- .../DataSubmissionConfirmationScreen.kt | 2 +- .../components/InstructionsDialog.kt | 2 +- .../datacollection/components/TaskButton.kt | 2 +- .../datacollection/components/TaskFooter.kt | 2 +- .../components/TextTaskInput.kt | 2 +- .../ui/datacollection/components/UriImage.kt | 2 +- .../tasks/date/DateTaskScreen.kt | 2 +- .../multiplechoice/MultipleChoiceItemView.kt | 2 +- .../tasks/photo/PhotoTaskScreen.kt | 2 +- .../tasks/time/TimeTaskScreen.kt | 2 +- .../android/ui/home/DataSharingTermsDialog.kt | 2 +- .../android/ui/home/UserDetailsDialog.kt | 2 +- .../HomeScreenMapContainerScreen.kt | 2 +- .../ui/home/mapcontainer/jobs/ActionButton.kt | 4 +- .../home/mapcontainer/jobs/JobMapComponent.kt | 2 +- .../mapcontainer/jobs/JobSelectionModal.kt | 2 +- .../home/mapcontainer/jobs/JobSelectionRow.kt | 2 +- .../ui/home/mapcontainer/jobs/LoiJobSheet.kt | 4 +- .../ui/offlineareas/OfflineAreaListItem.kt | 2 +- .../android/ui/signin/SignInFragment.kt | 2 +- .../android/ui/signin/SignInScreen.kt | 3 +- .../android/ui/startup/StartupFragment.kt | 2 +- .../surveyselector/SurveySelectorFragment.kt | 5 +- .../components/SurveyEmptyState.kt | 2 +- .../android/ui/syncstatus/SyncListItem.kt | 2 +- .../groundplatform/android/util/ComposeExt.kt | 2 +- core/ui/build.gradle.kts | 8 ++- .../composeResources/font/manrope_bold.ttf | Bin 0 -> 96800 bytes .../composeResources/font/manrope_medium.ttf | Bin 0 -> 96904 bytes .../composeResources/font/urbanist_bold.ttf | Bin 0 -> 42636 bytes .../composeResources/font/urbanist_medium.ttf | Bin 0 -> 42752 bytes .../kotlin/org/groundplatform}/theme/Color.kt | 2 +- .../kotlin/org/groundplatform}/theme/Size.kt | 2 +- .../kotlin/org/groundplatform}/theme/Theme.kt | 4 +- .../org/groundplatform}/theme/Typography.kt | 58 ++++++++++-------- .../ui/components/GroundQrCode.kt | 3 - 44 files changed, 92 insertions(+), 79 deletions(-) create mode 100644 core/ui/src/commonMain/composeResources/font/manrope_bold.ttf create mode 100644 core/ui/src/commonMain/composeResources/font/manrope_medium.ttf create mode 100644 core/ui/src/commonMain/composeResources/font/urbanist_bold.ttf create mode 100644 core/ui/src/commonMain/composeResources/font/urbanist_medium.ttf rename {app/src/main/java/org/groundplatform/android/ui => core/ui/src/commonMain/kotlin/org/groundplatform}/theme/Color.kt (98%) rename {app/src/main/java/org/groundplatform/android/ui => core/ui/src/commonMain/kotlin/org/groundplatform}/theme/Size.kt (96%) rename {app/src/main/java/org/groundplatform/android/ui => core/ui/src/commonMain/kotlin/org/groundplatform}/theme/Theme.kt (98%) rename {app/src/main/java/org/groundplatform/android/ui => core/ui/src/commonMain/kotlin/org/groundplatform}/theme/Typography.kt (65%) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7c81f5496a..3578c938d7 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -17,8 +17,8 @@ --> + xmlns:tools="http://schemas.android.com/tools" + package="org.groundplatform.android"> @@ -44,7 +44,7 @@ android:supportsRtl="true" android:theme="@style/AppTheme.Base" android:usesCleartextTraffic="${usesCleartextTraffic}" - tools:replace="android:name"> + tools:replace="android:name,android:allowBackup"> - - - + + + + + + android:pathPrefix="/android/survey/" + android:scheme="https" /> Unit) { diff --git a/app/src/main/java/org/groundplatform/android/ui/datacollection/DataSubmissionConfirmationScreen.kt b/app/src/main/java/org/groundplatform/android/ui/datacollection/DataSubmissionConfirmationScreen.kt index f4e3701889..59860524d8 100644 --- a/app/src/main/java/org/groundplatform/android/ui/datacollection/DataSubmissionConfirmationScreen.kt +++ b/app/src/main/java/org/groundplatform/android/ui/datacollection/DataSubmissionConfirmationScreen.kt @@ -40,7 +40,7 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import org.groundplatform.android.R import org.groundplatform.android.ui.common.ExcludeFromJacocoGeneratedReport -import org.groundplatform.android.ui.theme.AppTheme +import org.groundplatform.theme.AppTheme @Composable fun DataSubmissionConfirmationScreen(onDismissed: () -> Unit) { diff --git a/app/src/main/java/org/groundplatform/android/ui/datacollection/components/InstructionsDialog.kt b/app/src/main/java/org/groundplatform/android/ui/datacollection/components/InstructionsDialog.kt index 34ada2cfa8..1ae0818fd4 100644 --- a/app/src/main/java/org/groundplatform/android/ui/datacollection/components/InstructionsDialog.kt +++ b/app/src/main/java/org/groundplatform/android/ui/datacollection/components/InstructionsDialog.kt @@ -33,7 +33,7 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import org.groundplatform.android.R import org.groundplatform.android.ui.common.ExcludeFromJacocoGeneratedReport -import org.groundplatform.android.ui.theme.AppTheme +import org.groundplatform.theme.AppTheme @Composable fun InstructionsDialog(iconId: Int, stringId: Int) { diff --git a/app/src/main/java/org/groundplatform/android/ui/datacollection/components/TaskButton.kt b/app/src/main/java/org/groundplatform/android/ui/datacollection/components/TaskButton.kt index 4442545745..2284d1c26b 100644 --- a/app/src/main/java/org/groundplatform/android/ui/datacollection/components/TaskButton.kt +++ b/app/src/main/java/org/groundplatform/android/ui/datacollection/components/TaskButton.kt @@ -33,7 +33,7 @@ import androidx.compose.ui.res.vectorResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import org.groundplatform.android.ui.common.ExcludeFromJacocoGeneratedReport -import org.groundplatform.android.ui.theme.AppTheme +import org.groundplatform.theme.AppTheme @Composable fun TaskButton( diff --git a/app/src/main/java/org/groundplatform/android/ui/datacollection/components/TaskFooter.kt b/app/src/main/java/org/groundplatform/android/ui/datacollection/components/TaskFooter.kt index 3cef30e6f2..633c5a2f3b 100644 --- a/app/src/main/java/org/groundplatform/android/ui/datacollection/components/TaskFooter.kt +++ b/app/src/main/java/org/groundplatform/android/ui/datacollection/components/TaskFooter.kt @@ -28,7 +28,7 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import org.groundplatform.android.ui.common.ExcludeFromJacocoGeneratedReport import org.groundplatform.android.ui.datacollection.tasks.location.LocationAccuracyCard -import org.groundplatform.android.ui.theme.AppTheme +import org.groundplatform.theme.AppTheme @Composable fun TaskFooter( diff --git a/app/src/main/java/org/groundplatform/android/ui/datacollection/components/TextTaskInput.kt b/app/src/main/java/org/groundplatform/android/ui/datacollection/components/TextTaskInput.kt index 2e12b98822..47e4ec8abd 100644 --- a/app/src/main/java/org/groundplatform/android/ui/datacollection/components/TextTaskInput.kt +++ b/app/src/main/java/org/groundplatform/android/ui/datacollection/components/TextTaskInput.kt @@ -33,7 +33,7 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import org.groundplatform.android.common.Constants import org.groundplatform.android.ui.common.ExcludeFromJacocoGeneratedReport -import org.groundplatform.android.ui.theme.AppTheme +import org.groundplatform.theme.AppTheme @Composable fun TextTaskInput( diff --git a/app/src/main/java/org/groundplatform/android/ui/datacollection/components/UriImage.kt b/app/src/main/java/org/groundplatform/android/ui/datacollection/components/UriImage.kt index bedd099338..1f5df988a3 100644 --- a/app/src/main/java/org/groundplatform/android/ui/datacollection/components/UriImage.kt +++ b/app/src/main/java/org/groundplatform/android/ui/datacollection/components/UriImage.kt @@ -31,7 +31,7 @@ import coil.request.ImageRequest import coil.size.Scale import org.groundplatform.android.R import org.groundplatform.android.ui.common.ExcludeFromJacocoGeneratedReport -import org.groundplatform.android.ui.theme.AppTheme +import org.groundplatform.theme.AppTheme @VisibleForTesting const val MAX_IMAGE_SIZE = 2048 diff --git a/app/src/main/java/org/groundplatform/android/ui/datacollection/tasks/date/DateTaskScreen.kt b/app/src/main/java/org/groundplatform/android/ui/datacollection/tasks/date/DateTaskScreen.kt index 80ce47d293..f0cb4c808f 100644 --- a/app/src/main/java/org/groundplatform/android/ui/datacollection/tasks/date/DateTaskScreen.kt +++ b/app/src/main/java/org/groundplatform/android/ui/datacollection/tasks/date/DateTaskScreen.kt @@ -34,7 +34,7 @@ import androidx.compose.ui.platform.testTag import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import org.groundplatform.android.ui.common.ExcludeFromJacocoGeneratedReport -import org.groundplatform.android.ui.theme.AppTheme +import org.groundplatform.theme.AppTheme const val DATE_TEXT_TEST_TAG: String = "date task input test tag" diff --git a/app/src/main/java/org/groundplatform/android/ui/datacollection/tasks/multiplechoice/MultipleChoiceItemView.kt b/app/src/main/java/org/groundplatform/android/ui/datacollection/tasks/multiplechoice/MultipleChoiceItemView.kt index 9479b60fc2..ab3371dd57 100644 --- a/app/src/main/java/org/groundplatform/android/ui/datacollection/tasks/multiplechoice/MultipleChoiceItemView.kt +++ b/app/src/main/java/org/groundplatform/android/ui/datacollection/tasks/multiplechoice/MultipleChoiceItemView.kt @@ -47,7 +47,7 @@ import org.groundplatform.android.common.Constants import org.groundplatform.android.model.task.MultipleChoice import org.groundplatform.android.model.task.Option import org.groundplatform.android.ui.common.ExcludeFromJacocoGeneratedReport -import org.groundplatform.android.ui.theme.AppTheme +import org.groundplatform.theme.AppTheme const val MULTIPLE_CHOICE_ITEM_TEST_TAG = "multiple choice item test tag" const val OTHER_INPUT_TEXT_TEST_TAG = "other input test tag" diff --git a/app/src/main/java/org/groundplatform/android/ui/datacollection/tasks/photo/PhotoTaskScreen.kt b/app/src/main/java/org/groundplatform/android/ui/datacollection/tasks/photo/PhotoTaskScreen.kt index 263aee3c9d..09dab11bbc 100644 --- a/app/src/main/java/org/groundplatform/android/ui/datacollection/tasks/photo/PhotoTaskScreen.kt +++ b/app/src/main/java/org/groundplatform/android/ui/datacollection/tasks/photo/PhotoTaskScreen.kt @@ -36,7 +36,7 @@ import androidx.core.net.toUri import org.groundplatform.android.R import org.groundplatform.android.ui.common.ExcludeFromJacocoGeneratedReport import org.groundplatform.android.ui.datacollection.components.UriImage -import org.groundplatform.android.ui.theme.AppTheme +import org.groundplatform.theme.AppTheme @Composable fun PhotoTaskScreen(uri: Uri, onTakePhoto: () -> Unit, modifier: Modifier = Modifier) { diff --git a/app/src/main/java/org/groundplatform/android/ui/datacollection/tasks/time/TimeTaskScreen.kt b/app/src/main/java/org/groundplatform/android/ui/datacollection/tasks/time/TimeTaskScreen.kt index 896a799fc0..b37a767ca4 100644 --- a/app/src/main/java/org/groundplatform/android/ui/datacollection/tasks/time/TimeTaskScreen.kt +++ b/app/src/main/java/org/groundplatform/android/ui/datacollection/tasks/time/TimeTaskScreen.kt @@ -34,7 +34,7 @@ import androidx.compose.ui.platform.testTag import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import org.groundplatform.android.ui.common.ExcludeFromJacocoGeneratedReport -import org.groundplatform.android.ui.theme.AppTheme +import org.groundplatform.theme.AppTheme const val TIME_TEXT_TEST_TAG: String = "time task input test tag" diff --git a/app/src/main/java/org/groundplatform/android/ui/home/DataSharingTermsDialog.kt b/app/src/main/java/org/groundplatform/android/ui/home/DataSharingTermsDialog.kt index bf88d0e6de..b3112d409d 100644 --- a/app/src/main/java/org/groundplatform/android/ui/home/DataSharingTermsDialog.kt +++ b/app/src/main/java/org/groundplatform/android/ui/home/DataSharingTermsDialog.kt @@ -32,7 +32,7 @@ import org.groundplatform.android.R import org.groundplatform.android.proto.Survey import org.groundplatform.android.ui.common.ExcludeFromJacocoGeneratedReport import org.groundplatform.android.ui.components.HtmlText -import org.groundplatform.android.ui.theme.AppTheme +import org.groundplatform.theme.AppTheme import org.intellij.markdown.flavours.commonmark.CommonMarkFlavourDescriptor import org.intellij.markdown.html.HtmlGenerator import org.intellij.markdown.parser.MarkdownParser diff --git a/app/src/main/java/org/groundplatform/android/ui/home/UserDetailsDialog.kt b/app/src/main/java/org/groundplatform/android/ui/home/UserDetailsDialog.kt index 29a5a9769c..bc358ffb11 100644 --- a/app/src/main/java/org/groundplatform/android/ui/home/UserDetailsDialog.kt +++ b/app/src/main/java/org/groundplatform/android/ui/home/UserDetailsDialog.kt @@ -25,7 +25,7 @@ import androidx.compose.ui.tooling.preview.Preview import org.groundplatform.android.R import org.groundplatform.android.model.User import org.groundplatform.android.ui.common.ExcludeFromJacocoGeneratedReport -import org.groundplatform.android.ui.theme.AppTheme +import org.groundplatform.theme.AppTheme @Composable fun UserDetailsDialog(user: User, signOutCallback: () -> Unit, dismissCallback: () -> Unit) { diff --git a/app/src/main/java/org/groundplatform/android/ui/home/mapcontainer/HomeScreenMapContainerScreen.kt b/app/src/main/java/org/groundplatform/android/ui/home/mapcontainer/HomeScreenMapContainerScreen.kt index 25dc2464ab..ac9246bfe3 100644 --- a/app/src/main/java/org/groundplatform/android/ui/home/mapcontainer/HomeScreenMapContainerScreen.kt +++ b/app/src/main/java/org/groundplatform/android/ui/home/mapcontainer/HomeScreenMapContainerScreen.kt @@ -41,7 +41,7 @@ import org.groundplatform.android.ui.home.mapcontainer.jobs.AdHocDataCollectionB import org.groundplatform.android.ui.home.mapcontainer.jobs.JobMapComponent import org.groundplatform.android.ui.home.mapcontainer.jobs.JobMapComponentAction import org.groundplatform.android.ui.home.mapcontainer.jobs.JobMapComponentState -import org.groundplatform.android.ui.theme.AppTheme +import org.groundplatform.theme.AppTheme @Composable fun HomeScreenMapContainerScreen( diff --git a/app/src/main/java/org/groundplatform/android/ui/home/mapcontainer/jobs/ActionButton.kt b/app/src/main/java/org/groundplatform/android/ui/home/mapcontainer/jobs/ActionButton.kt index ca5dc35137..bb5f951803 100644 --- a/app/src/main/java/org/groundplatform/android/ui/home/mapcontainer/jobs/ActionButton.kt +++ b/app/src/main/java/org/groundplatform/android/ui/home/mapcontainer/jobs/ActionButton.kt @@ -33,8 +33,8 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import org.groundplatform.android.R import org.groundplatform.android.ui.common.ExcludeFromJacocoGeneratedReport -import org.groundplatform.android.ui.theme.AppTheme -import org.groundplatform.android.ui.theme.sizes +import org.groundplatform.theme.AppTheme +import org.groundplatform.theme.sizes @Composable fun ActionButton( diff --git a/app/src/main/java/org/groundplatform/android/ui/home/mapcontainer/jobs/JobMapComponent.kt b/app/src/main/java/org/groundplatform/android/ui/home/mapcontainer/jobs/JobMapComponent.kt index 23cc046515..481dac266d 100644 --- a/app/src/main/java/org/groundplatform/android/ui/home/mapcontainer/jobs/JobMapComponent.kt +++ b/app/src/main/java/org/groundplatform/android/ui/home/mapcontainer/jobs/JobMapComponent.kt @@ -42,7 +42,7 @@ import org.groundplatform.android.model.job.Style import org.groundplatform.android.ui.home.mapcontainer.jobs.JobMapComponentAction.OnAddDataClicked import org.groundplatform.android.ui.home.mapcontainer.jobs.JobMapComponentAction.OnDeleteSiteClicked import org.groundplatform.android.ui.home.mapcontainer.jobs.JobMapComponentAction.OnJobSelected -import org.groundplatform.android.ui.theme.AppTheme +import org.groundplatform.theme.AppTheme @Composable fun JobMapComponent(state: JobMapComponentState, onAction: (JobMapComponentAction) -> Unit) { diff --git a/app/src/main/java/org/groundplatform/android/ui/home/mapcontainer/jobs/JobSelectionModal.kt b/app/src/main/java/org/groundplatform/android/ui/home/mapcontainer/jobs/JobSelectionModal.kt index e117907bc8..90c44cf9e4 100644 --- a/app/src/main/java/org/groundplatform/android/ui/home/mapcontainer/jobs/JobSelectionModal.kt +++ b/app/src/main/java/org/groundplatform/android/ui/home/mapcontainer/jobs/JobSelectionModal.kt @@ -43,7 +43,7 @@ import org.groundplatform.android.R import org.groundplatform.android.model.job.Job import org.groundplatform.android.model.job.Style import org.groundplatform.android.ui.common.ExcludeFromJacocoGeneratedReport -import org.groundplatform.android.ui.theme.AppTheme +import org.groundplatform.theme.AppTheme @Composable fun JobSelectionModal(jobs: List, onJobClicked: (job: Job) -> Unit, onDismiss: () -> Unit) { diff --git a/app/src/main/java/org/groundplatform/android/ui/home/mapcontainer/jobs/JobSelectionRow.kt b/app/src/main/java/org/groundplatform/android/ui/home/mapcontainer/jobs/JobSelectionRow.kt index 86f3acb40f..66b5b75da2 100644 --- a/app/src/main/java/org/groundplatform/android/ui/home/mapcontainer/jobs/JobSelectionRow.kt +++ b/app/src/main/java/org/groundplatform/android/ui/home/mapcontainer/jobs/JobSelectionRow.kt @@ -43,7 +43,7 @@ import org.groundplatform.android.model.job.Job import org.groundplatform.android.model.job.Style import org.groundplatform.android.model.job.getDefaultColor import org.groundplatform.android.ui.common.ExcludeFromJacocoGeneratedReport -import org.groundplatform.android.ui.theme.AppTheme +import org.groundplatform.theme.AppTheme @Composable fun JobSelectionRow(job: Job, onClick: () -> Unit) { diff --git a/app/src/main/java/org/groundplatform/android/ui/home/mapcontainer/jobs/LoiJobSheet.kt b/app/src/main/java/org/groundplatform/android/ui/home/mapcontainer/jobs/LoiJobSheet.kt index 8a27329a5e..8bbe764e7c 100644 --- a/app/src/main/java/org/groundplatform/android/ui/home/mapcontainer/jobs/LoiJobSheet.kt +++ b/app/src/main/java/org/groundplatform/android/ui/home/mapcontainer/jobs/LoiJobSheet.kt @@ -50,7 +50,6 @@ import kotlinx.coroutines.launch import org.groundplatform.android.R import org.groundplatform.android.model.AuditInfo import org.groundplatform.android.model.User -import org.groundplatform.android.model.geometry.Coordinates import org.groundplatform.android.model.geometry.Point import org.groundplatform.android.model.job.Job import org.groundplatform.android.model.job.Style @@ -60,7 +59,8 @@ import org.groundplatform.android.model.task.Task import org.groundplatform.android.ui.common.ExcludeFromJacocoGeneratedReport import org.groundplatform.android.ui.common.LocationOfInterestHelper import org.groundplatform.android.ui.components.ConfirmationDialog -import org.groundplatform.android.ui.theme.AppTheme +import org.groundplatform.domain.model.geometry.Coordinates +import org.groundplatform.theme.AppTheme @OptIn(ExperimentalMaterial3Api::class) @Composable diff --git a/app/src/main/java/org/groundplatform/android/ui/offlineareas/OfflineAreaListItem.kt b/app/src/main/java/org/groundplatform/android/ui/offlineareas/OfflineAreaListItem.kt index bfdfde0039..fb5d568aa0 100644 --- a/app/src/main/java/org/groundplatform/android/ui/offlineareas/OfflineAreaListItem.kt +++ b/app/src/main/java/org/groundplatform/android/ui/offlineareas/OfflineAreaListItem.kt @@ -35,7 +35,7 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import org.groundplatform.android.R import org.groundplatform.android.ui.common.ExcludeFromJacocoGeneratedReport -import org.groundplatform.android.ui.theme.AppTheme +import org.groundplatform.theme.AppTheme @Composable fun OfflineAreaListItem( diff --git a/app/src/main/java/org/groundplatform/android/ui/signin/SignInFragment.kt b/app/src/main/java/org/groundplatform/android/ui/signin/SignInFragment.kt index 4632e3c6d8..ca264b0074 100644 --- a/app/src/main/java/org/groundplatform/android/ui/signin/SignInFragment.kt +++ b/app/src/main/java/org/groundplatform/android/ui/signin/SignInFragment.kt @@ -24,7 +24,7 @@ import androidx.compose.ui.platform.ViewCompositionStrategy import dagger.hilt.android.AndroidEntryPoint import org.groundplatform.android.ui.common.AbstractFragment import org.groundplatform.android.ui.common.BackPressListener -import org.groundplatform.android.ui.theme.AppTheme +import org.groundplatform.theme.AppTheme @AndroidEntryPoint class SignInFragment : AbstractFragment(), BackPressListener { diff --git a/app/src/main/java/org/groundplatform/android/ui/signin/SignInScreen.kt b/app/src/main/java/org/groundplatform/android/ui/signin/SignInScreen.kt index 02822bb338..1d67042d59 100644 --- a/app/src/main/java/org/groundplatform/android/ui/signin/SignInScreen.kt +++ b/app/src/main/java/org/groundplatform/android/ui/signin/SignInScreen.kt @@ -58,13 +58,12 @@ import com.google.firebase.firestore.FirebaseFirestoreException import com.google.firebase.firestore.FirebaseFirestoreException.Code import org.groundplatform.android.BuildConfig import org.groundplatform.android.R -import org.groundplatform.android.proto.style import org.groundplatform.android.system.auth.SignInState import org.groundplatform.android.ui.common.ExcludeFromJacocoGeneratedReport import org.groundplatform.android.ui.components.LoadingDialog import org.groundplatform.android.ui.components.PermissionDeniedDialog -import org.groundplatform.android.ui.theme.AppTheme import org.groundplatform.android.util.isPermissionDeniedException +import org.groundplatform.theme.AppTheme const val BUTTON_TEST_TAG = "google_sign_in_button" diff --git a/app/src/main/java/org/groundplatform/android/ui/startup/StartupFragment.kt b/app/src/main/java/org/groundplatform/android/ui/startup/StartupFragment.kt index a8283b38ae..e4f675e715 100644 --- a/app/src/main/java/org/groundplatform/android/ui/startup/StartupFragment.kt +++ b/app/src/main/java/org/groundplatform/android/ui/startup/StartupFragment.kt @@ -25,7 +25,7 @@ import dagger.hilt.android.AndroidEntryPoint import javax.inject.Inject import org.groundplatform.android.ui.common.AbstractFragment import org.groundplatform.android.ui.common.EphemeralPopups -import org.groundplatform.android.ui.theme.AppTheme +import org.groundplatform.theme.AppTheme @AndroidEntryPoint class StartupFragment : AbstractFragment() { diff --git a/app/src/main/java/org/groundplatform/android/ui/surveyselector/SurveySelectorFragment.kt b/app/src/main/java/org/groundplatform/android/ui/surveyselector/SurveySelectorFragment.kt index 68c30cef38..625f638231 100644 --- a/app/src/main/java/org/groundplatform/android/ui/surveyselector/SurveySelectorFragment.kt +++ b/app/src/main/java/org/groundplatform/android/ui/surveyselector/SurveySelectorFragment.kt @@ -24,12 +24,13 @@ import androidx.compose.ui.platform.ViewCompositionStrategy import androidx.navigation.fragment.findNavController import dagger.hilt.android.AndroidEntryPoint import javax.inject.Inject +import kotlinx.coroutines.TimeoutCancellationException import org.groundplatform.android.R import org.groundplatform.android.ui.common.AbstractFragment import org.groundplatform.android.ui.common.BackPressListener import org.groundplatform.android.ui.common.EphemeralPopups import org.groundplatform.android.ui.home.HomeScreenFragmentDirections -import org.groundplatform.android.ui.theme.AppTheme +import org.groundplatform.theme.AppTheme /** User interface implementation of survey selector screen. */ @AndroidEntryPoint @@ -52,7 +53,7 @@ class SurveySelectorFragment : AbstractFragment(), BackPressListener { findNavController().navigate(HomeScreenFragmentDirections.showHomeScreen()) }, onError = { error -> - if (error is kotlinx.coroutines.TimeoutCancellationException) { + if (error is TimeoutCancellationException) { ephemeralPopups.ErrorPopup().show(R.string.survey_load_timeout_error) } else { ephemeralPopups.ErrorPopup().unknownError() diff --git a/app/src/main/java/org/groundplatform/android/ui/surveyselector/components/SurveyEmptyState.kt b/app/src/main/java/org/groundplatform/android/ui/surveyselector/components/SurveyEmptyState.kt index 8c11196c10..c77fa9b530 100644 --- a/app/src/main/java/org/groundplatform/android/ui/surveyselector/components/SurveyEmptyState.kt +++ b/app/src/main/java/org/groundplatform/android/ui/surveyselector/components/SurveyEmptyState.kt @@ -29,7 +29,7 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import org.groundplatform.android.R -import org.groundplatform.android.ui.theme.AppTheme +import org.groundplatform.theme.AppTheme @Composable fun SurveyEmptyState(onSignOut: () -> Unit) { diff --git a/app/src/main/java/org/groundplatform/android/ui/syncstatus/SyncListItem.kt b/app/src/main/java/org/groundplatform/android/ui/syncstatus/SyncListItem.kt index 7f5856c814..df33835ef6 100644 --- a/app/src/main/java/org/groundplatform/android/ui/syncstatus/SyncListItem.kt +++ b/app/src/main/java/org/groundplatform/android/ui/syncstatus/SyncListItem.kt @@ -42,7 +42,7 @@ import java.util.Date import org.groundplatform.android.R import org.groundplatform.android.model.mutation.Mutation import org.groundplatform.android.ui.common.ExcludeFromJacocoGeneratedReport -import org.groundplatform.android.ui.theme.AppTheme +import org.groundplatform.theme.AppTheme @Composable fun SyncListItem(modifier: Modifier, detail: SyncStatusDetail) { diff --git a/app/src/main/java/org/groundplatform/android/util/ComposeExt.kt b/app/src/main/java/org/groundplatform/android/util/ComposeExt.kt index 87b30d80b8..0009aa7da8 100644 --- a/app/src/main/java/org/groundplatform/android/util/ComposeExt.kt +++ b/app/src/main/java/org/groundplatform/android/util/ComposeExt.kt @@ -22,7 +22,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.platform.ComposeView import androidx.compose.ui.platform.ViewCompositionStrategy import androidx.fragment.app.Fragment -import org.groundplatform.android.ui.theme.AppTheme +import org.groundplatform.theme.AppTheme /** * Renders a composable function within the root view of a Fragment. diff --git a/core/ui/build.gradle.kts b/core/ui/build.gradle.kts index fe7ea08e2d..32f83e6439 100644 --- a/core/ui/build.gradle.kts +++ b/core/ui/build.gradle.kts @@ -36,7 +36,13 @@ kotlin { implementation(libs.compose.ui.tooling.preview) implementation(libs.compose.components.resources) implementation(libs.androidx.lifecycle.runtime.compose) - implementation(libs.network.chaintech.qr.kit) + implementation("network.chaintech:qr-kit:${libs.versions.qrKitVersion.get()}") { + // qr-kit's transitive dep (cmp-image-pick-n-crop) incorrectly declares + // test dependencies as runtime deps, causing version conflicts with AGP's + // consistent resolution. + exclude(group = "androidx.compose.ui", module = "ui-test-junit4") + exclude(group = "org.jetbrains.compose.ui", module = "ui-tooling") + } } } diff --git a/core/ui/src/commonMain/composeResources/font/manrope_bold.ttf b/core/ui/src/commonMain/composeResources/font/manrope_bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..98c1c3d5b6f7b5452964b591fc4a0411ac2b5722 GIT binary patch literal 96800 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 MwwU?%lX!H0184Be#{d8T literal 0 HcmV?d00001 diff --git a/core/ui/src/commonMain/composeResources/font/manrope_medium.ttf b/core/ui/src/commonMain/composeResources/font/manrope_medium.ttf new file mode 100644 index 0000000000000000000000000000000000000000..5eda9ec96e91ba8e4a418e53af4483766e245d6d GIT binary patch literal 96904 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 SXBjgX1%Nu=|CRP;E%>iO^|A-Gb?_ zROt>dHu5{hCOlA6U0&t?VES7~FGG4l4FK*3jD(-)396ah)aw1kK8Z1}I>wAU>*iFJ z-#g_Q5CXMIWgv9 zZfLA-s4;9@jr^|2Z+wwkRzIafb2;M{3+slE@o(4!W@M9@o}L^&I?9DYbqdP5e4S+O_LxEjpru`HpHnV3`!RMqrO8+HtqAy>l~XVleFKRFg%)6;R!g8qhqfA+vAn#li4|2= z&Te4&(;LexS=OA!s(O|>ueN?V8$7SMVjhc`*W56V4G<;O^5`XCF$mvT_>d8S7ab&G zF8ooR%6?*BExlYzCv0gvgJE_NP^#-~LpHIQ50KT~sC&Pd(9RluJlIcqj{OYRd>t(rC1CUGN+b&OXv| zQoTN?X%ZXD3Ry18K#LPt6!;4HM(+*dxl}73!>7O>%_qYz;*;Qy;uGN)@(J)q^6~Hs z_&E3@cnSP`J{Eo+F9v?KebiGrp2CNc1C%HpkN(C?fsZGPWvX#Ay1u$lU7RjWSD>rY zwd!uy-LHFG_mb}Kx{q{cbyxI8y@$S^K0=?NFVs)cSL^5Mm+05)-_@VgpVR+C|C_;R z@HPY*1{sDKMi}llJYl$I^fl%fw-^r@j~GuG&pSmpB|2p~6*^6Fn(ox-^or95PG_7h zIsN3+<{aQ0>74AG<2=T>)Vbbysq-f1`V=M&CfI)CeYt&3}y@Gc2mGP)FY znbc)bm)pDC-{pxeFLZgU%keIscloAEyNk1nr;ESKK$qz*jV?=EHoEL^+2wM;fF_{t6$dvT@$-DbbY1kyIoJZxw`do3v!Ec zOLHr58}C->R`0gJZI#<*w->q@yY=X1>K5KDzFS(i8Qtb}Th{H?Zacc|>h@%}m%F{w z?NqnR-G1qA=-#_~SocZYr*~h{eO>p5y6^A)Qun`i|ET-f?pL~--6P$T-E-W>xG!*D z?Y`B0r~6~>&$=IS|HWPD(WQr1kKi6LJu-R}_L$hCrpLSKGkVVJxwPkoo_F?qu;*1z=IQF$%QMI`$}`2Y!n59Uf#+(^t)BOK?(=-r z^L@`RJg<71y<{&pFCVY|UQu4zUKL*TUJJd}cy04~+Uu~_$6jA~edqP7x9sia-P=3b zd#HDw_gL>T?;7t0@4LKDcz@l?z1R3&&AoQ_y3p%iy+`(5)BDBV@Am%LC)_8~r{3p2 zpQn7T^$F`UxzDUVclJ5f=W<_HB&13+fl$FR5Qnzv6yn{nqq*qTf}&V86kBd48k) zrux2}jyru$3}n)aDq zGQDbg*Yv*WGt(v0zf9NtBtK_A7r&l}siUHlPNbg9eWhNWsE}%OYbn8s6CO=bP*W` z+XUSYnD&~UHyt#+V>)6wZMtas#q_I2w})RZzrKEcg6?$Gp6tIxquad$ z-Bnh)`E<FOpfhCbh|u4BbO@vYYHB`=~X`y<{J` zuWXY2HGh^b@8=I= zMcu`B^6mUH=z1x9BY%c3<~uO@?&eSO5ISghW+@o89x%XkxW!6-LC zD|f=m-ko_vQ|ib3Ss?V1M2zfY)(867G-&ISSS6dnA7d446H@lxb z%=WTJ*b{6YJHXyz2iYO^I@bG>>=Sm1y~zH_+StF?zo9~0=ewB&^F%M+hxg@CT;?&* zX!l@tc>p8wap(`vK<9dn^~Mb2#h!%*`w|ObZ$pcD0~++-F=k(7k?bh6rS~v;k74eK zWye`M`+^N)pR+V}7JAPK%u8ojCi{xzunW+IF0p*}4Rn&rY&83U6+_b;1FgKADXfgO zvnpu(wcNmFaVIvD8`*5$g*EW5Y!3D=_1uNc=N_z?_h9RJ2wTI0*dpGWt>eLLH4kKK zu|K$tN3h#@G`oY{%?GocJel3Ylb|m@#0Eo`oye}S#oULj{`z(%q$cC^_*$8%pjbz_K3;YKg#lC|+_%kbEzpzHk8?D@nZRP{n zMjp;K@d4~!J_I`BW6<<>L63Wo^=EIgFzDX_>@{d{r&%fc4Lh`7*)80kZRc_9P9Dp4 z@B~nID__Ic@%4Nyzn9;~=i_-jbh$(Pb^a!Qhri4J&R^qi@VB7hJ<9jwx?i-o#GG{BYH^uG>0Z|2I_9H$K#S`UU!%nhh}UUxC*YZ)#ho4E zUDzS{J`L`|BIO1x?&=Wl$^)cA4erJgq+VLQH}m0&8i(wqx)7PCFJm%vx6-+E9)b*Mf(%TK##usMSrZ0g{l6Id~AlN^rIokS4?<;c9^| z5`1n%9}U7xl!LWUt#2M?@f@VoBd;Ik<2h_PVlAMc5q0~aB;`=4sYb4Of^&Z0Ts=5g zja+`nUnBAsV_q-7^C;9zc^xrRJ1Yg0FbqK2IE0OYHmcnZ^Jb)Qeh!p%tk+6SIhzmq zs7>V<1$DsV2a0P29e#jOz3EtADBgrV@e^|K-}g}Ger-W5EugYe^kg;khZ^*Q`uux2 zwo^;3n`7&fd5AZo<CFrn6+YmSH{m)hIp&y8G1ak+Bic-T8H#wvF*E};P>yEwq?N;i1eeraqLe|ut0@c< z{}ooHe})zPugex2G$+_V95W--D&&aJTl$`EP&}DVrh<9?vLe}c&^g~eZ zA2@>!wEmaQDIa}VjC#>WhW?1ZinyaY&#H8PQ^xL{4`a?S+%uSc?4H?;X-obkorn6q1|v-#O_s7Na|Y zGBum~;4k!eqIc#r%=eEnuzEF_zQGb)#op z9QywM>TYEzhCRP`x;?Z5g!XT0`Ys` zeq=?`$1H~C5IGz!6s`e$UBFh*m@)o}dJsz2gsYO{krvOYq!oBxiJk3xY`B~R7X)|^ z3&ma|1ujLgLzDwzY$kv{H`6i*hH#5QIfPY2uYifS|&j@4K2pk_3 z$><9`@sZXj@LYe96*<)*ei*I>&&$2q{l8WUmyv55~a(;ers}4{jWW zgFVgChVUmXEf67=C|llbh!4;|&bR1%;fy>8?tb*oVd-hsO}f?6rfX$C>262b1>R5h z6gTJ;zD<|I2S`1!%1bKGEjytx+~k9kOq{^7_h93ZxsJWd^{j#$V29Ypov;tAWc%3` zSS0$x5)lk*g#}!7g>@o?UFB}P8}L{2?(8skXGdVi^k7GMPwt6bei(LvzrtG7i}&U} zybp_jwZ)eWfc4=RtPk(Q7U#!qaDR3jwwORzH3nk87s-QR;}|3?OyRIBRq!>hjpk1mf}2|GL7H`>=bOqg*cBY;-ks#gma=|SgJ~( zwWY9sVBh-+AI~T7i8!?yiu0?>d^IoK@CsfDD^3-sy})ePcBiv! zJ_EYB!Wk?&HM|x!xo`PQJ_{OW1FwTsWHy^ewmev18es8j#C{?lR;qct36`??Yy@n6 zt=M6FikW`__5dxg*)4)SXfa;`>-I7>lI()45Vp8m*eF=^R>Ll`79*EzBOBOg*hMzN z(zc0jhV+eL3m{XA_*Phiw!vn&5O&2o*@Lj8J&j$^56~q`V7zAsbpo=^`AH_jN`;eX*tfdD zI%R@YPzU>904!o}v9+-B8DJ|N2Fu5%u=PC)ecc5Xz*1HQdt(}V8#cZJu>U;|Tj(Cx z0}rv+a8|8{Eg}#$vvq6@tfw2;Ms^D5QcoVkBS8+1>8C%V^!+!ZAM)8Z#t~bMi z*^k``tK99dZqP&9kT1RkwD@teVqQURhaP-(<+DET>YUmZ(faw!>p)LYHh?Mm0yqU}Lsc zPqw`t(3fc#E=sx#w^yT*5EIj7cqc3|Q7*Y1vqfje#7TMiYKhDowXztkahd7HJgw3^ zwNgV~Q*B*UwM%|SEK$+fgH;r<35J65%I2nOLxHV9QPHs(D&knto6*^^S_N@YDm*U6 zP^gwFbSM=UucgLmp~j1>X!SWuturPjU472X>^iEZxqe1@WAp5~^5!PvD3y4_7!~&z z2i)-qhGGGADelyim}r4EIy*sQVN$kXtV2l^92FC-)tZoLD6t7lRCHD>5rZ&M3zM`^ zbOGR6qq5_=mUJMtMC<7iwWswZjkWbN3?-t!4dYc>$J=Rj9$!^k-B>-ZcAjDUjK=c$ z)h-k5iE4l3#2F@vBtbz;tk#~K!G=i!U6)Cn#3L!jP;P4qWJ_y8rd8I(7(f#=F-ea$ zmTN?p+hr26Ai5wrJ1X9#(oR#CN?UD)DqDXdSC*mL;W0C@OSLVd+K!AQW3^UKwY?tD zmt~kCO1jK&sAfi|(lOC4HTGl`V~k(|TB6BcjMk#e45@aeu~w_BR+IT!!2_)m6J2I@ z#D?~2ERIby)TxqIXKN5-U(6Wj6w#XqwYuUoDUORZ)T^cH9ZJP%BgHlbtm33GF-xs8 zCPo`snOR-ubP%UGY9kD|EHOmzY@IZ6^5zeT0B#ZIep zi%s@hRM}r(PgFUa6K`1HDEpd7<|G*w3Upl-b`p~$wTZDAg4UR*!9p|;3N|4W9gk4t zLnzvcP>2#j(KdvlYY>V)Kqz`NCMr?ji;99U)BF&XA@Cv8@Fi;a5;c5@8oopgU!sOD zG07RLOm!_Tyw$ii)ihRX@p&%OYv)_zuJf>f)vKB2QGGE{QCfZJTDzh&x}wy1DJoqI z?wF|9cwKgL;~b~z*$qt#=2bUo)W#dj8yn}eG&cxr(MgG2#B(Fjp@9ZF3sBXZ7O|>9 zmXcIRUG;Qpo&*(AF{i0UjWst^iQG9kIqK{Z8>I?QY*eDNU|{8(*%i)$XA~3U#A-yx zYK@AGQUxqFN_1LOY*f0lkR68-ajsx^MRnbr7CSIT%O0Z+uGkp0>X?j724xc(O91r7 z&Ufl$q=-9pv#J~GS{+vCK?|eX7IfE+LiN5M;nBOjXnY8#g*DKU3^J$;ZX2O3aknTyjj$GmvH+Loaa!s{Ii!{PQuz7g^YQv>_@~I1x(WCvdYtzB?lzef zH_;akJal`I?i%V)Zm04AVqCqKW(0)>1@2eCtalEHYH|C`@U3A7lMJuplxwhIjbZu! z>=vR1a!s16M`(354)F@at!|28oZ-K5MJS7#3V-ObkY;tM*y%IFU<1Ox?6BiAki&gQ zn+ry~v-1PY(c#{M;g4KTgPY+mJK&+bP6#E{>9Nz*U+d(s^VM73w+?ZFU4;8mbEh5R zC-lek|5x`8@V$N$_cCAy{>1G^dS|y=|B(KFbvuEN+;+`vL1=Xw9OA1Gx4JF*rTYKI z!2+Rg`~z19xYbS9m*JLTnSQJmQrzmSY1YsRFGP8(n}m30mkXGq%fRy=xh?t>wCk@s z+ym1`X^z@3y^{;av(*JT#0h4C>!rCK4sn9H>J9&A$6$xMaT8|-?1w*bSCHPx3Hd_b z=)MMGF291iCY=8!;%E)#%CRC|BH}qBev#&LDN*c>H_}YXMIP}k0GEOU%6Q z_&?D+FM&g-Wur*#Nj~=zXOC;3vj@T+lap2Ma=kfXw{QGKdK0*~N}QnEAA zqodnTTmrw~uMz%T!aqsAyi3Hdig-F~WL(-UAo~Qi`63QE1N@qRye8t4$(KDuT=a>q zKgIPksYS3wQ~rBJp2tMoQ~3Gh^Mk_QApGtEzKMKTDJk`$h%Xdyfm7NlAcLuPT3Ug5 zgn$euUtb|0pTVaaPIN<>VO4tp;Y--FKaah;!am2sHWU^g+>eJfONShgP*^P(>>+fk zi%XaV;8zPjSNLx5$=2}+Y!eU>g29@=4ZmWA;)b1A`-W)i&=fK=QeBRKq~UINGQM&6M&hn_0Q>;l`t}lE6%qgl-2{)+b%BdSOeZV&{wn{fOGEgJ z{2kn7`78O1{4u^C$cORtCY~?L2j%DGr{u@wUGjZ!JLGL}^xY`0k(a|?C^yOV@N38c zH&LM0*WFehYLqMFDfo`VeZ+j+O)QdAaa%D4KDktR0Pc>eUq6ICa!)une4S)TYQs%; zC)r2(2{3%6Z}Gh-eJP!mPDsaa|MYd~W$A#lA2%jnmL7uJDQ%awNE@V867^do?ozfw zCUZ#BlV8!95dTeRfWHadZzTErH=IXsX{dmIE8s&(8w7;(!_6v0?DnMB%Sj<9gB{6Dd_%FZ@LLTjU&Tptn-S>H`2zAw2w9 zQM;ae{;Yt!Bp@yV@{*{lT=>o8gICm+F+!&uBXaH%{uq&Zl;FC)1d)#rgl8EiVx0b> zKZ{aJ4gVq^Z`^S9FUrIIMR^cMDdh2he?P%_mSMSokk0&z3K98#5&3@+wU-;+fUR7= z6@E3PO4Xvq*~U6x_(DLUL_gOMM2Zrnq6B=Uno9YlI!c9Hpns(4B9Dhioi55w7x5QW zh{(Uj@B?z57Hzpp#Iv+GZlp?giTG6&LM@d}k}vNvAQe7(K)xpYT_W|W@OKM5C8AV` z6YVB;3;%{1r?S#+k$OY;yG5z_!k;Ak1_6Il_zeW%KZtl5`TPfh$Q~kRIQhE%BK{<$ z%95Z>67jJrM5Nv;sJc)1_Yz$CQTX>#s{9zi11ESgyhi zusn|V&z3sND1_fyUV{IX1)4a0EZ-sJx`nh5dV0%pUX7`~mP=07wwmxhrsK!*iuUA;^9Wlmha8dixTRBBO0oQ4IggfXhdXciRm9#C zn4Z#TJT1~iEta*GlaB4Q9I*Uq$8L-1ZS{zjSblOWW6R|j>1FwSPdKEjZMTpX#{L+W zmg|J&1Bar25Jj7IqRj^_M=Z~Q)9)$&wB%ZDvpjA|x8zyOmZvRKEnkDDPg$Tz5p8Jq zFP2voo+X#pQNAdiJyte#CB`v2R)7vf3buAC0wQB|JS<8cX{@HQ{{wBDs zmfJ1QAxyQ@iu8Hp|KUecd!5or79b&zaA4bMIY!#5wJ+@D@urId&2~8Q3K_7xV<9aZ zAIpark<|CpdNE!oZtYW@FtXU{kP+`p{dhS_=sG)MR4|gf&W>{QV}}Pi27;N zX_6yS>Dl(t`tdya<_z^4eEOcS+(B6&*GF(0Qhdl=@Lu6N+1EFju7`Tw_^cc?{ur%vZEGWOzS@S>WLB6#ZClS%;ZQNEbl?7o$Oq z+kML^&?(xa!YnV^)9f*tDgNrm-YbqJ{=EOy+&7!mE#KNP5q2>WDeN%AsQrlb`a9<9 z*dlvbd(1vk1y6U8Z~t_B5^yJb>R*asjn+P7iRkpPwedf^OK17fvKM29W?7oOPFPl3 zo)m3AVVxsYq|{PXH_&E50k*Czjul%jTDgcmx+>aD@=Ol0t$j$h5W0+IH>~hFyN+Uc zQsfBL@{u)&M#oXhXBgAJs`Cn{RP~*wESI%>wg7GEFt^zf{@2Lg{$fGB43)}E^6-EW78m@0+YxTDg)Q;PbCxdfk&;r1X8!#$Um34qT`HMqI2u0c0X z`%|b`*(@*oX+C85eGlBcl!bN~_&_FK>D;GkilhJMIiT%5j~RA0Fn)p+@fgB)Z5SkL zOqCr=h2<%v|H(Q7J$yHEdBMGd@p8iQrn**IKCX6aUTV|7$h=HyEu{{1Il$EL+ORjy$z$ zct{^=%Y%qEhtv9)tx5SjEw2@qgI?)a@_&tMW8ecSZ(pITBg}EW($WCRjomVF`H&7XDZGF!lmZ$2UdX zJspaBr#ZNfT8H34#9^?oMqtF zpf_wUBM>jZJ8L~*j~R#fc)T$s<4qy5L(afg#%cd7#Bo0rqp%5gN4w$;r1co58*sDH z4eyU{!R^MaYzM~j-*At!2i_mw3+nda>xUb|`w@Q~_75M`3FLATchkb=_H=L1>h36_xnT&W79rqG&Q(0nt zU;=|h6z`?$0MTv(al_6;uGR?`CJx&o4NDwwrdM- zVg7g%e<}0CP22UjvwADP6+ZaKOvFFdmG}qRz(3#z|6nJR@b(l(o9M2CJK95B^c7s} zhW7fR-%YSj8NttRSi`IwjYqize96W}r+CC&li)7is{nURg1eI7t`E4I1Ktb=kGnhY zn0~DYzcmCtR{=k9I>dp~eFUdn1*bh7IPESt9qPboFTrUJKJUj3*QX)jT_No+fGU#r z0Kw^S!D%P(`9rjpc-%$sxCeOr8RBQ~b;7OHvxpPFdkB6z34Zqgzb`>Ngg53d z1Lrr807*!I%5NvZ@4kZHZi3&w;I}(C)PwiHEpiX=zL(&=PVnAC@SbjwComVm``+Mv z3Z#d4uM@nFp)rcP=Oh6Ggaky;NX5N$k^^rc0p2uHS(vzC?Ts7O>mVh>`~G+zeFNeo z0sVyp1PTf0DI}n)kN};KfGG4wkT|dF3f|<1ZyI>m@k_UGXcRKh7aY_lpbTe+EeC}E zg79BPpJZ4*XPIykt5RI$Rj}U6;4Uk6_jm8_@9tkE`?Y6D6WVtxuFhrG9;kA{%^0%4 z>MLNsHKO-fx8&+0pCgP|lW4bU5HUhndfg&tA`Q{O*Mv zpA~M$XGz~906zT_&(F%A$UI?aL{pqt&pA|`iV|`tF4@%)7CC)eMWwaJ!!{h zc+Hj{cr^M_^xrw)xg^mlW$m{pTmBRH1q3@?E;jf{+_K-I^2b2u65TL2;MD+sPcTw- z@%}~+fA_#5-X?#k^x&J6M*c&)NvWRnEYB#?x0;n_=ua?ghgP#8Tu|CwaO?u^mv4cD zwBpD(2Q_$L<_JL@?*1`eUYg*C8$m&Uo8;Nk zB!P@XZv$TR*>vO8S+icfvFUMcDm^pg$%-itEzHVZ_~4YPeM8QaDqs7|Jl%6<`CMW5?+=yO-BdZNcoXqKB47!n(kiUvnY)WaWcZGU6- z>^IuCo;^GDk)^r0OLvu?)wdFW63oMwJTh(CuBF52?7s^5T7j=S_1Zl5!1!2j@%K1M zbiQA|o*%bj{`_;okh}Desh{(n%6C$eS?X@DVA&&6r#-SXN4aPg{34n~U-^i>I)@pN z+6X>UThK-oew3{gd_)`N%b*E*J7mfxx2nxEqGC`ya+js+1TQ@9!lU3^LpH+sn0c-@d-~F77+~Oy<5x z6CPZWo3rSlsi`fs#eFT3Nmp~I&8P7_jGX(p)0;DIyS;hL=-gYLuC09Xmi&Vaf@@!~cSLIiO@f;${2W$2>v%Ze06&hmgalj}PHjLhsQFJpd$8db zTv6di*+1=g#9XGrFEHRydrh}XmAUj-_dqOsf$kUz@>6DW`$4l=%Az$)YHG*HXZueo z7j?S?Ju!m*<9LTmlOn`Z3DfVMgOVgj#?xt$F?cCe6whu4KAeGh1%y(|1sqoQO_aNUm^Ni z&3{38QQ!$yQly>^crGb7sNI%lkiS7lwVMB=vPtkK)N)y-(`9!dt09SAUYN-f;?b2@ zXn5Ah+f#OWrG+O>N;J0~@rjE)*uytzYNGs6+n_~97m++r`HuvB85+L^+4zp>gyx!Z ze{K|9=l)#RqP(fJWSPx)C2UyxCsO~>$^dZwQz@*yPUHSUfh|j5JBR&)%KhOwU_-AG z+`v!4uwx&Qu!s`x{XJXF(r|t2Z;P$7qx`JEg$Y@3pr?vUjN`MwrNQz0RMV+$WjKv* z4URhAr}kkkb$}W%dl{{Bso@mb2fN`s9?S6;DDyxrxAN{s@MBsfM|k(^yOqB`hCh94 z+cJ5@jdgNG+aWoljaE6#C5BUiwgQzlyfr7JHu5wE4!NS+fq^*gWN-McFxv9-N|us&28J8xPN&dsw-?eYiw0KPp&GUkTeZygMBs}ul0YBXmMxwIlSjcJ<%C{9B)zzI96J9_9Q&Cwwcwn z&6-Ya6tjd{&k^ib?D$CMRm%xDID%Qzrt=;UT8&yx;JpbQ$Jl2M_(&I4@x70mhho;j zFOu2n6SIYiPo16dR<`91%<>oUPG<;iUa;(tM4NW!<(=ql)Ho3s5F8?NtFq^%7mNuG z;a*<+(8ptDt|XphE=exOa@;}LE2ztnD4Nygw*Bhb)z)s3A(j4@Y2-^dIYY zz|u5`c#aK)gH|s_pTX$e9}0a)qBrd`p!{k>P#?N;%zJYjhhf%```aUv8wM@g+v4Z% zFc!n_PR*J7E_d2)ACAo@C*EHg=(lWNYh3Fv8j0%2#E8^dIURjQb{5jFtUDg88G-J2 zwC;CWrQVG%)@3g$;-i#rl!Nzj=eTik_*4Fk-g~WS+Wk$Y_E)8W_AZ3<5I?4id9OyB z_qvHu(HVY@J*L8y;X2R)X`}p@_ps69tjcm(w**>Uv?^&KiDJ_uwqYTW*doxD2x4bM zZv`6+o;?vKecxb^8k#$m-|Vcw|+11}SB__CrAOGj?} zVat{ueDcmmQj!yP>=|Gy}G=qPWbgeqFt4_AOcV+Dw|q z1Wlr4by~~RJ$h&OIUX)rR;4sk8_+V!Z{VL!x*3+^Ff`DtQH6f6=QiSv?G~X!Rbi%g zgdb&3+g76m;333zo_ky>_JrEDH9_0>&~8d&WMD{Ksw}p!0q89E*1`?X&zSyPL&D6$ z>|1J6$E}s`$1EgC;I6cO6u=B(riy zP5ei}6Gr4u2%Zu$wRCJ+_W@z9Lu=C7(nu2r=XZi4BP=P{??C;G*X>lsnw7E8*MD2A zTO~9FkxTSqljy~Butce|doz_rZxI~5cb%4_9H$&|cNX=m6n-4Ps9?)4Rx1?`Zs6GALZ>A-bXtN7{oy^a zT8VmYl8*ZRWBM_+%${zf)vzP}3-~n=vH+20fj+dg?3+_B^ApFJA$k8=(7Q z{=%O$QqjR6ekXpuK~k{k{Ou9lbLM}x zDLa*aocR>GT&DagIp}jmZBKzNQC76`R#hJG3k<}^&hX>XNIP8cSIvI}ztnNF{KrIp zaagUHeimqh4nL1tq5Y*uOflexKky?Oe4v8&#*~kgyObTce*U83#lLOOZBOGrDcz}c zz@Vc$woby5iSY*%@(J#z^fN2{xF5$|);3G~dZ|U`iZdt|`9+JiY7(yQYC6M@<7|c~ z7jV%cHUAOIn<^Xa9D+(#AyO?m}ZQF zXcy_-@!TJ(2JC=Ea$wsRy1KS64p!fDn@0o|o~E0lEP@u1t5+6mV= z{Q8V2)d_x_&j4Cudn*W`jlp&`AM z<56kDq?!CX*Woi#QfB1%lx!|3-aI~bY;?%6(2&xx2}J`c_nvJ{ni!v&ki2?N{Is;e zZYf?72@!%LSY}Nu=?CQ#DFkoIeP2l!es>o%SRSKa$9w}O+Rj({rc81C0Wb# zXWKVtm9%{TaV>(-t{w%^B|2yoL4BZu?n%)KT`E>+NUi)j`W)82bgeV3L&r#49(B|} zagi>b&HixFh6`&8*FQgF(TCY*1E5(E)x=vp=RN%|s9Ar2No2j%xDKA@^~*LutcaY0G^yfV62E ziDl?p+nf;pCv!rb*&Ma4Z1$n8W5#SfG`nnDlycr-O3-{Pu7$tQtbBRvrFDh3 zzEBfcZ1NmBW%XofH+O%#maqJJ+wl3>InBd!=jY_i*BM&)lk;yxt-H9P=7n1e{raXZ zt;;a)QZ6cY9KO%I!92VB=iq@O@$w2lWcQo zBxIpCPBpdBXCH0eUUbA^unsLLN)v_Vx7MY)xA%8Tt4K|&rGcb0@$X!Q*QBIOAMUg1 zr>(Og6Esu?PmIU^S)suqHQGi8aVk8oocj|uN~m$aK5VXy94|Z57T*6*=_b?&isd>VVx9e)(yffrn&(SlJl4p&J9<*s{-NDVHM{hn@H+9n>AovY5(oLoL+NO_VOKVcQSY0T^cv!vGcb<$vflFEm)AI8M`Y{IZv&q59aHe)~3 zfi;e#3}^j&2oAYHEjIX3Hb&@O*gx^PdZP4%$bVG9a;H+o>+psUtoOyxTw2X$(mtpa zsDWP-ZB|RXZ|O<$N;mVQWEq2uaIP3#c@RO6*vUkuvLST zjUI3sdzPL;A83Lt-cBvXlAsnVhH{BoL-z-Hovk*UJS*>svDAb!{;~Q>oHloe)8-!M4Uz!PV_eR_CYNXOS;ky(v$>q%TdME96x!m&hNLc79MFOE-0>2n&>UUV&KQ2G^)1yYmi6aDEF6* zV$G+`!M~JmE^fr}zz9A}*~8aA_Oc0t>+n{C$~D1(KEFgvFNolmb}; zT$K?!95N!b3COMCL98GlqE=5;V^as1XNPfTAA+rBjJBF5)CpY#YBwIq_Uyy?@5V6%aVqaC%3<+w#e|H=wYl8)FS?! zpi$5w_@}~;(%bWtU&$pJ(IzW=sg-t}D`>yT905BZS#$n$ju70{7<|RF?E^6+RA7YRQ zZ72xsa<|@K(DXapsSsLo2W`Z*tc%tCxthGD%8EWpv6~B*7Zk1- zS-7%b)N*mEKx=uB;DcFf@fgvv&TyNi*D1eEr^762$Agj20<^W~aWBcACk8jtiF4wtWuz!B$S-g*{GHoF*+W z#qyjkNSA=~1pHzsG^mh7+Q6tPARQ-&9@kD2=-!Bzw-?>6z)`}uy>a;yNUlX4F?l9uh>ZA|6l+`~=83HR>!&rIjt zLMJWFiyph9YskbUdC}tnY;7QUP^lzsgQ&c0^oKlz;f`L0qn-zot%JHJZnQXTt~!Xx z@3g>?w>3vZG~YI|>8h*Z zy5fnm3$Uf)Vo#-lI*1uxmQtQHxSXWA6|4W<&~a29AA2S-*=UwlY@@h+=OQTQ(D9=; zm(?HII(qchL-l2wqq(oxJQa*wUQn=1!MeRHt3>GdVk0HpJ!(}^(dto!t49~D8fB{y zRu55QvDl>1S|jesphEY~mWI~f)hB8y6tya@#=7>O9V=|#EWNE(rdCWN7i}y>8^s<` z-3_b4gzGec?zlP8sf|+p)*rD)#13Xl6m~RQroy5zV%f;T7VHuGYQq*=#2Z1<+^iBg z7WI%_V|5WVP^?MP50H!Qn7idzG38-FRrRC=s#27gSQZ=%g-FbE-LG{Mijg)?Nk7oo z$M5rsQF4Z$^$<61gF>UjeO-cMRiT=++_0?EssajPuosQfbzxDE%1G(vM+|hr5Mn=J zFw!~w{e@c_Odq%=j2IZ49T7V+XxhV-wR?TW$P74)NBYVJ?h-7NQU{OYWLW8HSled-Yvn(F|?+-~{OwmJ=k^u^H1 z>Ug@KU5c|GE`)@{CyHrB<6Y~>4bRuqAE@n<8js6yJ?dYYn;%$$#S@EZN$=><(fAuy zJ5;`<=D7`pH3u4_>n8iSWS7^)%zb*sM~RaY6DB4~^1C{H^yt{QlGs#nv;bb^U`TAy z2apDn9tdfqD_;0YTi!I^afkU$N!^$5WaS-d6>`htNsquiSamgQ5_VY$*e)|zs?UxeTdQH}}eu0ZDkR0clVnxS)21VT} ze3J%;W$!mT)Smks{?F9S;K$il4)6#Y_9K=`JKTU9exg=d)c{v(=Y6fU-y|LN{m1lU z_@7Jm@*{qS|AOV5ny%zg58CKD%EGRnx7KUx4Xm1O*4BM*gVL%g{(BmK|DZMXBH6-3 zTd-=L6Hp~pH`}3xOT5_La{Yt0+$Vmp<5*&Yo_rp^G$btHqvWgN%)wt6>ZJ?H-<3OX zfyRLA*gE-Ydz1uiNaQr2HgVz*XghKUl%>VLD9`-(+3BB8fA*vD%rBqGSK1dyYst0s zk~WYG!}@8ME#`tSmH+tt>zl!k^L7U~^c1e z$-!K1|3YbhPT9d-K9#TB2;$gawv%2ja*MX$3|vT4si3Vh{5bBpQyWz{wMET;#8P92 z3*M>lqr9)sL_6Yvba>dYKx-0M!2e5jD6|v}dJ?7)(HrukXb)!6bh>3M&KcxK6=(kM zw#VtZraVqED-3t&pxh9Jm|-3jElSi{BzC*MgP+6if7tWWOhWmgS%0t6l1sH}P?~+e z7wsW!5T^_V1KIpZ7D#s$&!kyV?-%JzpcXSj$9V?xqOeehxEGnz8uRjMlc0v&Iw5st zxKgCwq41H*M~qlLl3Ut(wPcKr2vA`1P&M`?db%4Fr0Qo-5__my5bNC_s|``8kzUf& zg@?Bm7H&PfaN*(2qeg8$yl~dWtlW(=Mz<6OXWw@7i$UwoE?xck%2Dg~l`i>Woz~+V z_Xp`WH_F`u6aC#edn$uh;FMTBtD_#afGR)8XMC#8c6uGCo&7@*l8rbAN`L0y1Jx;& zLx)zSn3tbiy8Oh_m`Mw7AI*P06TNlM<98T`6g4Ty zoU`cOadTg9D##f+CSvjXKCMR=51x{kIAw5NdDOwu$%6_9;cwhsjp+>sn?~>S^O|u> z#-gJOsQ=MYof~?h3*H_f>f*pOlN= zyFoj0AQ^g;MK1}BtwTHfJs`87embj=|*>Q*Tl;Sn8a?_bb z`K$K%+;V1R`mABYkUTqGdfR-K>z9AJrego95kw(05J92PMYVI1M9g~$qz&9;S7%!D z)f)dmycE($xjuUP^0N4m>kiDwYfR6WJ3Mc0TFzXbHD9gEX&ox=rzY1xfg!y7Y(H(;Z{@hhqfJ1=pvi<|#+>{l<{)80>RYp;Zq;6?#<7qlAw0x7}& zRKUAG)-xQj5z_1c;G23eqO&FZcSjz6D^4sKpP!sJ|L-lWZ_gi|QZODOlUzD@aA|T< zX%haTiv|rUijFFZiYoG%|L(%FJ<0J~i|4*vU;pyl;;r$?d&(BP+hUHNkdQDTUiGDg z1M?#z^9QQF7;9)#S25Ob4pYtzwv$64U|jBOtq}+f)cm0LR`?DZUK|q~8ylQHbJ(z%>0u*s z(tNj}Mzo4wN2?$sR=J0&g;A>wUabb0QE1?*0>J%;R1Vn|X7UXiIy7ZqKrgR=Z7szm z^SwR$^&3*rFS$I$6cS3d^cnQO>C1pMMw$ov3RWDn zop$_*vD(}OeufBRvo~%F=2fii8eTGd&-`IiqSIy$3yCx6V)_jnsME*wTV38acJ$Uo zN4um?OG>X9vTblkKxi7?bOF_{>PRJMC+<^dqwWsgOF72BP%eX`n-p)1I-;QmdfywT ziCBpR6$$E~bL??YLmUxjq!?|sI3GM|sb3$@-YsLtF6iyq$8XtWQ+PPo66V`GAfUH* zKtR8R6C(=y`lJVppEqxOK)O%g!ib3rH;4F|!oa-{?i=XU+t07J7lx2TC$~~xNLP0{ zQ=FF=DPuPxj%;NbOlof!&>cJHM~_PIbTXt?4#}uZ(FHv3;S=sD%L%@H!+OfPq+@bq z-nfCuljBpTFC3!0!^ig-=+iH}Z$$4f98O^r$tKuU52~XmJwQ7t)~;Or*rluS63XA(aSe~z{FPkZ{Z`quq&z4lCMYNx|IXTI;FZgA z^egJhm#Ea3q!>N@=U%#Xil#ynG5AL*D6w_#;WfT`6491&}C#RJY5+h9B>o}m~7!0Z0aRbNIh2~6*jvSyI=HvQA(wG|1D~x(axdJAf!TK)KN*If0IrK;y zuAV{vgU*ZjR{xrQk1m*xWn^ESivQ0=dxsJ7YM~QT`tF;gkJQq0p=Jl`52E}ywY-!r z%8$fra{|BRy#B76lpk#^Z#i%9yh-`dT6xUwhTBB>2^#*F1^&^x#R7jT(&y?QL;aJq z^n11RX$YaiTQ2hvI77kyYdpywt;vw%_v7;N;^Ol2ee&XC^Ydfl^VGas_)7d=YEVAj zBUUa-HE(X3%WrU@zbzb^{KWWQVvFYn+B%`reAZ?YcE4aBbnMflJ0bCu;I= zz(KWo#^;IbqIP+zpcFX8UIsd113QoQ!a4{s>h%^8~knn|3XZ^iBU@ zy1<;9%Xi5iw+&D-^5f%jbK~Oksie}t^I(^BA*zZ+FTtvf9`k@9=vaJiZhUNB-reu( zq`U+~ViWR|jJ5&t$7-GOS!i3nus*Z&INaEARP5~vB5s{HQo|o_tc)Iv_bELt)czzQ1Jo=^>s4kxH_SY(e)p`7G#G zYgg9{q97I;iS3??c!X)yE&-Ak)mIlf&^)&q|8inla`Ln!P;rOokK9~k+`LBJr3{Aqr_Wa*su z-#O*wIXM*-{AmOfEl1uMIa68%KDq&K2whr_kM+c9gSRo{+PdloV;ni2U z$_=p(#_!n^|6uHf%3Fm5V8nicl6`1yNyk~ZF;EWl@P~uSC|s=U5AlxW0P632w0uw6 zqlM-|WmAE<;ITA%d~Bq7B%e!!xmS#` zE!H_EodAw_}d!rN{I`qi~BvH-<5?vgysDi%OlD-_fAIa-$bgTltsLuXuAA zsm0hzwMxs|mrEz;{Bi~VQs&YLoq;cMCOpWgD|5(6C+ob#hSy5M+^zT|CCsh z+c5nKcfC9Jz$=d}_VHc(@QViub}ARH;y{dU(r*#JtP5P@6B2qPM(RRhO*(q#$5@rS zW<2KsLq-&bn`0;C#q~{DS<^7)D)-%4aNxy<7yJ4we(aS4xpyn(E7Pr1eFUl^gvJ*f zA0LT3EtWvXic(A+1`H?*HAv|nJaYi0LOGxv@5RRRV@^z9cuFhDUy^%Xrrt$0;p^YO|;Z`K5d1CrCHV zlQ2&BF6CoB;JWe&kAT5*EGY$Y7jrGrja(b{c-x@{bmDPRYjUC~;E6(s#Jt*x}W=nZG^9~*|@cU-U^2~yvz z3c`Ey^j4L2AxW6VXriUH);r!C26`b%4)5H=cHV)@ckWj{y1a7bWgfNfNgj1+Mdakw z=II!G5fh$v!0usvLfjDfk6Y4dQaVTYT?39AD%kp;ZGMyL#D>ZP92(pJ3bY^ zwVdYt_wDCVmsj5Mjq=gHX)oSBAz^Yt@W8s~X4gMAE5tuGxc%q;15202EI$3v6qH`P z=-8d3c}Z$@auR-1pdw{R1xy>l)}bG+e-OHQJj>L^AdNp7hSs$V!;dGr(`@V}(@R*1 z+zlogFE0;qM5AuSytuOH&AGjjs|v!B0=iAuRx)wx_-=toVce;0^woXejI5tLEiEuE zZg_(7>)^al_xO^ifdk#MLc)i6MEbP;y)mt9^6Y}}jA0q!Q?`yR*)}O6D>Wlj`L$hn zZ1k1A-;AtE@;19i=RYBR$zOIwT~_)7Wk0oAr5XXZQE7$grRHQ6etfI(aR6 zr6qq&9TGEv=p-w>vouQvUFY}fxVKfd)f3x} zcWLDppHtrcY3X~-uJ#+}(-ur*8T?ufMMHZg^kBlY(a?K!W>CZNFXHUm`q5Bfj}Y0U;+fAKmwG601CtHfr7FkiW(LsUc0D;TOiby zC#(v!E0x+^5!{uMkYd>%%UWjs?DzVgfoQ2^xtq!yJ=3qJ`}O-@zkcs~{d3<^*%7$Gh^5=y|?+TEmg0EtIh;jCp%Q_QYOZ9Kl^OId2mbuw_**3sM$P|eK~0! zL#4C{uh1{TyJE5Y8Z1zK9~#yo)J5{5-STaGwD|A>@8Ly@56y2n>~*-^4rg_>@NVBjk%wINU#ZgV>K9+A+Bo(puQ`s_M0y?7B*Z7L zO%x`J-E;9G(SSS>W?o*!#Qrlb)G7eL$T5oaZYNO-?}oh30TV?+CT z=eiB9^(#6v??}q%Sh2QX!@9y__IvX1@2as{+Q^B-Q0`sVbt%h%;^*ig{X zw#Jf_l-bJi?s2%L=Q77VHcH*3vG=D+%@GX-C*<`O2!QJmung7*w2!`mWMzf54|oHW z1lWKu>t?QD+xx4!yl-q6@%^;Kc6>VjjYmdMUZS*jV8Y>pueT04bt>B3QTK!V#0THF zf5_?6(eAa=DMyj_ut$oO_tET>z?rPjwBm7>m}ttvS^%>$5s%@bQ;OaA-6v0Fz5UEH zZ)fiL^xKVfdp9jgV?(s#0gh>*OH_ zXk&KZyKaPD8beW&Wp=DC%2-(k9N`+agi)>uWL-iQ;ID_zzA0}}ttCFvHmTT^UbFM) z;>Ca1=~2tqQ~=AHU0hL|9b=9b;sQ8uNlnh3Ix4HASiT{oV1-Vh;GNxNBBr zsmEKAG$!MAl^yHq;+6pV@-3t?iKH?#Xv9qz{<%PtPz&kT@Q2i=5jfzg5L<&(D(~u= z-({l=C`9)9Z7A&GGi_KPxui&uI*#flcMz&gItF?^_La(Z}k@yaK-xadz zF-nhkiTz#Wma50FUpy|wP)qF!185T1d}d?;Ka149#S@F})>Qtq-;bL|NBgOSCrw3> zR(V4+dQysaT-Vf6++*OLcffo6sut~ZyPf$}Rryde^h(_jnmtZOb+yCk36AxU{&6}y z{OU4FF7dY^jY93}Jr5+I_eSWISHdHRLl5>rSK|ickRJX(gwCGEA7V=xi`QOqu*Wo| zOuJj_V>2Au1MKrMY2S7AsCu10={#M9cAVt>YPZ9^&0;;GGw`8!X;tvTmzs82Tcp=& zMXgCx%Zr1{OtLJws7I*iY{h-DpJKzcZ!U-B&m|8-%}CN=yhVKoyj4DoIog+Kx>sus z?!aJlnY~F+1+*8UaYG+yoNCW1VP@h!9T{?cU=XpQ;QI z`v#XkHmk_Dsl%RXjg_trcCBSQ>?QUz$1rimZ{|AgcBDE+2s566Q;DQ9O?*|{NmhCh zmtx_a;FIDUTokL-AWUi05HE@MM?AG%MgMc80o(Mdqd%#JULL2)W40uhwi0&^T;S)-Dbg>D)}1eNF4be76{rP$QeG1A=I zJj?E^S~JDCT^^U3lqt6rE*Eh5ec`Oi$1L_2)q)GSQ*uMpup@9qx)qP{Ebmqobk_QmZk(ZOUT4s+IA>06R zK%ZT@Bo5J}ufJvimA%K_Q&p`%D+uYg0a>Od3uFrvkFb`L+6?VOO=IF-p6xCCQJYEE zAH0Hh;SPs%DktZFzFwFUe=bK!DElSZNy)z?Es5K7I$8ouhIx%^17ntVaX!UEo^mK| zj7S%Q5ALU}x}W*(GttVD1Lu}b+dQpybImkgO|8!pvirm|yszC{UGJ-|*<9;#yIuH# z9Ngj^)xNrVpWEZBo9=UWg$=?$sb0Bmvj^>Txg9zQEI{=6wxQqaa|NBw@xSz2{*_~j z|B*2Xr|Ntj{Qu-YYkal8V4z(;K71~x9nwnNgXuO}pN&{ojX=PDbER8I5EA@-9bz=S z4fb|l36N(EcBGUfeMYrw6$-q-Bo6omtM-a;O=VGjAxjO$Fb{9H2lrT`yW<$V3N3Gn zlZivSdjr?Ss9rSL&FWBerRr|U-goN%ZVst>g(*1*$$uka%0hgdESpC6sI4vMbxT?Lz+va04 z^vGjFJ%(+;O*~;iuorx|B1Q$SU+K|#qW0-6M}iY)Xna`xa3q5Xg1#hpPDPuq3kr(_ zQ(hCUszDvqW$1~xh_-=4@$$C84FLyX5s{}NYF2`U*seI4 z?(e|?I%EY1$8@da+S%gVl37bb7<-enehy?F<3k3!sCQ zR|GJu(Gt(jpFD8zr31&Q9 z0=yE*)EYM#u&E_!;oCZ%)D?YQ|4e z1`isUrnoz+M&*whYK_a8wjM}s79p(^56L;``9&HDdlZP_?fu0NzmE+D!V2S)QsHF( z)11r1$w%RyMfwwu>M`~>kjk2&foBKNe%EY?w+|PcUrEkCU?)w-O{9)yBkp&H_bMCcLV3J zE*tp8GrX@Or0L?{TQ@$T*|nm>2xLz zCO>K-GzagExwN?;E#qK&=A@jI^kG@~d#AJ^gK)}{31gvcmS;Y+m1vg|BkVRI--Av8YT+1}gOf8?L zX0}-_*`}tJmF=6AY1X&x+iD8${Xb{!eG6#y{r|#-unvD^oMZX32LwyOFWpM#g$Zre=*FUX)YwZ#*|4q>s%Ci`=$2 z^a5l26Xeg&%1+3>;&Z+??l-;X2q%6tBg6l!k8|-w4lBQa5p^fjH^>=<(%pL z7K|9g*qCg_a`%^&6cqc_CalBrd_0dS1HgTm{sr60($_zcAV%9#9SRY6k?zs{aU{_eMy$SOeGxTN5 z<=2|JlA1Ez>Sf5^9{Kf0xMkTP%{{nf++txJab^5#mdo^PGSkwX!$(88P^i+3vM#GE za`P}3k2ZOzG?n6`*Wdqz>yOhq#{I@*{hNg4qumdjpzEg(xz4x9=JqZg`X6wsV-i8} zA?!}#uCs`HGHG^cSp%UfZz!nb^t>~qCgUpcK(!2&qry54jxdd;53X9qw4F7FaKA~p zO2=5FlnV*Ew9{x%pCs>K>_^6o;0y~vU?Y>qjbSGlv$QDfb4ugC8X1EofX~;oO}H49 znpr%-@aZIC(1NQ!LVHl+%+K<3{5*f1zrio?xA{f>9-uORm%qo~M@~KNd=R>`XAwWg zhcM3X=l3Jt!nYtk%RfNwOZ*a^QoGu*-fRiuNhzbU!5e5SD6{|zwORr_8nji%^aTZ# z4J@OmsH%pgPp>N|Vo5XWimO?CeR=hCHlV(-u%1QMH`dfMXaPzp<-sMSbs}~av6G0Y zJrp=|;g9lo_7nRO-*@mm#U`*W{83RxVm(0}WPu!9@Is-N=*nTgiYGm9dBWLt(F&3@ zXH$@lV?p4EEABMB7;T@!Q$@N+O-p#Dcb&mA$|bZPGL!{2rDX&sZPeSOE@Tb} zXK$%Fsa_w{G>K)iF)WP@M~h=vIOGcb2KR>YG^&-4<5Li4^2vxZ_$0(*`9#EHcrN16 zJO}Y8J^}GaJ|1y8&qh3gX92&`KH`*y$MGQ)040iZz;EgojCryMHiV5}6IltXWp}W9 z*n?~@MvfQR>+C~zg}ZQXp3U?5Cccv&@5rCa-^tfCPMXddqo%KBfF? zyYcM`+AVH(f4g1n9&dNF-RX80+g)n+FBk68!KJH9pi6|y43}9hcet!`+2&$$IpXrN z%iAuWxqR#LTYKKVeS7crceKB!{j2TY>cBg6=+L!8&ko@o26t%a@Ir@k9o~2C=-SOS z*fq*E(RGaLMAs768rONQ%U##IKG)H?W9N>>j(t1Eb{yWZtYbsR#T{37+|u!pj)yuP z?RdK5`yIdT_=}s~&Bv{`+hn&=w}ozZyX|s&-0gX{Q*Lj&ed_j&+i&h+?t|S^-Lu^1 zxG!^G@4n4_kNcDEC)|H_H+O2+$*WUPr-)9&I*sa-(`kCA+D^}Pdc`ByBj00-$D1DC zdtC3V>Fm~dV&~${HJ#^mzN_1_6F=jr9??-}Yj$TQ!w(sQ=wot|qwAMo7k zdBpRy=X;)CdVcTO?4|ee@G^My@{04C^^v>~~=3VN&#``tz54z~PjP6p=WqX$ox_sMpc-MJd4|F}&^{S7r&p@AI zpZk3F_rvHXV~;0#yx8Nj9ybkx408-?4UZUJGBo?P_wD8z;v4Qe#5dhH$9IA6PT$XsJ&a+- zVa7CLwlUvWX`E|ZVZ7J4!}yf(jPX6=m&PCc3j9v{UGdNHe=)!_z%O8Qz@&hxfF%Lj z1K#P`t!HJ=hkJe<*eS4gU~FJc;L^a&fhPjr3cMP`g1QIA1&s)r9ke27YtZH3p}~#8 zYlHU%pA3;g+JzK{Tn=gO<=(4TuVKA%dsX+ktJn5kFZcSox2AVR@AbV+y`S#=O7Ay& zU+(>{-oNze)+en`MxTj&%KB{Vv$fBzK9BWzvd_^zr~6#!^F?3Q*Qu{tUqj!ZzGM1M zK!2tYn#Q8eVg#bAMi+zoXV_wlW0dN^!q`Bzkay%B+@A;XK0KDk^E8YlC43?O1hdR# z{*Ba4>LW!-vC=W=wDhU0k)7oBa)2BnA2VnT9SnYkKtq@z){tr_GE^Cs88#a3H*7aN zY&c+e&T!mt+VHyJL&FurZ-zgOlF`}dV(e`6F&d2i#vo(3G0GTi9Ar!~))?m)?>6rD z^Y_d1+u|?zYyCU=ck=i2_whIQ_wi5j&-X70JZrXCS}?QGrvo!$d>q7f@J`%|_v9fw zln>;I82vJM8D`ec_?P^u)J5toMS||5(kbZ!naMi29q0}M-5NuCgVE5_5Ne1q#2X3? zm4?NJ4TA0+hW&~1s)x+6jNKtXqdaj~F#vfnzD zZueGn7hCD((=kdj-civ1kC7R+q@{~BoB6Q$P|FhQUF++Y3%_``HAK1lqU4K$FY>>b zq28r`0Tb?v$zP2BqU-0E@qO*{-#?%IIcBpjgc~>2~wF1XLz>36AFmSor-N|0S;FWE<_ zS?(hH$lYawY?S@wo^lN4gF$i4S8hTqsf^7C>7h z!+NEUoTprsScbi^JrYOo%_ZiCHjCbm852 zcOK4V9tn$fFGiOg=#l$iKOBb5^)%~>5yp!>2@Cc)7R+9O74sr2=vUEakF!vA4%X6Z z=)LDL_C&D@EP;K>hO&>@F!l-Tp0_bBeZ&&k=PZR?hAni3rL(VLlU!w)><5+wOLH8o z@&aaN`K*N%!{RUJI#$7**bJ^`RlFUm;T_matX-~}Vw`>-Y4$QJP)Y%w>m zJGd`%W{)y=c98XBXIV1r-dgU;W@Gg>mEB(Aa~gW3CRB)i5&vu|Mq{)>%e-@zXIHyh7>W_1`h znz$ER%lom_yf<6J`?3f5VAza%V5#qh9rrK`WG}H^u)qD;3$WroV0r8&R%qARo!pOY z;{DluJc@1RF`#Z0U(Q$XyZK%GLB5^O!u{R+6@G%B#C+XGiZKN)37ZyU#e-D_17F!(;A07TIQp zdYF>#hA}~`!T=9MilGP1WL4-x)zGavj0lt}XZ0B2>`(e(46MYHB3ALYxsq8E%GDv~ zaA2)u#ebXoKgpAY5w{BT{3m%wBX2SCHloDewPli#z8C}5-UzTt0k*<1ae z<Sn1!!M6Bt~=AKeyuVct`DTU^UQ*K^UdO za4mw2%K>RXIuxNCb%jFWb>LPQ#;O#|mI^KP80S;)q#AjR7_n!v=}656b#V*uAkYP1sS%O?fvoP|H!u?p(OnDtK6Ay|6lrZ$gvkAD?3EHT3BSzLx z5sVI$wXWAnO#zz)`lw9>=ns{^V+6(Jf(|2KRBr-iAWAoYCq|(m|2>D=@^v<9nGGt7 z1Sd;iVU&Rn%KfbxZKsx6H`B(GdZZiCa^ePYb|!H46F5l*)HkVb6NgHXgZh4nfD`|W zct-u7WI}u-DNje5w6z{JlmkM2%m}{BK|C7e6)9QA43gFy`_t^fvzf&vhH4~jRppsgy^n4?1 zz;J{JP)<5cTy0yQ5w>9+O3uL3B5=S6{b}{UQ~)2C`TiBX_ax9kdwkE zdJ=X^O}#J)Tw}%B5|;6Q4Z0$hK|xc&nkZ;j0@v-rP&_+?y6B3aiT&?_{32_@k|N`; zg622iQv>GOO|T<2(UrerIgfAw;VUJ;!g)soZ`^N2T8rz0@*oyML6ZtRYLNe6O>Ki- z!ji=fkh-v2TI(~EI{6Wp-h{g1+V|-Fpv$< zow+q=N3b}}JAWUv?V%HG0&KOo|7*})W(EqH<7h8}e3Ql9F5p?52D&Y-l+OF_g0!DS zY92wE+l4sPtp@DA)F3n|!E%sqwmgAwN(uDL@+WkQ@?fXN@-@Om{;K7WHON1p4QjCC z5%>n-zDDGA)_dD)KIr`~gZ@F3IfnKqAx`>;H93SqSPMt~RnR0L?{h4*O&CV^ zn$F<;{~AJAoNnf=K{FD#ga1Crzq5?CLFgRuCkAErvp6Xl*9_$Q60q?|=dl#cV8}fh zV*%msg*+=*8h@PSOGgkQSsL^rUpmOLrG2>$)R6 z#L~3y;+o6Sbnmci-G0acdq)&7HZ!atl(0^$l^9>lGO$j_5Z9+cUjovL5N05)M>~E- zIu~IR%aBg7NbPl8KUIQU13g>L)@VM!7*S9R;+R>E<0wi=i#Av9sW8ayMdMe1^8wO=R?f*&MI zc%gd3^AU~~^y9FR;gJgG5j+weg6U|*o4h}Ji$}9kcnf0LMLqyNk@fI#9fCFXJ$x0> zd=MXu-RBtWA$`Se!ecy?590|e7Q1PQJc%ch_k^eLRCtie;7uNZov4v~6nhVT&{e_;)Ll;`kVJ`p=xL$Jqnl~3VQ;fE`Sr)wI|hmQyA8(zqZ z;OQymv>K>_|93h|=B2RC&78sOQ^w2TxBHgQ;1w(lV|gV!CsnMT{C)7!)W9oPhZRLS zJX!U;0p7G(Y$W`GO;}^R&l>m~tO91kuQv}qqxpORJm8DiX!0GhG4R*j$;QI#w+z0M zyUf3lKg!gsP7-ncbv!x#A!f0{qTrt)Xm*YMpuhuypF{CVcVI>R&P1>ay7 zc;{(i?k^_%cry$xOG z{34U#$--_md|(~n!7{*esDTgBA6~PU*flcu3NOg}@CQDLHLnZ2gn97S#ly$< z3jBai!AJNE{H1&0Gd#gwz<#zCeu)71)mE_O@UX6AtJ$6KT3&;1<0bejk7M`rL$-`< zLQnn?z4!>M>$UK5`m+1rx!cJ0VAZjkCGd~n)7-`$U|ZnL+{`~_PV5x?rk`Rr;1c|C zU%(f48UE8N*i*mCzvkEYH~d@vFa90>p8vpqV3FAp{k&$Zf3PU zVP@&f>XHiOd2*!kJiNb4Vo`ZrQDfEg%95sbiN!M;3W|zKsvC4kMFmt!)DoVkOLn+T zjA@r_%c$fSK0u$W){|_n2lOTCQbkFZRC_fF36YWQQrlpO40lOuoh>3cvcEJUT`7^6 zqEr^CHZCziKSHf^gi@()L_>LHafwTMYb@ar$paJ=Q8Btv1x1YwCAv|z28BmN4Ob9H z32sItN2wL`4_Dy*BXwhxQezxS^^aDc_E)c}ERrIW`y{2#$jAicJ~6Sw*s{jz(t^6i zs>*`K2K`utc-=S!_c#aK(J{I#0d>i0)0D^vfi@yJMit?}WL>sHNd+7p8KKr1lc*bS zQ<(6Gq$nZ=*I4yBP`wHk0IoJFxqpZ8t%x13a(cYNY3=yB^6FCEc)@R7jzVjWomS_Z z;_{NZlKS#`T~29T!K@OOiS~yIKT`VZCW=Rbg2*VfJt+fplLWeUliH}qz(`$zttrqg zwF!wej-R+VVqQv1+`3!xz zT3NZO^W{PYDidQ}X0*nJ_NpR|iq%yrnpSCR5OiOR7+{LvCa!8-{Z%dQAEm2SN>w|Q z>aX?`TOY8hlPbg{rOwDmwPz(Jb(q;oon|VH(BU8u^~O2}+|jYRdI5E*Z_|{>2!R&5 zAEj$>C=sJ5b!3EE+d#D~F-f{co5FydqNC!f4hBi0i{RcmXsV4$j_%Odir7Y#uO4X%O*xC)L&hQ|tg;o(qb8Xv-k3w*e$ z_+nLju`0e;6<@51FIL4DJJ1=kOi4Ko#g(;hD61<`)AcUX%V$~B?dvgtRV$h5slLeY zaJ9Y!wO!#VUE#{O6rLbDcVu`}v?jT+Zl+U7RZYX3`jQ5f+Gu@2UER#tjWq&W#K72g z;=YdPP(cHn1*mxDY%!}rmj)`3%982UJTVHSaArf9l4`6e7P(VWQk2mpDqK;XsPI^4 zA;6-URfWz%W|R`-M5#nasf~&XR}?HNTre#>Dm=ki=#E2){_P>~!jj6Fv+cl0HG8De zxuPPKsw0Odihc2Ruy{t@a_&w!`z0~CqNJ{x^{gtWt6<%$Dyk}Ah0%!&I*&(J$v3ytfuq z@NFV~Sj69pr<*iy0#Dm>XVx09=kqX=|9E%h3Hd0p}TPIIXxH zuSs}r4e`1GxEr9u^*;_+_vt9$B3@0dovEA)))L&{^lI`;PL~@PR}6ZS8sO{~Unt)NR5^z@Gny@D!f64F|O*?f*6G z1U?Ge)UXLxYgp%yUWv3dEY&X5{x<=B2yNY8gi64zVY)V7OJS0Fwch{TH5=uvVLH-n z!x+FELmKY?Ds0jY*Zwyl4!Ce?OoVV;+t%G1Fl*@PkS3S`p^F+iIiv~JUaR|`0|q9| zjoXA@0sG+}!Zkc^6NG+&H<~Yjn9EzR&gT3krKL+E4ixYKBHdY}U!k#6>Ly0e1{z6) z|A|XRk*AA*{7a-EKjbWncgmDUS7S7jm zcuXj*z{5nkP{esumjnqR&ZAiFKvcn#N05mkUM}JpBHm50Tr6TA%OA*t-hp_Rz|$zw z@gn|2Kn{v@6vc9Tk@lb%yG4k#GpH@HB;ZRamY0aMPQ(Ee^9MyNaN@KJAktg``J7^S zu?f;m#P5N`Vt(-5L}0!Vb&Y0+pgP; zuwA!7d{^sMBfVTe7K_<%uC4*!YF(MG5OJYyiaKYd>yj|D(070?QkSmli;%7h(iwF= z_;$wE2V=R9&PgZfoV3l_-?cyC`>pmX?Ps|A0HIlo$fvX?wa+6w1zmkgd`;S&+HDvc zH)+>tS0Y}Duu$itZ4y{JYwNUixT_TP_^2b#ByF~Kj5ZA;!5D3vHbxtcm_nSkx3;J4 zYtVMl8nm78rM`-uhO0sID`5C)e$f1Y_?qTR%_o}oG;eCoYF^Qt&>Ybm#&ti!qnaJM z4Vniu_iA=%)@W8BtkEnH-}yN0y+$)jKx%OIdj`J6_~vPHHRBME(~Q!ji0?4XAWeVq z4b_BbhH3l}hH1KMyfkk3w!>GWag)vRb%dXBuKX%amwzsQgj41}%WvTRXPh{H3FpqA z!RhmT2)pI&2=v`7Z;)3bUXIi0a}hTnRI3z>(~QHp^)lS~BhWWQF2q^(DLAi~A*YLz z?eRF#7%9h#5HI(|`BLR;#MMXcjNpo|lPpQi((kzXNIwCFuklynfMDxa5jB5ad3N$aGQ(o$&?IFyI;mQB!2AF}b}EgD#%yjfU)HwhvIQ_OE- zKY~jh0)AP*J;)9Ogz^kkAR6t@&L*s4-n~M1tRiv7I8PsAe{e8JDOr$H1Kp2 zajKHmyhRXtDy53JoBR!OrsyyZ@D!~-;6}p3A1BQGV-Y_tAoq*(%ObvC)RisbGK%F3 zA{{R1A1rLzI1vw~{8Fii2aBAC2`+z15cvs$umJ0YX5ib>xLke7!x|87YK~ZW6LD+RlL#9Ye0U~FBNLPz=waD`=m156{ zod2RU_oCLZZ>e6yM6H*2`mHECSCpMgX;~IEN(7N5g7D8po^ArqzeLXNlt$knDRdK% zR1tR*IaiDHYJrUlY>XgsUlB8rCx&88kVqdE*p`S=hXu~VBK?^HK_2V7WHcv6V@{04 z%-A0@DEzrjcdmgr23P{9c)2JWVS+{)fe!~xF z$zFsXEX^WyL0~$h()fXRE^4vtuzcv)PRnVr$JrLAi>)5flGbI~W)}C{aw{hsGAeDi zoFtHA{SH~^iI4^4_C{;??e5T~ZD{j3%NLfTC~?8!W|?N$XgO{fW68q(W=pB%OUU{V zahGUA8!lNsAbmiZU@H)mQ_76=0v{L4ThIq+ft5lF+1d0_xF9610BroBw@Spvf^~%b zV>zp&Z89gUXr1MREsw7XagZo-{H3fdzlo9(bb7C)E6N@~Yj+ULa?!E}@gJ6N5R;y7 zN2`zG+Q%|WJYP-mUw(8}8d0JdVFzhAux+!PA$!-#3wwFXrw*;RgOO5n!1Au;c?E2F z2R)K_PpwzE2f3*nwum=SEYFG@qE}HV%Zo}`6$7nkNHRa5KX1d+U&QyK}o<{RQ0V)|aO?4m5t>+f(mZu7Cca~ohQkmVF=E+r7j9rRHD|HhJN`BK1s zAvl6^_Y~63c3HM=ucB3!&(H@?BV4p#T@Or$ETWI0&phT>aqGFm{)9>?A7wV7w51qW z#^5^Jl5bgqYdXfO3Xv-icZnj;Ho?an%LM$zePRzlWuW@y3k-e-vW$*Vwre`U(e_G!W z-14XW>3@{M9Ibx(S`+rGt&Prh*e$7!mN(F6Xq2U~@rvb$<&0?i73&zOl%ST9rXp5G zK>=1qO(lmlwp_DH5j^@uw43yq0(4vbkZqyx5uOgq_jVh_a!lk1QS*^sigfy2%kSvZ z&C0j}DlrZLe&|+yp)IY(Hp=%ueJ1^frCltCEzgUQ_I0I%WsjqLZL|ArMzg=F!SaNP z31f=jA4y25Ks>8u!)nb1;8qwPP9bFjnrBNt|7%USf7 zE0z<=+<}<_T0|dF%cEipUyCvP4+Xn;@{DDJ$kICU!#IE1kwaFV+BHa&eztWnhzc0P?xPFywfu~f2E4%7gVEyy=58_D$})Al^im*} z7W^%NoF8-5~6B(qMCQ8 zno0CNTY>*Mp|n?#lzoP>_AtlsN}VgV|2I`y9=GPEJ_8+j6M?Q`1!b#6*k&T9v$Z!N zkIj~};`sl4MO~8EU9SV?26#g1V1qt~J%XcrD0`MC;2S4SuMWY<)fAj)t;E~n!*FJ_ z2B%u<@J+s5TmqK^aw%OjAEgdc{(t1HukYE z&`x+ueLtu>fUgmA$U&qZ$Cu-5>M5j8;~Rj}(yt@^2EH6`X1@vA-@<#~PIwpkeVq0D z0H-3Iu&?qd(x2gMq!0TX-;UU2ArH?tcvD=D_uX-_0cV{h)(z*KWq5})Tmy)fJK-#X zGfp(O=WaOB+!gP`<17PCFbCtedqQ|W=8iYxLs>A+BFEtE*jT*X>>+-oM#A~xcwid} zIfXz9i8w2r#FOyWEF^^A8ltnkJxESS*YaBCkF&k?cz1R-pUwR6zW+kziL<(Q)+8{sRhy36tlkol(N1N!Jgge?pQtTn5*b(jR0lpjHpVC8~z2ObB zN;DefV(=v&TP)HfU4xLWB&2H)(v^gCeIVTw$R-ssc5{$1{U#EA(Fk%b27Z!su!E$# z2}!pXlJ<0vw7ZaWh=ZiPgrqs-d=OT`6VUJu(Dr9R73sUbkaTY$X(z~;Jl!PYc0$IT zAma~_{s>#5>^}x(8(6MaW(wWbYwlPv_8M@QYF;`>v3E9JGgIuMx73q&|w%>!bmF zg$DGYo{E$0qzB$Y1H7rHvR>khwl~gbuYi`2>;v)E`%0uq0|JEx1PBf2EHt2l&;X6l zfN=1mr`Yl90NJF7?=Z-)^_R}^P%mVH7aY{bpbTecET={MqKKadPlj9GVu=W}pIB^e zFE52hUxs{Hmb;&Opr5;6v21Kfl5$&2=Jw9{zwan^+KikT*cJDL2UidNvxF!fAp6My z+>cA6&+(SSWi2yHpX9lcr};N+(~T9}VE&Syl0L?7qlj{P9ZsHb)TqZVp$zBiZ1CC3}e4m+MJ z(jm+}R=!#JpvOt~`3`ul+wfe(Df4xzd@PVpM~n`5y}-{Cg0u$N!_Pe+gSW_sTR!Bc z%>$+2mI(8p(nt7;N^O(LJdFMnk;(0>bz20jZbD|4@#_%lpd(E%wrFR-10zW=YH|0A z^z!oTtkdZYGF<`!{UT#xqWcF01^7iHiBy1J6Te*cSaGk^enWF(yObZAVP3(@lWUWb zYLm_P^FCAVymN~AU2W6&owY-1GhN*>D`&+vJW+ga>ijXu^G2<&Dx6VH6g8P=P|av{ zCqdCUHUe6~S%&4RHb}dH)*i|JK|xY<|4uP6QIQ&NJ!tTEl{`Beq^QW4SZ|$1W@~O7 zuc$bFW6eHp$h$A)-C0$~*JNa_Jzg>Qt(5!n%wPJ{p5{)QHgTuZwcGE^m{OJdz}dR` zvk&CVoRoRzgCr5EOK2XgVo8(NDH3S|zl2_^Xx;*%4KyqH-^aTJg1c?IiTniD zy=BW!@70iG!F8<+uD8eBCwOi^vs@)&c03v!DiMz_tT&&msyb<2Z~l-6SHHL+D{JG) zYV(KMrm7cP)~|1QvC5RS;l*ltK)oIq8-US`_*U;85FG_c-innJ=$mEBfE(or58{Z-%vU282>&KbvOe8a+Tky+A@aqyrLTV>uN$o*975F)} zPskGa<%^&Sz65BNRd+p` zQ1V~4ysYBMBW~E>R~W5)1Xn>1^?xP*Maw>D2`6sL2f#h}hV0yHlA~MdrG70yM4W4x z&eT402z$lo!GF_d;-y&hVI26-$$b6Iqcdi{_~)wa+)%n{^u?Joj;|j#ZtaQ630v=+ z+Qqy_>cOjy|KU^n8rN^y%AH=Rx_5PEVcCQS&d#boyJf5dKCCMwnpgmCNP}#nsHF59*8%Y2p{llvRu_{(l+6($Y{dDhU0y5qMz~~ z5%>k1ziydJ_$}u#S!*5Omn?4zIQEbvCkOZi%Si$M3V41JTC3nWYtFXA^*?}4f@4-A zIQ1UOTrsPyLAg}HKc(C`vzf}VHRc&SRkY6r7h3I2?Q^LAyrrwCXEW%E6Z}^4Up8+L zc(mp`zQ+O274wJGZp(wnKR{@;lK-Na-dp2Xgq$2xN!UdiZT!+yd zOcDKYBWlnplK1m$GD-E?rkmmT!78N}Zxpyv1+LdEQxsh2#T&Js0GA5KyJgcUzd03f zs)OLD<12y1Ji`I1$Jo`?I+E&W*SAARA|*4{W#QE}qN+N$GgGsmqxUa4MvYR_PB+{E=~YHQD!|J=06 z{O6fkQ|{K+>gvvI$)zh<8q@|+x8MYMP|3tLL}V9CL;HtWvIJJwsTN+JNGLNK=)dtO>0 zn4nDqR{;QK_RD}zQ4)ayt|T=7JTrba!GG4^6qMrm(U@F{)=qARfn9MphE_l z5gg}PFE4Kg>&DOBRr+gfsy_8_taPL0AphCyDvfK=#Xfwh`mZ%> zRs|E*r2M`Z8@z?3pjz+&e(taVt;Ty3f1~#4imGR;%pY;@q}s&9+9dNg+NSEG^^HfX zT3(dCPOMKGQIBmyJ3d#%Iwea|SrfFuXyQS)LuvjTNE?n;nLp=ehS!fs15)aLm$k2I zH^J)^Mv}+E!oju|eNd&ge?YCvn&eOL2zMaHUJp8b;f@D(1FRF{}omt=lju&?CNnVv0AN<$rZ zsE&Thnzl^o^GwXvV#aZVUm~l8@|#nM7W6gBkI@g)BWK01Day2K;L#KM791;e9)B2V{i~o{>6YYHY_Y6L;J>_nG44rPBrt%<9MEW~5|K z?Cb7bw7UsV>K%e6F*;SME&E-xpe_6oJeSn6V)FuO16oG;b^QI@+hMr?PmGc~)giYY z?|-irR#Y)oi*_tD-oIp>rPnp}KsHQ5Qb}!NRkzF>57B-!Ga-?l=l^zf-*#RCI0 zTC>$0YBGnxV!w%Vrovhfxday*1Q##y$)f!k;1)`QTLcHUe8q?a?Qn#?m!&{wI6#Rf zcPl)B*1P};uuFnbN)o1(gO%kfN!v_+EHh2qJ9oY*$24l~S)bk9bFUoU{ASbHra7-Q zQEJhrraY>niEs%z=P1&~uQ>>P6>#!pDDcl&z5|@*1_gczzlmzkZ--y7t{e%En6s4p zXYm_M_WWek5}f8Nz{T9zSIk)oUAI0*eSiD>JUi>~eEBW-FS8`&IrI%Yw6)_Ldt9+E z+VBJT9O$*S4|5`Z=RnZQcH5teIZQUh4@vZ8)!k)%HpOx=+{=SW0=&x>5Ax}TdQpg-Tkp+rb5=-js z<_8YoS3bJlPtgJMwpYw8<`$HET$4!w2IcR~!j~j42%T7^>cp>twzlvK(jYrr$XLmL z7QY)pZE2hTJlRE{Fb-|$0192m)>Rrq1jb3+ti8ZD@_R3s@%Gu9=2CMxPO~3rc~9!y zlGZXz3U7H+DXrOz(oVvsiT(!+^4q7(K_+w1DP9KapSRp4&5|W&CcZ9shM3 zo{N_2f+sXy97C(f@{ZE(QQ20nm$s+|M4XRN)3zTeErGyhCHu!24uH&Eg5Kz#aq_sj}C$mb> zZF|}V*CihBfXiOT1rAGv>JZqha4R-Feyv1(F1YcdjfS%?+bR29g$8jzg~iR;H7iby z#?~G|p{+gEy2zt+mji7bZFOAc3T1it4+eHDSMc9D>~&k)uj6kA*r8=M92c))Vag1a ztGa`bWh72vV;xFXtuQP6$N`ID5nD1jAx zR_^M|QFl+_)pFV$Iir%M#LkXe_|}kK^S6wzJ$6^3bMu?+C$7w%xS`);aX)XG^2p*| zL3iyhD0{eXfV+8P%J^*j==Un8$@gTBzh_d{(RYo{Sdle$=@|ced<}~#QpyKU-ud3# z@yo|d%?w$#H>oLO)SQ$}9X&03lwJd~MeemJ>8-gdFW)uh?q^EpzLm5od};F3`*SDWKP7z$cgmbr zx8}$7)u5p+KXdS~qTK}ry9$#OEs|dlz2ynDx16-4@zpJTIZV`&Iub%9q>V)Vj%f@igSETWxb13v_LWFM6IZpT@@H^hBR9nF>anIYrFW{HO z6rGvjke^1yM6`!SMfEwP6QZF}k?PU$vs>)7knSkZbBQ)wLjM$+1g=|X)$#MfBBi+? zL`!3#g5&c03J$zAXTzc6S4!>m(U_;?y?BBwAgtb{d$qsf%}lb;g^iB=5_L7DY%}R# zjt81QHr;W@$VH&_`ITlQF~_2cz$(8#_H#1%-j=Y zK2orD%-FU0dD|vW-6~(ZdA;bdMX6J_=BFgjObE@a8hUy{g|(;5$Z1I}ezc(Yks@XC zRCojW#C&*0$l`NvJCx=cg6i>h&OlYNl-mx!z48pZxr~?;aAN_H}T<{wH?uFtVc7U?B3+F-E1yH`?VdH?h+iZd<`G|-8P9O0+ahxF(YnL8jLG$6Kf_pyyd3I&JE?Rk!%fKJb%{T4cv z#w`RN4XI%*kQhzFxUx@>kur0bsq(0~y(zvbQIm4>`I;lu;1+UAT?DrXi;iD-6F7th z?SeJ}M*(&Q#B5KCf?Y3~e?MX}@m(LA_w#d~{HXn;xeNc*TtWOLt=lDR@F)hVuuUeP}-$?7;{IksMS-k)fAVIXX{>P>wrzB=!d7xJQ5xKY<2CC zDpT6r^z^xDrnGtKBj%;a*A}E?RZg5(S#_iqeK93{;i%LF87hIQ2ROevZGYz|Av=MhEx~VFQU?4cc!rLMRRSrx8L>TXn=LtM3F& z-zzlXzkl2geu-mmoM?p%zY{c3e#p?xo|{^rK+la;@?w;+<%M3d6fw#O`n5E(D7i1< z_@QD2^+c=Ot)~}MyACHRgtgqt3b9S+Vpe~;EbsoDiJPY8ZOWar**b}@`Dp`LNT#A) z`Gva+Vc`|;nnqO79N1H|_*b>XCq>KJ!fh5_oBTFg4pxaB5BfbzQfG0St*7ZJMm4Gj zv-kt{+G%Y=P^@hpAWgW8v%1!`4S1kFC5{2-Ei_{`zfDWXZ!%fb^!fmMO*FeG^#m$w(4s=yY)khziLi^-UdF6tXT zHzK=e%-v6y^)K!hz^7&HUY;4Zd&2HzW8)&@QpTrUoJ*Fqw`WGmgtUtbND5s%KbDI8 z3}rj=$1GXm*Q0#{OC2C{$jANkvp%)t5pSdf|i~`iQc!5=44AET~iyPuL5$ zs>m&t-=rOjfPTam) z5z5Vtus@HNwLYq;NYrX>udi%*)v>~sB5A%- znNl(JTC_0^S@qEWt6GP(5mHc+zP$LH&`IZ{)t3c63TSIaIp+mICc41lxBM^t3a- zH*-t9&$^CdruUD{ACg$ozjWu+Qd9n%GZA;Wr%VbPR5B!?Jbv=_0$%;Nha5XCKHfjB zr+;Et;mZn>e;-tPwwck{lJ;-?wv*QFYl75 zYS(?DU6EL=f_}71$^HJlx66G2zvL?580#H#zxSE~o#6l_Yr|}vl{8xDUL?uJaW_Fd z4CksH>5{6eKj9jSfB)}gdE!6sx-I5R>2Y6tS zB1d^dNeeG?6W_ld(PepX{A?#Wxrf zlwnF=FmlwqbQ7qK-kAr3pU;;nTb@%4ekrxN%Ocg@7r3;uQ8#uo$-=;ia{8aZ3j7`w z4sYHiJJg;VXTuzF+u=C-Wru5ivSB&9%!WlbO@(4cTSmWWM>T(At@)OxRMTHS#aS@> zQ!V_tqBT~`I1#2iHCGVd)TcC8hW+`uwMH8cFjuDAsI)<8u1rCH#yHT^{uEv>QIn2e zepx`x(=`1YYPf>`P;1X^=jPj2?9g%>j*I)iP4b1~w{5-^dkX==A1^I_-@Nfj9>@cq zl)r8MP!3jd>7t+mw68$9Jj7oBm!kKXpV-YM%KyA+}09XzdVqxaHHsPn)+K z!H;rWyU~;Xip3-rAWB}*5_pG&4($?@2^%5FCIl}FnT7?nPRbmemP}1~{HmeYO z2|68l_DSMosfv5DrHJ<#_?4w=I5*H{WWfA-MPoXdzy`-E4 zr`DvWuQ|0~{^?aCN3J?Of5G1DoV|1N*XD&y*lRrkgyY4vr_I;ZBS2ft_dVEh@1$+7 z&AiV7%UE!n--lTRvv$3EK&+qp_Ya0~FKh&3Lr#&$2cXG_r_u2m+x~Qby1NgB&U-Dx|k315eJ`a!5=bdhxb$V{f!}|`H zMw@^gErygfT2Bx}M_I>aS`uPG?NFU!o8t6Skhbd^sRg?vngoW0s9ey6rV_6)1z~;91l6U5rGVU6exjbX!x>EC=71HLG zpAy!u{cv8|;ypeKFD}ZwDAq# z$I$$Lt9dSYFZ*O^KmcF;viZt{eOqQFjb3)Rc*^>$@#}M^tjo$>@3ZvNvATo%bvV08!ZdL&K~V{V#S3s{`RVENN8;#ZLgjD~`_#SAQ2BIp_(M}G50#f6s+{^zc=Xei^(X60 zN%bkIbxBEesVVhI($2WzA@N0VaYgY%iZPU?j@1|LUy{D~{X0{uhPA{=ca2}2 zk+Uju!aW(;tHz{1Jy^NR!+0geN7}CnePd@uCDa#vFRFq>u8<4=FDn(|%Z3SYmyA+0db-L&8Vqg#0?ATl$2&u&}{{ z!-f_Q8dN;APfpfI-+I)DR`GAqD(Hw+>tR@-&#GNltpN^I;;W(n+-K0Vf%UN=K{2U` zLkEQ$jbZh58JTs)E`fmqr}@TA9uyoA5gZzy6BFXwtCw#^MMXyMR8M1C)S$^R;3L{7 zbw?YOJ{s*8?IHT8XJAw`FEQWzab;qn`R11TReX+lW_|tDU#R8T;Jrbrfp)f~Qjd-q zppO;g>G;5*W%2ciVWCM$p)dOJ+@EwqOBckK`J%z0adDwx2_Ag>jB@SLd@zA10oF)q zCVVM91YTO<$42R6Y-%1Xyvp7<7C54KS;xNFNy{6PD&rGo#78A-cv_#B1W8WuU7FV; zHhXR3IT`F8K7C+)VpQbdQ4!&A!V15j6pyyrd)^w}+kBFrGQSI{*0$V0&m$@{(%qPU z0>sHRf7%{ZI-VofpyLF!LhNy!Qnh4!q>l7FMr<%>Q%{zdO*Y6 zXy>p#7QG5f5V12W%W#b<{Lq0RCua>VO6b(N!_Y}l!^`6|{?B;y9N1m&lpGi|u$!)3 z%6VOQPDM;)T5x>v94s98fRJH z{QGlr@6XTQoKu}z9uZrbm{QswG4&)llKX1+QcudljHvV^Inv&jkPZP2(5S3i`Vx)A zw{)evWuhm^k?2d~(U;=l!iE+On3vaQLiR`lW*_t=*#N)&QS8#dgB?T@;XidH?lWQj z?K{#u*-(=c5)l#7Z)i?*u(4M!W9IbfnIR)O`;LgrsUcaRg;IC4Q1qjOzv@SFWc^A$ z*P$nY_XdVw|Y(5g2Lm+@b;4GX9Bh(ULHO+t4{EQ+Z{ zcZwTL-3h%3Esocks5fOP^VoVGEPB%icp^2_w%nxtgcfSF$F2QIQ1bt?KgouwobZh9 zKFLAj%F4zCCHr*G2+ygiiUCxQ`=JPx@B!PNWd_Z^@R$MZKKxguB zErLPOB8S}D{DJ!B2*zCPX6;^05YJ|`mopXrVT{%eBjs9Q6Vvn6w|PEVeVzt0yQB6f z%1=@7rd9fomO8tV*FG_&c}kHql0k5#3v>=FeWB2Sd7UTmUTP^ z|Lq!l%JGPjGvZCNYWO%aDimkDS>Mp9|Bx5 z#yL@whXW3()en>f2gb&V+T|UBQs5M88CYYlvF&JYrD$&@&ll~jluqKR(5V-)25$0) zIMP?VK22bbj^?}NcbfZ}hhyLtjG&U{8m@;Y(uJtX64NF;!X zYL3^{AFrt^iWrbhBw~AyUo71pX_%dwTr+%lO>+IQnwn$vji+LKrVccF&?Fcg6of?{ z(LG*X2fCHol{tebh=NsOJIx|);Y_9WC>p?jsy|js^_gr`B!Y@N1V5sq&Er8)_xhM*7Z9O{z&utVyanUZeSq8c$3R`o){Mlk^nnSC#{It0wSfo7|y`_)kqK(#5uU z&qk%DM)gli1Ly|+I2)1p}?0$-SaBIt!# z#f@^th@C?khnzWsXy=Gsf*Pzh?4!F-f)rl$=dlR z8(!*rGS`%APRudoyx5m+Uz}i?z>kkNjX&9Py}_K+Aa68h?KB_bNfdVS13P)5`8b7^ zC-7UDS)!M%lkQPQm;?^D%RS}_6D>P$bkSZ@dZF!kGDaZm?b7oa?X??SX!M4ab6wg` z{VofOsU~T0%VKH23B7xbq>){v{Tdyg2lt-HsmXW9NxSICsXWo6kPV04={it~Czf@Z ze4O_L_SuA;$_y|GY?gJHHJb3h!&tIdj>B?}a@F8n5HD}OY5KxJUBZ(m#hN0rQ~LLi zwVQ*5XvILe@*w|n%( znF~kBQjh*A*%7ALi7DY-1}&UkGw~YtdNAwp{aY9H4P3P2i6_R~YyRaus#2|Uo0mrB)PpP)xp*$WQ7aAHD&hs8B$jXWw7b*Eh z`WhpArHFA+S+&z1%Ky!`XSbfd#=vd?hTroanr4c~ifj%H>t!(Z>Jxl3GAlxGq}Z}n zI;7N{6Acq3COR55!yhk}>hJ;6!8K21L8_ zrIsqX8QiCr(aAHNm~`lKdF(tr7Uv;J@|}UB!SO1U#6pB?vrKYehZC zFXhOOk!?CcLObNI!|pW%`MS5y`6&pd^eVK zv!~+0>WTN`>Fp`?;E`~Q(J)Kntar3G9P&bu9Nwylq7{SCD0Op7u6fk_*(dYof5QDA z-NXGqp4TUH_Nc-2V|Be2jjMXPqT=bQv8#gbOzJxz)vxH_S4);$IapM9@XDR;>6LK< zD#xTZrHz<#t{U&RKk^9o|78AxPt2DdnXq?dR`iqs0}?BquC9KnVpw#6cgx%T1{bXz ze&>|~g@p&M+6LNxhFcp>-*O z&c|at^<2+gWqR2v7FX(u9%55QS%`V@@0y;U;ge7|F)As@Eo0f3%%x-9LJ}kS#II)Z z_Os2uPnt7zT0&?-;?#8Wo>BQxofE5v4<6z*VZfkqUE+Kij#nn+Pi>mme?HWUgn0GJ(P!1>8J%Gauy|xUNmydf^S4-xZzkU#wv5izPWpeXT?=qiRT|E@_a>=4 zgtnB@0wEZ+^GE`!4^v+GD1z>(Tq_WN&ATN&1I+?}SmIrpCP-~asQzyJBq|2TJV zW$q)_H(v@g1rRg^xJ#S8O|M<;+J5cSa>klY4Q>Ot26lYm*!bJD%s~7tc4$dsXZU{k z0?D6zFZOi7*o_##{C@1)?NPd5zdoc4*XT51B=pIEpy9ZhBc0jK&cijeM>-wO&Lc}I zcQ0PNyRw45?>Ug*m@~U>Nlk=vQdrm|Cp+WXaJahq@CK)A)3cQ|IBs0Lr=nudqDAz* zcq`kRlcYl%%2;n9=_AV%9>WnbhM&MaFRzCV>R*SBND^9l zk_BMYy3tv(&0W-0QrcCxuxp_?Ki_OFDBvd)Z*!wq+*MSvtGk}}R=05kwaTOz8Gck;e z$C_aGpm%W4Dr&OC-glUr9gJ^*NK`$?R?zDGczU?;FV#V!gIEz<*aA@y0=qz8V{6KQXFta=>g-; z)VJ5YKe_v}O`AULp48tzVbjtQS6Rirs+xTjWv-H?8z;U`RA!O9D=~sQOZCdDUBRg^kY6@M}LQB`Kd0|Pg4&& z-s|wxo$OXq?xApLY*OLsqfO)c`-5^ji*L(8T>Xc}@#oLqm9xH#@(?8q|0*QP57F2- zVEWS0pyEG+4-eB~Hh@}5e=6QABz6sd^0;Q;^yvZ3{!f0`y8QIh?P``P9%fbIyHO84 zeY$?qG|P^^JnH$4XX|IbwM;u2u3q+d4NA3-FHudSk%2`%3o^+-UX!)S5I;Jj+#g_s z=T|clOgDveOYi|K_ORMFTAEAej91?4$g#x~BB;FS)t&-x<$>y|{grxWVYWd%H-dX` zIDxzFRhbIr&MS2~i<(`HC%X#^x4+t0y|1!zUv*w%-u!}0h^*xdKJB)8GO1#XbN&i}8II%_~I|a&@PjvKlSSi!Efhp z5TrI8!=_q@!pEe1wvEE4@x`?5w8c!j_{AG-Ov|)wNI#}8@e34bu9s~9CJFc@NtwV&vEE)$E?T2*|_Z%V{SX***bTSKe^DBn&Zi169UB7lryevWk zCMk0qcZ9|X>SM#QFu7c?5LT$T;yB*0J(a1Be?JshN22C4s5y@MAVKtZLxL)GrRLZ* zKWHBWYJhuxY-97or#7SakeU_aMqx~K?E9NOakQP>HlnGZ?;~76v>W9N-zm^<@hE$U zeP|9{cBbqZ;X%O!efs5FpJQy5bi76HAat-p!hU|Te>O2nsmhS2ep4IC6dj_675uKu zJ$oNZn3EC_bU4_yr7UAx&m*ST)X2MzgjhW6Q0Br6W^ly_MZ0ROC7E%q7)9~U3Zf-T z0{^WiZQUkuGI!DU0H4B=fS~V`L~StZpkfVC8|#Kp4bQv3Irq&gzdwlc+kLIcDknn+hypulz`+ZN;8~q8&9k_cx@cHaw7%T;Md!b>$`HR@HLXa;vJ{ z@wqOeEt#W zd7mQIJuluKHwEL72isV=d^dS05M5@5GXff`8Cp5Kvr3&-tJK1_3g5COqs}B>%Ocb& zy-*)yt-d#{Hc7sc)6bfrXLQ;e$mq zQA=`~R?75*L;jH60t`dUmsFN&|c zDrI(a@8F#!v_eB(lKdj}6o@5#b~H5g=Q5Hw=P$`ciu@%>NRoxpA2k6wXF#KqOO(1I zQ7RN1HJ5zIw2KUEasOSn`e?G&xHaoio9|t}G<&XO`d!57C;&8Rt9W731 zgQO9XnVWamTbwy-;dphq*4jPL3iI=!6%Ma;uCt>un&9J+s-p>MqZnf4l%L?dfc7Ez zU+|Xyx;~w_L!Y=#I=RlC(=y+_&S@zqu$XS^Xp8d~bkuX_?$aF6EzFk}5yv$IGt8_? zNb>K*fp#{;ZnlX7-TW5uqjq*vRJOCZ!|NqUIGg{M@H(|9){z4Ss`1%2&Lfs^?|Iqm zR<6VAGcmGUxMerwVZuKp*iubQ+x+x4W*FYcKP-OS#)fXRF{76m+eA#ABx8SsY)g(p zWm>wb*^9nM0Un^eTt};KD?94*TkvH)(4O29^g!Kk&Lsu`zL(8y>ygmsHxF+B{M(?D ztpoZ49!D?dY4bhGUSzX5>}MsxCp#ixJ|%!TX&UtOayg=s-E74I`jO#IX1u{}N_W7D z+7CU7|F`f4VS~94n=zmT-{RZi1>7>u!=kwLfZy-+ZINorZYWj(KH^gvB>1GzfJ9?% z@`N}50*MMxXt-hYb`r5fCC&!!d+To)Kan6ghzcV^7*6O)wc3E_P&<}H#`f84s7?Hc zf096BLG_5pJyWAaTT4 zFS!olO^vbQve=l|7i>(M%2!eajaJ` z@lOg@Ah*LYl4Gp=QDc6yD>{os@>|4`|6FS}3#KH$D?MrCD8t@?LN}KyX*xfF#J-Jz zE}}Cf3*D$p4U&i_M4^m*CvOEsu`&(Sh+g+y6b*LrI|QCOm5FU+?{g_68}jO|41@&%by$`qp2@YJbbPtqim z@WqgNq2MZPts%8aLuBOiAcbLiYlCWd8v{&oco4 literal 0 HcmV?d00001 diff --git a/app/src/main/java/org/groundplatform/android/ui/theme/Color.kt b/core/ui/src/commonMain/kotlin/org/groundplatform/theme/Color.kt similarity index 98% rename from app/src/main/java/org/groundplatform/android/ui/theme/Color.kt rename to core/ui/src/commonMain/kotlin/org/groundplatform/theme/Color.kt index a6020cbf32..db63890f34 100644 --- a/app/src/main/java/org/groundplatform/android/ui/theme/Color.kt +++ b/core/ui/src/commonMain/kotlin/org/groundplatform/theme/Color.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.groundplatform.android.ui.theme +package org.groundplatform.theme import androidx.compose.ui.graphics.Color diff --git a/app/src/main/java/org/groundplatform/android/ui/theme/Size.kt b/core/ui/src/commonMain/kotlin/org/groundplatform/theme/Size.kt similarity index 96% rename from app/src/main/java/org/groundplatform/android/ui/theme/Size.kt rename to core/ui/src/commonMain/kotlin/org/groundplatform/theme/Size.kt index 8b6706b0fa..ec6b0918cc 100644 --- a/app/src/main/java/org/groundplatform/android/ui/theme/Size.kt +++ b/core/ui/src/commonMain/kotlin/org/groundplatform/theme/Size.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.groundplatform.android.ui.theme +package org.groundplatform.theme import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable diff --git a/app/src/main/java/org/groundplatform/android/ui/theme/Theme.kt b/core/ui/src/commonMain/kotlin/org/groundplatform/theme/Theme.kt similarity index 98% rename from app/src/main/java/org/groundplatform/android/ui/theme/Theme.kt rename to core/ui/src/commonMain/kotlin/org/groundplatform/theme/Theme.kt index ae106e70cb..61deb9225b 100644 --- a/app/src/main/java/org/groundplatform/android/ui/theme/Theme.kt +++ b/core/ui/src/commonMain/kotlin/org/groundplatform/theme/Theme.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.groundplatform.android.ui.theme +package org.groundplatform.theme import androidx.compose.material3.MaterialTheme import androidx.compose.material3.darkColorScheme @@ -93,6 +93,6 @@ private val DarkColors = @Composable fun AppTheme(content: @Composable () -> Unit) { CompositionLocalProvider(LocalSizes provides Size()) { - MaterialTheme(colorScheme = LightColors, content = content, typography = AppTypography) + MaterialTheme(colorScheme = LightColors, content = content, typography = appTypography()) } } diff --git a/app/src/main/java/org/groundplatform/android/ui/theme/Typography.kt b/core/ui/src/commonMain/kotlin/org/groundplatform/theme/Typography.kt similarity index 65% rename from app/src/main/java/org/groundplatform/android/ui/theme/Typography.kt rename to core/ui/src/commonMain/kotlin/org/groundplatform/theme/Typography.kt index 32caefa1a8..562f5d071c 100644 --- a/app/src/main/java/org/groundplatform/android/ui/theme/Typography.kt +++ b/core/ui/src/commonMain/kotlin/org/groundplatform/theme/Typography.kt @@ -13,132 +13,140 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.groundplatform.android.ui.theme +package org.groundplatform.theme import androidx.compose.material3.Typography +import androidx.compose.runtime.Composable import androidx.compose.ui.text.TextStyle -import androidx.compose.ui.text.font.Font import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.text.font.FontStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.sp -import org.groundplatform.android.R +import ground_android.core.ui.generated.resources.Res +import ground_android.core.ui.generated.resources.manrope_bold +import ground_android.core.ui.generated.resources.manrope_medium +import ground_android.core.ui.generated.resources.urbanist_bold +import ground_android.core.ui.generated.resources.urbanist_medium +import org.jetbrains.compose.resources.Font -val ManropeFontFamily = +@Composable +private fun manropeFontFamily() = FontFamily( - Font(resId = R.font.manrope_medium, weight = FontWeight.Medium, style = FontStyle.Normal), - Font(resId = R.font.manrope_bold, weight = FontWeight.Bold, style = FontStyle.Normal), + Font(resource = Res.font.manrope_medium, weight = FontWeight.Medium, style = FontStyle.Normal), + Font(resource = Res.font.manrope_bold, weight = FontWeight.Bold, style = FontStyle.Normal), ) -val UrbanistFontFamily = +@Composable +private fun urbanistFontFamily() = FontFamily( - Font(resId = R.font.urbanist_medium, weight = FontWeight.Medium, style = FontStyle.Normal), - Font(resId = R.font.urbanist_bold, weight = FontWeight.Bold, style = FontStyle.Normal), + Font(resource = Res.font.urbanist_medium, weight = FontWeight.Medium, style = FontStyle.Normal), + Font(resource = Res.font.urbanist_bold, weight = FontWeight.Bold, style = FontStyle.Normal), ) -val AppTypography = +@Composable +fun appTypography() = Typography( displayLarge = TextStyle( - fontFamily = UrbanistFontFamily, + fontFamily = urbanistFontFamily(), fontWeight = FontWeight.Medium, fontSize = 57.sp, lineHeight = 64.sp, ), displayMedium = TextStyle( - fontFamily = UrbanistFontFamily, + fontFamily = urbanistFontFamily(), fontWeight = FontWeight.Medium, fontSize = 45.sp, lineHeight = 52.sp, ), displaySmall = TextStyle( - fontFamily = UrbanistFontFamily, + fontFamily = urbanistFontFamily(), fontWeight = FontWeight.Medium, fontSize = 36.sp, lineHeight = 44.sp, ), headlineLarge = TextStyle( - fontFamily = ManropeFontFamily, + fontFamily = manropeFontFamily(), fontWeight = FontWeight.Medium, fontSize = 32.sp, lineHeight = 40.sp, ), headlineMedium = TextStyle( - fontFamily = ManropeFontFamily, + fontFamily = manropeFontFamily(), fontWeight = FontWeight.Medium, fontSize = 28.sp, lineHeight = 36.sp, ), headlineSmall = TextStyle( - fontFamily = ManropeFontFamily, + fontFamily = manropeFontFamily(), fontWeight = FontWeight.Medium, fontSize = 24.sp, lineHeight = 32.sp, ), titleLarge = TextStyle( - fontFamily = ManropeFontFamily, + fontFamily = manropeFontFamily(), fontWeight = FontWeight.Medium, fontSize = 22.sp, lineHeight = 28.sp, ), titleMedium = TextStyle( - fontFamily = ManropeFontFamily, + fontFamily = manropeFontFamily(), fontWeight = FontWeight.Bold, fontSize = 16.sp, lineHeight = 24.sp, ), titleSmall = TextStyle( - fontFamily = ManropeFontFamily, + fontFamily = manropeFontFamily(), fontWeight = FontWeight.Bold, fontSize = 14.sp, lineHeight = 20.sp, ), labelLarge = TextStyle( - fontFamily = ManropeFontFamily, + fontFamily = manropeFontFamily(), fontWeight = FontWeight.SemiBold, fontSize = 14.sp, lineHeight = 20.sp, ), labelMedium = TextStyle( - fontFamily = ManropeFontFamily, + fontFamily = manropeFontFamily(), fontWeight = FontWeight.SemiBold, fontSize = 12.sp, lineHeight = 16.sp, ), labelSmall = TextStyle( - fontFamily = ManropeFontFamily, + fontFamily = manropeFontFamily(), fontWeight = FontWeight.SemiBold, fontSize = 11.sp, lineHeight = 16.sp, ), bodyLarge = TextStyle( - fontFamily = ManropeFontFamily, + fontFamily = manropeFontFamily(), fontWeight = FontWeight.Medium, fontSize = 16.sp, lineHeight = 24.sp, ), bodyMedium = TextStyle( - fontFamily = ManropeFontFamily, + fontFamily = manropeFontFamily(), fontWeight = FontWeight.Medium, fontSize = 14.sp, lineHeight = 20.sp, ), bodySmall = TextStyle( - fontFamily = ManropeFontFamily, + fontFamily = manropeFontFamily(), fontWeight = FontWeight.Medium, fontSize = 12.sp, lineHeight = 16.sp, diff --git a/core/ui/src/commonMain/kotlin/org/groundplatform/ui/components/GroundQrCode.kt b/core/ui/src/commonMain/kotlin/org/groundplatform/ui/components/GroundQrCode.kt index 5b9d475ed1..810aae61cc 100644 --- a/core/ui/src/commonMain/kotlin/org/groundplatform/ui/components/GroundQrCode.kt +++ b/core/ui/src/commonMain/kotlin/org/groundplatform/ui/components/GroundQrCode.kt @@ -26,11 +26,9 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import qrgenerator.qrkitpainter.PatternType import qrgenerator.qrkitpainter.QrBallType -import qrgenerator.qrkitpainter.QrFrameType import qrgenerator.qrkitpainter.QrKitLogo import qrgenerator.qrkitpainter.QrKitShapes import qrgenerator.qrkitpainter.QrPixelType.SquarePixel -import qrgenerator.qrkitpainter.getSelectedFrameShape import qrgenerator.qrkitpainter.getSelectedPattern import qrgenerator.qrkitpainter.getSelectedPixel import qrgenerator.qrkitpainter.getSelectedQrBall @@ -41,7 +39,6 @@ import qrgenerator.qrkitpainter.rememberQrKitPainter * * The composable is intentionally generic, it accepts any string payload, making it reusable for * GeoJSON, URLs, or any other data that fits within QR code capacity limits. - * */ @Composable fun GroundQrCode( From bd87559f23319a4597b15bf11bed439bfde7e5cc Mon Sep 17 00:00:00 2001 From: andreia Date: Fri, 27 Feb 2026 19:09:19 +0100 Subject: [PATCH 4/7] move Coordinates to :core:domain --- .../data/local/room/converter/ConverterExt.kt | 2 +- .../remote/firebase/protobuf/ModelToProtoExt.kt | 2 +- .../remote/firebase/schema/GeometryConverter.kt | 2 +- .../android/model/geometry/Geometry.kt | 1 + .../groundplatform/android/model/map/Bounds.kt | 2 +- .../android/model/map/CameraPosition.kt | 2 +- .../android/system/GeocodingManager.kt | 2 +- .../ui/common/AbstractMapContainerFragment.kt | 2 +- .../android/ui/common/BaseMapViewModel.kt | 2 +- .../tasks/polygon/DrawAreaTaskViewModel.kt | 2 +- .../android/ui/map/CameraUpdateRequest.kt | 2 +- .../groundplatform/android/ui/map/MapFragment.kt | 15 +++++++++++---- .../android/ui/map/gms/ConverterExt.kt | 2 +- .../groundplatform/android/ui/map/gms/GmsExt.kt | 7 +++++-- .../android/ui/map/gms/GoogleMapsFragment.kt | 2 +- .../ui/map/gms/features/LineStringRenderer.kt | 2 +- .../android/ui/map/gms/mog/TileCoordinates.kt | 2 +- .../groundplatform/android/ui/util/PolygonUtil.kt | 2 +- .../groundplatform/android/util/CoordinatesExt.kt | 2 +- .../java/org/groundplatform/android/FakeData.kt | 2 +- .../local/LocalLocationOfInterestStoreTest.kt | 2 +- .../data/local/LocalSubmissionStoreTest.kt | 2 +- .../room/converter/ValueJsonConverterTest.kt | 2 +- .../firebase/protobuf/LoiMutationConverterTest.kt | 2 +- .../firebase/protobuf/ModelToProtoExtKtTest.kt | 2 +- .../firebase/schema/GeometryConverterTest.kt | 2 +- .../remote/firebase/schema/LoiConverterTest.kt | 2 +- .../schema/SubmissionMutationConverterTest.kt | 2 +- .../LocationOfInterestRepositoryTest.kt | 2 +- .../android/system/GeocodingManagerTest.kt | 2 +- .../datacollection/DataCollectionFragmentTest.kt | 2 +- .../location/CaptureLocationTaskFragmentTest.kt | 2 +- .../tasks/point/DropPinTaskFragmentTest.kt | 2 +- .../tasks/point/DropPinTaskViewModelTest.kt | 2 +- .../tasks/polygon/DrawAreaTaskFragmentTest.kt | 2 +- .../tasks/polygon/DrawAreaTaskViewModelTest.kt | 2 +- .../HomeScreenMapContainerViewModelTest.kt | 2 +- .../ui/home/mapcontainer/jobs/LoiJobSheetTest.kt | 2 +- .../android/ui/map/gms/mog/MogClientTest.kt | 2 +- .../android/ui/map/gms/mog/TileCoordinatesTest.kt | 2 +- .../selector/OfflineAreaSelectorViewModelTest.kt | 2 +- .../android/ui/signin/SignInScreenTest.kt | 2 +- .../ui/syncstatus/SyncStatusFragmentTest.kt | 2 +- .../usecases/submission/SubmitDataUseCaseTest.kt | 2 +- .../survey/RemoveOfflineSurveyUseCaseTest.kt | 2 +- .../android/util/CoordinatesExtTest.kt | 2 +- .../android/util/PolygonUtilTest.kt | 2 +- .../domain}/model/geometry/Coordinates.kt | 2 +- 48 files changed, 62 insertions(+), 51 deletions(-) rename {app/src/main/java/org/groundplatform/android => core/domain/src/commonMain/kotlin/org/groundplatform/domain}/model/geometry/Coordinates.kt (94%) diff --git a/app/src/main/java/org/groundplatform/android/data/local/room/converter/ConverterExt.kt b/app/src/main/java/org/groundplatform/android/data/local/room/converter/ConverterExt.kt index ece965b0c3..6a86ba6c16 100644 --- a/app/src/main/java/org/groundplatform/android/data/local/room/converter/ConverterExt.kt +++ b/app/src/main/java/org/groundplatform/android/data/local/room/converter/ConverterExt.kt @@ -54,7 +54,6 @@ import org.groundplatform.android.data.local.room.relations.TaskEntityAndRelatio import org.groundplatform.android.model.AuditInfo import org.groundplatform.android.model.Survey import org.groundplatform.android.model.User -import org.groundplatform.android.model.geometry.Coordinates import org.groundplatform.android.model.geometry.Geometry import org.groundplatform.android.model.geometry.Point import org.groundplatform.android.model.imagery.OfflineArea @@ -75,6 +74,7 @@ import org.groundplatform.android.model.task.Option import org.groundplatform.android.model.task.Task import org.groundplatform.android.model.task.TaskId import org.groundplatform.android.proto.Survey.DataSharingTerms +import org.groundplatform.domain.model.geometry.Coordinates import org.json.JSONObject import timber.log.Timber diff --git a/app/src/main/java/org/groundplatform/android/data/remote/firebase/protobuf/ModelToProtoExt.kt b/app/src/main/java/org/groundplatform/android/data/remote/firebase/protobuf/ModelToProtoExt.kt index 0e17415926..f115adb96b 100644 --- a/app/src/main/java/org/groundplatform/android/data/remote/firebase/protobuf/ModelToProtoExt.kt +++ b/app/src/main/java/org/groundplatform/android/data/remote/firebase/protobuf/ModelToProtoExt.kt @@ -19,7 +19,6 @@ import com.google.protobuf.timestamp import java.util.Date import kotlinx.collections.immutable.toImmutableMap import org.groundplatform.android.model.User -import org.groundplatform.android.model.geometry.Coordinates import org.groundplatform.android.model.geometry.Geometry import org.groundplatform.android.model.geometry.LineString import org.groundplatform.android.model.geometry.LinearRing @@ -59,6 +58,7 @@ import org.groundplatform.android.proto.locationOfInterest import org.groundplatform.android.proto.point import org.groundplatform.android.proto.submission import org.groundplatform.android.proto.taskData +import org.groundplatform.domain.model.geometry.Coordinates fun SubmissionMutation.createSubmissionMessage(user: User) = submission { assert(userId == user.id) { "UserId doesn't match: expected $userId, found ${user.id}" } diff --git a/app/src/main/java/org/groundplatform/android/data/remote/firebase/schema/GeometryConverter.kt b/app/src/main/java/org/groundplatform/android/data/remote/firebase/schema/GeometryConverter.kt index b248c9b67b..7f53879fc4 100644 --- a/app/src/main/java/org/groundplatform/android/data/remote/firebase/schema/GeometryConverter.kt +++ b/app/src/main/java/org/groundplatform/android/data/remote/firebase/schema/GeometryConverter.kt @@ -16,7 +16,6 @@ package org.groundplatform.android.data.remote.firebase.schema -import org.groundplatform.android.model.geometry.Coordinates import org.groundplatform.android.model.geometry.Geometry import org.groundplatform.android.model.geometry.LinearRing import org.groundplatform.android.model.geometry.MultiPolygon @@ -27,6 +26,7 @@ import org.groundplatform.android.proto.LinearRing as LinearRingProto import org.groundplatform.android.proto.MultiPolygon as MultiPolygonProto import org.groundplatform.android.proto.Point as PointProto import org.groundplatform.android.proto.Polygon as PolygonProto +import org.groundplatform.domain.model.geometry.Coordinates /** * Converts between Geometry model objects and their equivalent remote representation using protos. diff --git a/app/src/main/java/org/groundplatform/android/model/geometry/Geometry.kt b/app/src/main/java/org/groundplatform/android/model/geometry/Geometry.kt index 208ce08fb2..f8aaf2f601 100644 --- a/app/src/main/java/org/groundplatform/android/model/geometry/Geometry.kt +++ b/app/src/main/java/org/groundplatform/android/model/geometry/Geometry.kt @@ -22,6 +22,7 @@ import org.groundplatform.android.ui.map.gms.GmsExt.center import org.groundplatform.android.ui.map.gms.GmsExt.toBounds import org.groundplatform.android.ui.map.gms.toLatLngList import org.groundplatform.android.ui.util.isClosed +import org.groundplatform.domain.model.geometry.Coordinates /** A common ancestor for all geometry types. */ @Serializable diff --git a/app/src/main/java/org/groundplatform/android/model/map/Bounds.kt b/app/src/main/java/org/groundplatform/android/model/map/Bounds.kt index c14266396e..fd3cbd0746 100644 --- a/app/src/main/java/org/groundplatform/android/model/map/Bounds.kt +++ b/app/src/main/java/org/groundplatform/android/model/map/Bounds.kt @@ -15,7 +15,7 @@ */ package org.groundplatform.android.model.map -import org.groundplatform.android.model.geometry.Coordinates +import org.groundplatform.domain.model.geometry.Coordinates /** * Represents a rectangular bound on a map. A bounds may be constructed using only southwest and diff --git a/app/src/main/java/org/groundplatform/android/model/map/CameraPosition.kt b/app/src/main/java/org/groundplatform/android/model/map/CameraPosition.kt index dc98c85d48..b4004abd94 100644 --- a/app/src/main/java/org/groundplatform/android/model/map/CameraPosition.kt +++ b/app/src/main/java/org/groundplatform/android/model/map/CameraPosition.kt @@ -15,7 +15,7 @@ */ package org.groundplatform.android.model.map -import org.groundplatform.android.model.geometry.Coordinates +import org.groundplatform.domain.model.geometry.Coordinates import timber.log.Timber /** Represents current camera position of the map. */ diff --git a/app/src/main/java/org/groundplatform/android/system/GeocodingManager.kt b/app/src/main/java/org/groundplatform/android/system/GeocodingManager.kt index 9d8cc13679..d1cfaa9d0a 100644 --- a/app/src/main/java/org/groundplatform/android/system/GeocodingManager.kt +++ b/app/src/main/java/org/groundplatform/android/system/GeocodingManager.kt @@ -25,9 +25,9 @@ import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.withContext import org.groundplatform.android.R import org.groundplatform.android.di.coroutines.IoDispatcher -import org.groundplatform.android.model.geometry.Coordinates import org.groundplatform.android.model.map.Bounds import org.groundplatform.android.ui.map.gms.GmsExt.center +import org.groundplatform.domain.model.geometry.Coordinates import timber.log.Timber /** Abstracts native geocoding facilities. */ diff --git a/app/src/main/java/org/groundplatform/android/ui/common/AbstractMapContainerFragment.kt b/app/src/main/java/org/groundplatform/android/ui/common/AbstractMapContainerFragment.kt index 845e80c6d3..1b1c4e6e0b 100644 --- a/app/src/main/java/org/groundplatform/android/ui/common/AbstractMapContainerFragment.kt +++ b/app/src/main/java/org/groundplatform/android/ui/common/AbstractMapContainerFragment.kt @@ -23,7 +23,6 @@ import androidx.compose.runtime.getValue import androidx.lifecycle.compose.collectAsStateWithLifecycle import javax.inject.Inject import org.groundplatform.android.R -import org.groundplatform.android.model.geometry.Coordinates import org.groundplatform.android.model.map.Bounds import org.groundplatform.android.system.GeocodingManager import org.groundplatform.android.system.PermissionDeniedException @@ -35,6 +34,7 @@ import org.groundplatform.android.ui.map.NewCameraPositionViaBounds import org.groundplatform.android.ui.map.NewCameraPositionViaCoordinates import org.groundplatform.android.ui.map.NewCameraPositionViaCoordinatesAndZoomLevel import org.groundplatform.android.util.createComposeView +import org.groundplatform.domain.model.geometry.Coordinates import timber.log.Timber /** Injects a [MapFragment] in the container with id "map" and provides shared map functionality. */ diff --git a/app/src/main/java/org/groundplatform/android/ui/common/BaseMapViewModel.kt b/app/src/main/java/org/groundplatform/android/ui/common/BaseMapViewModel.kt index d06cfa7d51..dd6ab203b9 100644 --- a/app/src/main/java/org/groundplatform/android/ui/common/BaseMapViewModel.kt +++ b/app/src/main/java/org/groundplatform/android/ui/common/BaseMapViewModel.kt @@ -46,7 +46,6 @@ import kotlinx.coroutines.flow.withIndex import kotlinx.coroutines.launch import org.groundplatform.android.common.Constants.DEFAULT_LOI_ZOOM_LEVEL import org.groundplatform.android.model.Survey -import org.groundplatform.android.model.geometry.Coordinates import org.groundplatform.android.model.imagery.TileSource import org.groundplatform.android.model.map.CameraPosition import org.groundplatform.android.model.map.MapType @@ -65,6 +64,7 @@ import org.groundplatform.android.ui.map.NewCameraPositionViaCoordinates import org.groundplatform.android.ui.map.NewCameraPositionViaCoordinatesAndZoomLevel import org.groundplatform.android.ui.map.gms.GmsExt.toBounds import org.groundplatform.android.ui.map.gms.toCoordinates +import org.groundplatform.domain.model.geometry.Coordinates import timber.log.Timber open class BaseMapViewModel diff --git a/app/src/main/java/org/groundplatform/android/ui/datacollection/tasks/polygon/DrawAreaTaskViewModel.kt b/app/src/main/java/org/groundplatform/android/ui/datacollection/tasks/polygon/DrawAreaTaskViewModel.kt index 3b515bd251..5216852807 100644 --- a/app/src/main/java/org/groundplatform/android/ui/datacollection/tasks/polygon/DrawAreaTaskViewModel.kt +++ b/app/src/main/java/org/groundplatform/android/ui/datacollection/tasks/polygon/DrawAreaTaskViewModel.kt @@ -36,7 +36,6 @@ import kotlinx.coroutines.launch import org.groundplatform.android.R import org.groundplatform.android.data.local.LocalValueStore import org.groundplatform.android.data.uuid.OfflineUuidGenerator -import org.groundplatform.android.model.geometry.Coordinates import org.groundplatform.android.model.geometry.LineString import org.groundplatform.android.model.geometry.LinearRing import org.groundplatform.android.model.geometry.Polygon @@ -62,6 +61,7 @@ import org.groundplatform.android.ui.util.isSelfIntersecting import org.groundplatform.android.usecases.user.GetUserSettingsUseCase import org.groundplatform.android.util.distanceTo import org.groundplatform.android.util.penult +import org.groundplatform.domain.model.geometry.Coordinates import org.jetbrains.annotations.VisibleForTesting import timber.log.Timber diff --git a/app/src/main/java/org/groundplatform/android/ui/map/CameraUpdateRequest.kt b/app/src/main/java/org/groundplatform/android/ui/map/CameraUpdateRequest.kt index a7fa39ba40..99458c4060 100644 --- a/app/src/main/java/org/groundplatform/android/ui/map/CameraUpdateRequest.kt +++ b/app/src/main/java/org/groundplatform/android/ui/map/CameraUpdateRequest.kt @@ -16,8 +16,8 @@ package org.groundplatform.android.ui.map import kotlin.math.max -import org.groundplatform.android.model.geometry.Coordinates import org.groundplatform.android.model.map.Bounds +import org.groundplatform.domain.model.geometry.Coordinates sealed class CameraUpdateRequest diff --git a/app/src/main/java/org/groundplatform/android/ui/map/MapFragment.kt b/app/src/main/java/org/groundplatform/android/ui/map/MapFragment.kt index 9529ea1afb..3b1932b099 100644 --- a/app/src/main/java/org/groundplatform/android/ui/map/MapFragment.kt +++ b/app/src/main/java/org/groundplatform/android/ui/map/MapFragment.kt @@ -18,12 +18,12 @@ package org.groundplatform.android.ui.map import android.annotation.SuppressLint import androidx.annotation.IdRes import kotlinx.coroutines.flow.SharedFlow -import org.groundplatform.android.model.geometry.Coordinates import org.groundplatform.android.model.imagery.TileSource import org.groundplatform.android.model.map.Bounds import org.groundplatform.android.model.map.CameraPosition import org.groundplatform.android.model.map.MapType import org.groundplatform.android.ui.common.AbstractFragment +import org.groundplatform.domain.model.geometry.Coordinates /** Implementation of Fragment which supports displaying a map. */ interface MapFragment { @@ -75,11 +75,15 @@ interface MapFragment { /** Disables map gestures for rotation. */ fun disableRotation() - /** Centers the map viewport around the specified [Coordinates]. */ + /** + * Centers the map viewport around the specified + * [org.groundplatform.domain.model.geometry.Coordinates]. + */ fun moveCamera(coordinates: Coordinates, shouldAnimate: Boolean) /** - * Centers the map viewport around the specified [Coordinates] and updates the map's current zoom + * Centers the map viewport around the specified + * [org.groundplatform.domain.model.geometry.Coordinates] and updates the map's current zoom * level. */ fun moveCamera(coordinates: Coordinates, zoomLevel: Float, shouldAnimate: Boolean) @@ -98,7 +102,10 @@ interface MapFragment { /** Updates an existing [Feature] present on the map. */ fun updateFeature(feature: Feature) - /** Returns the actual distance in pixels between provided [Coordinates]s. */ + /** + * Returns the actual distance in pixels between provided + * [org.groundplatform.domain.model.geometry.Coordinates]s. + */ fun getDistanceInPixels(coordinates1: Coordinates, coordinates2: Coordinates): Double fun addTileOverlay(source: TileSource) diff --git a/app/src/main/java/org/groundplatform/android/ui/map/gms/ConverterExt.kt b/app/src/main/java/org/groundplatform/android/ui/map/gms/ConverterExt.kt index a554e20bfa..333ed679b0 100644 --- a/app/src/main/java/org/groundplatform/android/ui/map/gms/ConverterExt.kt +++ b/app/src/main/java/org/groundplatform/android/ui/map/gms/ConverterExt.kt @@ -18,8 +18,8 @@ package org.groundplatform.android.ui.map.gms import android.location.Location import com.google.android.gms.maps.model.LatLng import com.google.android.gms.maps.model.LatLngBounds -import org.groundplatform.android.model.geometry.Coordinates import org.groundplatform.android.model.map.Bounds +import org.groundplatform.domain.model.geometry.Coordinates fun LatLng.toModelObject(): Coordinates = Coordinates(this.latitude, this.longitude) diff --git a/app/src/main/java/org/groundplatform/android/ui/map/gms/GmsExt.kt b/app/src/main/java/org/groundplatform/android/ui/map/gms/GmsExt.kt index 89e2d33339..9e361fb00e 100644 --- a/app/src/main/java/org/groundplatform/android/ui/map/gms/GmsExt.kt +++ b/app/src/main/java/org/groundplatform/android/ui/map/gms/GmsExt.kt @@ -16,7 +16,6 @@ package org.groundplatform.android.ui.map.gms import com.google.android.gms.maps.model.LatLngBounds -import org.groundplatform.android.model.geometry.Coordinates import org.groundplatform.android.model.geometry.Geometry import org.groundplatform.android.model.geometry.LineString import org.groundplatform.android.model.geometry.LinearRing @@ -24,6 +23,7 @@ import org.groundplatform.android.model.geometry.MultiPolygon import org.groundplatform.android.model.geometry.Point import org.groundplatform.android.model.geometry.Polygon import org.groundplatform.android.model.map.Bounds +import org.groundplatform.domain.model.geometry.Coordinates /** Extensions for indirectly using GMS functions in map-provider agnostic codebase. */ object GmsExt { @@ -48,7 +48,10 @@ object GmsExt { return null } - /** Returns the list of [Coordinates] in the geometry or in the outer shell of the geometry. */ + /** + * Returns the list of [org.groundplatform.domain.model.geometry.Coordinates] in the geometry or + * in the outer shell of the geometry. + */ fun Geometry.getShellCoordinates(): List = when (this) { is Point -> listOf(coordinates) diff --git a/app/src/main/java/org/groundplatform/android/ui/map/gms/GoogleMapsFragment.kt b/app/src/main/java/org/groundplatform/android/ui/map/gms/GoogleMapsFragment.kt index 278ad8e0c5..c1881cc5d3 100644 --- a/app/src/main/java/org/groundplatform/android/ui/map/gms/GoogleMapsFragment.kt +++ b/app/src/main/java/org/groundplatform/android/ui/map/gms/GoogleMapsFragment.kt @@ -44,7 +44,6 @@ import kotlin.math.sqrt import kotlinx.collections.immutable.toImmutableList import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.launch -import org.groundplatform.android.model.geometry.Coordinates import org.groundplatform.android.model.imagery.LocalTileSource import org.groundplatform.android.model.imagery.RemoteMogTileSource import org.groundplatform.android.model.imagery.TileSource @@ -59,6 +58,7 @@ import org.groundplatform.android.ui.map.gms.mog.MogSourceProvider.DEFAULT_MOG_M import org.groundplatform.android.ui.map.gms.mog.MogTileProvider import org.groundplatform.android.util.invert import org.groundplatform.android.util.systemInsets +import org.groundplatform.domain.model.geometry.Coordinates import timber.log.Timber const val TILE_OVERLAY_Z = 0f diff --git a/app/src/main/java/org/groundplatform/android/ui/map/gms/features/LineStringRenderer.kt b/app/src/main/java/org/groundplatform/android/ui/map/gms/features/LineStringRenderer.kt index 0299ce8c2e..307e226667 100644 --- a/app/src/main/java/org/groundplatform/android/ui/map/gms/features/LineStringRenderer.kt +++ b/app/src/main/java/org/groundplatform/android/ui/map/gms/features/LineStringRenderer.kt @@ -42,7 +42,7 @@ constructor( private val tooltipMarkerRenderer: TooltipMarkerRenderer, ) : MapsItemRenderer { - // These must be done lazily since resources are not available before the app completes + // These must be done lazily since composeResources are not available before the app completes // initialization. private val defaultStrokeWidth by lazy { resources.getDimension(R.dimen.line_geometry_width) } private val circleCap by lazy { diff --git a/app/src/main/java/org/groundplatform/android/ui/map/gms/mog/TileCoordinates.kt b/app/src/main/java/org/groundplatform/android/ui/map/gms/mog/TileCoordinates.kt index 8f15b8f60b..f0cd60bd8f 100644 --- a/app/src/main/java/org/groundplatform/android/ui/map/gms/mog/TileCoordinates.kt +++ b/app/src/main/java/org/groundplatform/android/ui/map/gms/mog/TileCoordinates.kt @@ -18,8 +18,8 @@ package org.groundplatform.android.ui.map.gms.mog import kotlin.math.ln import kotlin.math.tan -import org.groundplatform.android.model.geometry.Coordinates import org.groundplatform.android.model.map.Bounds +import org.groundplatform.domain.model.geometry.Coordinates /** * Uniquely identifies the coordinates of a web mercator tile by its X and Y coordinates and its diff --git a/app/src/main/java/org/groundplatform/android/ui/util/PolygonUtil.kt b/app/src/main/java/org/groundplatform/android/ui/util/PolygonUtil.kt index aa41881afe..3e31ca2b04 100644 --- a/app/src/main/java/org/groundplatform/android/ui/util/PolygonUtil.kt +++ b/app/src/main/java/org/groundplatform/android/ui/util/PolygonUtil.kt @@ -20,8 +20,8 @@ import java.util.Locale import kotlin.math.PI import kotlin.math.abs import kotlin.math.cos -import org.groundplatform.android.model.geometry.Coordinates import org.groundplatform.android.model.settings.MeasurementUnits +import org.groundplatform.domain.model.geometry.Coordinates @VisibleForTesting const val SQUARE_METERS_PER_ACRE = 4046.86 @VisibleForTesting const val SQUARE_METERS_PER_HECTARE = 10_000 diff --git a/app/src/main/java/org/groundplatform/android/util/CoordinatesExt.kt b/app/src/main/java/org/groundplatform/android/util/CoordinatesExt.kt index 521f332eb7..c21a207109 100644 --- a/app/src/main/java/org/groundplatform/android/util/CoordinatesExt.kt +++ b/app/src/main/java/org/groundplatform/android/util/CoordinatesExt.kt @@ -18,7 +18,7 @@ package org.groundplatform.android.util import android.location.Location import com.google.android.gms.maps.model.LatLng import kotlin.math.abs -import org.groundplatform.android.model.geometry.Coordinates +import org.groundplatform.domain.model.geometry.Coordinates /** Converts the given coordinates in decimal format to D°M′S″ format. */ fun Coordinates.toDmsFormat(): String = "${convertLatToDms(lat)} ${convertLongToDms(lng)}" diff --git a/app/src/test/java/org/groundplatform/android/FakeData.kt b/app/src/test/java/org/groundplatform/android/FakeData.kt index 9eed704955..2ee14afa5e 100644 --- a/app/src/test/java/org/groundplatform/android/FakeData.kt +++ b/app/src/test/java/org/groundplatform/android/FakeData.kt @@ -20,7 +20,6 @@ import org.groundplatform.android.model.AuditInfo import org.groundplatform.android.model.Survey import org.groundplatform.android.model.TermsOfService import org.groundplatform.android.model.User -import org.groundplatform.android.model.geometry.Coordinates import org.groundplatform.android.model.geometry.LinearRing import org.groundplatform.android.model.geometry.MultiPolygon import org.groundplatform.android.model.geometry.Point @@ -42,6 +41,7 @@ import org.groundplatform.android.proto.SurveyKt.dataSharingTerms import org.groundplatform.android.proto.copy import org.groundplatform.android.ui.map.Feature import org.groundplatform.android.ui.map.gms.features.FeatureClusterItem +import org.groundplatform.domain.model.geometry.Coordinates /** * Shared test data constants. Tests are expected to override existing or set missing values when diff --git a/app/src/test/java/org/groundplatform/android/data/local/LocalLocationOfInterestStoreTest.kt b/app/src/test/java/org/groundplatform/android/data/local/LocalLocationOfInterestStoreTest.kt index c0e70dd8ad..880d423c1c 100644 --- a/app/src/test/java/org/groundplatform/android/data/local/LocalLocationOfInterestStoreTest.kt +++ b/app/src/test/java/org/groundplatform/android/data/local/LocalLocationOfInterestStoreTest.kt @@ -36,7 +36,6 @@ import org.groundplatform.android.data.local.stores.LocalSurveyStore import org.groundplatform.android.data.local.stores.LocalUserStore import org.groundplatform.android.model.Survey import org.groundplatform.android.model.User -import org.groundplatform.android.model.geometry.Coordinates import org.groundplatform.android.model.geometry.LinearRing import org.groundplatform.android.model.geometry.Point import org.groundplatform.android.model.geometry.Polygon @@ -49,6 +48,7 @@ import org.groundplatform.android.model.submission.TextTaskData import org.groundplatform.android.model.submission.ValueDelta import org.groundplatform.android.model.task.Task import org.groundplatform.android.ui.map.gms.GmsExt.getShellCoordinates +import org.groundplatform.domain.model.geometry.Coordinates import org.junit.Test import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner diff --git a/app/src/test/java/org/groundplatform/android/data/local/LocalSubmissionStoreTest.kt b/app/src/test/java/org/groundplatform/android/data/local/LocalSubmissionStoreTest.kt index 8357aa42a3..0a3be45e74 100644 --- a/app/src/test/java/org/groundplatform/android/data/local/LocalSubmissionStoreTest.kt +++ b/app/src/test/java/org/groundplatform/android/data/local/LocalSubmissionStoreTest.kt @@ -33,7 +33,6 @@ import org.groundplatform.android.data.local.stores.LocalSurveyStore import org.groundplatform.android.data.local.stores.LocalUserStore import org.groundplatform.android.model.Survey import org.groundplatform.android.model.User -import org.groundplatform.android.model.geometry.Coordinates import org.groundplatform.android.model.geometry.Point import org.groundplatform.android.model.job.Job import org.groundplatform.android.model.job.Style @@ -45,6 +44,7 @@ import org.groundplatform.android.model.submission.SubmissionData import org.groundplatform.android.model.submission.TextTaskData import org.groundplatform.android.model.submission.ValueDelta import org.groundplatform.android.model.task.Task +import org.groundplatform.domain.model.geometry.Coordinates import org.hamcrest.MatcherAssert import org.hamcrest.Matchers import org.junit.Test diff --git a/app/src/test/java/org/groundplatform/android/data/local/room/converter/ValueJsonConverterTest.kt b/app/src/test/java/org/groundplatform/android/data/local/room/converter/ValueJsonConverterTest.kt index c42462492d..99edb44883 100644 --- a/app/src/test/java/org/groundplatform/android/data/local/room/converter/ValueJsonConverterTest.kt +++ b/app/src/test/java/org/groundplatform/android/data/local/room/converter/ValueJsonConverterTest.kt @@ -18,7 +18,6 @@ package org.groundplatform.android.data.local.room.converter import com.google.common.truth.Truth.assertThat import kotlinx.collections.immutable.persistentListOf import org.groundplatform.android.FakeData -import org.groundplatform.android.model.geometry.Coordinates import org.groundplatform.android.model.geometry.LineString import org.groundplatform.android.model.geometry.LinearRing import org.groundplatform.android.model.geometry.Point @@ -34,6 +33,7 @@ import org.groundplatform.android.model.submission.TextTaskData import org.groundplatform.android.model.task.MultipleChoice import org.groundplatform.android.model.task.Option import org.groundplatform.android.model.task.Task +import org.groundplatform.domain.model.geometry.Coordinates import org.json.JSONArray import org.junit.Test import org.junit.runner.RunWith diff --git a/app/src/test/java/org/groundplatform/android/data/remote/firebase/protobuf/LoiMutationConverterTest.kt b/app/src/test/java/org/groundplatform/android/data/remote/firebase/protobuf/LoiMutationConverterTest.kt index 09d5bee96a..844014beb8 100644 --- a/app/src/test/java/org/groundplatform/android/data/remote/firebase/protobuf/LoiMutationConverterTest.kt +++ b/app/src/test/java/org/groundplatform/android/data/remote/firebase/protobuf/LoiMutationConverterTest.kt @@ -21,7 +21,6 @@ import java.time.Instant import java.util.Date import org.groundplatform.android.FakeData import org.groundplatform.android.FakeData.LOCATION_OF_INTEREST_NAME -import org.groundplatform.android.model.geometry.Coordinates import org.groundplatform.android.model.geometry.LinearRing import org.groundplatform.android.model.geometry.Point import org.groundplatform.android.model.geometry.Polygon @@ -47,6 +46,7 @@ import org.groundplatform.android.proto.LocationOfInterest.SOURCE_FIELD_NUMBER import org.groundplatform.android.proto.LocationOfInterest.SUBMISSION_COUNT_FIELD_NUMBER import org.groundplatform.android.proto.Point.COORDINATES_FIELD_NUMBER import org.groundplatform.android.proto.Polygon.SHELL_FIELD_NUMBER +import org.groundplatform.domain.model.geometry.Coordinates import org.junit.Assert.assertThrows import org.junit.Test diff --git a/app/src/test/java/org/groundplatform/android/data/remote/firebase/protobuf/ModelToProtoExtKtTest.kt b/app/src/test/java/org/groundplatform/android/data/remote/firebase/protobuf/ModelToProtoExtKtTest.kt index 911ace189a..9edb2c8f6e 100644 --- a/app/src/test/java/org/groundplatform/android/data/remote/firebase/protobuf/ModelToProtoExtKtTest.kt +++ b/app/src/test/java/org/groundplatform/android/data/remote/firebase/protobuf/ModelToProtoExtKtTest.kt @@ -20,7 +20,6 @@ import com.google.protobuf.timestamp import java.time.Instant import java.util.Date import org.groundplatform.android.model.User -import org.groundplatform.android.model.geometry.Coordinates import org.groundplatform.android.model.geometry.Point import org.groundplatform.android.model.locationofinterest.generateProperties import org.groundplatform.android.model.mutation.LocationOfInterestMutation @@ -32,6 +31,7 @@ import org.groundplatform.android.proto.coordinates import org.groundplatform.android.proto.geometry import org.groundplatform.android.proto.locationOfInterest import org.groundplatform.android.proto.point +import org.groundplatform.domain.model.geometry.Coordinates import org.junit.Assert.assertThrows import org.junit.Test diff --git a/app/src/test/java/org/groundplatform/android/data/remote/firebase/schema/GeometryConverterTest.kt b/app/src/test/java/org/groundplatform/android/data/remote/firebase/schema/GeometryConverterTest.kt index 88005e3ffa..ec3b2773df 100644 --- a/app/src/test/java/org/groundplatform/android/data/remote/firebase/schema/GeometryConverterTest.kt +++ b/app/src/test/java/org/groundplatform/android/data/remote/firebase/schema/GeometryConverterTest.kt @@ -18,7 +18,6 @@ package org.groundplatform.android.data.remote.firebase.schema import com.google.common.truth.Truth.assertThat import org.groundplatform.android.data.remote.firebase.schema.GeometryConverter.toGeometry -import org.groundplatform.android.model.geometry.Coordinates import org.groundplatform.android.model.geometry.LinearRing import org.groundplatform.android.model.geometry.MultiPolygon import org.groundplatform.android.model.geometry.Point @@ -29,6 +28,7 @@ import org.groundplatform.android.proto.linearRing import org.groundplatform.android.proto.multiPolygon import org.groundplatform.android.proto.point import org.groundplatform.android.proto.polygon +import org.groundplatform.domain.model.geometry.Coordinates import org.junit.Test typealias Path = Array> diff --git a/app/src/test/java/org/groundplatform/android/data/remote/firebase/schema/LoiConverterTest.kt b/app/src/test/java/org/groundplatform/android/data/remote/firebase/schema/LoiConverterTest.kt index 8e5c219a86..0e62db42ff 100644 --- a/app/src/test/java/org/groundplatform/android/data/remote/firebase/schema/LoiConverterTest.kt +++ b/app/src/test/java/org/groundplatform/android/data/remote/firebase/schema/LoiConverterTest.kt @@ -29,7 +29,6 @@ import org.groundplatform.android.data.remote.firebase.protobuf.toFirestoreMap import org.groundplatform.android.data.remote.firebase.schema.LoiConverter.toLoi import org.groundplatform.android.model.AuditInfo import org.groundplatform.android.model.Survey -import org.groundplatform.android.model.geometry.Coordinates import org.groundplatform.android.model.geometry.Point import org.groundplatform.android.model.job.Job import org.groundplatform.android.model.job.Style @@ -44,6 +43,7 @@ import org.groundplatform.android.proto.coordinates import org.groundplatform.android.proto.geometry import org.groundplatform.android.proto.locationOfInterest import org.groundplatform.android.proto.point +import org.groundplatform.domain.model.geometry.Coordinates import org.junit.Test import org.junit.runner.RunWith import org.mockito.Mock diff --git a/app/src/test/java/org/groundplatform/android/data/remote/firebase/schema/SubmissionMutationConverterTest.kt b/app/src/test/java/org/groundplatform/android/data/remote/firebase/schema/SubmissionMutationConverterTest.kt index fbea7b26e5..227cd536d7 100644 --- a/app/src/test/java/org/groundplatform/android/data/remote/firebase/schema/SubmissionMutationConverterTest.kt +++ b/app/src/test/java/org/groundplatform/android/data/remote/firebase/schema/SubmissionMutationConverterTest.kt @@ -22,7 +22,6 @@ import kotlinx.collections.immutable.persistentListOf import org.groundplatform.android.FakeData import org.groundplatform.android.data.remote.firebase.protobuf.createSubmissionMessage import org.groundplatform.android.data.remote.firebase.protobuf.toFirestoreMap -import org.groundplatform.android.model.geometry.Coordinates import org.groundplatform.android.model.geometry.LinearRing import org.groundplatform.android.model.geometry.Point import org.groundplatform.android.model.geometry.Polygon @@ -74,6 +73,7 @@ import org.groundplatform.android.proto.TaskData.SKIPPED_FIELD_NUMBER import org.groundplatform.android.proto.TaskData.TASK_ID_FIELD_NUMBER import org.groundplatform.android.proto.TaskData.TEXT_RESPONSE_FIELD_NUMBER import org.groundplatform.android.proto.TaskData.TextResponse.TEXT_FIELD_NUMBER +import org.groundplatform.domain.model.geometry.Coordinates import org.junit.Assert.assertThrows import org.junit.Test import org.junit.runner.RunWith diff --git a/app/src/test/java/org/groundplatform/android/repository/LocationOfInterestRepositoryTest.kt b/app/src/test/java/org/groundplatform/android/repository/LocationOfInterestRepositoryTest.kt index 0eab6eacaa..1b09626b7b 100644 --- a/app/src/test/java/org/groundplatform/android/repository/LocationOfInterestRepositoryTest.kt +++ b/app/src/test/java/org/groundplatform/android/repository/LocationOfInterestRepositoryTest.kt @@ -29,7 +29,6 @@ import org.groundplatform.android.FakeData import org.groundplatform.android.data.local.stores.LocalLocationOfInterestStore import org.groundplatform.android.data.remote.FakeRemoteDataStore import org.groundplatform.android.data.sync.MutationSyncWorkManager -import org.groundplatform.android.model.geometry.Coordinates import org.groundplatform.android.model.geometry.LinearRing import org.groundplatform.android.model.geometry.Point import org.groundplatform.android.model.geometry.Polygon @@ -39,6 +38,7 @@ import org.groundplatform.android.proto.Survey.DataVisibility import org.groundplatform.android.system.auth.FakeAuthenticationManager import org.groundplatform.android.usecases.survey.ActivateSurveyUseCase import org.groundplatform.android.usecases.survey.SyncSurveyUseCase +import org.groundplatform.domain.model.geometry.Coordinates import org.junit.Before import org.junit.Test import org.junit.runner.RunWith diff --git a/app/src/test/java/org/groundplatform/android/system/GeocodingManagerTest.kt b/app/src/test/java/org/groundplatform/android/system/GeocodingManagerTest.kt index 94fd22235e..6b131c0dfe 100644 --- a/app/src/test/java/org/groundplatform/android/system/GeocodingManagerTest.kt +++ b/app/src/test/java/org/groundplatform/android/system/GeocodingManagerTest.kt @@ -24,9 +24,9 @@ import javax.inject.Inject import kotlin.test.assertEquals import org.groundplatform.android.BaseHiltTest import org.groundplatform.android.di.SystemModule -import org.groundplatform.android.model.geometry.Coordinates import org.groundplatform.android.model.map.Bounds import org.groundplatform.android.ui.map.gms.GmsExt.center +import org.groundplatform.domain.model.geometry.Coordinates import org.junit.Test import org.junit.runner.RunWith import org.mockito.ArgumentMatchers.anyInt diff --git a/app/src/test/java/org/groundplatform/android/ui/datacollection/DataCollectionFragmentTest.kt b/app/src/test/java/org/groundplatform/android/ui/datacollection/DataCollectionFragmentTest.kt index 34f389cd53..ba8a73d90c 100644 --- a/app/src/test/java/org/groundplatform/android/ui/datacollection/DataCollectionFragmentTest.kt +++ b/app/src/test/java/org/groundplatform/android/ui/datacollection/DataCollectionFragmentTest.kt @@ -38,7 +38,6 @@ import org.groundplatform.android.R import org.groundplatform.android.data.local.room.converter.SubmissionDeltasConverter import org.groundplatform.android.data.remote.FakeRemoteDataStore import org.groundplatform.android.data.sync.MutationSyncWorkManager -import org.groundplatform.android.model.geometry.Coordinates import org.groundplatform.android.model.geometry.Point import org.groundplatform.android.model.map.CameraPosition import org.groundplatform.android.model.mutation.Mutation @@ -60,6 +59,7 @@ import org.groundplatform.android.repository.UserRepository import org.groundplatform.android.testrules.FragmentScenarioRule import org.groundplatform.android.ui.datacollection.tasks.point.DropPinTaskViewModel import org.groundplatform.android.usecases.survey.ActivateSurveyUseCase +import org.groundplatform.domain.model.geometry.Coordinates import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith diff --git a/app/src/test/java/org/groundplatform/android/ui/datacollection/tasks/location/CaptureLocationTaskFragmentTest.kt b/app/src/test/java/org/groundplatform/android/ui/datacollection/tasks/location/CaptureLocationTaskFragmentTest.kt index 6dbe7dabb2..cea7880348 100644 --- a/app/src/test/java/org/groundplatform/android/ui/datacollection/tasks/location/CaptureLocationTaskFragmentTest.kt +++ b/app/src/test/java/org/groundplatform/android/ui/datacollection/tasks/location/CaptureLocationTaskFragmentTest.kt @@ -23,7 +23,6 @@ import javax.inject.Inject import kotlinx.coroutines.flow.MutableSharedFlow import org.groundplatform.android.FlakyTest import org.groundplatform.android.R -import org.groundplatform.android.model.geometry.Coordinates import org.groundplatform.android.model.geometry.Point import org.groundplatform.android.model.job.Job import org.groundplatform.android.model.submission.CaptureLocationTaskData @@ -36,6 +35,7 @@ import org.groundplatform.android.ui.datacollection.DataCollectionViewModel import org.groundplatform.android.ui.datacollection.components.ButtonAction import org.groundplatform.android.ui.datacollection.components.ButtonActionState import org.groundplatform.android.ui.datacollection.tasks.BaseTaskFragmentTest +import org.groundplatform.domain.model.geometry.Coordinates import org.junit.Test import org.junit.runner.RunWith import org.mockito.Mock diff --git a/app/src/test/java/org/groundplatform/android/ui/datacollection/tasks/point/DropPinTaskFragmentTest.kt b/app/src/test/java/org/groundplatform/android/ui/datacollection/tasks/point/DropPinTaskFragmentTest.kt index a52c64c607..029cc899af 100644 --- a/app/src/test/java/org/groundplatform/android/ui/datacollection/tasks/point/DropPinTaskFragmentTest.kt +++ b/app/src/test/java/org/groundplatform/android/ui/datacollection/tasks/point/DropPinTaskFragmentTest.kt @@ -19,7 +19,6 @@ import dagger.hilt.android.testing.BindValue import dagger.hilt.android.testing.HiltAndroidTest import javax.inject.Inject import org.groundplatform.android.data.local.LocalValueStore -import org.groundplatform.android.model.geometry.Coordinates import org.groundplatform.android.model.geometry.Point import org.groundplatform.android.model.job.Job import org.groundplatform.android.model.job.Style @@ -31,6 +30,7 @@ import org.groundplatform.android.ui.datacollection.DataCollectionViewModel import org.groundplatform.android.ui.datacollection.components.ButtonAction import org.groundplatform.android.ui.datacollection.components.ButtonActionState import org.groundplatform.android.ui.datacollection.tasks.BaseTaskFragmentTest +import org.groundplatform.domain.model.geometry.Coordinates import org.junit.Before import org.junit.Test import org.junit.runner.RunWith diff --git a/app/src/test/java/org/groundplatform/android/ui/datacollection/tasks/point/DropPinTaskViewModelTest.kt b/app/src/test/java/org/groundplatform/android/ui/datacollection/tasks/point/DropPinTaskViewModelTest.kt index b8f92042c9..f97663fd0f 100644 --- a/app/src/test/java/org/groundplatform/android/ui/datacollection/tasks/point/DropPinTaskViewModelTest.kt +++ b/app/src/test/java/org/groundplatform/android/ui/datacollection/tasks/point/DropPinTaskViewModelTest.kt @@ -28,13 +28,13 @@ import kotlinx.coroutines.test.advanceUntilIdle import org.groundplatform.android.BaseHiltTest import org.groundplatform.android.FakeData.JOB import org.groundplatform.android.FakeData.newTask -import org.groundplatform.android.model.geometry.Coordinates import org.groundplatform.android.model.geometry.Point import org.groundplatform.android.model.map.CameraPosition import org.groundplatform.android.model.submission.DropPinTaskData import org.groundplatform.android.model.submission.TaskData import org.groundplatform.android.ui.datacollection.components.ButtonAction import org.groundplatform.android.ui.datacollection.tasks.TaskPositionInterface +import org.groundplatform.domain.model.geometry.Coordinates import org.junit.Test import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner diff --git a/app/src/test/java/org/groundplatform/android/ui/datacollection/tasks/polygon/DrawAreaTaskFragmentTest.kt b/app/src/test/java/org/groundplatform/android/ui/datacollection/tasks/polygon/DrawAreaTaskFragmentTest.kt index 84e5f73fdc..d81a2b73c3 100644 --- a/app/src/test/java/org/groundplatform/android/ui/datacollection/tasks/polygon/DrawAreaTaskFragmentTest.kt +++ b/app/src/test/java/org/groundplatform/android/ui/datacollection/tasks/polygon/DrawAreaTaskFragmentTest.kt @@ -19,7 +19,6 @@ import com.google.common.truth.Truth.assertThat import dagger.hilt.android.testing.BindValue import dagger.hilt.android.testing.HiltAndroidTest import javax.inject.Inject -import org.groundplatform.android.model.geometry.Coordinates import org.groundplatform.android.model.geometry.LineString import org.groundplatform.android.model.geometry.LinearRing import org.groundplatform.android.model.geometry.Polygon @@ -33,6 +32,7 @@ import org.groundplatform.android.ui.datacollection.DataCollectionViewModel import org.groundplatform.android.ui.datacollection.components.ButtonAction import org.groundplatform.android.ui.datacollection.components.ButtonActionState import org.groundplatform.android.ui.datacollection.tasks.BaseTaskFragmentTest +import org.groundplatform.domain.model.geometry.Coordinates import org.junit.Test import org.junit.runner.RunWith import org.mockito.Mock diff --git a/app/src/test/java/org/groundplatform/android/ui/datacollection/tasks/polygon/DrawAreaTaskViewModelTest.kt b/app/src/test/java/org/groundplatform/android/ui/datacollection/tasks/polygon/DrawAreaTaskViewModelTest.kt index 4da473000f..9048adc29c 100644 --- a/app/src/test/java/org/groundplatform/android/ui/datacollection/tasks/polygon/DrawAreaTaskViewModelTest.kt +++ b/app/src/test/java/org/groundplatform/android/ui/datacollection/tasks/polygon/DrawAreaTaskViewModelTest.kt @@ -37,7 +37,6 @@ import kotlinx.coroutines.flow.merge import kotlinx.coroutines.test.advanceUntilIdle import org.groundplatform.android.BaseHiltTest import org.groundplatform.android.data.local.LocalValueStore -import org.groundplatform.android.model.geometry.Coordinates import org.groundplatform.android.model.geometry.LineString import org.groundplatform.android.model.geometry.LinearRing import org.groundplatform.android.model.geometry.Polygon @@ -53,6 +52,7 @@ import org.groundplatform.android.ui.datacollection.tasks.TaskPositionInterface import org.groundplatform.android.ui.datacollection.tasks.polygon.DrawAreaTaskViewModel.Companion.DISTANCE_THRESHOLD_DP import org.groundplatform.android.ui.map.Feature import org.groundplatform.android.ui.map.gms.GmsExt.getShellCoordinates +import org.groundplatform.domain.model.geometry.Coordinates import org.junit.Assert.assertThrows import org.junit.Test import org.junit.runner.RunWith diff --git a/app/src/test/java/org/groundplatform/android/ui/home/mapcontainer/HomeScreenMapContainerViewModelTest.kt b/app/src/test/java/org/groundplatform/android/ui/home/mapcontainer/HomeScreenMapContainerViewModelTest.kt index 7622ed84e9..2d9e744112 100644 --- a/app/src/test/java/org/groundplatform/android/ui/home/mapcontainer/HomeScreenMapContainerViewModelTest.kt +++ b/app/src/test/java/org/groundplatform/android/ui/home/mapcontainer/HomeScreenMapContainerViewModelTest.kt @@ -31,7 +31,6 @@ import org.groundplatform.android.FakeData.LOCATION_OF_INTEREST_FEATURE import org.groundplatform.android.FakeData.SURVEY import org.groundplatform.android.FakeData.USER import org.groundplatform.android.data.remote.FakeRemoteDataStore -import org.groundplatform.android.model.geometry.Coordinates import org.groundplatform.android.model.map.Bounds import org.groundplatform.android.model.map.CameraPosition import org.groundplatform.android.repository.LocationOfInterestRepository @@ -41,6 +40,7 @@ import org.groundplatform.android.system.auth.FakeAuthenticationManager import org.groundplatform.android.ui.home.mapcontainer.jobs.AdHocDataCollectionButtonData import org.groundplatform.android.ui.home.mapcontainer.jobs.SelectedLoiSheetData import org.groundplatform.android.usecases.survey.ActivateSurveyUseCase +import org.groundplatform.domain.model.geometry.Coordinates import org.junit.Before import org.junit.Test import org.junit.runner.RunWith diff --git a/app/src/test/java/org/groundplatform/android/ui/home/mapcontainer/jobs/LoiJobSheetTest.kt b/app/src/test/java/org/groundplatform/android/ui/home/mapcontainer/jobs/LoiJobSheetTest.kt index 0b24fcbe41..77c9f2c7cb 100644 --- a/app/src/test/java/org/groundplatform/android/ui/home/mapcontainer/jobs/LoiJobSheetTest.kt +++ b/app/src/test/java/org/groundplatform/android/ui/home/mapcontainer/jobs/LoiJobSheetTest.kt @@ -25,12 +25,12 @@ import org.groundplatform.android.FakeData.USER import org.groundplatform.android.R import org.groundplatform.android.getString import org.groundplatform.android.model.AuditInfo -import org.groundplatform.android.model.geometry.Coordinates import org.groundplatform.android.model.geometry.Point import org.groundplatform.android.model.job.Job import org.groundplatform.android.model.job.Style import org.groundplatform.android.model.locationofinterest.LocationOfInterest import org.groundplatform.android.model.task.Task +import org.groundplatform.domain.model.geometry.Coordinates import org.junit.Rule import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner diff --git a/app/src/test/java/org/groundplatform/android/ui/map/gms/mog/MogClientTest.kt b/app/src/test/java/org/groundplatform/android/ui/map/gms/mog/MogClientTest.kt index 6881e54255..eb17f10dba 100644 --- a/app/src/test/java/org/groundplatform/android/ui/map/gms/mog/MogClientTest.kt +++ b/app/src/test/java/org/groundplatform/android/ui/map/gms/mog/MogClientTest.kt @@ -23,8 +23,8 @@ import kotlinx.coroutines.CompletableDeferred import kotlinx.coroutines.Deferred import kotlinx.coroutines.runBlocking import org.groundplatform.android.data.remote.RemoteStorageManager -import org.groundplatform.android.model.geometry.Coordinates import org.groundplatform.android.model.map.Bounds +import org.groundplatform.domain.model.geometry.Coordinates import org.junit.Assert.assertEquals import org.junit.Assert.assertNotNull import org.junit.Assert.assertNull diff --git a/app/src/test/java/org/groundplatform/android/ui/map/gms/mog/TileCoordinatesTest.kt b/app/src/test/java/org/groundplatform/android/ui/map/gms/mog/TileCoordinatesTest.kt index b75d0b15b0..ddebf14153 100644 --- a/app/src/test/java/org/groundplatform/android/ui/map/gms/mog/TileCoordinatesTest.kt +++ b/app/src/test/java/org/groundplatform/android/ui/map/gms/mog/TileCoordinatesTest.kt @@ -16,8 +16,8 @@ package org.groundplatform.android.ui.map.gms.mog import com.google.common.truth.Truth.assertThat -import org.groundplatform.android.model.geometry.Coordinates import org.groundplatform.android.model.map.Bounds +import org.groundplatform.domain.model.geometry.Coordinates import org.junit.Test class TileCoordinatesTest { diff --git a/app/src/test/java/org/groundplatform/android/ui/offlineareas/selector/OfflineAreaSelectorViewModelTest.kt b/app/src/test/java/org/groundplatform/android/ui/offlineareas/selector/OfflineAreaSelectorViewModelTest.kt index 0321ddbe02..18e791e5cb 100644 --- a/app/src/test/java/org/groundplatform/android/ui/offlineareas/selector/OfflineAreaSelectorViewModelTest.kt +++ b/app/src/test/java/org/groundplatform/android/ui/offlineareas/selector/OfflineAreaSelectorViewModelTest.kt @@ -26,7 +26,6 @@ import kotlinx.coroutines.test.resetMain import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.setMain import org.groundplatform.android.BaseHiltTest -import org.groundplatform.android.model.geometry.Coordinates import org.groundplatform.android.model.map.Bounds import org.groundplatform.android.model.map.CameraPosition import org.groundplatform.android.repository.LocationOfInterestRepository @@ -39,6 +38,7 @@ import org.groundplatform.android.system.PermissionsManager import org.groundplatform.android.system.SettingsManager import org.groundplatform.android.ui.offlineareas.selector.model.BottomTextState import org.groundplatform.android.util.toMbString +import org.groundplatform.domain.model.geometry.Coordinates import org.junit.After import org.junit.Assert.assertEquals import org.junit.Before diff --git a/app/src/test/java/org/groundplatform/android/ui/signin/SignInScreenTest.kt b/app/src/test/java/org/groundplatform/android/ui/signin/SignInScreenTest.kt index 659a6693dd..60912ee252 100644 --- a/app/src/test/java/org/groundplatform/android/ui/signin/SignInScreenTest.kt +++ b/app/src/test/java/org/groundplatform/android/ui/signin/SignInScreenTest.kt @@ -30,7 +30,7 @@ import com.google.firebase.firestore.FirebaseFirestoreException.Code import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.flow.MutableStateFlow import org.groundplatform.android.system.auth.SignInState -import org.groundplatform.android.ui.theme.AppTheme +import org.groundplatform.theme.AppTheme import org.junit.Before import org.junit.Rule import org.junit.Test diff --git a/app/src/test/java/org/groundplatform/android/ui/syncstatus/SyncStatusFragmentTest.kt b/app/src/test/java/org/groundplatform/android/ui/syncstatus/SyncStatusFragmentTest.kt index 7e961cac9a..e539bbdf91 100644 --- a/app/src/test/java/org/groundplatform/android/ui/syncstatus/SyncStatusFragmentTest.kt +++ b/app/src/test/java/org/groundplatform/android/ui/syncstatus/SyncStatusFragmentTest.kt @@ -38,10 +38,10 @@ import org.groundplatform.android.data.local.stores.LocalSubmissionStore import org.groundplatform.android.data.local.stores.LocalSurveyStore import org.groundplatform.android.data.local.stores.LocalUserStore import org.groundplatform.android.data.remote.FakeRemoteDataStore -import org.groundplatform.android.model.geometry.Coordinates import org.groundplatform.android.model.geometry.Point import org.groundplatform.android.repository.SurveyRepository import org.groundplatform.android.testrules.FragmentScenarioRule +import org.groundplatform.domain.model.geometry.Coordinates import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith diff --git a/app/src/test/java/org/groundplatform/android/usecases/submission/SubmitDataUseCaseTest.kt b/app/src/test/java/org/groundplatform/android/usecases/submission/SubmitDataUseCaseTest.kt index b33a459f7b..b9eb6705a6 100644 --- a/app/src/test/java/org/groundplatform/android/usecases/submission/SubmitDataUseCaseTest.kt +++ b/app/src/test/java/org/groundplatform/android/usecases/submission/SubmitDataUseCaseTest.kt @@ -23,7 +23,6 @@ import kotlin.test.assertFailsWith import org.groundplatform.android.BaseHiltTest import org.groundplatform.android.FakeData.newTask import org.groundplatform.android.data.sync.MutationSyncWorkManager -import org.groundplatform.android.model.geometry.Coordinates import org.groundplatform.android.model.geometry.Point import org.groundplatform.android.model.job.Job import org.groundplatform.android.model.submission.CaptureLocationTaskData @@ -32,6 +31,7 @@ import org.groundplatform.android.model.submission.ValueDelta import org.groundplatform.android.model.task.Task import org.groundplatform.android.repository.LocationOfInterestRepository import org.groundplatform.android.repository.SubmissionRepository +import org.groundplatform.domain.model.geometry.Coordinates import org.junit.Before import org.junit.Test import org.junit.runner.RunWith diff --git a/app/src/test/java/org/groundplatform/android/usecases/survey/RemoveOfflineSurveyUseCaseTest.kt b/app/src/test/java/org/groundplatform/android/usecases/survey/RemoveOfflineSurveyUseCaseTest.kt index 608aa1e4c3..343f7d6e92 100644 --- a/app/src/test/java/org/groundplatform/android/usecases/survey/RemoveOfflineSurveyUseCaseTest.kt +++ b/app/src/test/java/org/groundplatform/android/usecases/survey/RemoveOfflineSurveyUseCaseTest.kt @@ -25,9 +25,9 @@ import org.groundplatform.android.BaseHiltTest import org.groundplatform.android.FakeData.SURVEY import org.groundplatform.android.data.local.LocalValueStore import org.groundplatform.android.data.local.stores.LocalSurveyStore -import org.groundplatform.android.model.geometry.Coordinates import org.groundplatform.android.model.map.CameraPosition import org.groundplatform.android.repository.SurveyRepository +import org.groundplatform.domain.model.geometry.Coordinates import org.junit.Test import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner diff --git a/app/src/test/java/org/groundplatform/android/util/CoordinatesExtTest.kt b/app/src/test/java/org/groundplatform/android/util/CoordinatesExtTest.kt index aa26ab5092..32c5d42e40 100644 --- a/app/src/test/java/org/groundplatform/android/util/CoordinatesExtTest.kt +++ b/app/src/test/java/org/groundplatform/android/util/CoordinatesExtTest.kt @@ -19,7 +19,7 @@ package org.groundplatform.android.util import com.google.android.gms.maps.model.LatLng import com.google.common.truth.Truth.assertThat import junit.framework.TestCase.assertEquals -import org.groundplatform.android.model.geometry.Coordinates +import org.groundplatform.domain.model.geometry.Coordinates import org.junit.Test import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner diff --git a/app/src/test/java/org/groundplatform/android/util/PolygonUtilTest.kt b/app/src/test/java/org/groundplatform/android/util/PolygonUtilTest.kt index a86de7fef3..2a99b9df5e 100644 --- a/app/src/test/java/org/groundplatform/android/util/PolygonUtilTest.kt +++ b/app/src/test/java/org/groundplatform/android/util/PolygonUtilTest.kt @@ -20,7 +20,6 @@ import java.util.Locale import junit.framework.TestCase.assertFalse import kotlin.test.Test import kotlin.test.assertTrue -import org.groundplatform.android.model.geometry.Coordinates import org.groundplatform.android.model.settings.MeasurementUnits import org.groundplatform.android.ui.util.SQUARE_FEET_PER_SQUARE_METER import org.groundplatform.android.ui.util.SQUARE_METERS_PER_ACRE @@ -30,6 +29,7 @@ import org.groundplatform.android.ui.util.getFormattedArea import org.groundplatform.android.ui.util.isClosed import org.groundplatform.android.ui.util.isSelfIntersecting import org.groundplatform.android.ui.util.segmentsIntersect +import org.groundplatform.domain.model.geometry.Coordinates import org.junit.Assert.assertEquals import org.junit.runner.RunWith diff --git a/app/src/main/java/org/groundplatform/android/model/geometry/Coordinates.kt b/core/domain/src/commonMain/kotlin/org/groundplatform/domain/model/geometry/Coordinates.kt similarity index 94% rename from app/src/main/java/org/groundplatform/android/model/geometry/Coordinates.kt rename to core/domain/src/commonMain/kotlin/org/groundplatform/domain/model/geometry/Coordinates.kt index 68f3af8830..389be341d3 100644 --- a/app/src/main/java/org/groundplatform/android/model/geometry/Coordinates.kt +++ b/core/domain/src/commonMain/kotlin/org/groundplatform/domain/model/geometry/Coordinates.kt @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.groundplatform.android.model.geometry +package org.groundplatform.domain.model.geometry import kotlinx.serialization.Serializable From 193a17c2c94a3359e0d08a738718a28cc96f105d Mon Sep 17 00:00:00 2001 From: andreia Date: Mon, 2 Mar 2026 10:58:52 +0100 Subject: [PATCH 5/7] update theme import after merging latest changes --- .../org/groundplatform/android/ui/settings/SettingsActivity.kt | 2 +- .../org/groundplatform/android/ui/settings/SettingsScreen.kt | 2 +- .../android/ui/settings/components/SettingsItem.kt | 2 +- .../android/ui/settings/components/SettingsSelectItem.kt | 2 +- .../android/ui/settings/components/SettingsSwitchItem.kt | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/org/groundplatform/android/ui/settings/SettingsActivity.kt b/app/src/main/java/org/groundplatform/android/ui/settings/SettingsActivity.kt index b180d02d4a..cb478c535c 100644 --- a/app/src/main/java/org/groundplatform/android/ui/settings/SettingsActivity.kt +++ b/app/src/main/java/org/groundplatform/android/ui/settings/SettingsActivity.kt @@ -24,7 +24,7 @@ import androidx.core.os.LocaleListCompat import dagger.hilt.android.AndroidEntryPoint import org.groundplatform.android.ui.common.AbstractActivity import org.groundplatform.android.ui.main.MainActivity -import org.groundplatform.android.ui.theme.AppTheme +import org.groundplatform.theme.AppTheme @AndroidEntryPoint class SettingsActivity : AbstractActivity() { diff --git a/app/src/main/java/org/groundplatform/android/ui/settings/SettingsScreen.kt b/app/src/main/java/org/groundplatform/android/ui/settings/SettingsScreen.kt index b0c39af89f..bd881e51f8 100644 --- a/app/src/main/java/org/groundplatform/android/ui/settings/SettingsScreen.kt +++ b/app/src/main/java/org/groundplatform/android/ui/settings/SettingsScreen.kt @@ -41,7 +41,7 @@ import org.groundplatform.android.ui.settings.components.SettingsCategory import org.groundplatform.android.ui.settings.components.SettingsItem import org.groundplatform.android.ui.settings.components.SettingsSelectItem import org.groundplatform.android.ui.settings.components.SettingsSwitchItem -import org.groundplatform.android.ui.theme.AppTheme +import org.groundplatform.theme.AppTheme /** * Stateful composable for the settings screen. diff --git a/app/src/main/java/org/groundplatform/android/ui/settings/components/SettingsItem.kt b/app/src/main/java/org/groundplatform/android/ui/settings/components/SettingsItem.kt index f1f635c511..05e91d106f 100644 --- a/app/src/main/java/org/groundplatform/android/ui/settings/components/SettingsItem.kt +++ b/app/src/main/java/org/groundplatform/android/ui/settings/components/SettingsItem.kt @@ -30,7 +30,7 @@ import androidx.compose.ui.semantics.Role import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import org.groundplatform.android.ui.common.ExcludeFromJacocoGeneratedReport -import org.groundplatform.android.ui.theme.AppTheme +import org.groundplatform.theme.AppTheme /** * A reusable UI component representing a single row in a settings screen. diff --git a/app/src/main/java/org/groundplatform/android/ui/settings/components/SettingsSelectItem.kt b/app/src/main/java/org/groundplatform/android/ui/settings/components/SettingsSelectItem.kt index 9cece8ac40..bb67eca6ed 100644 --- a/app/src/main/java/org/groundplatform/android/ui/settings/components/SettingsSelectItem.kt +++ b/app/src/main/java/org/groundplatform/android/ui/settings/components/SettingsSelectItem.kt @@ -34,7 +34,7 @@ import androidx.compose.ui.unit.DpOffset import androidx.compose.ui.unit.dp import org.groundplatform.android.R import org.groundplatform.android.ui.common.ExcludeFromJacocoGeneratedReport -import org.groundplatform.android.ui.theme.AppTheme +import org.groundplatform.theme.AppTheme /** * A settings item that allows users to select a single value from a list of options. diff --git a/app/src/main/java/org/groundplatform/android/ui/settings/components/SettingsSwitchItem.kt b/app/src/main/java/org/groundplatform/android/ui/settings/components/SettingsSwitchItem.kt index 9a10b84b00..608f9e8591 100644 --- a/app/src/main/java/org/groundplatform/android/ui/settings/components/SettingsSwitchItem.kt +++ b/app/src/main/java/org/groundplatform/android/ui/settings/components/SettingsSwitchItem.kt @@ -31,7 +31,7 @@ import androidx.compose.ui.semantics.Role import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import org.groundplatform.android.ui.common.ExcludeFromJacocoGeneratedReport -import org.groundplatform.android.ui.theme.AppTheme +import org.groundplatform.theme.AppTheme /** * A reusable settings item component with a title, optional summary, and a switch toggle. From 347afec250d5afc22d99aca58d515990009a20ac Mon Sep 17 00:00:00 2001 From: andreia Date: Mon, 2 Mar 2026 11:16:00 +0100 Subject: [PATCH 6/7] replace qr code library --- app/src/main/AndroidManifest.xml | 3 +-- core/ui/build.gradle.kts | 8 +----- .../ui/components/GroundQrCode.kt | 25 ++++--------------- gradle/libs.versions.toml | 5 ++-- 4 files changed, 9 insertions(+), 32 deletions(-) diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 3578c938d7..badd3a30b6 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -43,8 +43,7 @@ android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme.Base" - android:usesCleartextTraffic="${usesCleartextTraffic}" - tools:replace="android:name,android:allowBackup"> + android:usesCleartextTraffic="${usesCleartextTraffic}"> Date: Mon, 2 Mar 2026 17:14:18 +0100 Subject: [PATCH 7/7] fix previews --- core/ui/build.gradle.kts | 4 ++-- gradle/libs.versions.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/core/ui/build.gradle.kts b/core/ui/build.gradle.kts index c1fb153670..1a6ceb1a0d 100644 --- a/core/ui/build.gradle.kts +++ b/core/ui/build.gradle.kts @@ -42,10 +42,10 @@ kotlin { commonTest { dependencies { implementation(libs.kotlin.test) } } - androidMain { dependencies { implementation(libs.compose.ui.tooling.preview) } } + androidMain { dependencies {} } iosMain { dependencies {} } } } -dependencies { androidRuntimeClasspath(libs.compose.ui.tooling.preview) } +dependencies { androidRuntimeClasspath(libs.compose.ui.tooling) } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 513513c5a5..3833d72bd0 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -181,9 +181,9 @@ androidx-lifecycle-runtime-compose = { module = "org.jetbrains.androidx.lifecycl compose-components-resources = { module = "org.jetbrains.compose.components:components-resources", version.ref = "composeMultiplatformVersion" } compose-foundation = { module = "org.jetbrains.compose.foundation:foundation", version.ref = "composeMultiplatformVersion" } compose-material3 = { module = "org.jetbrains.compose.material3:material3", version.ref = "material3Version" } -compose-material-icons-core = { module = "org.jetbrains.compose.material:material-icons-core", version.ref = "composeMultiplatformVersion" } compose-runtime = { module = "org.jetbrains.compose.runtime:runtime", version.ref = "composeMultiplatformVersion" } compose-ui = { module = "org.jetbrains.compose.ui:ui", version.ref = "composeMultiplatformVersion" } +compose-ui-tooling = { module = "org.jetbrains.compose.ui:ui-tooling", version.ref = "composeMultiplatformVersion" } compose-ui-tooling-preview = { module = "org.jetbrains.compose.ui:ui-tooling-preview", version.ref = "composeMultiplatformVersion" } qrose = { module = "io.github.alexzhirkevich:qrose", version.ref = "qroseVersion" }