From 2fa091337395679f1f3cbd8b0895aa0c8113af53 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 8 Jan 2026 10:12:34 +0100 Subject: [PATCH 001/114] Merge update_version_to3.4.0-DEV into develop (#4574) * Update version to 3.4.0-DEV * chore: correct design system version --------- Co-authored-by: @dhis2-bot Co-authored-by: Xavier Molloy --- gradle/libs.versions.toml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 2fb48cce6d4..8b26b34cbe0 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -5,13 +5,13 @@ navigationCompose = "2.9.1" sdk = "36" minSdk = "21" vCode = "150" -vName = "3.3.1-Dev" +vName = "3.4.0-DEV" gradle = "8.13.2" kotlin = '2.2.21' dagger = '2.57.2' jacoco = '0.8.14' -designSystem = "0.6.1-SNAPSHOT" -dhis2sdk = "1.13.1-SNAPSHOT" +designSystem = "0.7.0-SNAPSHOT" +dhis2sdk = "1.14.0-SNAPSHOT" ruleEngine = "3.3.11" expressionParser = "1.2.1" appcompat = "1.7.1" From 7db84171c2286578ea971352a32e69831b7b551b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 8 Jan 2026 12:11:27 +0100 Subject: [PATCH 002/114] deps: bump the gradle-updates group across 1 directory with 15 updates (#4576) Bumps the gradle-updates group with 15 updates in the / directory: | Package | From | To | | --- | --- | --- | | [org.hisp.dhis.lib.expression:expression-parser-jvm](https://github.com/dhis2/expression-parser) | `1.2.1` | `1.2.2` | | androidx.compose.material:material | `1.9.3` | `1.9.5` | | androidx.compose.ui:ui | `1.9.3` | `1.9.5` | | androidx.compose.runtime:runtime-livedata | `1.9.3` | `1.9.5` | | androidx.compose.ui:ui-tooling | `1.9.3` | `1.9.5` | | androidx.compose.ui:ui-tooling-preview | `1.9.3` | `1.9.5` | | androidx.compose.ui:ui-test-junit4 | `1.9.3` | `1.9.5` | | androidx.compose.ui:ui-test-manifest | `1.9.3` | `1.9.5` | | androidx.compose.ui:ui-test-junit4-android | `1.9.3` | `1.9.5` | | [org.jetbrains.androidx.lifecycle:lifecycle-runtime-compose](https://github.com/JetBrains/compose-jb) | `2.9.5` | `2.9.6` | | com.google.android.gms:play-services-auth-api-phone | `18.0.1` | `18.0.2` | | [org.junit.jupiter:junit-jupiter](https://github.com/junit-team/junit-framework) | `6.0.1` | `6.0.2` | | org.jetbrains.compose | `1.9.1` | `1.9.3` | | [com.google.devtools.ksp](https://github.com/google/ksp) | `2.2.20-2.0.4` | `2.2.21-2.0.4` | | org.sonarqube | `7.0.0.6105` | `7.0.1.6134` | Updates `org.hisp.dhis.lib.expression:expression-parser-jvm` from 1.2.1 to 1.2.2 - [Release notes](https://github.com/dhis2/expression-parser/releases) - [Commits](https://github.com/dhis2/expression-parser/compare/v1.2.1...v1.2.2) Updates `androidx.compose.material:material` from 1.9.3 to 1.9.5 Updates `androidx.compose.ui:ui` from 1.9.3 to 1.9.5 Updates `androidx.compose.runtime:runtime-livedata` from 1.9.3 to 1.9.5 Updates `androidx.compose.ui:ui-tooling` from 1.9.3 to 1.9.5 Updates `androidx.compose.ui:ui-tooling-preview` from 1.9.3 to 1.9.5 Updates `androidx.compose.ui:ui-test-junit4` from 1.9.3 to 1.9.5 Updates `androidx.compose.ui:ui-test-manifest` from 1.9.3 to 1.9.5 Updates `androidx.compose.ui:ui-test-junit4-android` from 1.9.3 to 1.9.5 Updates `androidx.compose.ui:ui` from 1.9.3 to 1.9.5 Updates `androidx.compose.runtime:runtime-livedata` from 1.9.3 to 1.9.5 Updates `androidx.compose.ui:ui-tooling` from 1.9.3 to 1.9.5 Updates `androidx.compose.ui:ui-tooling-preview` from 1.9.3 to 1.9.5 Updates `org.jetbrains.androidx.lifecycle:lifecycle-runtime-compose` from 2.9.5 to 2.9.6 - [Release notes](https://github.com/JetBrains/compose-jb/releases) - [Changelog](https://github.com/JetBrains/compose-multiplatform/blob/master/CHANGELOG.md) - [Commits](https://github.com/JetBrains/compose-jb/commits) Updates `com.google.android.gms:play-services-auth-api-phone` from 18.0.1 to 18.0.2 Updates `androidx.compose.ui:ui-test-junit4` from 1.9.3 to 1.9.5 Updates `androidx.compose.ui:ui-test-manifest` from 1.9.3 to 1.9.5 Updates `androidx.compose.ui:ui-test-junit4-android` from 1.9.3 to 1.9.5 Updates `org.junit.jupiter:junit-jupiter` from 6.0.1 to 6.0.2 - [Release notes](https://github.com/junit-team/junit-framework/releases) - [Commits](https://github.com/junit-team/junit-framework/compare/r6.0.1...r6.0.2) Updates `org.jetbrains.compose` from 1.9.1 to 1.9.3 Updates `com.google.devtools.ksp` from 2.2.20-2.0.4 to 2.2.21-2.0.4 - [Release notes](https://github.com/google/ksp/releases) - [Commits](https://github.com/google/ksp/compare/2.2.20-2.0.4...2.2.21-2.0.4) Updates `org.sonarqube` from 7.0.0.6105 to 7.0.1.6134 --- updated-dependencies: - dependency-name: org.hisp.dhis.lib.expression:expression-parser-jvm dependency-version: 1.2.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-updates - dependency-name: androidx.compose.material:material dependency-version: 1.9.5 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-updates - dependency-name: androidx.compose.ui:ui dependency-version: 1.9.5 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-updates - dependency-name: androidx.compose.runtime:runtime-livedata dependency-version: 1.9.5 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-updates - dependency-name: androidx.compose.ui:ui-tooling dependency-version: 1.9.5 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-updates - dependency-name: androidx.compose.ui:ui-tooling-preview dependency-version: 1.9.5 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-updates - dependency-name: androidx.compose.ui:ui-test-junit4 dependency-version: 1.9.5 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-updates - dependency-name: androidx.compose.ui:ui-test-manifest dependency-version: 1.9.5 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-updates - dependency-name: androidx.compose.ui:ui-test-junit4-android dependency-version: 1.9.5 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-updates - dependency-name: androidx.compose.ui:ui dependency-version: 1.9.5 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-updates - dependency-name: androidx.compose.runtime:runtime-livedata dependency-version: 1.9.5 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-updates - dependency-name: androidx.compose.ui:ui-tooling dependency-version: 1.9.5 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-updates - dependency-name: androidx.compose.ui:ui-tooling-preview dependency-version: 1.9.5 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-updates - dependency-name: org.jetbrains.androidx.lifecycle:lifecycle-runtime-compose dependency-version: 2.9.6 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-updates - dependency-name: com.google.android.gms:play-services-auth-api-phone dependency-version: 18.0.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-updates - dependency-name: androidx.compose.ui:ui-test-junit4 dependency-version: 1.9.5 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-updates - dependency-name: androidx.compose.ui:ui-test-manifest dependency-version: 1.9.5 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-updates - dependency-name: androidx.compose.ui:ui-test-junit4-android dependency-version: 1.9.5 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-updates - dependency-name: org.junit.jupiter:junit-jupiter dependency-version: 6.0.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-updates - dependency-name: org.jetbrains.compose dependency-version: 1.9.3 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-updates - dependency-name: com.google.devtools.ksp dependency-version: 2.2.21-2.0.4 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-updates - dependency-name: org.sonarqube dependency-version: 7.0.1.6134 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-updates ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 8b26b34cbe0..c3381cb1f31 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,6 +1,6 @@ [versions] kotlinxDatetime = "0.7.1-0.6.x-compat" #Needs to be compatible with the Rule engine, update when it's updated -lifecycleRuntimeCompose = "2.9.5" +lifecycleRuntimeCompose = "2.9.6" navigationCompose = "2.9.1" sdk = "36" minSdk = "21" @@ -13,7 +13,7 @@ jacoco = '0.8.14' designSystem = "0.7.0-SNAPSHOT" dhis2sdk = "1.14.0-SNAPSHOT" ruleEngine = "3.3.11" -expressionParser = "1.2.1" +expressionParser = "1.2.2" appcompat = "1.7.1" annotation = "1.9.1" cardview = "1.0.0" @@ -26,8 +26,8 @@ exif = "1.4.2" corektx = "1.17.0" fragmentktx = "1.8.9" recyclerview = "1.4.0" -compose = "1.9.3" -composePluginVersion = "1.9.1" +compose = "1.9.5" +composePluginVersion = "1.9.3" composePaging = "3.3.6" pagingTesting = "3.3.6" composeConstraintLayout = "1.1.1" @@ -83,15 +83,15 @@ material3WindowSize = "1.4.0" material3WindowSizeCompose = "1.8.2" material3AdaptiveAndroid = "1.1.0" koin = "4.1.1" -junitJupiter = "6.0.1" +junitJupiter = "6.0.2" ktxml = "1.0.0" atomicfu = "0.29.0" playservicesauth = "21.4.0" -playservicesphone = "18.0.1" #Can not be updated to latest due minSDK requirement of 23 -ksp = "2.2.20-2.0.4" +playservicesphone = "18.0.2" #Can not be updated to latest due minSDK requirement of 23 +ksp = "2.2.21-2.0.4" commonsText = "1.14.0" ktlint = "13.1.0" -sonarqube = "7.0.0.6105" +sonarqube = "7.0.1.6134" browser = "1.9.0" biometric = "1.1.0" coil = "3.3.0" From db5796ec299a7cc3eb96d1347fa8be12b36bd9c5 Mon Sep 17 00:00:00 2001 From: danielTari Date: Fri, 9 Jan 2026 09:13:06 +0100 Subject: [PATCH 003/114] chore: [ANDROAPP-7435] deprecate android sdk 21 and 22 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index c3381cb1f31..3e239e338f5 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -3,7 +3,7 @@ kotlinxDatetime = "0.7.1-0.6.x-compat" #Needs to be compatible with the Rule eng lifecycleRuntimeCompose = "2.9.6" navigationCompose = "2.9.1" sdk = "36" -minSdk = "21" +minSdk = "23" vCode = "150" vName = "3.4.0-DEV" gradle = "8.13.2" From d558609efdb8b4f92ca557db750981343cd2e819 Mon Sep 17 00:00:00 2001 From: danielTari Date: Fri, 9 Jan 2026 13:15:44 +0100 Subject: [PATCH 004/114] chore: [ANDROAPP-7435] simplify logic depending on deprecated android sdk --- .../java/org/dhis2/bindings/Bindings.java | 9 --- .../dhis2/data/biometric/BiometricUtils.kt | 34 ++++------ .../TeiDashboardMobileActivity.kt | 17 ++--- .../commons/bindings/CommonExtensions.kt | 65 +++++++++---------- .../dialogs/calendarpicker/CalendarPicker.kt | 13 ---- .../dhis2/commons/popupmenu/AppMenuHelper.kt | 7 +- .../network/NetworkStatusProviderImpl.kt | 17 ++--- .../biometrics/CryptographicActions.kt | 4 +- .../login/main/data/LoginRepositoryImpl.kt | 2 +- .../usecase/UpdateBiometricPermission.kt | 27 ++++---- .../dhis2/android/rtsm/utils/LocaleManager.kt | 8 +-- 11 files changed, 74 insertions(+), 129 deletions(-) diff --git a/app/src/main/java/org/dhis2/bindings/Bindings.java b/app/src/main/java/org/dhis2/bindings/Bindings.java index 0354b034f25..60d0a67c159 100644 --- a/app/src/main/java/org/dhis2/bindings/Bindings.java +++ b/app/src/main/java/org/dhis2/bindings/Bindings.java @@ -5,11 +5,9 @@ import android.graphics.drawable.AnimatedVectorDrawable; import android.graphics.drawable.Drawable; import android.graphics.drawable.GradientDrawable; -import android.os.Build; import android.util.TypedValue; import android.view.View; import android.widget.ImageView; -import android.widget.LinearLayout; import android.widget.TextView; import androidx.appcompat.content.res.AppCompatResources; @@ -168,13 +166,6 @@ public static void setImageBackground(ImageView imageView, Drawable drawable) { } - @BindingAdapter("versionVisibility") - public static void setVisibility(LinearLayout linearLayout, boolean check) { - if (check && Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { - linearLayout.setVisibility(View.GONE); - } - } - @BindingAdapter("settingIcon") public static void setSettingIcon(ImageView view, int drawableReference) { Drawable drawable = AppCompatResources.getDrawable(view.getContext(), drawableReference); diff --git a/app/src/main/java/org/dhis2/data/biometric/BiometricUtils.kt b/app/src/main/java/org/dhis2/data/biometric/BiometricUtils.kt index 47627d21950..781e1485952 100644 --- a/app/src/main/java/org/dhis2/data/biometric/BiometricUtils.kt +++ b/app/src/main/java/org/dhis2/data/biometric/BiometricUtils.kt @@ -4,7 +4,6 @@ import android.content.Context import android.os.Build import android.security.keystore.KeyGenParameterSpec import android.security.keystore.KeyProperties -import androidx.annotation.RequiresApi import androidx.biometric.BiometricManager import androidx.biometric.BiometricPrompt import androidx.core.content.ContextCompat @@ -93,27 +92,19 @@ class CryptographyManager : CryptographicActions { load(null) } - override fun getInitializedCipherForEncryption(): Cipher? = - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - val cipher = getCipher() - val secretKey = - getOrCreateSecretKey() - - cipher.init(Cipher.ENCRYPT_MODE, secretKey) - cipher - } else { - null - } + override fun getInitializedCipherForEncryption(): Cipher { + val cipher = getCipher() + val secretKey = getOrCreateSecretKey() + cipher.init(Cipher.ENCRYPT_MODE, secretKey) + return cipher + } - override fun getInitializedCipherForDecryption(initializationVector: ByteArray): Cipher? = - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - val cipher = getCipher() - val secretKey = getOrCreateSecretKey() - cipher.init(Cipher.DECRYPT_MODE, secretKey, GCMParameterSpec(128, initializationVector)) - cipher - } else { - null - } + override fun getInitializedCipherForDecryption(initializationVector: ByteArray): Cipher { + val cipher = getCipher() + val secretKey = getOrCreateSecretKey() + cipher.init(Cipher.DECRYPT_MODE, secretKey, GCMParameterSpec(128, initializationVector)) + return cipher + } override fun encryptData( plaintext: String, @@ -136,7 +127,6 @@ class CryptographyManager : CryptographicActions { return Cipher.getInstance(transformation) } - @RequiresApi(Build.VERSION_CODES.M) private fun getOrCreateSecretKey(): SecretKey { // If Secretkey was previously created for that keyName, then grab and return it. keyStore.getKey(KEY_NAME, null)?.let { return it as SecretKey } diff --git a/app/src/main/java/org/dhis2/usescases/teiDashboard/TeiDashboardMobileActivity.kt b/app/src/main/java/org/dhis2/usescases/teiDashboard/TeiDashboardMobileActivity.kt index aeb40312665..4620323adc1 100644 --- a/app/src/main/java/org/dhis2/usescases/teiDashboard/TeiDashboardMobileActivity.kt +++ b/app/src/main/java/org/dhis2/usescases/teiDashboard/TeiDashboardMobileActivity.kt @@ -3,7 +3,6 @@ package org.dhis2.usescases.teiDashboard import android.app.ActivityOptions import android.content.Context import android.content.Intent -import android.os.Build import android.os.Bundle import android.os.Handler import android.os.Looper @@ -630,15 +629,13 @@ class TeiDashboardMobileActivity : } binding.executePendingBindings() setTheme(themeManager.getProgramTheme()) - if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP) { - val window = window - window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS) - val typedValue = TypedValue() - val a = obtainStyledAttributes(typedValue.data, intArrayOf(R.attr.colorPrimaryDark)) - val colorToReturn = a.getColor(0, 0) - a.recycle() - window.statusBarColor = colorToReturn - } + val window = window + window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS) + val typedValue = TypedValue() + val a = obtainStyledAttributes(typedValue.data, intArrayOf(R.attr.colorPrimaryDark)) + val colorToReturn = a.getColor(0, 0) + a.recycle() + window.statusBarColor = colorToReturn } override fun updateNoteBadge(numberOfNotes: Int) { diff --git a/commons/src/main/java/org/dhis2/commons/bindings/CommonExtensions.kt b/commons/src/main/java/org/dhis2/commons/bindings/CommonExtensions.kt index a5bbdcd6ae5..3bf11e76cb1 100644 --- a/commons/src/main/java/org/dhis2/commons/bindings/CommonExtensions.kt +++ b/commons/src/main/java/org/dhis2/commons/bindings/CommonExtensions.kt @@ -5,7 +5,6 @@ import android.graphics.Color import android.graphics.Outline import android.graphics.PorterDuff import android.graphics.Typeface -import android.os.Build import android.text.method.ScrollingMovementMethod import android.util.TypedValue import android.view.View @@ -116,45 +115,41 @@ val Int.px: Int get() = (this / Resources.getSystem().displayMetrics.density).toInt() fun View.clipWithRoundedCorners(curvedRadio: Int = 16.dp) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - outlineProvider = - object : ViewOutlineProvider() { - override fun getOutline( - view: View, - outline: Outline, - ) { - outline.setRoundRect( - 0, - 0, - view.width, - view.height + curvedRadio, - curvedRadio.toFloat(), - ) - } + outlineProvider = + object : ViewOutlineProvider() { + override fun getOutline( + view: View, + outline: Outline, + ) { + outline.setRoundRect( + 0, + 0, + view.width, + view.height + curvedRadio, + curvedRadio.toFloat(), + ) } - clipToOutline = true - } + } + clipToOutline = true } fun View.clipWithAllRoundedCorners(curvedRadio: Int = 16.dp) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - outlineProvider = - object : ViewOutlineProvider() { - override fun getOutline( - view: View, - outline: Outline, - ) { - outline.setRoundRect( - 0, - 0, - view.width, - view.height, - curvedRadio.toFloat(), - ) - } + outlineProvider = + object : ViewOutlineProvider() { + override fun getOutline( + view: View, + outline: Outline, + ) { + outline.setRoundRect( + 0, + 0, + view.width, + view.height, + curvedRadio.toFloat(), + ) } - clipToOutline = true - } + } + clipToOutline = true } fun HorizontalScrollView.scrollToPosition(viewTag: String) { diff --git a/commons/src/main/java/org/dhis2/commons/dialogs/calendarpicker/CalendarPicker.kt b/commons/src/main/java/org/dhis2/commons/dialogs/calendarpicker/CalendarPicker.kt index 97b8897df33..67433ea0706 100644 --- a/commons/src/main/java/org/dhis2/commons/dialogs/calendarpicker/CalendarPicker.kt +++ b/commons/src/main/java/org/dhis2/commons/dialogs/calendarpicker/CalendarPicker.kt @@ -3,12 +3,9 @@ package org.dhis2.commons.dialogs.calendarpicker import android.app.AlertDialog import android.app.Dialog import android.content.Context -import android.os.Build import android.view.LayoutInflater import android.view.View import android.widget.DatePicker -import android.widget.LinearLayout -import androidx.databinding.BindingAdapter import org.dhis2.commons.R import org.dhis2.commons.databinding.CalendarPickerViewBinding import org.dhis2.commons.dialogs.calendarpicker.di.CalendarPickerComponentProvider @@ -174,13 +171,3 @@ class CalendarPicker( } } } - -@BindingAdapter("versionCustomVisibility") -fun setCustomVisibility( - linearLayout: LinearLayout, - check: Boolean, -) { - if (check && Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { - linearLayout.visibility = View.GONE - } -} diff --git a/commons/src/main/java/org/dhis2/commons/popupmenu/AppMenuHelper.kt b/commons/src/main/java/org/dhis2/commons/popupmenu/AppMenuHelper.kt index 4cec7237932..5f6a19cf9ff 100644 --- a/commons/src/main/java/org/dhis2/commons/popupmenu/AppMenuHelper.kt +++ b/commons/src/main/java/org/dhis2/commons/popupmenu/AppMenuHelper.kt @@ -1,7 +1,6 @@ package org.dhis2.commons.popupmenu import android.content.Context -import android.os.Build import android.view.ContextThemeWrapper import android.view.Gravity import android.view.View @@ -26,11 +25,7 @@ class AppMenuHelper private constructor( fun show() { val contextWrapper = ContextThemeWrapper(context, R.style.PopupMenuMarginStyle) popupMenu = - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) { - PopupMenu(contextWrapper, anchor, Gravity.END, 0, R.style.PopupMenuMarginStyle) - } else { - PopupMenu(contextWrapper, anchor, Gravity.END) - } + PopupMenu(contextWrapper, anchor, Gravity.END, 0, R.style.PopupMenuMarginStyle) try { val fields = popupMenu.javaClass.declaredFields for (field in fields) { diff --git a/commonskmm/src/androidMain/kotlin/org/dhis2/mobile/commons/network/NetworkStatusProviderImpl.kt b/commonskmm/src/androidMain/kotlin/org/dhis2/mobile/commons/network/NetworkStatusProviderImpl.kt index ba9ed9bb433..02837629b5f 100644 --- a/commonskmm/src/androidMain/kotlin/org/dhis2/mobile/commons/network/NetworkStatusProviderImpl.kt +++ b/commonskmm/src/androidMain/kotlin/org/dhis2/mobile/commons/network/NetworkStatusProviderImpl.kt @@ -5,7 +5,6 @@ import android.net.ConnectivityManager import android.net.Network import android.net.NetworkCapabilities import android.net.NetworkRequest -import android.os.Build import androidx.annotation.RequiresPermission import kotlinx.coroutines.channels.awaitClose import kotlinx.coroutines.flow.Flow @@ -24,11 +23,8 @@ class NetworkStatusProviderImpl( NetworkRequest .Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) - .also { builder -> - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - builder.addCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED) - } - }.build() + .addCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED) + .build() private val availableNetworks = mutableSetOf() @@ -77,13 +73,8 @@ class NetworkStatusProviderImpl( @RequiresPermission("android.permission.ACCESS_NETWORK_STATE") private fun ConnectivityManager.getCurrentNetworkState(): Boolean { - @Suppress("DEPRECATION") - return if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { - activeNetworkInfo?.isConnected == true - } else { - val networkCapabilities = getNetworkCapabilities(activeNetwork) - networkCapabilities?.asNetworkState() ?: false - } + val networkCapabilities = getNetworkCapabilities(activeNetwork) + return networkCapabilities?.asNetworkState() ?: false } private fun NetworkCapabilities.asNetworkState(): Boolean = hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) diff --git a/commonskmm/src/commonMain/kotlin/org/dhis2/mobile/commons/biometrics/CryptographicActions.kt b/commonskmm/src/commonMain/kotlin/org/dhis2/mobile/commons/biometrics/CryptographicActions.kt index 9146451a323..fa04f543535 100644 --- a/commonskmm/src/commonMain/kotlin/org/dhis2/mobile/commons/biometrics/CryptographicActions.kt +++ b/commonskmm/src/commonMain/kotlin/org/dhis2/mobile/commons/biometrics/CryptographicActions.kt @@ -3,9 +3,9 @@ package org.dhis2.mobile.commons.biometrics import javax.crypto.Cipher interface CryptographicActions { - fun getInitializedCipherForEncryption(): Cipher? + fun getInitializedCipherForEncryption(): Cipher - fun getInitializedCipherForDecryption(initializationVector: ByteArray): Cipher? + fun getInitializedCipherForDecryption(initializationVector: ByteArray): Cipher fun encryptData( plaintext: String, diff --git a/login/src/androidMain/kotlin/org/dhis2/mobile/login/main/data/LoginRepositoryImpl.kt b/login/src/androidMain/kotlin/org/dhis2/mobile/login/main/data/LoginRepositoryImpl.kt index 272979b548e..068cd2faf6c 100644 --- a/login/src/androidMain/kotlin/org/dhis2/mobile/login/main/data/LoginRepositoryImpl.kt +++ b/login/src/androidMain/kotlin/org/dhis2/mobile/login/main/data/LoginRepositoryImpl.kt @@ -264,7 +264,7 @@ class LoginRepositoryImpl( preferences.getBiometricCredentials()?.let { ciphertextWrapper -> cryptographyManager .getInitializedCipherForDecryption(ciphertextWrapper.initializationVector) - ?.let { cipher -> + .let { cipher -> suspendCancellableCoroutine { continuation -> authenticator.authenticate(cipher) { cipher -> val pass = diff --git a/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/domain/usecase/UpdateBiometricPermission.kt b/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/domain/usecase/UpdateBiometricPermission.kt index 71aa7cb3eaf..b9cf84f5d14 100644 --- a/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/domain/usecase/UpdateBiometricPermission.kt +++ b/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/domain/usecase/UpdateBiometricPermission.kt @@ -32,20 +32,19 @@ class UpdateBiometricPermission( val cancellationMessage = getString(Res.string.biometrics_permission_cancelled) suspendCancellableCoroutine { continuation -> val scope = CoroutineScope(continuation.context) - cryptographics.getInitializedCipherForEncryption()?.let { - biometrics.authenticate(it) { cryptoObjectCipher -> - scope.launch { - val ciphertextWrapper = - cryptographics.encryptData(password, cryptoObjectCipher) - preferences.saveUserCredentialsAndCipher( - serverUrl, - username, - ciphertextWrapper, - ) - loginRepository.updateBiometricsPermissions(granted) - if (continuation.isActive) { - continuation.resume(Result.success(Unit)) - } + val cipher = cryptographics.getInitializedCipherForEncryption() + biometrics.authenticate(cipher) { cryptoObjectCipher -> + scope.launch { + val ciphertextWrapper = + cryptographics.encryptData(password, cryptoObjectCipher) + preferences.saveUserCredentialsAndCipher( + serverUrl, + username, + ciphertextWrapper, + ) + loginRepository.updateBiometricsPermissions(granted) + if (continuation.isActive) { + continuation.resume(Result.success(Unit)) } } } diff --git a/stock-usecase/src/main/java/org/dhis2/android/rtsm/utils/LocaleManager.kt b/stock-usecase/src/main/java/org/dhis2/android/rtsm/utils/LocaleManager.kt index a3765cacb0a..e027631b994 100644 --- a/stock-usecase/src/main/java/org/dhis2/android/rtsm/utils/LocaleManager.kt +++ b/stock-usecase/src/main/java/org/dhis2/android/rtsm/utils/LocaleManager.kt @@ -28,10 +28,10 @@ class LocaleManager { ): Context { val config = updateConfiguration(context, language) - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { - return context.createConfigurationContext(config) + return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + context.createConfigurationContext(config) } else { - return context + context } } @@ -44,7 +44,7 @@ class LocaleManager { val resources = context.resources val config = Configuration(resources.configuration) - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { val localeList = LocaleList(newLocale) LocaleList.setDefault(localeList) config.setLocales(localeList) // additionally sets the layout direction From 61d11377eb7295a7c28e64c3e8503d32942b03e2 Mon Sep 17 00:00:00 2001 From: Rohit <168576901+rohit-wa@users.noreply.github.com> Date: Fri, 9 Jan 2026 18:59:07 +0530 Subject: [PATCH 005/114] feat: add workflow and gradle plugin for generating sbom [skip size] (#4579) * feat: add workflow and gradle plugin for generating sbom * feat: add workflow and gradle plugin for generating sbom --- .github/workflows/generate-and-upload-bom.yml | 34 +++++++++++++++++++ build.gradle.kts | 2 ++ gradle/libs.versions.toml | 2 ++ 3 files changed, 38 insertions(+) create mode 100644 .github/workflows/generate-and-upload-bom.yml diff --git a/.github/workflows/generate-and-upload-bom.yml b/.github/workflows/generate-and-upload-bom.yml new file mode 100644 index 00000000000..759a9ce310a --- /dev/null +++ b/.github/workflows/generate-and-upload-bom.yml @@ -0,0 +1,34 @@ +name: 'This workflow creates bill of material and uploads it to Dependency-Track each night' + +on: + schedule: + - cron: '0 0 * * *' + +jobs: + create-bom: + name: Create and Upload SBOM + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + with: + fetch-depth: 0 + - name: Set up JDK 17 + uses: actions/setup-java@v5 + with: + java-version: 17 + distribution: zulu + cache: 'gradle' + - name: Change wrapper permission + run: chmod +x ./gradlew + - name: Generate BOM + run: ./gradlew cyclonedxBom + - name: Upload SBOM to DependencyTrack + env: + DEPENDENCY_TRACK_API: 'https://dt.security.dhis2.org/api/v1/bom' + run: | + curl -X POST "$DEPENDENCY_TRACK_API" \ + --fail-with-body \ + -H "Content-Type: multipart/form-data" \ + -H "X-Api-Key: ${{ secrets.DEPENDENCYTRACK_APIKEY }}" \ + -F "project=5d9c948b-3968-4f47-867f-3b7f04ba9fb6" \ + -F "bom=@build/reports/bom.json" diff --git a/build.gradle.kts b/build.gradle.kts index bddb98c8cc0..e89cca27fa1 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -14,6 +14,8 @@ plugins { alias(libs.plugins.compose) apply false alias(libs.plugins.kotlin.compose.compiler) apply false alias(libs.plugins.ksp) apply false + alias(libs.plugins.cyclonedx) + } // Variables to hold aggregated test results diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index c3381cb1f31..a9e97a57276 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -95,6 +95,7 @@ sonarqube = "7.0.1.6134" browser = "1.9.0" biometric = "1.1.0" coil = "3.3.0" +cyclonedx = "2.1.0" [libraries] gradlePlugin = { group = "com.android.tools.build", name = "gradle", version.ref = "gradle" } @@ -227,6 +228,7 @@ ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" } kotlin-atomicfu = { id = "org.jetbrains.kotlinx.atomicfu", version.ref = "atomicfu" } ktlint = { id = "org.jlleitschuh.gradle.ktlint", version.ref = "ktlint" } sonarqube = { id = "org.sonarqube", version.ref = "sonarqube" } +cyclonedx = { id = "org.cyclonedx.bom", version.ref = "cyclonedx" } [bundles] uicomponents-implementation = ["androidx-coreKtx", "androidx-material3", "androidx-material3-window", "androidx-material3-adaptative-android", "google-material", "lottie-compose", "dhis2-mobile-designsystem"] From a137aa4c65846433c81f9ce4dc0708e39ad55e5d Mon Sep 17 00:00:00 2001 From: danielTari Date: Fri, 9 Jan 2026 14:44:40 +0100 Subject: [PATCH 006/114] chore: [ANDROAPP-7435] fix kapt error --- .../main/res/layout/calendar_picker_view.xml | 1 - .../login/main/data/LoginRepositoryImpl.kt | 28 +++++++++---------- 2 files changed, 13 insertions(+), 16 deletions(-) diff --git a/commons/src/main/res/layout/calendar_picker_view.xml b/commons/src/main/res/layout/calendar_picker_view.xml index 9e0dae8fcbf..65fdbd8f1c5 100644 --- a/commons/src/main/res/layout/calendar_picker_view.xml +++ b/commons/src/main/res/layout/calendar_picker_view.xml @@ -31,7 +31,6 @@ diff --git a/login/src/androidMain/kotlin/org/dhis2/mobile/login/main/data/LoginRepositoryImpl.kt b/login/src/androidMain/kotlin/org/dhis2/mobile/login/main/data/LoginRepositoryImpl.kt index 068cd2faf6c..bff29e25242 100644 --- a/login/src/androidMain/kotlin/org/dhis2/mobile/login/main/data/LoginRepositoryImpl.kt +++ b/login/src/androidMain/kotlin/org/dhis2/mobile/login/main/data/LoginRepositoryImpl.kt @@ -262,23 +262,21 @@ class LoginRepositoryImpl( override suspend fun loginWithBiometric(): kotlin.Result = withContext(dispatcher.main) { preferences.getBiometricCredentials()?.let { ciphertextWrapper -> - cryptographyManager + val cipher = cryptographyManager .getInitializedCipherForDecryption(ciphertextWrapper.initializationVector) - .let { cipher -> - suspendCancellableCoroutine { continuation -> - authenticator.authenticate(cipher) { cipher -> - val pass = - cryptographyManager.decryptData( - ciphertextWrapper.ciphertext, - cipher, - ) - continuation.resume(value = kotlin.Result.success(pass)) { _, _, _ -> } - } - continuation.invokeOnCancellation { - // If needed perform action on cancellation - } - } + suspendCancellableCoroutine { continuation -> + authenticator.authenticate(cipher) { cipher -> + val pass = + cryptographyManager.decryptData( + ciphertextWrapper.ciphertext, + cipher, + ) + continuation.resume(value = kotlin.Result.success(pass)) { _, _, _ -> } + } + continuation.invokeOnCancellation { + // If needed perform action on cancellation } + } } ?: kotlin.Result.failure(Exception("No biometrics found")) } From 0977504e07ca45c23835c943d30d937a89f8d8a7 Mon Sep 17 00:00:00 2001 From: danielTari Date: Fri, 9 Jan 2026 16:05:30 +0100 Subject: [PATCH 007/114] chore: [ANDROAPP-7435] fix ktlint complaints --- .../login/main/data/LoginRepositoryImpl.kt | 28 ++++++++++--------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/login/src/androidMain/kotlin/org/dhis2/mobile/login/main/data/LoginRepositoryImpl.kt b/login/src/androidMain/kotlin/org/dhis2/mobile/login/main/data/LoginRepositoryImpl.kt index bff29e25242..068cd2faf6c 100644 --- a/login/src/androidMain/kotlin/org/dhis2/mobile/login/main/data/LoginRepositoryImpl.kt +++ b/login/src/androidMain/kotlin/org/dhis2/mobile/login/main/data/LoginRepositoryImpl.kt @@ -262,21 +262,23 @@ class LoginRepositoryImpl( override suspend fun loginWithBiometric(): kotlin.Result = withContext(dispatcher.main) { preferences.getBiometricCredentials()?.let { ciphertextWrapper -> - val cipher = cryptographyManager + cryptographyManager .getInitializedCipherForDecryption(ciphertextWrapper.initializationVector) - suspendCancellableCoroutine { continuation -> - authenticator.authenticate(cipher) { cipher -> - val pass = - cryptographyManager.decryptData( - ciphertextWrapper.ciphertext, - cipher, - ) - continuation.resume(value = kotlin.Result.success(pass)) { _, _, _ -> } - } - continuation.invokeOnCancellation { - // If needed perform action on cancellation + .let { cipher -> + suspendCancellableCoroutine { continuation -> + authenticator.authenticate(cipher) { cipher -> + val pass = + cryptographyManager.decryptData( + ciphertextWrapper.ciphertext, + cipher, + ) + continuation.resume(value = kotlin.Result.success(pass)) { _, _, _ -> } + } + continuation.invokeOnCancellation { + // If needed perform action on cancellation + } + } } - } } ?: kotlin.Result.failure(Exception("No biometrics found")) } From 57c0ee33d2f438cf8e20721790f1236d8743e121 Mon Sep 17 00:00:00 2001 From: danielTari Date: Fri, 9 Jan 2026 09:13:06 +0100 Subject: [PATCH 008/114] chore: [ANDROAPP-7435] deprecate android sdk 21 and 22 --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index a9e97a57276..ee5dac35a56 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -3,7 +3,7 @@ kotlinxDatetime = "0.7.1-0.6.x-compat" #Needs to be compatible with the Rule eng lifecycleRuntimeCompose = "2.9.6" navigationCompose = "2.9.1" sdk = "36" -minSdk = "21" +minSdk = "23" vCode = "150" vName = "3.4.0-DEV" gradle = "8.13.2" From 28a8f6ff43103fe3bbb4080d2a087f1ccb620041 Mon Sep 17 00:00:00 2001 From: danielTari Date: Fri, 9 Jan 2026 13:15:44 +0100 Subject: [PATCH 009/114] chore: [ANDROAPP-7435] simplify logic depending on deprecated android sdk --- .../java/org/dhis2/bindings/Bindings.java | 9 --- .../dhis2/data/biometric/BiometricUtils.kt | 34 ++++------ .../TeiDashboardMobileActivity.kt | 17 ++--- .../commons/bindings/CommonExtensions.kt | 65 +++++++++---------- .../dialogs/calendarpicker/CalendarPicker.kt | 13 ---- .../dhis2/commons/popupmenu/AppMenuHelper.kt | 7 +- .../network/NetworkStatusProviderImpl.kt | 17 ++--- .../biometrics/CryptographicActions.kt | 4 +- .../login/main/data/LoginRepositoryImpl.kt | 2 +- .../usecase/UpdateBiometricPermission.kt | 27 ++++---- .../dhis2/android/rtsm/utils/LocaleManager.kt | 8 +-- 11 files changed, 74 insertions(+), 129 deletions(-) diff --git a/app/src/main/java/org/dhis2/bindings/Bindings.java b/app/src/main/java/org/dhis2/bindings/Bindings.java index 0354b034f25..60d0a67c159 100644 --- a/app/src/main/java/org/dhis2/bindings/Bindings.java +++ b/app/src/main/java/org/dhis2/bindings/Bindings.java @@ -5,11 +5,9 @@ import android.graphics.drawable.AnimatedVectorDrawable; import android.graphics.drawable.Drawable; import android.graphics.drawable.GradientDrawable; -import android.os.Build; import android.util.TypedValue; import android.view.View; import android.widget.ImageView; -import android.widget.LinearLayout; import android.widget.TextView; import androidx.appcompat.content.res.AppCompatResources; @@ -168,13 +166,6 @@ public static void setImageBackground(ImageView imageView, Drawable drawable) { } - @BindingAdapter("versionVisibility") - public static void setVisibility(LinearLayout linearLayout, boolean check) { - if (check && Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { - linearLayout.setVisibility(View.GONE); - } - } - @BindingAdapter("settingIcon") public static void setSettingIcon(ImageView view, int drawableReference) { Drawable drawable = AppCompatResources.getDrawable(view.getContext(), drawableReference); diff --git a/app/src/main/java/org/dhis2/data/biometric/BiometricUtils.kt b/app/src/main/java/org/dhis2/data/biometric/BiometricUtils.kt index 47627d21950..781e1485952 100644 --- a/app/src/main/java/org/dhis2/data/biometric/BiometricUtils.kt +++ b/app/src/main/java/org/dhis2/data/biometric/BiometricUtils.kt @@ -4,7 +4,6 @@ import android.content.Context import android.os.Build import android.security.keystore.KeyGenParameterSpec import android.security.keystore.KeyProperties -import androidx.annotation.RequiresApi import androidx.biometric.BiometricManager import androidx.biometric.BiometricPrompt import androidx.core.content.ContextCompat @@ -93,27 +92,19 @@ class CryptographyManager : CryptographicActions { load(null) } - override fun getInitializedCipherForEncryption(): Cipher? = - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - val cipher = getCipher() - val secretKey = - getOrCreateSecretKey() - - cipher.init(Cipher.ENCRYPT_MODE, secretKey) - cipher - } else { - null - } + override fun getInitializedCipherForEncryption(): Cipher { + val cipher = getCipher() + val secretKey = getOrCreateSecretKey() + cipher.init(Cipher.ENCRYPT_MODE, secretKey) + return cipher + } - override fun getInitializedCipherForDecryption(initializationVector: ByteArray): Cipher? = - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - val cipher = getCipher() - val secretKey = getOrCreateSecretKey() - cipher.init(Cipher.DECRYPT_MODE, secretKey, GCMParameterSpec(128, initializationVector)) - cipher - } else { - null - } + override fun getInitializedCipherForDecryption(initializationVector: ByteArray): Cipher { + val cipher = getCipher() + val secretKey = getOrCreateSecretKey() + cipher.init(Cipher.DECRYPT_MODE, secretKey, GCMParameterSpec(128, initializationVector)) + return cipher + } override fun encryptData( plaintext: String, @@ -136,7 +127,6 @@ class CryptographyManager : CryptographicActions { return Cipher.getInstance(transformation) } - @RequiresApi(Build.VERSION_CODES.M) private fun getOrCreateSecretKey(): SecretKey { // If Secretkey was previously created for that keyName, then grab and return it. keyStore.getKey(KEY_NAME, null)?.let { return it as SecretKey } diff --git a/app/src/main/java/org/dhis2/usescases/teiDashboard/TeiDashboardMobileActivity.kt b/app/src/main/java/org/dhis2/usescases/teiDashboard/TeiDashboardMobileActivity.kt index aeb40312665..4620323adc1 100644 --- a/app/src/main/java/org/dhis2/usescases/teiDashboard/TeiDashboardMobileActivity.kt +++ b/app/src/main/java/org/dhis2/usescases/teiDashboard/TeiDashboardMobileActivity.kt @@ -3,7 +3,6 @@ package org.dhis2.usescases.teiDashboard import android.app.ActivityOptions import android.content.Context import android.content.Intent -import android.os.Build import android.os.Bundle import android.os.Handler import android.os.Looper @@ -630,15 +629,13 @@ class TeiDashboardMobileActivity : } binding.executePendingBindings() setTheme(themeManager.getProgramTheme()) - if (Build.VERSION.SDK_INT > Build.VERSION_CODES.LOLLIPOP) { - val window = window - window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS) - val typedValue = TypedValue() - val a = obtainStyledAttributes(typedValue.data, intArrayOf(R.attr.colorPrimaryDark)) - val colorToReturn = a.getColor(0, 0) - a.recycle() - window.statusBarColor = colorToReturn - } + val window = window + window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS) + val typedValue = TypedValue() + val a = obtainStyledAttributes(typedValue.data, intArrayOf(R.attr.colorPrimaryDark)) + val colorToReturn = a.getColor(0, 0) + a.recycle() + window.statusBarColor = colorToReturn } override fun updateNoteBadge(numberOfNotes: Int) { diff --git a/commons/src/main/java/org/dhis2/commons/bindings/CommonExtensions.kt b/commons/src/main/java/org/dhis2/commons/bindings/CommonExtensions.kt index a5bbdcd6ae5..3bf11e76cb1 100644 --- a/commons/src/main/java/org/dhis2/commons/bindings/CommonExtensions.kt +++ b/commons/src/main/java/org/dhis2/commons/bindings/CommonExtensions.kt @@ -5,7 +5,6 @@ import android.graphics.Color import android.graphics.Outline import android.graphics.PorterDuff import android.graphics.Typeface -import android.os.Build import android.text.method.ScrollingMovementMethod import android.util.TypedValue import android.view.View @@ -116,45 +115,41 @@ val Int.px: Int get() = (this / Resources.getSystem().displayMetrics.density).toInt() fun View.clipWithRoundedCorners(curvedRadio: Int = 16.dp) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - outlineProvider = - object : ViewOutlineProvider() { - override fun getOutline( - view: View, - outline: Outline, - ) { - outline.setRoundRect( - 0, - 0, - view.width, - view.height + curvedRadio, - curvedRadio.toFloat(), - ) - } + outlineProvider = + object : ViewOutlineProvider() { + override fun getOutline( + view: View, + outline: Outline, + ) { + outline.setRoundRect( + 0, + 0, + view.width, + view.height + curvedRadio, + curvedRadio.toFloat(), + ) } - clipToOutline = true - } + } + clipToOutline = true } fun View.clipWithAllRoundedCorners(curvedRadio: Int = 16.dp) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - outlineProvider = - object : ViewOutlineProvider() { - override fun getOutline( - view: View, - outline: Outline, - ) { - outline.setRoundRect( - 0, - 0, - view.width, - view.height, - curvedRadio.toFloat(), - ) - } + outlineProvider = + object : ViewOutlineProvider() { + override fun getOutline( + view: View, + outline: Outline, + ) { + outline.setRoundRect( + 0, + 0, + view.width, + view.height, + curvedRadio.toFloat(), + ) } - clipToOutline = true - } + } + clipToOutline = true } fun HorizontalScrollView.scrollToPosition(viewTag: String) { diff --git a/commons/src/main/java/org/dhis2/commons/dialogs/calendarpicker/CalendarPicker.kt b/commons/src/main/java/org/dhis2/commons/dialogs/calendarpicker/CalendarPicker.kt index 97b8897df33..67433ea0706 100644 --- a/commons/src/main/java/org/dhis2/commons/dialogs/calendarpicker/CalendarPicker.kt +++ b/commons/src/main/java/org/dhis2/commons/dialogs/calendarpicker/CalendarPicker.kt @@ -3,12 +3,9 @@ package org.dhis2.commons.dialogs.calendarpicker import android.app.AlertDialog import android.app.Dialog import android.content.Context -import android.os.Build import android.view.LayoutInflater import android.view.View import android.widget.DatePicker -import android.widget.LinearLayout -import androidx.databinding.BindingAdapter import org.dhis2.commons.R import org.dhis2.commons.databinding.CalendarPickerViewBinding import org.dhis2.commons.dialogs.calendarpicker.di.CalendarPickerComponentProvider @@ -174,13 +171,3 @@ class CalendarPicker( } } } - -@BindingAdapter("versionCustomVisibility") -fun setCustomVisibility( - linearLayout: LinearLayout, - check: Boolean, -) { - if (check && Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { - linearLayout.visibility = View.GONE - } -} diff --git a/commons/src/main/java/org/dhis2/commons/popupmenu/AppMenuHelper.kt b/commons/src/main/java/org/dhis2/commons/popupmenu/AppMenuHelper.kt index 4cec7237932..5f6a19cf9ff 100644 --- a/commons/src/main/java/org/dhis2/commons/popupmenu/AppMenuHelper.kt +++ b/commons/src/main/java/org/dhis2/commons/popupmenu/AppMenuHelper.kt @@ -1,7 +1,6 @@ package org.dhis2.commons.popupmenu import android.content.Context -import android.os.Build import android.view.ContextThemeWrapper import android.view.Gravity import android.view.View @@ -26,11 +25,7 @@ class AppMenuHelper private constructor( fun show() { val contextWrapper = ContextThemeWrapper(context, R.style.PopupMenuMarginStyle) popupMenu = - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) { - PopupMenu(contextWrapper, anchor, Gravity.END, 0, R.style.PopupMenuMarginStyle) - } else { - PopupMenu(contextWrapper, anchor, Gravity.END) - } + PopupMenu(contextWrapper, anchor, Gravity.END, 0, R.style.PopupMenuMarginStyle) try { val fields = popupMenu.javaClass.declaredFields for (field in fields) { diff --git a/commonskmm/src/androidMain/kotlin/org/dhis2/mobile/commons/network/NetworkStatusProviderImpl.kt b/commonskmm/src/androidMain/kotlin/org/dhis2/mobile/commons/network/NetworkStatusProviderImpl.kt index ba9ed9bb433..02837629b5f 100644 --- a/commonskmm/src/androidMain/kotlin/org/dhis2/mobile/commons/network/NetworkStatusProviderImpl.kt +++ b/commonskmm/src/androidMain/kotlin/org/dhis2/mobile/commons/network/NetworkStatusProviderImpl.kt @@ -5,7 +5,6 @@ import android.net.ConnectivityManager import android.net.Network import android.net.NetworkCapabilities import android.net.NetworkRequest -import android.os.Build import androidx.annotation.RequiresPermission import kotlinx.coroutines.channels.awaitClose import kotlinx.coroutines.flow.Flow @@ -24,11 +23,8 @@ class NetworkStatusProviderImpl( NetworkRequest .Builder() .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) - .also { builder -> - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { - builder.addCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED) - } - }.build() + .addCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED) + .build() private val availableNetworks = mutableSetOf() @@ -77,13 +73,8 @@ class NetworkStatusProviderImpl( @RequiresPermission("android.permission.ACCESS_NETWORK_STATE") private fun ConnectivityManager.getCurrentNetworkState(): Boolean { - @Suppress("DEPRECATION") - return if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) { - activeNetworkInfo?.isConnected == true - } else { - val networkCapabilities = getNetworkCapabilities(activeNetwork) - networkCapabilities?.asNetworkState() ?: false - } + val networkCapabilities = getNetworkCapabilities(activeNetwork) + return networkCapabilities?.asNetworkState() ?: false } private fun NetworkCapabilities.asNetworkState(): Boolean = hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) diff --git a/commonskmm/src/commonMain/kotlin/org/dhis2/mobile/commons/biometrics/CryptographicActions.kt b/commonskmm/src/commonMain/kotlin/org/dhis2/mobile/commons/biometrics/CryptographicActions.kt index 9146451a323..fa04f543535 100644 --- a/commonskmm/src/commonMain/kotlin/org/dhis2/mobile/commons/biometrics/CryptographicActions.kt +++ b/commonskmm/src/commonMain/kotlin/org/dhis2/mobile/commons/biometrics/CryptographicActions.kt @@ -3,9 +3,9 @@ package org.dhis2.mobile.commons.biometrics import javax.crypto.Cipher interface CryptographicActions { - fun getInitializedCipherForEncryption(): Cipher? + fun getInitializedCipherForEncryption(): Cipher - fun getInitializedCipherForDecryption(initializationVector: ByteArray): Cipher? + fun getInitializedCipherForDecryption(initializationVector: ByteArray): Cipher fun encryptData( plaintext: String, diff --git a/login/src/androidMain/kotlin/org/dhis2/mobile/login/main/data/LoginRepositoryImpl.kt b/login/src/androidMain/kotlin/org/dhis2/mobile/login/main/data/LoginRepositoryImpl.kt index 272979b548e..068cd2faf6c 100644 --- a/login/src/androidMain/kotlin/org/dhis2/mobile/login/main/data/LoginRepositoryImpl.kt +++ b/login/src/androidMain/kotlin/org/dhis2/mobile/login/main/data/LoginRepositoryImpl.kt @@ -264,7 +264,7 @@ class LoginRepositoryImpl( preferences.getBiometricCredentials()?.let { ciphertextWrapper -> cryptographyManager .getInitializedCipherForDecryption(ciphertextWrapper.initializationVector) - ?.let { cipher -> + .let { cipher -> suspendCancellableCoroutine { continuation -> authenticator.authenticate(cipher) { cipher -> val pass = diff --git a/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/domain/usecase/UpdateBiometricPermission.kt b/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/domain/usecase/UpdateBiometricPermission.kt index 71aa7cb3eaf..b9cf84f5d14 100644 --- a/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/domain/usecase/UpdateBiometricPermission.kt +++ b/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/domain/usecase/UpdateBiometricPermission.kt @@ -32,20 +32,19 @@ class UpdateBiometricPermission( val cancellationMessage = getString(Res.string.biometrics_permission_cancelled) suspendCancellableCoroutine { continuation -> val scope = CoroutineScope(continuation.context) - cryptographics.getInitializedCipherForEncryption()?.let { - biometrics.authenticate(it) { cryptoObjectCipher -> - scope.launch { - val ciphertextWrapper = - cryptographics.encryptData(password, cryptoObjectCipher) - preferences.saveUserCredentialsAndCipher( - serverUrl, - username, - ciphertextWrapper, - ) - loginRepository.updateBiometricsPermissions(granted) - if (continuation.isActive) { - continuation.resume(Result.success(Unit)) - } + val cipher = cryptographics.getInitializedCipherForEncryption() + biometrics.authenticate(cipher) { cryptoObjectCipher -> + scope.launch { + val ciphertextWrapper = + cryptographics.encryptData(password, cryptoObjectCipher) + preferences.saveUserCredentialsAndCipher( + serverUrl, + username, + ciphertextWrapper, + ) + loginRepository.updateBiometricsPermissions(granted) + if (continuation.isActive) { + continuation.resume(Result.success(Unit)) } } } diff --git a/stock-usecase/src/main/java/org/dhis2/android/rtsm/utils/LocaleManager.kt b/stock-usecase/src/main/java/org/dhis2/android/rtsm/utils/LocaleManager.kt index a3765cacb0a..e027631b994 100644 --- a/stock-usecase/src/main/java/org/dhis2/android/rtsm/utils/LocaleManager.kt +++ b/stock-usecase/src/main/java/org/dhis2/android/rtsm/utils/LocaleManager.kt @@ -28,10 +28,10 @@ class LocaleManager { ): Context { val config = updateConfiguration(context, language) - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { - return context.createConfigurationContext(config) + return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + context.createConfigurationContext(config) } else { - return context + context } } @@ -44,7 +44,7 @@ class LocaleManager { val resources = context.resources val config = Configuration(resources.configuration) - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { val localeList = LocaleList(newLocale) LocaleList.setDefault(localeList) config.setLocales(localeList) // additionally sets the layout direction From 5dc741d29f356104f40363bcbab5de5cbf447ef1 Mon Sep 17 00:00:00 2001 From: danielTari Date: Fri, 9 Jan 2026 14:44:40 +0100 Subject: [PATCH 010/114] chore: [ANDROAPP-7435] fix kapt error --- .../main/res/layout/calendar_picker_view.xml | 1 - .../login/main/data/LoginRepositoryImpl.kt | 28 +++++++++---------- 2 files changed, 13 insertions(+), 16 deletions(-) diff --git a/commons/src/main/res/layout/calendar_picker_view.xml b/commons/src/main/res/layout/calendar_picker_view.xml index 9e0dae8fcbf..65fdbd8f1c5 100644 --- a/commons/src/main/res/layout/calendar_picker_view.xml +++ b/commons/src/main/res/layout/calendar_picker_view.xml @@ -31,7 +31,6 @@ diff --git a/login/src/androidMain/kotlin/org/dhis2/mobile/login/main/data/LoginRepositoryImpl.kt b/login/src/androidMain/kotlin/org/dhis2/mobile/login/main/data/LoginRepositoryImpl.kt index 068cd2faf6c..bff29e25242 100644 --- a/login/src/androidMain/kotlin/org/dhis2/mobile/login/main/data/LoginRepositoryImpl.kt +++ b/login/src/androidMain/kotlin/org/dhis2/mobile/login/main/data/LoginRepositoryImpl.kt @@ -262,23 +262,21 @@ class LoginRepositoryImpl( override suspend fun loginWithBiometric(): kotlin.Result = withContext(dispatcher.main) { preferences.getBiometricCredentials()?.let { ciphertextWrapper -> - cryptographyManager + val cipher = cryptographyManager .getInitializedCipherForDecryption(ciphertextWrapper.initializationVector) - .let { cipher -> - suspendCancellableCoroutine { continuation -> - authenticator.authenticate(cipher) { cipher -> - val pass = - cryptographyManager.decryptData( - ciphertextWrapper.ciphertext, - cipher, - ) - continuation.resume(value = kotlin.Result.success(pass)) { _, _, _ -> } - } - continuation.invokeOnCancellation { - // If needed perform action on cancellation - } - } + suspendCancellableCoroutine { continuation -> + authenticator.authenticate(cipher) { cipher -> + val pass = + cryptographyManager.decryptData( + ciphertextWrapper.ciphertext, + cipher, + ) + continuation.resume(value = kotlin.Result.success(pass)) { _, _, _ -> } + } + continuation.invokeOnCancellation { + // If needed perform action on cancellation } + } } ?: kotlin.Result.failure(Exception("No biometrics found")) } From 8fcfc0bc5d54c430816e6c1c9e6f99f01285a302 Mon Sep 17 00:00:00 2001 From: danielTari Date: Fri, 9 Jan 2026 16:05:30 +0100 Subject: [PATCH 011/114] chore: [ANDROAPP-7435] fix ktlint complaints --- .../login/main/data/LoginRepositoryImpl.kt | 28 ++++++++++--------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/login/src/androidMain/kotlin/org/dhis2/mobile/login/main/data/LoginRepositoryImpl.kt b/login/src/androidMain/kotlin/org/dhis2/mobile/login/main/data/LoginRepositoryImpl.kt index bff29e25242..068cd2faf6c 100644 --- a/login/src/androidMain/kotlin/org/dhis2/mobile/login/main/data/LoginRepositoryImpl.kt +++ b/login/src/androidMain/kotlin/org/dhis2/mobile/login/main/data/LoginRepositoryImpl.kt @@ -262,21 +262,23 @@ class LoginRepositoryImpl( override suspend fun loginWithBiometric(): kotlin.Result = withContext(dispatcher.main) { preferences.getBiometricCredentials()?.let { ciphertextWrapper -> - val cipher = cryptographyManager + cryptographyManager .getInitializedCipherForDecryption(ciphertextWrapper.initializationVector) - suspendCancellableCoroutine { continuation -> - authenticator.authenticate(cipher) { cipher -> - val pass = - cryptographyManager.decryptData( - ciphertextWrapper.ciphertext, - cipher, - ) - continuation.resume(value = kotlin.Result.success(pass)) { _, _, _ -> } - } - continuation.invokeOnCancellation { - // If needed perform action on cancellation + .let { cipher -> + suspendCancellableCoroutine { continuation -> + authenticator.authenticate(cipher) { cipher -> + val pass = + cryptographyManager.decryptData( + ciphertextWrapper.ciphertext, + cipher, + ) + continuation.resume(value = kotlin.Result.success(pass)) { _, _, _ -> } + } + continuation.invokeOnCancellation { + // If needed perform action on cancellation + } + } } - } } ?: kotlin.Result.failure(Exception("No biometrics found")) } From a090fd6fc88b72d94ad371b30ee199c233ddd3b8 Mon Sep 17 00:00:00 2001 From: danielTari Date: Tue, 13 Jan 2026 10:37:19 +0100 Subject: [PATCH 012/114] chore: [ANDROAPP-7435] simplify version logic --- .../main/java/org/dhis2/android/rtsm/utils/LocaleManager.kt | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/stock-usecase/src/main/java/org/dhis2/android/rtsm/utils/LocaleManager.kt b/stock-usecase/src/main/java/org/dhis2/android/rtsm/utils/LocaleManager.kt index e027631b994..1a15c9646c2 100644 --- a/stock-usecase/src/main/java/org/dhis2/android/rtsm/utils/LocaleManager.kt +++ b/stock-usecase/src/main/java/org/dhis2/android/rtsm/utils/LocaleManager.kt @@ -28,11 +28,7 @@ class LocaleManager { ): Context { val config = updateConfiguration(context, language) - return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - context.createConfigurationContext(config) - } else { - context - } + return context.createConfigurationContext(config) } @JvmStatic From e425b513cc14502102003fb2e246b8d53582462d Mon Sep 17 00:00:00 2001 From: Pablo Date: Tue, 13 Jan 2026 13:45:59 +0100 Subject: [PATCH 013/114] build: [ANDROAPP-7434] remove ui components [skip size] (#4573) --- .tx/config | 8 --- .../dhis2/usescases/datasets/DataSetTest.kt | 9 ++- .../teidashboard/TeiDashboardTest.kt | 24 ++++--- .../teidashboard/robot/EnrollmentRobot.kt | 8 ++- .../utils/granularsync/SyncStatusDialog.kt | 2 +- .../utils/granularsync/SyncStatusItem.kt | 2 +- commons/build.gradle.kts | 1 - .../commons/bindings/TEICardExtensions.kt | 2 +- .../dialogs/bottomsheet/BottomSheetDialog.kt | 2 +- .../bottomsheet/BottomSheetDialogContent.kt | 2 +- .../bottomsheet/DeleteBottomSheetDialog.kt | 2 +- .../dialogs/bottomsheet/DialogButtonStyle.kt | 2 +- .../src/main/res/drawable/ic_delete.xml | 0 .../main/res/drawable/ic_error_outline.xml | 0 .../res/drawable/ic_event_status_complete.xml | 0 .../src/main/res/drawable/ic_file.xml | 0 .../main/res/drawable/ic_file_download.xml | 0 .../main/res/drawable/ic_home_negative.xml | 0 .../src/main/res/drawable/ic_home_outline.xml | 0 .../main/res/drawable/ic_home_positive.xml | 0 .../src/main/res/drawable/ic_input_info.xml | 0 .../src/main/res/drawable/ic_saved_check.xml | 0 .../main/res/drawable/ic_tree_node_close.xml | 0 .../res/drawable/ic_tree_node_default.xml | 0 .../main/res/drawable/ic_tree_node_open.xml | 0 .../main/res/drawable/ic_warning_alert.xml | 0 .../main/res/drawable/image_not_supported.xml | 0 commons/src/main/res/values-ar/strings.xml | 3 +- commons/src/main/res/values-cs/strings.xml | 1 + commons/src/main/res/values-es/strings.xml | 3 +- commons/src/main/res/values-fr/strings.xml | 3 +- commons/src/main/res/values-nb/strings.xml | 3 +- .../src/main/res/values-pt-rBR/strings.xml | 2 +- commons/src/main/res/values-pt/strings.xml | 3 +- commons/src/main/res/values-ru/strings.xml | 3 +- commons/src/main/res/values-sv/strings.xml | 3 +- .../src/main/res/values-uz-rUZ/strings.xml | 3 +- commons/src/main/res/values-uz/strings.xml | 3 +- commons/src/main/res/values-vi/strings.xml | 1 + .../src/main/res/values-zh-rCN/strings.xml | 3 +- commons/src/main/res/values-zh/strings.xml | 1 + commons/src/main/res/values/strings.xml | 2 + commons/src/main/res/values/styles.xml | 8 +++ .../analytics/charts/mappers/GraphToTable.kt | 2 +- gradle/libs.versions.toml | 4 -- settings.gradle.kts | 2 +- stock-usecase/build.gradle.kts | 2 + ui-components/.gitignore | 1 - ui-components/build.gradle.kts | 60 ------------------ ui-components/consumer-rules.pro | 0 ui-components/proguard-rules.pro | 21 ------ .../src/main/res/drawable/ic_add_image.xml | 9 --- .../src/main/res/font/rubik_bold.ttf | Bin 143356 -> 0 bytes .../src/main/res/font/rubik_light.ttf | Bin 136816 -> 0 bytes .../src/main/res/font/rubik_medium.ttf | Bin 135760 -> 0 bytes .../src/main/res/font/rubik_regular.ttf | Bin 140732 -> 0 bytes ui-components/src/main/res/raw/warning.json | 1 - .../src/main/res/values-ar-rEG/strings.xml | 5 -- .../src/main/res/values-ar-rIQ/strings.xml | 10 --- .../src/main/res/values-ar/strings.xml | 32 ---------- .../src/main/res/values-ckb/strings.xml | 11 ---- .../src/main/res/values-cs/strings.xml | 29 --------- .../src/main/res/values-da/strings.xml | 8 --- .../src/main/res/values-es-rES/strings.xml | 15 ----- .../src/main/res/values-es/strings.xml | 27 -------- .../src/main/res/values-fr/strings.xml | 26 -------- .../src/main/res/values-hi-rIN/strings.xml | 15 ----- .../src/main/res/values-id/strings.xml | 12 ---- .../src/main/res/values-km/strings.xml | 13 ---- .../src/main/res/values-lo/strings.xml | 18 ------ .../src/main/res/values-my/strings.xml | 10 --- .../src/main/res/values-nb/strings.xml | 14 ---- .../src/main/res/values-ne/strings.xml | 6 -- .../src/main/res/values-nl/strings.xml | 23 ------- .../src/main/res/values-or/strings.xml | 4 -- .../src/main/res/values-prs/strings.xml | 11 ---- .../src/main/res/values-ps/strings.xml | 11 ---- .../src/main/res/values-pt-rBR/strings.xml | 12 ---- .../src/main/res/values-pt/strings.xml | 27 -------- .../src/main/res/values-ro/strings.xml | 9 --- .../src/main/res/values-ru/strings.xml | 28 -------- .../src/main/res/values-si/strings.xml | 8 --- .../src/main/res/values-sv/strings.xml | 13 ---- .../src/main/res/values-tet/strings.xml | 9 --- .../src/main/res/values-tg/strings.xml | 11 ---- .../src/main/res/values-uk/strings.xml | 3 - .../src/main/res/values-ur/strings.xml | 11 ---- .../src/main/res/values-uz-rUZ/strings.xml | 14 ---- .../src/main/res/values-uz/strings.xml | 23 ------- .../src/main/res/values-vi/strings.xml | 23 ------- .../src/main/res/values-zh-rCN/strings.xml | 23 ------- .../src/main/res/values-zh/strings.xml | 23 ------- ui-components/src/main/res/values/colors.xml | 2 - ui-components/src/main/res/values/strings.xml | 26 -------- ui-components/src/main/res/values/styles.xml | 10 --- 95 files changed, 67 insertions(+), 719 deletions(-) rename {ui-components => commons}/src/main/res/drawable/ic_delete.xml (100%) rename {ui-components => commons}/src/main/res/drawable/ic_error_outline.xml (100%) rename {ui-components => commons}/src/main/res/drawable/ic_event_status_complete.xml (100%) rename {ui-components => commons}/src/main/res/drawable/ic_file.xml (100%) rename {ui-components => commons}/src/main/res/drawable/ic_file_download.xml (100%) rename {ui-components => commons}/src/main/res/drawable/ic_home_negative.xml (100%) rename {ui-components => commons}/src/main/res/drawable/ic_home_outline.xml (100%) rename {ui-components => commons}/src/main/res/drawable/ic_home_positive.xml (100%) rename {ui-components => commons}/src/main/res/drawable/ic_input_info.xml (100%) rename {ui-components => commons}/src/main/res/drawable/ic_saved_check.xml (100%) rename {ui-components => commons}/src/main/res/drawable/ic_tree_node_close.xml (100%) rename {ui-components => commons}/src/main/res/drawable/ic_tree_node_default.xml (100%) rename {ui-components => commons}/src/main/res/drawable/ic_tree_node_open.xml (100%) rename {ui-components => commons}/src/main/res/drawable/ic_warning_alert.xml (100%) rename {ui-components => commons}/src/main/res/drawable/image_not_supported.xml (100%) delete mode 100644 ui-components/.gitignore delete mode 100644 ui-components/build.gradle.kts delete mode 100644 ui-components/consumer-rules.pro delete mode 100644 ui-components/proguard-rules.pro delete mode 100644 ui-components/src/main/res/drawable/ic_add_image.xml delete mode 100644 ui-components/src/main/res/font/rubik_bold.ttf delete mode 100644 ui-components/src/main/res/font/rubik_light.ttf delete mode 100644 ui-components/src/main/res/font/rubik_medium.ttf delete mode 100644 ui-components/src/main/res/font/rubik_regular.ttf delete mode 100644 ui-components/src/main/res/raw/warning.json delete mode 100644 ui-components/src/main/res/values-ar-rEG/strings.xml delete mode 100644 ui-components/src/main/res/values-ar-rIQ/strings.xml delete mode 100644 ui-components/src/main/res/values-ar/strings.xml delete mode 100644 ui-components/src/main/res/values-ckb/strings.xml delete mode 100644 ui-components/src/main/res/values-cs/strings.xml delete mode 100644 ui-components/src/main/res/values-da/strings.xml delete mode 100644 ui-components/src/main/res/values-es-rES/strings.xml delete mode 100644 ui-components/src/main/res/values-es/strings.xml delete mode 100644 ui-components/src/main/res/values-fr/strings.xml delete mode 100644 ui-components/src/main/res/values-hi-rIN/strings.xml delete mode 100644 ui-components/src/main/res/values-id/strings.xml delete mode 100644 ui-components/src/main/res/values-km/strings.xml delete mode 100644 ui-components/src/main/res/values-lo/strings.xml delete mode 100644 ui-components/src/main/res/values-my/strings.xml delete mode 100644 ui-components/src/main/res/values-nb/strings.xml delete mode 100644 ui-components/src/main/res/values-ne/strings.xml delete mode 100644 ui-components/src/main/res/values-nl/strings.xml delete mode 100644 ui-components/src/main/res/values-or/strings.xml delete mode 100644 ui-components/src/main/res/values-prs/strings.xml delete mode 100644 ui-components/src/main/res/values-ps/strings.xml delete mode 100644 ui-components/src/main/res/values-pt-rBR/strings.xml delete mode 100644 ui-components/src/main/res/values-pt/strings.xml delete mode 100644 ui-components/src/main/res/values-ro/strings.xml delete mode 100644 ui-components/src/main/res/values-ru/strings.xml delete mode 100644 ui-components/src/main/res/values-si/strings.xml delete mode 100644 ui-components/src/main/res/values-sv/strings.xml delete mode 100644 ui-components/src/main/res/values-tet/strings.xml delete mode 100644 ui-components/src/main/res/values-tg/strings.xml delete mode 100644 ui-components/src/main/res/values-uk/strings.xml delete mode 100644 ui-components/src/main/res/values-ur/strings.xml delete mode 100644 ui-components/src/main/res/values-uz-rUZ/strings.xml delete mode 100644 ui-components/src/main/res/values-uz/strings.xml delete mode 100644 ui-components/src/main/res/values-vi/strings.xml delete mode 100644 ui-components/src/main/res/values-zh-rCN/strings.xml delete mode 100644 ui-components/src/main/res/values-zh/strings.xml delete mode 100644 ui-components/src/main/res/values/colors.xml delete mode 100644 ui-components/src/main/res/values/strings.xml delete mode 100644 ui-components/src/main/res/values/styles.xml diff --git a/.tx/config b/.tx/config index af74d17517a..1041abf2e4c 100644 --- a/.tx/config +++ b/.tx/config @@ -50,14 +50,6 @@ type = ANDROID minimum_perc = 0 resource_name = Main App -[o:hisp-uio:p:dhis2-android-capture-app:r:ui-strings-xml] -file_filter = ui-components/src/main/res/values-/strings.xml -source_file = ui-components/src/main/res/values/strings.xml -source_lang = en -type = ANDROID -minimum_perc = 0 -resource_name = UI Components - [o:hisp-uio:p:dhis2-android-capture-app:r:table-strings-xml] file_filter = compose-table/src/main/res/values-/strings.xml source_file = compose-table/src/main/res/values/strings.xml diff --git a/app/src/androidTest/java/org/dhis2/usescases/datasets/DataSetTest.kt b/app/src/androidTest/java/org/dhis2/usescases/datasets/DataSetTest.kt index fddab093aa3..6a7fe071478 100644 --- a/app/src/androidTest/java/org/dhis2/usescases/datasets/DataSetTest.kt +++ b/app/src/androidTest/java/org/dhis2/usescases/datasets/DataSetTest.kt @@ -306,6 +306,7 @@ class DataSetTest : BaseTest() { val cellId = "PGRlPlhOcmpYcVpySEQ4Ojxjb2M+SGxsdlg1MGNYQzA=" val threeDaysFromNowStr = threeDaysFromNow.format(formatter) val fiveDaysAgoStr = fiveDaysAgo.format(formatter) + enterDataSetStep( uid = dataSetUid, name = dataSetName, @@ -317,10 +318,7 @@ class DataSetTest : BaseTest() { ) checkTableIsNotEditable() - dataSetTableRobot(composeTestRule) { - tapOnSaveButton() - } - composeTestRule.waitForIdle() + createDailyPeriodDataSetInstanceStep( date = threeDaysFromNowStr, orgUnit = orgUnit, @@ -381,8 +379,9 @@ class DataSetTest : BaseTest() { composeTestRule.onNodeWithTag("TABLE_SCROLLABLE_COLUMN").printToLog("TABLE_LOG") dataSetTableRobot(composeTestRule) { checkItemWithTextIsDisplayed("This data is not editable") + tapOnSaveButton() + composeTestRule.waitForIdle() } - composeTestRule.waitForIdle() } private suspend fun checkContentBoxesAreDisplayed() { diff --git a/app/src/androidTest/java/org/dhis2/usescases/teidashboard/TeiDashboardTest.kt b/app/src/androidTest/java/org/dhis2/usescases/teidashboard/TeiDashboardTest.kt index 93c3c49e54f..1e67d65ca19 100644 --- a/app/src/androidTest/java/org/dhis2/usescases/teidashboard/TeiDashboardTest.kt +++ b/app/src/androidTest/java/org/dhis2/usescases/teidashboard/TeiDashboardTest.kt @@ -339,23 +339,21 @@ class TeiDashboardTest : BaseTest() { clickOnTimelineEvents() clickOnMenuMoreOptions() clickOnMenuProgramEnrollments() - } - enrollmentRobot(composeTestRule) { - clickOnAProgramForEnrollment(composeTestRule, womanProgram) - clickOnAcceptInDatePicker() + enrollmentRobot(composeTestRule) { + clickOnAProgramForEnrollment(composeTestRule, womanProgram) + clickOnAcceptInDatePicker() - orgUnitSelectorRobot(composeTestRule) { - selectTreeOrgUnit(orgUnit) - } + orgUnitSelectorRobot(composeTestRule) { + selectTreeOrgUnit(orgUnit) + } - waitUntilActivityVisible() - openFormSection(personAttribute) - typeOnInputDateField("01012000", "Date of birth") - clickOnSaveEnrollment() - } + waitUntilActivityVisible() + openFormSection(personAttribute) + typeOnInputDateField("01012000", "Date of birth") + clickOnSaveEnrollment() + } - teiDashboardRobot(composeTestRule) { waitToDebounce(1000) clickOnMenuMoreOptions() clickOnTimelineEvents() diff --git a/app/src/androidTest/java/org/dhis2/usescases/teidashboard/robot/EnrollmentRobot.kt b/app/src/androidTest/java/org/dhis2/usescases/teidashboard/robot/EnrollmentRobot.kt index 1941f23e3db..1a95d437aa5 100644 --- a/app/src/androidTest/java/org/dhis2/usescases/teidashboard/robot/EnrollmentRobot.kt +++ b/app/src/androidTest/java/org/dhis2/usescases/teidashboard/robot/EnrollmentRobot.kt @@ -40,9 +40,15 @@ fun enrollmentRobot( class EnrollmentRobot(val composeTestRule: ComposeTestRule) : BaseRobot() { + @OptIn(ExperimentalTestApi::class) fun clickOnAProgramForEnrollment(composeTestRule: ComposeTestRule, program: String) { + val testTag = PROGRAM_TO_ENROLL.format(program) composeTestRule.waitForIdle() - composeTestRule.onNodeWithTag(PROGRAM_TO_ENROLL.format(program), useUnmergedTree = true) + composeTestRule.waitUntilAtLeastOneExists( + hasTestTag(testTag), + TIMEOUT + ) + composeTestRule.onNodeWithTag(testTag, useUnmergedTree = true) .performClick() composeTestRule.waitForIdle() } diff --git a/app/src/main/java/org/dhis2/utils/granularsync/SyncStatusDialog.kt b/app/src/main/java/org/dhis2/utils/granularsync/SyncStatusDialog.kt index b37d679c104..ea90a4b0dd3 100644 --- a/app/src/main/java/org/dhis2/utils/granularsync/SyncStatusDialog.kt +++ b/app/src/main/java/org/dhis2/utils/granularsync/SyncStatusDialog.kt @@ -90,7 +90,7 @@ class SyncStatusDialog : override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - setStyle(STYLE_NORMAL, org.dhis2.ui.R.style.CustomBottomSheetDialogTheme) + setStyle(STYLE_NORMAL, org.dhis2.commons.R.style.CustomBottomSheetDialogTheme) } override fun onCreateView( diff --git a/app/src/main/java/org/dhis2/utils/granularsync/SyncStatusItem.kt b/app/src/main/java/org/dhis2/utils/granularsync/SyncStatusItem.kt index 7d87562e767..a0557714a75 100644 --- a/app/src/main/java/org/dhis2/utils/granularsync/SyncStatusItem.kt +++ b/app/src/main/java/org/dhis2/utils/granularsync/SyncStatusItem.kt @@ -18,7 +18,7 @@ import androidx.compose.ui.graphics.vector.ImageVector import androidx.compose.ui.res.vectorResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp -import org.dhis2.ui.R +import org.dhis2.commons.R @Composable fun SyncStatusItem( diff --git a/commons/build.gradle.kts b/commons/build.gradle.kts index da9af0110d0..e7f6e7c3bd6 100644 --- a/commons/build.gradle.kts +++ b/commons/build.gradle.kts @@ -63,7 +63,6 @@ kotlin { dependencies { implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar")))) - api(project(":ui-components")) implementation(project(":commonskmm")) api(libs.dhis2.android.sdk) { diff --git a/commons/src/main/java/org/dhis2/commons/bindings/TEICardExtensions.kt b/commons/src/main/java/org/dhis2/commons/bindings/TEICardExtensions.kt index 1e8c74bf814..a3974ce22b0 100644 --- a/commons/src/main/java/org/dhis2/commons/bindings/TEICardExtensions.kt +++ b/commons/src/main/java/org/dhis2/commons/bindings/TEICardExtensions.kt @@ -146,7 +146,7 @@ private fun SquareWithNumber(number: Int) { text = "+$number", color = "#6f6f6f".toColor(), textAlign = TextAlign.Center, - fontFamily = FontFamily(Font(org.dhis2.ui.R.font.rubik_regular)), + fontFamily = FontFamily(Font(R.font.rubik_regular)), ) } } diff --git a/commons/src/main/java/org/dhis2/commons/dialogs/bottomsheet/BottomSheetDialog.kt b/commons/src/main/java/org/dhis2/commons/dialogs/bottomsheet/BottomSheetDialog.kt index 411f9948d65..fa052662cd2 100644 --- a/commons/src/main/java/org/dhis2/commons/dialogs/bottomsheet/BottomSheetDialog.kt +++ b/commons/src/main/java/org/dhis2/commons/dialogs/bottomsheet/BottomSheetDialog.kt @@ -28,7 +28,7 @@ import androidx.compose.ui.text.style.TextDecoration import com.google.android.material.bottomsheet.BottomSheetBehavior import com.google.android.material.bottomsheet.BottomSheetDialog import com.google.android.material.bottomsheet.BottomSheetDialogFragment -import org.dhis2.ui.R +import org.dhis2.commons.R import org.hisp.dhis.mobile.ui.designsystem.component.BottomSheetShell import org.hisp.dhis.mobile.ui.designsystem.component.Button import org.hisp.dhis.mobile.ui.designsystem.component.ButtonBlock diff --git a/commons/src/main/java/org/dhis2/commons/dialogs/bottomsheet/BottomSheetDialogContent.kt b/commons/src/main/java/org/dhis2/commons/dialogs/bottomsheet/BottomSheetDialogContent.kt index 9f18de0dcb7..f1ab514d53a 100644 --- a/commons/src/main/java/org/dhis2/commons/dialogs/bottomsheet/BottomSheetDialogContent.kt +++ b/commons/src/main/java/org/dhis2/commons/dialogs/bottomsheet/BottomSheetDialogContent.kt @@ -39,7 +39,7 @@ import androidx.compose.ui.text.style.TextDecoration import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import org.dhis2.ui.R +import org.dhis2.commons.R import org.hisp.dhis.mobile.ui.designsystem.component.Button import org.hisp.dhis.mobile.ui.designsystem.component.ButtonStyle import org.hisp.dhis.mobile.ui.designsystem.theme.TextColor diff --git a/commons/src/main/java/org/dhis2/commons/dialogs/bottomsheet/DeleteBottomSheetDialog.kt b/commons/src/main/java/org/dhis2/commons/dialogs/bottomsheet/DeleteBottomSheetDialog.kt index fd31a01b0d0..112d4979088 100644 --- a/commons/src/main/java/org/dhis2/commons/dialogs/bottomsheet/DeleteBottomSheetDialog.kt +++ b/commons/src/main/java/org/dhis2/commons/dialogs/bottomsheet/DeleteBottomSheetDialog.kt @@ -15,7 +15,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.platform.ComposeView import androidx.compose.ui.platform.ViewCompositionStrategy import com.google.android.material.bottomsheet.BottomSheetDialogFragment -import org.dhis2.ui.R +import org.dhis2.commons.R import org.hisp.dhis.mobile.ui.designsystem.component.BottomSheetShell import org.hisp.dhis.mobile.ui.designsystem.component.Button import org.hisp.dhis.mobile.ui.designsystem.component.ButtonBlock diff --git a/commons/src/main/java/org/dhis2/commons/dialogs/bottomsheet/DialogButtonStyle.kt b/commons/src/main/java/org/dhis2/commons/dialogs/bottomsheet/DialogButtonStyle.kt index 6261f09a93d..d372c0e526d 100644 --- a/commons/src/main/java/org/dhis2/commons/dialogs/bottomsheet/DialogButtonStyle.kt +++ b/commons/src/main/java/org/dhis2/commons/dialogs/bottomsheet/DialogButtonStyle.kt @@ -1,7 +1,7 @@ package org.dhis2.commons.dialogs.bottomsheet import androidx.compose.ui.graphics.Color -import org.dhis2.ui.R +import org.dhis2.commons.R import org.hisp.dhis.mobile.ui.designsystem.component.ButtonStyle import org.hisp.dhis.mobile.ui.designsystem.theme.SurfaceColor diff --git a/ui-components/src/main/res/drawable/ic_delete.xml b/commons/src/main/res/drawable/ic_delete.xml similarity index 100% rename from ui-components/src/main/res/drawable/ic_delete.xml rename to commons/src/main/res/drawable/ic_delete.xml diff --git a/ui-components/src/main/res/drawable/ic_error_outline.xml b/commons/src/main/res/drawable/ic_error_outline.xml similarity index 100% rename from ui-components/src/main/res/drawable/ic_error_outline.xml rename to commons/src/main/res/drawable/ic_error_outline.xml diff --git a/ui-components/src/main/res/drawable/ic_event_status_complete.xml b/commons/src/main/res/drawable/ic_event_status_complete.xml similarity index 100% rename from ui-components/src/main/res/drawable/ic_event_status_complete.xml rename to commons/src/main/res/drawable/ic_event_status_complete.xml diff --git a/ui-components/src/main/res/drawable/ic_file.xml b/commons/src/main/res/drawable/ic_file.xml similarity index 100% rename from ui-components/src/main/res/drawable/ic_file.xml rename to commons/src/main/res/drawable/ic_file.xml diff --git a/ui-components/src/main/res/drawable/ic_file_download.xml b/commons/src/main/res/drawable/ic_file_download.xml similarity index 100% rename from ui-components/src/main/res/drawable/ic_file_download.xml rename to commons/src/main/res/drawable/ic_file_download.xml diff --git a/ui-components/src/main/res/drawable/ic_home_negative.xml b/commons/src/main/res/drawable/ic_home_negative.xml similarity index 100% rename from ui-components/src/main/res/drawable/ic_home_negative.xml rename to commons/src/main/res/drawable/ic_home_negative.xml diff --git a/ui-components/src/main/res/drawable/ic_home_outline.xml b/commons/src/main/res/drawable/ic_home_outline.xml similarity index 100% rename from ui-components/src/main/res/drawable/ic_home_outline.xml rename to commons/src/main/res/drawable/ic_home_outline.xml diff --git a/ui-components/src/main/res/drawable/ic_home_positive.xml b/commons/src/main/res/drawable/ic_home_positive.xml similarity index 100% rename from ui-components/src/main/res/drawable/ic_home_positive.xml rename to commons/src/main/res/drawable/ic_home_positive.xml diff --git a/ui-components/src/main/res/drawable/ic_input_info.xml b/commons/src/main/res/drawable/ic_input_info.xml similarity index 100% rename from ui-components/src/main/res/drawable/ic_input_info.xml rename to commons/src/main/res/drawable/ic_input_info.xml diff --git a/ui-components/src/main/res/drawable/ic_saved_check.xml b/commons/src/main/res/drawable/ic_saved_check.xml similarity index 100% rename from ui-components/src/main/res/drawable/ic_saved_check.xml rename to commons/src/main/res/drawable/ic_saved_check.xml diff --git a/ui-components/src/main/res/drawable/ic_tree_node_close.xml b/commons/src/main/res/drawable/ic_tree_node_close.xml similarity index 100% rename from ui-components/src/main/res/drawable/ic_tree_node_close.xml rename to commons/src/main/res/drawable/ic_tree_node_close.xml diff --git a/ui-components/src/main/res/drawable/ic_tree_node_default.xml b/commons/src/main/res/drawable/ic_tree_node_default.xml similarity index 100% rename from ui-components/src/main/res/drawable/ic_tree_node_default.xml rename to commons/src/main/res/drawable/ic_tree_node_default.xml diff --git a/ui-components/src/main/res/drawable/ic_tree_node_open.xml b/commons/src/main/res/drawable/ic_tree_node_open.xml similarity index 100% rename from ui-components/src/main/res/drawable/ic_tree_node_open.xml rename to commons/src/main/res/drawable/ic_tree_node_open.xml diff --git a/ui-components/src/main/res/drawable/ic_warning_alert.xml b/commons/src/main/res/drawable/ic_warning_alert.xml similarity index 100% rename from ui-components/src/main/res/drawable/ic_warning_alert.xml rename to commons/src/main/res/drawable/ic_warning_alert.xml diff --git a/ui-components/src/main/res/drawable/image_not_supported.xml b/commons/src/main/res/drawable/image_not_supported.xml similarity index 100% rename from ui-components/src/main/res/drawable/image_not_supported.xml rename to commons/src/main/res/drawable/image_not_supported.xml diff --git a/commons/src/main/res/values-ar/strings.xml b/commons/src/main/res/values-ar/strings.xml index 3259c450693..149d9166be8 100644 --- a/commons/src/main/res/values-ar/strings.xml +++ b/commons/src/main/res/values-ar/strings.xml @@ -250,4 +250,5 @@ ربع السنة ستة أشهر سنة - + تنظيف الكل + diff --git a/commons/src/main/res/values-cs/strings.xml b/commons/src/main/res/values-cs/strings.xml index c05ca45ae64..433479b5f2a 100644 --- a/commons/src/main/res/values-cs/strings.xml +++ b/commons/src/main/res/values-cs/strings.xml @@ -329,4 +329,5 @@ Import databáze se nezdařil Neplatný soubor Není v režimu registrace TOTP 2FA + Vymazat vše diff --git a/commons/src/main/res/values-es/strings.xml b/commons/src/main/res/values-es/strings.xml index fa1b681c9da..7677a34705d 100644 --- a/commons/src/main/res/values-es/strings.xml +++ b/commons/src/main/res/values-es/strings.xml @@ -347,4 +347,5 @@ No hay periodos disponibles\n Importación de la base de datos fallida Archivo no válido - + Limpiar todo + diff --git a/commons/src/main/res/values-fr/strings.xml b/commons/src/main/res/values-fr/strings.xml index 0007a893d5d..72f5db28171 100644 --- a/commons/src/main/res/values-fr/strings.xml +++ b/commons/src/main/res/values-fr/strings.xml @@ -220,4 +220,5 @@ Mois Trimestre Année - + Tout effacer + diff --git a/commons/src/main/res/values-nb/strings.xml b/commons/src/main/res/values-nb/strings.xml index ea9b4ffa21a..315bebd06d5 100644 --- a/commons/src/main/res/values-nb/strings.xml +++ b/commons/src/main/res/values-nb/strings.xml @@ -154,4 +154,5 @@ Måned Kvartal År - + Fjern alt + diff --git a/commons/src/main/res/values-pt-rBR/strings.xml b/commons/src/main/res/values-pt-rBR/strings.xml index 8708140ea77..29debb34bfb 100644 --- a/commons/src/main/res/values-pt-rBR/strings.xml +++ b/commons/src/main/res/values-pt-rBR/strings.xml @@ -74,4 +74,4 @@ Semana Mês Ano - + diff --git a/commons/src/main/res/values-pt/strings.xml b/commons/src/main/res/values-pt/strings.xml index df8ac8934cb..39a2d819503 100644 --- a/commons/src/main/res/values-pt/strings.xml +++ b/commons/src/main/res/values-pt/strings.xml @@ -273,4 +273,5 @@ Mês Trimestral Ano - + Limpar tudo + diff --git a/commons/src/main/res/values-ru/strings.xml b/commons/src/main/res/values-ru/strings.xml index 3325067de3d..1961a02d8e8 100644 --- a/commons/src/main/res/values-ru/strings.xml +++ b/commons/src/main/res/values-ru/strings.xml @@ -332,4 +332,5 @@ Квартал Год Нет доступных периодов - + Очистить все + diff --git a/commons/src/main/res/values-sv/strings.xml b/commons/src/main/res/values-sv/strings.xml index 20f9a44f588..95291c34402 100644 --- a/commons/src/main/res/values-sv/strings.xml +++ b/commons/src/main/res/values-sv/strings.xml @@ -78,4 +78,5 @@ Ta bort Dagligen År - + Rensa alla + diff --git a/commons/src/main/res/values-uz-rUZ/strings.xml b/commons/src/main/res/values-uz-rUZ/strings.xml index a119ce757b7..08d9efbf1e3 100644 --- a/commons/src/main/res/values-uz-rUZ/strings.xml +++ b/commons/src/main/res/values-uz-rUZ/strings.xml @@ -136,4 +136,5 @@ Кунлик Hafta Yil - + Barchasini tozalash + diff --git a/commons/src/main/res/values-uz/strings.xml b/commons/src/main/res/values-uz/strings.xml index 3965897d0ef..035658fff84 100644 --- a/commons/src/main/res/values-uz/strings.xml +++ b/commons/src/main/res/values-uz/strings.xml @@ -168,4 +168,5 @@ Ой Чорак Йил - + Барчасини тозалаш + diff --git a/commons/src/main/res/values-vi/strings.xml b/commons/src/main/res/values-vi/strings.xml index 5f6402a327a..b8f0ab5403d 100644 --- a/commons/src/main/res/values-vi/strings.xml +++ b/commons/src/main/res/values-vi/strings.xml @@ -271,4 +271,5 @@ Nhập cơ sở dữ liệu không thành công Tệp không hợp lệ Không ở chế độ đăng ký TOTP 2FA + Xóa tất cả diff --git a/commons/src/main/res/values-zh-rCN/strings.xml b/commons/src/main/res/values-zh-rCN/strings.xml index e9ed97e50eb..6b655484185 100644 --- a/commons/src/main/res/values-zh-rCN/strings.xml +++ b/commons/src/main/res/values-zh-rCN/strings.xml @@ -329,4 +329,5 @@ 财政年度 无可用时段 - + 全清除 + diff --git a/commons/src/main/res/values-zh/strings.xml b/commons/src/main/res/values-zh/strings.xml index f0a63a42cb1..296cd3050b1 100644 --- a/commons/src/main/res/values-zh/strings.xml +++ b/commons/src/main/res/values-zh/strings.xml @@ -332,4 +332,5 @@ 数据库导入失败 无效文件 未进入 TOTP 2FA 注册模式 + 全清除 diff --git a/commons/src/main/res/values/strings.xml b/commons/src/main/res/values/strings.xml index 0ff4f103756..fa7ec938076 100644 --- a/commons/src/main/res/values/strings.xml +++ b/commons/src/main/res/values/strings.xml @@ -344,4 +344,6 @@ Database import failed Invalid file Not in TOTP 2FA enrollment mode + + Clear all diff --git a/commons/src/main/res/values/styles.xml b/commons/src/main/res/values/styles.xml index 459deafba55..14aea64adc7 100644 --- a/commons/src/main/res/values/styles.xml +++ b/commons/src/main/res/values/styles.xml @@ -69,6 +69,14 @@ ?colorPrimary + + + + - - - \ No newline at end of file From 7230c23efd34e5208878243b90a622667c0564a2 Mon Sep 17 00:00:00 2001 From: Xavier Molloy Date: Wed, 14 Jan 2026 18:43:27 +0100 Subject: [PATCH 014/114] chore: [ANDROAPP-7348] Enable dependency verification [skip size] (#4559) * fix: [ANDROAPP-7348] Enable dependency verification * fix: [ANDROAPP-7348] Enable dependency verification only for release builds * fix: [ANDROAPP-7348] Enable dependency verification only for release builds * fix: [ANDROAPP-7348] code clean up * chore: [ANDROAPP-7348] Update dependency verification file * chore: [ANDROAPP-7348] Update dependency verification file * chore: [ANDROAPP-7348] Update dependency verification file * chore: [ANDROAPP-7348] updated dependency verification mode to lenient * fix: [ANDROAPP-7348] update continuous-delivery job * fix: [ANDROAPP-7348] update Jenkinsfile job * fix: [ANDROAPP-7348] update sonarcube script * fix: [ANDROAPP-7348] update remaining git hub actions for dependency verification --- .github/workflows/build-release-candidate.yml | 4 +- .github/workflows/continuous-delivery.yml | 2 +- .github/workflows/deploy-release.yml | 4 +- Jenkinsfile | 4 +- gradle.properties | 5 +- gradle/verification-metadata.xml | 12855 ++++++++++++++++ scripts/sonarqube.sh | 2 +- 7 files changed, 12867 insertions(+), 9 deletions(-) create mode 100644 gradle/verification-metadata.xml diff --git a/.github/workflows/build-release-candidate.yml b/.github/workflows/build-release-candidate.yml index 6d4a76a4581..89e7ab954c3 100644 --- a/.github/workflows/build-release-candidate.yml +++ b/.github/workflows/build-release-candidate.yml @@ -45,7 +45,7 @@ jobs: encodedString: ${{ secrets.KEYSTORE }} - name: Build Release APKs - run: ./gradlew app:assembleDhis2Release app:assembleDhis2PlayServicesRelease + run: ./gradlew --dependency-verification lenient app:assembleDhis2Release app:assembleDhis2PlayServicesRelease env: SENTRY_DSN: ${{ secrets.SENTRY_DSN }} SIGNING_KEY_ALIAS: ${{ secrets.KEY_ALIAS }} @@ -67,7 +67,7 @@ jobs: TRAINING_KEY_PASSWORD: ${{ secrets.TRAINING_KEY_PASSWORD }} TRAINING_STORE_PASSWORD: ${{ secrets.TRAINING_STORE_PASSWORD }} TRAINING_STORE_FILE: ${{ steps.decode_training_keystore.outputs.filePath }} - run: ./gradlew app:assembleDhis2TrainingRelease + run: ./gradlew --dependency-verification lenient app:assembleDhis2TrainingRelease - name: Read version name from file working-directory: ./gradle diff --git a/.github/workflows/continuous-delivery.yml b/.github/workflows/continuous-delivery.yml index e156128ed9e..37700ef863a 100644 --- a/.github/workflows/continuous-delivery.yml +++ b/.github/workflows/continuous-delivery.yml @@ -44,7 +44,7 @@ jobs: # Create APK Debug - name: Build apk debug project (APK) - ${{ env.main_project_module }} module - run: ./gradlew assembleDhis2Debug + run: ./gradlew --dependency-verification lenient assembleDhis2Debug env: SENTRY_DSN: ${{ secrets.SENTRY_DSN }} diff --git a/.github/workflows/deploy-release.yml b/.github/workflows/deploy-release.yml index eefe95478f6..33eabded0b0 100644 --- a/.github/workflows/deploy-release.yml +++ b/.github/workflows/deploy-release.yml @@ -49,7 +49,7 @@ jobs: encodedString: ${{ secrets.KEYSTORE }} - name: Build Release APKs - run: ./gradlew app:assembleDhis2Release app:assembleDhis2PlayServicesRelease + run: ./gradlew --dependency-verification lenient app:assembleDhis2Release app:assembleDhis2PlayServicesRelease env: SENTRY_DSN: ${{ secrets.SENTRY_DSN }} SIGNING_KEY_ALIAS: ${{ secrets.KEY_ALIAS }} @@ -71,7 +71,7 @@ jobs: TRAINING_KEY_PASSWORD: ${{ secrets.TRAINING_KEY_PASSWORD }} TRAINING_STORE_PASSWORD: ${{ secrets.TRAINING_STORE_PASSWORD }} TRAINING_STORE_FILE: ${{ steps.decode_training_keystore.outputs.filePath }} - run: ./gradlew app:assembleDhis2TrainingRelease + run: ./gradlew --dependency-verification lenient app:assembleDhis2TrainingRelease - name: Read version name from file working-directory: ./gradle diff --git a/Jenkinsfile b/Jenkinsfile index de22090ec9f..c32f74a3656 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -72,7 +72,7 @@ pipeline { steps { script { echo 'Running unit tests' - sh './gradlew testDebugUnitTest testDhis2DebugUnitTest --stacktrace --no-daemon' + sh './gradlew --dependency-verification lenient testDebugUnitTest testDhis2DebugUnitTest --stacktrace --no-daemon' } } } @@ -80,7 +80,7 @@ pipeline { steps { script { echo 'Building UI APKs' - sh './gradlew :app:assembleDhis2Debug :app:assembleDhis2DebugAndroidTest :form:assembleAndroidTest' + sh './gradlew --dependency-verification lenient :app:assembleDhis2Debug :app:assembleDhis2DebugAndroidTest :form:assembleAndroidTest' } } } diff --git a/gradle.properties b/gradle.properties index f4bd86ad56c..e13a05e180a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -41,4 +41,7 @@ android.enableR8.fullMode=false # Kotlin compiler flags kotlin.daemon.jvmargs=-Xmx2048M -kotlin.incremental=true \ No newline at end of file +kotlin.incremental=true + +# Enable dependency verification +org.gradle.dependency.verification.mode=lenient diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml new file mode 100644 index 00000000000..38d2a9bff69 --- /dev/null +++ b/gradle/verification-metadata.xml @@ -0,0 +1,12855 @@ + + + + true + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/scripts/sonarqube.sh b/scripts/sonarqube.sh index 7192029a1cc..2b60e3be6c2 100644 --- a/scripts/sonarqube.sh +++ b/scripts/sonarqube.sh @@ -37,4 +37,4 @@ then git fetch --no-tags --force --progress -- $url +refs/heads/$GIT_BRANCH_DEST:refs/remotes/$remote/$GIT_BRANCH_DEST fi -./gradlew sonarqube --stacktrace --no-daemon \ No newline at end of file +./gradlew --dependency-verification lenient sonarqube --stacktrace --no-daemon \ No newline at end of file From 811f9d630271d1d4470b1bbc64eac5d3c97512b5 Mon Sep 17 00:00:00 2001 From: Pablo Date: Thu, 15 Jan 2026 13:00:22 +0100 Subject: [PATCH 015/114] build: [ANDROAPP-7337] Implement usecases for Home screen [skip size] (#4587) --- .../main/domain/DownloadNewVersion.kt | 19 +++ .../dhis2/data/service/VersionRepository.kt | 22 +-- .../org/dhis2/usescases/main/MainPresenter.kt | 5 +- .../usescases/main/data/HomeRepository.kt | 6 + .../usescases/main/data/HomeRepositoryImpl.kt | 19 +++ .../main/domain/CheckSingleNavigation.kt | 22 +++ .../main/domain/ConfigureHomeNavigationBar.kt | 24 ++++ .../usescases/main/domain/DeleteAccount.kt | 25 ++++ .../main/domain/DownloadNewVersion.kt | 33 +++++ .../usescases/main/domain/GetHomeFilters.kt | 17 +++ .../usescases/main/domain/GetLockAction.kt | 22 +++ .../usescases/main/domain/GetUserName.kt | 20 +++ .../main/domain/LaunchInitialSync.kt | 32 +++++ .../dhis2/usescases/main/domain/LogoutUser.kt | 5 +- .../main/domain/ScheduleNewVersionAlert.kt | 32 +++++ .../main/domain/UpdateInitialSyncStatus.kt | 17 +++ .../main/domain/model/BottomNavigationItem.kt | 7 + .../main/domain/model/DownloadMethod.kt | 11 ++ .../usescases/main/domain/model/LockAction.kt | 7 + .../dhis2/usescases/main/MainPresenterTest.kt | 1 + .../main/domain/CheckSingleNavigationTest.kt | 70 +++++++++ .../domain/ConfigureHomeNavigationBarTest.kt | 57 ++++++++ .../main/domain/DeleteAccountTest.kt | 65 +++++++++ .../main/domain/DownloadNewVersionTest.kt | 60 ++++++++ .../main/domain/GetHomeFiltersTest.kt | 44 ++++++ .../main/domain/GetLockActionTest.kt | 53 +++++++ .../usescases/main/domain/GetUserNameTest.kt | 99 +++++++++++++ .../main/domain/LaunchInitialSyncTest.kt | 136 ++++++++++++++++++ .../usescases/main/domain/LogoutUserTest.kt | 1 + .../domain/ScheduleNewVersionAlertTest.kt | 55 +++++++ .../domain/UpdateInitialSyncStatusTest.kt | 46 ++++++ 31 files changed, 1010 insertions(+), 22 deletions(-) create mode 100644 app/src/dhis2PlayServices/java/org/dhis2/usecases/main/domain/DownloadNewVersion.kt create mode 100644 app/src/main/java/org/dhis2/usescases/main/domain/CheckSingleNavigation.kt create mode 100644 app/src/main/java/org/dhis2/usescases/main/domain/ConfigureHomeNavigationBar.kt create mode 100644 app/src/main/java/org/dhis2/usescases/main/domain/DeleteAccount.kt create mode 100644 app/src/main/java/org/dhis2/usescases/main/domain/DownloadNewVersion.kt create mode 100644 app/src/main/java/org/dhis2/usescases/main/domain/GetHomeFilters.kt create mode 100644 app/src/main/java/org/dhis2/usescases/main/domain/GetLockAction.kt create mode 100644 app/src/main/java/org/dhis2/usescases/main/domain/GetUserName.kt create mode 100644 app/src/main/java/org/dhis2/usescases/main/domain/LaunchInitialSync.kt create mode 100644 app/src/main/java/org/dhis2/usescases/main/domain/ScheduleNewVersionAlert.kt create mode 100644 app/src/main/java/org/dhis2/usescases/main/domain/UpdateInitialSyncStatus.kt create mode 100644 app/src/main/java/org/dhis2/usescases/main/domain/model/BottomNavigationItem.kt create mode 100644 app/src/main/java/org/dhis2/usescases/main/domain/model/DownloadMethod.kt create mode 100644 app/src/main/java/org/dhis2/usescases/main/domain/model/LockAction.kt create mode 100644 app/src/test/java/org/dhis2/usescases/main/domain/CheckSingleNavigationTest.kt create mode 100644 app/src/test/java/org/dhis2/usescases/main/domain/ConfigureHomeNavigationBarTest.kt create mode 100644 app/src/test/java/org/dhis2/usescases/main/domain/DeleteAccountTest.kt create mode 100644 app/src/test/java/org/dhis2/usescases/main/domain/DownloadNewVersionTest.kt create mode 100644 app/src/test/java/org/dhis2/usescases/main/domain/GetHomeFiltersTest.kt create mode 100644 app/src/test/java/org/dhis2/usescases/main/domain/GetLockActionTest.kt create mode 100644 app/src/test/java/org/dhis2/usescases/main/domain/GetUserNameTest.kt create mode 100644 app/src/test/java/org/dhis2/usescases/main/domain/LaunchInitialSyncTest.kt create mode 100644 app/src/test/java/org/dhis2/usescases/main/domain/ScheduleNewVersionAlertTest.kt create mode 100644 app/src/test/java/org/dhis2/usescases/main/domain/UpdateInitialSyncStatusTest.kt diff --git a/app/src/dhis2PlayServices/java/org/dhis2/usecases/main/domain/DownloadNewVersion.kt b/app/src/dhis2PlayServices/java/org/dhis2/usecases/main/domain/DownloadNewVersion.kt new file mode 100644 index 00000000000..d2a07a80162 --- /dev/null +++ b/app/src/dhis2PlayServices/java/org/dhis2/usecases/main/domain/DownloadNewVersion.kt @@ -0,0 +1,19 @@ +package org.dhis2.usescases.main.domain + +import org.dhis2.data.service.VersionRepository +import org.dhis2.mobile.commons.domain.UseCase +import org.dhis2.usescases.main.domain.model.DownloadMethod + +class DownloadNewVersion( + private val versionRepository: VersionRepository, +) : UseCase { + override suspend fun invoke(input: Unit): Result = + try { + val url = versionRepository.getUrl() + url?.let { + Result.success(DownloadMethod.Url(it)) + } ?: Result.failure(DomainError.UnexpectedError("No url provided")) + } catch (domainError: DomainError) { + Result.failure(domainError) + } +} diff --git a/app/src/main/java/org/dhis2/data/service/VersionRepository.kt b/app/src/main/java/org/dhis2/data/service/VersionRepository.kt index 23771279cc4..49c65337ce8 100644 --- a/app/src/main/java/org/dhis2/data/service/VersionRepository.kt +++ b/app/src/main/java/org/dhis2/data/service/VersionRepository.kt @@ -5,11 +5,8 @@ import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import android.content.IntentFilter -import android.net.Uri -import android.os.Build import android.os.Environment import androidx.core.content.ContextCompat -import androidx.core.content.FileProvider import androidx.core.net.toUri import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.SharedFlow @@ -44,7 +41,7 @@ class VersionRepository( fun download( context: Context, - onDownloadCompleted: (Uri) -> Unit, + onDownloadCompleted: (String) -> Unit, onDownloading: () -> Unit, ) { val url = @@ -60,9 +57,8 @@ class VersionRepository( )}/$fileName" val apkFile = File(destination) - val apkUri = uriFromFile(context, apkFile) if (apkFile.exists()) { - onDownloadCompleted(apkUri) + onDownloadCompleted(destination) } else if (fileName?.endsWith("apk") == true) { val request = DownloadManager @@ -86,7 +82,7 @@ class VersionRepository( ctxt: Context, intent: Intent?, ) { - onDownloadCompleted(apkUri) + onDownloadCompleted(destination) } } ContextCompat.registerReceiver( @@ -96,20 +92,10 @@ class VersionRepository( ContextCompat.RECEIVER_EXPORTED, ) } else { - url?.let { onDownloadCompleted(it.toUri()) } + url?.let { onDownloadCompleted(url) } } } - private fun uriFromFile( - context: Context, - file: File, - ): Uri = - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID + ".provider", file) - } else { - Uri.fromFile(file) - } - fun getUrl(): String? = d2 .settingModule() diff --git a/app/src/main/java/org/dhis2/usescases/main/MainPresenter.kt b/app/src/main/java/org/dhis2/usescases/main/MainPresenter.kt index a651681199b..4f8396c2463 100644 --- a/app/src/main/java/org/dhis2/usescases/main/MainPresenter.kt +++ b/app/src/main/java/org/dhis2/usescases/main/MainPresenter.kt @@ -40,6 +40,7 @@ import org.dhis2.data.service.VersionRepository import org.dhis2.data.service.workManager.WorkManagerController import org.dhis2.data.service.workManager.WorkerItem import org.dhis2.data.service.workManager.WorkerType +import org.dhis2.mobile.commons.domain.invoke import org.dhis2.usescases.login.SyncIsPerformedInteractor import org.dhis2.usescases.main.domain.LogoutUser import org.dhis2.usescases.settings.DeleteUserData @@ -230,7 +231,7 @@ class MainPresenter( .user() .blockingGet() ?.uid() ?: "" - } catch (e: Exception) { + } catch (_: Exception) { "" } @@ -373,7 +374,7 @@ class MainPresenter( versionRepository.download( context = context, onDownloadCompleted = { - onDownloadCompleted(it) + onDownloadCompleted(it.toUri()) downloadingVersion.value = false }, onDownloading = { downloadingVersion.value = true }, diff --git a/app/src/main/java/org/dhis2/usescases/main/data/HomeRepository.kt b/app/src/main/java/org/dhis2/usescases/main/data/HomeRepository.kt index f9740fb75ec..86b2849f635 100644 --- a/app/src/main/java/org/dhis2/usescases/main/data/HomeRepository.kt +++ b/app/src/main/java/org/dhis2/usescases/main/data/HomeRepository.kt @@ -34,4 +34,10 @@ interface HomeRepository { suspend fun getInitialSyncDone(): Boolean suspend fun isImportedDb(): Boolean + + suspend fun stopBackgroundSync() + + suspend fun restoreSyncStatus() + + suspend fun syncData() } diff --git a/app/src/main/java/org/dhis2/usescases/main/data/HomeRepositoryImpl.kt b/app/src/main/java/org/dhis2/usescases/main/data/HomeRepositoryImpl.kt index 09203ab805e..7408dccbe0f 100644 --- a/app/src/main/java/org/dhis2/usescases/main/data/HomeRepositoryImpl.kt +++ b/app/src/main/java/org/dhis2/usescases/main/data/HomeRepositoryImpl.kt @@ -2,12 +2,15 @@ package org.dhis2.usescases.main.data import dhis2.org.analytics.charts.Charts import kotlinx.coroutines.withContext +import org.dhis2.commons.Constants import org.dhis2.commons.bindings.dataSet import org.dhis2.commons.bindings.dataSetInstanceSummaries import org.dhis2.commons.bindings.isStockProgram import org.dhis2.commons.bindings.programs import org.dhis2.commons.prefs.Preference import org.dhis2.commons.prefs.Preference.Companion.PIN +import org.dhis2.data.service.SyncStatusController +import org.dhis2.data.service.workManager.WorkManagerController import org.dhis2.mobile.commons.coroutine.Dispatcher import org.dhis2.mobile.commons.error.DomainErrorMapper import org.dhis2.mobile.commons.providers.PreferenceProvider @@ -26,6 +29,8 @@ class HomeRepositoryImpl( private val d2: D2, private val charts: Charts?, private val preferences: PreferenceProvider, + private val workManagerController: WorkManagerController, + private val syncStatusController: SyncStatusController, private val domainErrorMapper: DomainErrorMapper, private val dispatcher: Dispatcher, ) : HomeRepository { @@ -187,4 +192,18 @@ class HomeRepositoryImpl( .accountManager() .deleteCurrentAccount() } + + override suspend fun stopBackgroundSync() { + workManagerController.cancelAllWorkAndWait() + workManagerController.pruneWork() + } + + override suspend fun restoreSyncStatus() { + syncStatusController.restore() + } + + override suspend fun syncData() { + workManagerController + .syncDataForWorker(Constants.DATA_NOW, Constants.INITIAL_SYNC) + } } diff --git a/app/src/main/java/org/dhis2/usescases/main/domain/CheckSingleNavigation.kt b/app/src/main/java/org/dhis2/usescases/main/domain/CheckSingleNavigation.kt new file mode 100644 index 00000000000..a3e066abb70 --- /dev/null +++ b/app/src/main/java/org/dhis2/usescases/main/domain/CheckSingleNavigation.kt @@ -0,0 +1,22 @@ +package org.dhis2.usescases.main.domain + +import org.dhis2.mobile.commons.domain.UseCase +import org.dhis2.mobile.commons.error.DomainError +import org.dhis2.usescases.main.HomeItemData +import org.dhis2.usescases.main.data.HomeRepository + +class CheckSingleNavigation( + private val homeRepository: HomeRepository, +) : UseCase { + override suspend fun invoke(input: Unit): Result = + try { + val homeItemCount = homeRepository.homeItemCount() + if (homeItemCount == 1) { + Result.success(homeRepository.singleHomeItemData()) + } else { + Result.failure(DomainError.ConfigurationError("Expected exactly one home item")) + } + } catch (domainError: DomainError) { + Result.failure(domainError) + } +} diff --git a/app/src/main/java/org/dhis2/usescases/main/domain/ConfigureHomeNavigationBar.kt b/app/src/main/java/org/dhis2/usescases/main/domain/ConfigureHomeNavigationBar.kt new file mode 100644 index 00000000000..2d2d368432d --- /dev/null +++ b/app/src/main/java/org/dhis2/usescases/main/domain/ConfigureHomeNavigationBar.kt @@ -0,0 +1,24 @@ +package org.dhis2.usescases.main.domain + +import org.dhis2.mobile.commons.domain.UseCase +import org.dhis2.mobile.commons.error.DomainError +import org.dhis2.usescases.main.data.HomeRepository +import org.dhis2.usescases.main.domain.model.BottomNavigationItem + +class ConfigureHomeNavigationBar( + private val homeRepository: HomeRepository, +) : UseCase> { + override suspend operator fun invoke(input: Unit) = + try { + val list = + buildList { + add(BottomNavigationItem.Program) + if (homeRepository.hasHomeAnalytics()) { + add(BottomNavigationItem.Analytics) + } + } + Result.success(list) + } catch (_: DomainError) { + Result.success(listOf(BottomNavigationItem.Program)) + } +} diff --git a/app/src/main/java/org/dhis2/usescases/main/domain/DeleteAccount.kt b/app/src/main/java/org/dhis2/usescases/main/domain/DeleteAccount.kt new file mode 100644 index 00000000000..c8f6eb9df43 --- /dev/null +++ b/app/src/main/java/org/dhis2/usescases/main/domain/DeleteAccount.kt @@ -0,0 +1,25 @@ +package org.dhis2.usescases.main.domain + +import org.dhis2.commons.filters.FilterManager +import org.dhis2.mobile.commons.domain.UseCase +import org.dhis2.mobile.commons.error.DomainError +import org.dhis2.usescases.main.data.HomeRepository +import java.io.File + +class DeleteAccount( + private val filterManager: FilterManager, + private val repository: HomeRepository, +) : UseCase { + override suspend fun invoke(input: File?): Result = + try { + filterManager.clearAllFilters() + input?.let { repository.clearCache(it) } + repository.clearPreferences() + repository.wipeAll() + repository.deleteCurrentAccount() + val accountCount = repository.accountsCount() + Result.success(accountCount) + } catch (domainError: DomainError) { + Result.failure(domainError) + } +} diff --git a/app/src/main/java/org/dhis2/usescases/main/domain/DownloadNewVersion.kt b/app/src/main/java/org/dhis2/usescases/main/domain/DownloadNewVersion.kt new file mode 100644 index 00000000000..746bee80950 --- /dev/null +++ b/app/src/main/java/org/dhis2/usescases/main/domain/DownloadNewVersion.kt @@ -0,0 +1,33 @@ +package org.dhis2.usescases.main.domain + +import android.content.Context +import kotlinx.coroutines.suspendCancellableCoroutine +import org.dhis2.data.service.VersionRepository +import org.dhis2.mobile.commons.domain.UseCase +import org.dhis2.mobile.commons.error.DomainError +import org.dhis2.usescases.main.domain.model.DownloadMethod +import kotlin.coroutines.resume + +class DownloadNewVersion( + private val versionRepository: VersionRepository, +) : UseCase { + override suspend fun invoke(input: Context): Result = + try { + suspendCancellableCoroutine { continuation -> + versionRepository.download( + context = input, + onDownloadCompleted = { + continuation.resume(Result.success(DownloadMethod.File(it))) + }, + onDownloading = { + // no-op + }, + ) + continuation.invokeOnCancellation { + // If needed perform action on cancellation + } + } + } catch (e: DomainError) { + Result.failure(e) + } +} diff --git a/app/src/main/java/org/dhis2/usescases/main/domain/GetHomeFilters.kt b/app/src/main/java/org/dhis2/usescases/main/domain/GetHomeFilters.kt new file mode 100644 index 00000000000..ac75779773d --- /dev/null +++ b/app/src/main/java/org/dhis2/usescases/main/domain/GetHomeFilters.kt @@ -0,0 +1,17 @@ +package org.dhis2.usescases.main.domain + +import org.dhis2.commons.filters.FilterItem +import org.dhis2.commons.filters.data.FilterRepository +import org.dhis2.mobile.commons.domain.UseCase +import org.dhis2.mobile.commons.error.DomainError + +class GetHomeFilters( + private val filterRepository: FilterRepository, +) : UseCase> { + override suspend fun invoke(input: Unit): Result> = + try { + Result.success(filterRepository.homeFilters()) + } catch (domainError: DomainError) { + Result.failure(domainError) + } +} diff --git a/app/src/main/java/org/dhis2/usescases/main/domain/GetLockAction.kt b/app/src/main/java/org/dhis2/usescases/main/domain/GetLockAction.kt new file mode 100644 index 00000000000..002a6ffa476 --- /dev/null +++ b/app/src/main/java/org/dhis2/usescases/main/domain/GetLockAction.kt @@ -0,0 +1,22 @@ +package org.dhis2.usescases.main.domain + +import org.dhis2.mobile.commons.domain.UseCase +import org.dhis2.mobile.commons.error.DomainError +import org.dhis2.usescases.main.data.HomeRepository +import org.dhis2.usescases.main.domain.model.LockAction + +class GetLockAction( + private val repository: HomeRepository, +) : UseCase { + override suspend fun invoke(input: Unit): Result = + try { + val isPinSet = repository.isPinStored() + if (isPinSet) { + Result.success(LockAction.BlockSession) + } else { + Result.success(LockAction.CreatePin) + } + } catch (domainError: DomainError) { + Result.failure(domainError) + } +} diff --git a/app/src/main/java/org/dhis2/usescases/main/domain/GetUserName.kt b/app/src/main/java/org/dhis2/usescases/main/domain/GetUserName.kt new file mode 100644 index 00000000000..064ee7c7722 --- /dev/null +++ b/app/src/main/java/org/dhis2/usescases/main/domain/GetUserName.kt @@ -0,0 +1,20 @@ +package org.dhis2.usescases.main.domain + +import org.dhis2.mobile.commons.domain.UseCase +import org.dhis2.mobile.commons.error.DomainError +import org.dhis2.usescases.main.data.HomeRepository + +class GetUserName( + private val homeRepository: HomeRepository, +) : UseCase { + override suspend operator fun invoke(input: Unit) = + try { + val user = homeRepository.user() + val firstName = user?.firstName() + val surname = user?.surname() + val userName = listOfNotNull(firstName, surname).joinToString(" ") + Result.success(userName) + } catch (domainError: DomainError) { + Result.failure(domainError) + } +} diff --git a/app/src/main/java/org/dhis2/usescases/main/domain/LaunchInitialSync.kt b/app/src/main/java/org/dhis2/usescases/main/domain/LaunchInitialSync.kt new file mode 100644 index 00000000000..72db6f550c7 --- /dev/null +++ b/app/src/main/java/org/dhis2/usescases/main/domain/LaunchInitialSync.kt @@ -0,0 +1,32 @@ +package org.dhis2.usescases.main.domain + +import org.dhis2.data.service.VersionRepository +import org.dhis2.mobile.commons.domain.UseCase +import org.dhis2.mobile.commons.error.DomainError +import org.dhis2.usescases.main.data.HomeRepository + +class LaunchInitialSync( + private val skipSync: Boolean, + private val homeRepository: HomeRepository, + private val versionRepository: VersionRepository, +) : UseCase { + override suspend fun invoke(input: Unit): Result = + try { + if (skipSync || homeRepository.isImportedDb() || homeRepository.getInitialSyncDone()) { + Result.success(InitialSyncAction.Skip) + } else { + versionRepository.checkVersionUpdates() + homeRepository.syncData() + + Result.success(InitialSyncAction.Syncing) + } + } catch (domainError: DomainError) { + Result.failure(domainError) + } +} + +sealed interface InitialSyncAction { + data object Skip : InitialSyncAction + + data object Syncing : InitialSyncAction +} diff --git a/app/src/main/java/org/dhis2/usescases/main/domain/LogoutUser.kt b/app/src/main/java/org/dhis2/usescases/main/domain/LogoutUser.kt index a54b2277973..4961f4589d9 100644 --- a/app/src/main/java/org/dhis2/usescases/main/domain/LogoutUser.kt +++ b/app/src/main/java/org/dhis2/usescases/main/domain/LogoutUser.kt @@ -3,6 +3,7 @@ package org.dhis2.usescases.main.domain import org.dhis2.commons.filters.FilterManager import org.dhis2.data.service.SyncStatusController import org.dhis2.data.service.workManager.WorkManagerController +import org.dhis2.mobile.commons.domain.UseCase import org.dhis2.usescases.main.HomeRepository typealias AccountCount = Int @@ -12,8 +13,8 @@ class LogoutUser( private val workManagerController: WorkManagerController, private val syncStatusController: SyncStatusController, private val filterManager: FilterManager, -) { - suspend operator fun invoke(): Result { +) : UseCase { + override suspend operator fun invoke(input: Unit): Result { workManagerController.cancelAllWorkAndWait() syncStatusController.restore() filterManager.clearAllFilters() diff --git a/app/src/main/java/org/dhis2/usescases/main/domain/ScheduleNewVersionAlert.kt b/app/src/main/java/org/dhis2/usescases/main/domain/ScheduleNewVersionAlert.kt new file mode 100644 index 00000000000..ef60d039491 --- /dev/null +++ b/app/src/main/java/org/dhis2/usescases/main/domain/ScheduleNewVersionAlert.kt @@ -0,0 +1,32 @@ +package org.dhis2.usescases.main.domain + +import androidx.work.ExistingWorkPolicy +import org.dhis2.commons.Constants +import org.dhis2.data.service.VersionRepository +import org.dhis2.data.service.workManager.WorkManagerController +import org.dhis2.data.service.workManager.WorkerItem +import org.dhis2.data.service.workManager.WorkerType +import org.dhis2.mobile.commons.domain.UseCase +import org.dhis2.mobile.commons.error.DomainError +import kotlin.time.Duration.Companion.days + +class ScheduleNewVersionAlert( + private val workManagerController: WorkManagerController, + private val versionRepository: VersionRepository, +) : UseCase { + override suspend fun invoke(input: Unit): Result = + try { + val workerItem = + WorkerItem( + Constants.NEW_APP_VERSION, + WorkerType.NEW_VERSION, + delayInSeconds = 1.days.inWholeSeconds, + policy = ExistingWorkPolicy.REPLACE, + ) + workManagerController.beginUniqueWork(workerItem) + versionRepository.removeVersionInfo() + Result.success(Unit) + } catch (domainError: DomainError) { + Result.failure(domainError) + } +} diff --git a/app/src/main/java/org/dhis2/usescases/main/domain/UpdateInitialSyncStatus.kt b/app/src/main/java/org/dhis2/usescases/main/domain/UpdateInitialSyncStatus.kt new file mode 100644 index 00000000000..c62d756a229 --- /dev/null +++ b/app/src/main/java/org/dhis2/usescases/main/domain/UpdateInitialSyncStatus.kt @@ -0,0 +1,17 @@ +package org.dhis2.usescases.main.domain + +import org.dhis2.mobile.commons.domain.UseCase +import org.dhis2.mobile.commons.error.DomainError +import org.dhis2.usescases.main.data.HomeRepository + +class UpdateInitialSyncStatus( + val repository: HomeRepository, +) : UseCase { + override suspend fun invoke(input: Unit): Result = + try { + repository.setInitialSyncDone() + Result.success(Unit) + } catch (domainError: DomainError) { + Result.failure(domainError) + } +} diff --git a/app/src/main/java/org/dhis2/usescases/main/domain/model/BottomNavigationItem.kt b/app/src/main/java/org/dhis2/usescases/main/domain/model/BottomNavigationItem.kt new file mode 100644 index 00000000000..43b4696c439 --- /dev/null +++ b/app/src/main/java/org/dhis2/usescases/main/domain/model/BottomNavigationItem.kt @@ -0,0 +1,7 @@ +package org.dhis2.usescases.main.domain.model + +sealed interface BottomNavigationItem { + data object Program : BottomNavigationItem + + data object Analytics : BottomNavigationItem +} diff --git a/app/src/main/java/org/dhis2/usescases/main/domain/model/DownloadMethod.kt b/app/src/main/java/org/dhis2/usescases/main/domain/model/DownloadMethod.kt new file mode 100644 index 00000000000..c28de7abf9c --- /dev/null +++ b/app/src/main/java/org/dhis2/usescases/main/domain/model/DownloadMethod.kt @@ -0,0 +1,11 @@ +package org.dhis2.usescases.main.domain.model + +sealed interface DownloadMethod { + data class Url( + val url: String, + ) : DownloadMethod + + data class File( + val path: String, + ) : DownloadMethod +} diff --git a/app/src/main/java/org/dhis2/usescases/main/domain/model/LockAction.kt b/app/src/main/java/org/dhis2/usescases/main/domain/model/LockAction.kt new file mode 100644 index 00000000000..01df14106f6 --- /dev/null +++ b/app/src/main/java/org/dhis2/usescases/main/domain/model/LockAction.kt @@ -0,0 +1,7 @@ +package org.dhis2.usescases.main.domain.model + +sealed interface LockAction { + data object CreatePin : LockAction + + data object BlockSession : LockAction +} diff --git a/app/src/test/java/org/dhis2/usescases/main/MainPresenterTest.kt b/app/src/test/java/org/dhis2/usescases/main/MainPresenterTest.kt index 2604bc66e6a..1e62905099f 100644 --- a/app/src/test/java/org/dhis2/usescases/main/MainPresenterTest.kt +++ b/app/src/test/java/org/dhis2/usescases/main/MainPresenterTest.kt @@ -28,6 +28,7 @@ import org.dhis2.data.server.UserManager import org.dhis2.data.service.SyncStatusController import org.dhis2.data.service.VersionRepository import org.dhis2.data.service.workManager.WorkManagerController +import org.dhis2.mobile.commons.domain.invoke import org.dhis2.usescases.login.SyncIsPerformedInteractor import org.dhis2.usescases.main.domain.LogoutUser import org.dhis2.usescases.settings.DeleteUserData diff --git a/app/src/test/java/org/dhis2/usescases/main/domain/CheckSingleNavigationTest.kt b/app/src/test/java/org/dhis2/usescases/main/domain/CheckSingleNavigationTest.kt new file mode 100644 index 00000000000..afa1fbd1c78 --- /dev/null +++ b/app/src/test/java/org/dhis2/usescases/main/domain/CheckSingleNavigationTest.kt @@ -0,0 +1,70 @@ +package org.dhis2.usescases.main.domain + +import kotlinx.coroutines.test.runTest +import org.dhis2.mobile.commons.domain.invoke +import org.dhis2.mobile.commons.error.DomainError +import org.dhis2.usescases.main.HomeItemData +import org.dhis2.usescases.main.data.HomeRepository +import org.junit.Assert.assertTrue +import org.junit.Before +import org.junit.Test +import org.mockito.kotlin.doReturn +import org.mockito.kotlin.given +import org.mockito.kotlin.mock +import org.mockito.kotlin.times +import org.mockito.kotlin.verify +import org.mockito.kotlin.whenever +import org.mockito.kotlin.willAnswer + +class CheckSingleNavigationTest { + private val homeRepository: HomeRepository = mock() + private lateinit var checkSingleNavigation: CheckSingleNavigation + + @Before + fun setUp() { + checkSingleNavigation = CheckSingleNavigation(homeRepository) + } + + @Test + fun `should return HomeDataItem if there is only one program`() = + runTest { + whenever(homeRepository.homeItemCount()) doReturn 1 + whenever(homeRepository.singleHomeItemData()) doReturn + HomeItemData.EventProgram( + "eventUid", + "eventLabel", + true, + ) + assertTrue(checkSingleNavigation().isSuccess) + } + + @Test + fun `should return failure if more than one program`() = + runTest { + whenever(homeRepository.homeItemCount()) doReturn 2 + with(checkSingleNavigation()) { + verify(homeRepository, times(0)).singleHomeItemData() + assertTrue(isFailure) + } + } + + @Test + fun `should return failure if there are no programs`() = + runTest { + whenever(homeRepository.homeItemCount()) doReturn 0 + with(checkSingleNavigation()) { + verify(homeRepository, times(0)).singleHomeItemData() + assertTrue(isFailure) + } + } + + @Test + fun `should return failure if there is a domain exception`() = + runTest { + given(homeRepository.homeItemCount()) willAnswer { throw DomainError.DatabaseError("Test") } + with(checkSingleNavigation()) { + assertTrue(isFailure) + assertTrue(exceptionOrNull() is DomainError) + } + } +} diff --git a/app/src/test/java/org/dhis2/usescases/main/domain/ConfigureHomeNavigationBarTest.kt b/app/src/test/java/org/dhis2/usescases/main/domain/ConfigureHomeNavigationBarTest.kt new file mode 100644 index 00000000000..27aa04a1d22 --- /dev/null +++ b/app/src/test/java/org/dhis2/usescases/main/domain/ConfigureHomeNavigationBarTest.kt @@ -0,0 +1,57 @@ +package org.dhis2.usescases.main.domain + +import kotlinx.coroutines.test.runTest +import org.dhis2.mobile.commons.domain.invoke +import org.dhis2.mobile.commons.error.DomainError +import org.dhis2.usescases.main.data.HomeRepository +import org.junit.Assert.assertTrue +import org.junit.Before +import org.junit.Test +import org.mockito.kotlin.doReturn +import org.mockito.kotlin.given +import org.mockito.kotlin.mock +import org.mockito.kotlin.whenever +import org.mockito.kotlin.willAnswer + +class ConfigureHomeNavigationBarTest { + private val homeRepository: HomeRepository = mock() + lateinit var configureHomeNavigationBar: ConfigureHomeNavigationBar + + @Before + fun setUp() { + configureHomeNavigationBar = + ConfigureHomeNavigationBar( + homeRepository = homeRepository, + ) + } + + @Test + fun `should return programs and analytics items if configured`() = + runTest { + whenever(homeRepository.hasHomeAnalytics()) doReturn true + with(configureHomeNavigationBar()) { + assertTrue(isSuccess) + assertTrue(getOrNull()?.size == 2) + } + } + + @Test + fun `should return just programs if analytics is not configured`() = + runTest { + whenever(homeRepository.hasHomeAnalytics()) doReturn false + with(configureHomeNavigationBar()) { + assertTrue(isSuccess) + assertTrue(getOrNull()?.size == 1) + } + } + + @Test + fun `should return just programs if an exception is thrown`() = + runTest { + given(homeRepository.hasHomeAnalytics()) willAnswer { throw DomainError.DatabaseError("Test") } + with(configureHomeNavigationBar()) { + assertTrue(isSuccess) + assertTrue(getOrNull()?.size == 1) + } + } +} diff --git a/app/src/test/java/org/dhis2/usescases/main/domain/DeleteAccountTest.kt b/app/src/test/java/org/dhis2/usescases/main/domain/DeleteAccountTest.kt new file mode 100644 index 00000000000..a3f6f112651 --- /dev/null +++ b/app/src/test/java/org/dhis2/usescases/main/domain/DeleteAccountTest.kt @@ -0,0 +1,65 @@ +package org.dhis2.usescases.main.domain + +import junit.framework.Assert.assertTrue +import kotlinx.coroutines.test.runTest +import org.dhis2.commons.filters.FilterManager +import org.dhis2.mobile.commons.error.DomainError +import org.dhis2.usescases.main.data.HomeRepository +import org.junit.Before +import org.junit.Test +import org.mockito.Mockito.mock +import org.mockito.kotlin.any +import org.mockito.kotlin.doReturn +import org.mockito.kotlin.given +import org.mockito.kotlin.verify +import org.mockito.kotlin.whenever +import org.mockito.kotlin.willAnswer +import kotlin.io.path.createTempFile + +class DeleteAccountTest { + private val filterManager: FilterManager = mock() + private val repository: HomeRepository = mock() + private lateinit var deleteAccount: DeleteAccount + + @Before + fun setUp() { + deleteAccount = + DeleteAccount( + filterManager = filterManager, + repository = repository, + ) + } + + @Test + fun `should successfully return and clear all data`() = + runTest { + val cacheFile = createTempFile().toFile() + whenever(repository.clearCache(any())) doReturn true + whenever(repository.accountsCount()) doReturn 3 + with(deleteAccount(cacheFile)) { + verify(filterManager).clearAllFilters() + verify(repository).clearCache(cacheFile) + verify(repository).clearPreferences() + verify(repository).wipeAll() + verify(repository).deleteCurrentAccount() + assertTrue(isSuccess) + assertTrue(getOrNull() == 3) + } + } + + @Test + fun `should return failure when domain exception is thrown`() = + runTest { + val cacheFile = createTempFile().toFile() + whenever(repository.clearCache(any())) doReturn true + given(repository.deleteCurrentAccount()) willAnswer { throw DomainError.DatabaseError("Test") } + with(deleteAccount(cacheFile)) { + verify(filterManager).clearAllFilters() + verify(repository).clearCache(cacheFile) + verify(repository).clearPreferences() + verify(repository).wipeAll() + verify(repository).deleteCurrentAccount() + assertTrue(isFailure) + } + } +} diff --git a/app/src/test/java/org/dhis2/usescases/main/domain/DownloadNewVersionTest.kt b/app/src/test/java/org/dhis2/usescases/main/domain/DownloadNewVersionTest.kt new file mode 100644 index 00000000000..caaec27534d --- /dev/null +++ b/app/src/test/java/org/dhis2/usescases/main/domain/DownloadNewVersionTest.kt @@ -0,0 +1,60 @@ +package org.dhis2.usescases.main.domain + +import android.content.Context +import kotlinx.coroutines.test.runTest +import org.dhis2.data.service.VersionRepository +import org.dhis2.mobile.commons.error.DomainError +import org.junit.Assert.assertTrue +import org.junit.Before +import org.junit.Test +import org.mockito.kotlin.any +import org.mockito.kotlin.given +import org.mockito.kotlin.mock +import org.mockito.kotlin.whenever +import org.mockito.kotlin.willAnswer + +class DownloadNewVersionTest { + private val versionRepository: VersionRepository = mock() + private lateinit var downloadNewVersion: DownloadNewVersion + + @Before + fun setUp() { + downloadNewVersion = DownloadNewVersion(versionRepository) + } + + @Test + fun `should successfully download new version`() = + runTest { + // GIVEN + val fakeUriPath = "fakeUriPath" + whenever( + versionRepository.download( + context = any(), + onDownloadCompleted = any(), + onDownloading = any(), + ), + ).thenAnswer { + // Simulate the callback being called upon successful download + val onDownloadCompletedCallback = it.getArgument<(String) -> Unit>(1) + onDownloadCompletedCallback.invoke(fakeUriPath) + } + val context: Context = mock() + + with(downloadNewVersion(context)) { + assertTrue(isSuccess) + } + } + + @Test + fun `should return failure if an exception is thrown`() = + runTest { + given(versionRepository.download(any(), any(), any())) willAnswer { + throw DomainError.DatabaseError("Test") + } + val context: Context = mock() + + with(downloadNewVersion(context)) { + assertTrue(isFailure) + } + } +} diff --git a/app/src/test/java/org/dhis2/usescases/main/domain/GetHomeFiltersTest.kt b/app/src/test/java/org/dhis2/usescases/main/domain/GetHomeFiltersTest.kt new file mode 100644 index 00000000000..cc5fb863bd5 --- /dev/null +++ b/app/src/test/java/org/dhis2/usescases/main/domain/GetHomeFiltersTest.kt @@ -0,0 +1,44 @@ +package org.dhis2.usescases.main.domain + +import kotlinx.coroutines.test.runTest +import org.dhis2.commons.filters.FilterItem +import org.dhis2.commons.filters.data.FilterRepository +import org.dhis2.mobile.commons.domain.invoke +import org.dhis2.mobile.commons.error.DomainError +import org.junit.Before +import org.junit.Test +import org.mockito.Mockito.mock +import org.mockito.kotlin.doReturn +import org.mockito.kotlin.given +import org.mockito.kotlin.whenever +import org.mockito.kotlin.willAnswer + +class GetHomeFiltersTest { + private val filterRepository: FilterRepository = mock() + private lateinit var getHomeFilters: GetHomeFilters + + @Before + fun setUp() { + getHomeFilters = GetHomeFilters(filterRepository) + } + + @Test + fun `should return a list of home filters`() = + runTest { + val expectedFilters: List = mock() + whenever(filterRepository.homeFilters()) doReturn expectedFilters + val result = getHomeFilters() + assert(result.isSuccess) + assert(result.getOrNull() == expectedFilters) + } + + @Test + fun `should return a failure when an exception is thrown`() = + runTest { + given(filterRepository.homeFilters()) willAnswer { + throw DomainError.DatabaseError("Test") + } + val result = getHomeFilters() + assert(result.isFailure) + } +} diff --git a/app/src/test/java/org/dhis2/usescases/main/domain/GetLockActionTest.kt b/app/src/test/java/org/dhis2/usescases/main/domain/GetLockActionTest.kt new file mode 100644 index 00000000000..3db9ea7323e --- /dev/null +++ b/app/src/test/java/org/dhis2/usescases/main/domain/GetLockActionTest.kt @@ -0,0 +1,53 @@ +package org.dhis2.usescases.main.domain + +import kotlinx.coroutines.test.runTest +import org.dhis2.mobile.commons.domain.invoke +import org.dhis2.mobile.commons.error.DomainError +import org.dhis2.usescases.main.data.HomeRepository +import org.dhis2.usescases.main.domain.model.LockAction +import org.junit.Assert.assertTrue +import org.junit.Before +import org.junit.Test +import org.mockito.kotlin.doReturn +import org.mockito.kotlin.given +import org.mockito.kotlin.mock +import org.mockito.kotlin.whenever +import org.mockito.kotlin.willAnswer + +class GetLockActionTest { + private val homeRepository: HomeRepository = mock() + private lateinit var getLockAction: GetLockAction + + @Before + fun setUp() { + getLockAction = GetLockAction(homeRepository) + } + + @Test + fun `should return BlockSession action if pin is set`() = + runTest { + whenever(homeRepository.isPinStored()) doReturn true + val result = getLockAction() + assertTrue(result.isSuccess) + assertTrue(result.getOrNull() is LockAction.BlockSession) + } + + @Test + fun `should return CreatePin action if pin is set`() = + runTest { + whenever(homeRepository.isPinStored()) doReturn false + val result = getLockAction() + assertTrue(result.isSuccess) + assertTrue(result.getOrNull() is LockAction.CreatePin) + } + + @Test + fun `should return failure if an exception is thrown`() = + runTest { + given(homeRepository.isPinStored()) willAnswer { + throw DomainError.DatabaseError("Test") + } + val result = getLockAction() + assertTrue(result.isFailure) + } +} diff --git a/app/src/test/java/org/dhis2/usescases/main/domain/GetUserNameTest.kt b/app/src/test/java/org/dhis2/usescases/main/domain/GetUserNameTest.kt new file mode 100644 index 00000000000..aee8436306d --- /dev/null +++ b/app/src/test/java/org/dhis2/usescases/main/domain/GetUserNameTest.kt @@ -0,0 +1,99 @@ +package org.dhis2.usescases.main.domain + +import kotlinx.coroutines.test.runTest +import org.dhis2.mobile.commons.domain.invoke +import org.dhis2.mobile.commons.error.DomainError +import org.dhis2.usescases.main.data.HomeRepository +import org.hisp.dhis.android.core.user.User +import org.junit.Assert.assertEquals +import org.junit.Assert.assertTrue +import org.junit.Before +import org.junit.Test +import org.mockito.kotlin.doReturn +import org.mockito.kotlin.given +import org.mockito.kotlin.mock +import org.mockito.kotlin.whenever +import org.mockito.kotlin.willAnswer + +class GetUserNameTest { + private val homeRepository: HomeRepository = mock() + private lateinit var getUserName: GetUserName + + @Before + fun setUp() { + getUserName = GetUserName(homeRepository) + } + + @Test + fun `should return full name if user exists`() = + runTest { + val user: User = + mock { + on { firstName() } doReturn "Peter" + on { surname() } doReturn "Jones" + } + whenever(homeRepository.user()) doReturn user + + val result = getUserName() + + assertTrue(result.isSuccess) + assertEquals("Peter Jones", result.getOrNull()) + } + + @Test + fun `should return surname if first name is null`() = + runTest { + val user: User = + mock { + on { firstName() } doReturn null + on { surname() } doReturn "Jones" + } + whenever(homeRepository.user()) doReturn user + + val result = getUserName() + + assertTrue(result.isSuccess) + assertEquals("Jones", result.getOrNull()) + } + + @Test + fun `should return first name if surname is null`() = + runTest { + val user: User = + mock { + on { firstName() } doReturn "Peter" + on { surname() } doReturn null + } + whenever(homeRepository.user()) doReturn user + + val result = getUserName() + + assertTrue(result.isSuccess) + assertEquals("Peter", result.getOrNull()) + } + + @Test + fun `should return empty string if user is null`() = + runTest { + whenever(homeRepository.user()) doReturn null + + val result = getUserName() + + assertTrue(result.isSuccess) + assertEquals("", result.getOrNull()) + } + + @Test + fun `should return failure if repository throws error`() = + runTest { + val exception = DomainError.DatabaseError("Error") + given(homeRepository.user()) willAnswer { + throw exception + } + + val result = getUserName() + + assertTrue(result.isFailure) + assertEquals(exception, result.exceptionOrNull()) + } +} diff --git a/app/src/test/java/org/dhis2/usescases/main/domain/LaunchInitialSyncTest.kt b/app/src/test/java/org/dhis2/usescases/main/domain/LaunchInitialSyncTest.kt new file mode 100644 index 00000000000..f217f744cf3 --- /dev/null +++ b/app/src/test/java/org/dhis2/usescases/main/domain/LaunchInitialSyncTest.kt @@ -0,0 +1,136 @@ +package org.dhis2.usescases.main.domain + +import kotlinx.coroutines.test.runTest +import org.dhis2.data.service.VersionRepository +import org.dhis2.mobile.commons.domain.invoke +import org.dhis2.mobile.commons.error.DomainError +import org.dhis2.usescases.main.data.HomeRepository +import org.junit.Assert.assertEquals +import org.junit.Assert.assertTrue +import org.junit.Test +import org.mockito.kotlin.doReturn +import org.mockito.kotlin.given +import org.mockito.kotlin.mock +import org.mockito.kotlin.verify +import org.mockito.kotlin.verifyNoInteractions +import org.mockito.kotlin.whenever + +class LaunchInitialSyncTest { + private val homeRepository: HomeRepository = mock() + private val versionRepository: VersionRepository = mock() + private lateinit var launchInitialSync: LaunchInitialSync + + @Test + fun `should return Skip if skipSync is true`() = + runTest { + launchInitialSync = + LaunchInitialSync( + skipSync = true, + homeRepository = homeRepository, + versionRepository = versionRepository, + ) + + val result = launchInitialSync() + + assertTrue(result.isSuccess) + assertEquals(InitialSyncAction.Skip, result.getOrNull()) + verifyNoInteractions(homeRepository) + verifyNoInteractions(versionRepository) + } + + @Test + fun `should return Skip if database is imported`() = + runTest { + whenever(homeRepository.isImportedDb()) doReturn true + launchInitialSync = + LaunchInitialSync( + skipSync = false, + homeRepository = homeRepository, + versionRepository = versionRepository, + ) + + val result = launchInitialSync() + + assertTrue(result.isSuccess) + assertEquals(InitialSyncAction.Skip, result.getOrNull()) + } + + @Test + fun `should return Skip if initial sync is done`() = + runTest { + whenever(homeRepository.isImportedDb()) doReturn false + whenever(homeRepository.getInitialSyncDone()) doReturn true + launchInitialSync = + LaunchInitialSync( + skipSync = false, + homeRepository = homeRepository, + versionRepository = versionRepository, + ) + + val result = launchInitialSync() + + assertTrue(result.isSuccess) + assertEquals(InitialSyncAction.Skip, result.getOrNull()) + } + + @Test + fun `should return Syncing and launch initial sync`() = + runTest { + whenever(homeRepository.isImportedDb()) doReturn false + whenever(homeRepository.getInitialSyncDone()) doReturn false + launchInitialSync = + LaunchInitialSync( + skipSync = false, + homeRepository = homeRepository, + versionRepository = versionRepository, + ) + + val result = launchInitialSync() + + assertTrue(result.isSuccess) + assertEquals(InitialSyncAction.Syncing, result.getOrNull()) + verify(versionRepository).checkVersionUpdates() + } + + @Test + fun `should return failure if check version update fails`() = + runTest { + val exception = DomainError.DatabaseError("Error") + whenever(homeRepository.isImportedDb()) doReturn false + whenever(homeRepository.getInitialSyncDone()) doReturn false + given(versionRepository.checkVersionUpdates()).willAnswer { + throw exception + } + launchInitialSync = + LaunchInitialSync( + skipSync = false, + homeRepository = homeRepository, + versionRepository = versionRepository, + ) + + val result = launchInitialSync() + + assertTrue(result.isFailure) + assertEquals(exception, result.exceptionOrNull()) + } + + @Test + fun `should return failure if home repository fails`() = + runTest { + val exception = DomainError.DatabaseError("Error") + given(homeRepository.isImportedDb()).willAnswer { + throw exception + } + launchInitialSync = + LaunchInitialSync( + skipSync = false, + homeRepository = homeRepository, + versionRepository = versionRepository, + ) + + val result = launchInitialSync() + + assertTrue(result.isFailure) + assertEquals(exception, result.exceptionOrNull()) + } +} diff --git a/app/src/test/java/org/dhis2/usescases/main/domain/LogoutUserTest.kt b/app/src/test/java/org/dhis2/usescases/main/domain/LogoutUserTest.kt index df31b8e52fa..775290b5914 100644 --- a/app/src/test/java/org/dhis2/usescases/main/domain/LogoutUserTest.kt +++ b/app/src/test/java/org/dhis2/usescases/main/domain/LogoutUserTest.kt @@ -4,6 +4,7 @@ import kotlinx.coroutines.test.runTest import org.dhis2.commons.filters.FilterManager import org.dhis2.data.service.SyncStatusController import org.dhis2.data.service.workManager.WorkManagerController +import org.dhis2.mobile.commons.domain.invoke import org.dhis2.mobile.commons.error.DomainError import org.dhis2.usescases.main.HomeRepository import org.junit.Assert.assertTrue diff --git a/app/src/test/java/org/dhis2/usescases/main/domain/ScheduleNewVersionAlertTest.kt b/app/src/test/java/org/dhis2/usescases/main/domain/ScheduleNewVersionAlertTest.kt new file mode 100644 index 00000000000..77f6c45144e --- /dev/null +++ b/app/src/test/java/org/dhis2/usescases/main/domain/ScheduleNewVersionAlertTest.kt @@ -0,0 +1,55 @@ +package org.dhis2.usescases.main.domain + +import kotlinx.coroutines.test.runTest +import org.dhis2.data.service.VersionRepository +import org.dhis2.data.service.workManager.WorkManagerController +import org.dhis2.mobile.commons.domain.invoke +import org.dhis2.mobile.commons.error.DomainError +import org.junit.Assert.assertEquals +import org.junit.Assert.assertTrue +import org.junit.Before +import org.junit.Test +import org.mockito.kotlin.any +import org.mockito.kotlin.given +import org.mockito.kotlin.mock +import org.mockito.kotlin.verify + +class ScheduleNewVersionAlertTest { + private val workManagerController: WorkManagerController = mock() + private val versionRepository: VersionRepository = mock() + private lateinit var scheduleNewVersionAlert: ScheduleNewVersionAlert + + @Before + fun setUp() { + scheduleNewVersionAlert = + ScheduleNewVersionAlert( + workManagerController = workManagerController, + versionRepository = versionRepository, + ) + } + + @Test + fun `should schedule new version alert and remove version info`() = + runTest { + val result = scheduleNewVersionAlert() + + assertTrue(result.isSuccess) + + verify(workManagerController).beginUniqueWork(any()) + verify(versionRepository).removeVersionInfo() + } + + @Test + fun `should return failure when remove version info fails`() = + runTest { + val exception = DomainError.DatabaseError("Error") + given(versionRepository.removeVersionInfo()).willAnswer { + throw exception + } + + val result = scheduleNewVersionAlert() + + assertTrue(result.isFailure) + assertEquals(exception, result.exceptionOrNull()) + } +} diff --git a/app/src/test/java/org/dhis2/usescases/main/domain/UpdateInitialSyncStatusTest.kt b/app/src/test/java/org/dhis2/usescases/main/domain/UpdateInitialSyncStatusTest.kt new file mode 100644 index 00000000000..11589c76b5f --- /dev/null +++ b/app/src/test/java/org/dhis2/usescases/main/domain/UpdateInitialSyncStatusTest.kt @@ -0,0 +1,46 @@ +package org.dhis2.usescases.main.domain + +import kotlinx.coroutines.test.runTest +import org.dhis2.mobile.commons.domain.invoke +import org.dhis2.mobile.commons.error.DomainError +import org.dhis2.usescases.main.data.HomeRepository +import org.junit.Assert.assertEquals +import org.junit.Assert.assertTrue +import org.junit.Before +import org.junit.Test +import org.mockito.kotlin.given +import org.mockito.kotlin.mock +import org.mockito.kotlin.verify + +class UpdateInitialSyncStatusTest { + private val homeRepository: HomeRepository = mock() + private lateinit var updateInitialSyncStatus: UpdateInitialSyncStatus + + @Before + fun setUp() { + updateInitialSyncStatus = UpdateInitialSyncStatus(homeRepository) + } + + @Test + fun `should call set initial sync done`() = + runTest { + val result = updateInitialSyncStatus() + + assertTrue(result.isSuccess) + verify(homeRepository).setInitialSyncDone() + } + + @Test + fun `should return failure when repository fails`() = + runTest { + val exception = DomainError.DatabaseError("Error") + given(homeRepository.setInitialSyncDone()).willAnswer { + throw exception + } + + val result = updateInitialSyncStatus() + + assertTrue(result.isFailure) + assertEquals(exception, result.exceptionOrNull()) + } +} From a6a33fdbfccb9d8fc7e3b90e7d1de59ed26bb778 Mon Sep 17 00:00:00 2001 From: Xavier Molloy Date: Fri, 16 Jan 2026 12:34:22 +0100 Subject: [PATCH 016/114] chore: update dependency verification file --- gradle/verification-metadata.xml | 133 +++++++++++++++++++++++++++++++ 1 file changed, 133 insertions(+) diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index 38d2a9bff69..86141f50d0a 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -2067,6 +2067,9 @@ + + + @@ -8171,6 +8174,14 @@ + + + + + + + + @@ -8179,6 +8190,14 @@ + + + + + + + + @@ -8187,6 +8206,14 @@ + + + + + + + + @@ -8195,6 +8222,22 @@ + + + + + + + + + + + + + + + + @@ -8203,6 +8246,14 @@ + + + + + + + + @@ -8211,6 +8262,14 @@ + + + + + + + + @@ -8219,6 +8278,14 @@ + + + + + + + + @@ -8227,6 +8294,14 @@ + + + + + + + + @@ -8235,6 +8310,19 @@ + + + + + + + + + + + + + @@ -11187,6 +11275,11 @@ + + + + + @@ -12534,6 +12627,14 @@ + + + + + + + + @@ -12558,6 +12659,14 @@ + + + + + + + + @@ -12576,6 +12685,14 @@ + + + + + + + + @@ -12600,6 +12717,14 @@ + + + + + + + + @@ -12624,6 +12749,14 @@ + + + + + + + + From f8ad342dc944786e059687a3640d4fe64c37f475 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Tar=C3=AD?= Date: Mon, 19 Jan 2026 16:53:19 +0100 Subject: [PATCH 017/114] chore: [ANDROAPP-7463] Change database creation date type on main presenter test [skip size] (#4600) * chore: [ANDROAPP-7463] update databaseCreationDate type * chore: [ANDROAPP-7463] fix test * chore: [ANDROAPP-7463] add dependency verification metadata --- .../dhis2/usescases/main/MainPresenterTest.kt | 5 +- gradle/verification-metadata.xml | 427 ++++++++++++++++++ 2 files changed, 430 insertions(+), 2 deletions(-) diff --git a/app/src/test/java/org/dhis2/usescases/main/MainPresenterTest.kt b/app/src/test/java/org/dhis2/usescases/main/MainPresenterTest.kt index 1e62905099f..af876ab2d4e 100644 --- a/app/src/test/java/org/dhis2/usescases/main/MainPresenterTest.kt +++ b/app/src/test/java/org/dhis2/usescases/main/MainPresenterTest.kt @@ -32,6 +32,7 @@ import org.dhis2.mobile.commons.domain.invoke import org.dhis2.usescases.login.SyncIsPerformedInteractor import org.dhis2.usescases.main.domain.LogoutUser import org.dhis2.usescases.settings.DeleteUserData +import org.hisp.dhis.android.core.arch.helpers.DateUtils import org.hisp.dhis.android.core.category.CategoryCombo import org.hisp.dhis.android.core.category.CategoryOptionCombo import org.hisp.dhis.android.core.configuration.internal.DatabaseAccount @@ -205,7 +206,7 @@ class MainPresenterTest { .serverUrl("https://www.random.com/") .encrypted(false) .databaseName("none") - .databaseCreationDate("16/2/2012") + .databaseCreationDate(DateUtils.SIMPLE_DATE_FORMAT.parse("2012-2-16")) .build() val secondRandomUserAccount = DatabaseAccount @@ -214,7 +215,7 @@ class MainPresenterTest { .serverUrl("https://www.random.com/") .encrypted(false) .databaseName("none") - .databaseCreationDate("16/2/2012") + .databaseCreationDate(DateUtils.SIMPLE_DATE_FORMAT.parse("2012-2-16")) .build() val randomFile = File("random") diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index 38d2a9bff69..24c738bf1c1 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -46,6 +46,11 @@ + + + + + @@ -269,6 +274,14 @@ + + + + + + + + @@ -342,6 +355,11 @@ + + + + + @@ -2067,6 +2085,9 @@ + + + @@ -2171,6 +2192,11 @@ + + + + + @@ -2536,6 +2562,11 @@ + + + + + @@ -3767,6 +3798,11 @@ + + + + + @@ -3775,6 +3811,14 @@ + + + + + + + + @@ -3788,11 +3832,24 @@ + + + + + + + + + + + + + @@ -3801,11 +3858,24 @@ + + + + + + + + + + + + + @@ -3814,6 +3884,14 @@ + + + + + + + + @@ -3994,6 +4072,11 @@ + + + + + @@ -4002,11 +4085,24 @@ + + + + + + + + + + + + + @@ -4015,6 +4111,14 @@ + + + + + + + + @@ -4025,6 +4129,11 @@ + + + + + @@ -4033,6 +4142,14 @@ + + + + + + + + @@ -5640,6 +5757,9 @@ + + + @@ -6402,6 +6522,11 @@ + + + + + @@ -6673,6 +6798,9 @@ + + + @@ -7697,6 +7825,14 @@ + + + + + + + + @@ -7705,6 +7841,14 @@ + + + + + + + + @@ -7713,6 +7857,14 @@ + + + + + + + + @@ -7721,6 +7873,14 @@ + + + + + + + + @@ -7729,6 +7889,14 @@ + + + + + + + + @@ -7737,6 +7905,14 @@ + + + + + + + + @@ -7745,6 +7921,14 @@ + + + + + + + + @@ -7753,6 +7937,14 @@ + + + + + + + + @@ -7761,6 +7953,14 @@ + + + + + + + + @@ -7769,6 +7969,14 @@ + + + + + + + + @@ -7777,6 +7985,14 @@ + + + + + + + + @@ -7785,6 +8001,14 @@ + + + + + + + + @@ -7793,6 +8017,14 @@ + + + + + + + + @@ -7801,6 +8033,14 @@ + + + + + + + + @@ -7809,6 +8049,14 @@ + + + + + + + + @@ -7817,6 +8065,14 @@ + + + + + + + + @@ -7825,6 +8081,14 @@ + + + + + + + + @@ -7833,6 +8097,14 @@ + + + + + + + + @@ -7841,6 +8113,14 @@ + + + + + + + + @@ -7849,6 +8129,14 @@ + + + + + + + + @@ -7857,6 +8145,14 @@ + + + + + + + + @@ -7865,6 +8161,14 @@ + + + + + + + + @@ -7873,6 +8177,14 @@ + + + + + + + + @@ -7881,6 +8193,14 @@ + + + + + + + + @@ -7889,6 +8209,14 @@ + + + + + + + + @@ -7897,6 +8225,14 @@ + + + + + + + + @@ -8439,11 +8775,24 @@ + + + + + + + + + + + + + @@ -8881,6 +9230,9 @@ + + + @@ -9256,6 +9608,9 @@ + + + @@ -9299,6 +9654,11 @@ + + + + + @@ -9315,6 +9675,14 @@ + + + + + + + + @@ -9323,6 +9691,14 @@ + + + + + + + + @@ -11091,6 +11467,9 @@ + + + @@ -11187,6 +11566,11 @@ + + + + + @@ -11981,6 +12365,11 @@ + + + + + @@ -12009,6 +12398,14 @@ + + + + + + + + @@ -12041,6 +12438,14 @@ + + + + + + + + @@ -12067,6 +12472,14 @@ + + + + + + + + @@ -12099,6 +12512,14 @@ + + + + + + + + @@ -12177,6 +12598,9 @@ + + + @@ -12528,6 +12952,9 @@ + + + From 391342074a9e7f1044daf10b93d052dd16ecf064 Mon Sep 17 00:00:00 2001 From: Rohit <168576901+rohit-wa@users.noreply.github.com> Date: Tue, 20 Jan 2026 13:26:44 +0530 Subject: [PATCH 018/114] chore: [ANDROAPP-7432] add android app to dhis2 dependency tracker (#4590) * chore: rename dependency-track workflow and set gradle group/version * chore: rename dependency-track workflow and set gradle group/version * chore: rename dependency-track workflow and set gradle group/version * reverting changes * chore: [ANDROAPP-7432] added workflow_dispatch: --- .github/workflows/generate-and-upload-bom.yml | 3 ++- build.gradle.kts | 3 +++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/generate-and-upload-bom.yml b/.github/workflows/generate-and-upload-bom.yml index 759a9ce310a..75b06db8311 100644 --- a/.github/workflows/generate-and-upload-bom.yml +++ b/.github/workflows/generate-and-upload-bom.yml @@ -1,6 +1,7 @@ -name: 'This workflow creates bill of material and uploads it to Dependency-Track each night' +name: 'Dependency Tracker' on: + workflow_dispatch: schedule: - cron: '0 0 * * *' diff --git a/build.gradle.kts b/build.gradle.kts index e89cca27fa1..7b62571c3c3 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,4 +1,7 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. +group = "org.hisp.dhis" +version = libs.versions.vName.get() + buildscript { dependencies { classpath(libs.gradlePlugin) From 4db7d3a037b3bc10e0cd2c8c3bf2404cc5e17f9c Mon Sep 17 00:00:00 2001 From: Xavier Molloy Date: Tue, 20 Jan 2026 09:06:30 +0100 Subject: [PATCH 019/114] fix: correct dependency verification conflict resolution error --- gradle/verification-metadata.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index 4f67b5e7f58..386a632c1f6 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -11654,6 +11654,7 @@ + From 7121cc2190867ac2f5d7b23f3581686bd4fef399 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Tar=C3=AD?= Date: Wed, 21 Jan 2026 12:57:16 +0100 Subject: [PATCH 020/114] chore: [ANDROAPP-7466] add new MetadataSyncPeriod item 6h (#4604) --- app/src/main/java/org/dhis2/bindings/SettingExtensions.kt | 1 + app/src/test/java/org/dhis2/bindings/SettingsExtensionsTest.kt | 1 + 2 files changed, 2 insertions(+) diff --git a/app/src/main/java/org/dhis2/bindings/SettingExtensions.kt b/app/src/main/java/org/dhis2/bindings/SettingExtensions.kt index bafbb9a0aba..66102244615 100644 --- a/app/src/main/java/org/dhis2/bindings/SettingExtensions.kt +++ b/app/src/main/java/org/dhis2/bindings/SettingExtensions.kt @@ -15,6 +15,7 @@ const val MANUAL = 0 fun MetadataSyncPeriod.toSeconds(): Int = when (this) { MetadataSyncPeriod.EVERY_HOUR -> EVERY_HOUR + MetadataSyncPeriod.EVERY_6_HOURS -> EVERY_6_HOUR MetadataSyncPeriod.EVERY_12_HOURS -> EVERY_12_HOUR MetadataSyncPeriod.EVERY_24_HOURS -> EVERY_24_HOUR MetadataSyncPeriod.EVERY_7_DAYS -> EVERY_7_DAYS diff --git a/app/src/test/java/org/dhis2/bindings/SettingsExtensionsTest.kt b/app/src/test/java/org/dhis2/bindings/SettingsExtensionsTest.kt index c2cc572746f..21bb995381c 100644 --- a/app/src/test/java/org/dhis2/bindings/SettingsExtensionsTest.kt +++ b/app/src/test/java/org/dhis2/bindings/SettingsExtensionsTest.kt @@ -8,6 +8,7 @@ class SettingsExtensionsTest { private val metadataSyncingPeriods = arrayListOf( EVERY_HOUR, + EVERY_6_HOUR, EVERY_12_HOUR, EVERY_24_HOUR, EVERY_7_DAYS, From 165951ddb2943a0d46508b788cf6ccc1ad255e0f Mon Sep 17 00:00:00 2001 From: Xavier Molloy Date: Fri, 23 Jan 2026 07:33:44 +0100 Subject: [PATCH 021/114] fix: Manage Invalid configuration d2 error (#4606) * fix: Manage Invalid configuration d2 error * fix: Update deprecated sdk methods * fix: fix unit tests --- .../data/DataSetInstanceRepositoryImpl.kt | 54 ++++++++++++------- .../data/DataSetInstanceRepository.kt | 3 ++ .../aggregates/domain/GetDataValueData.kt | 1 + .../aggregates/domain/GetDataValueInput.kt | 2 + .../mobile/aggregates/domain/SetDataValue.kt | 1 + .../domain/GetDataValueInputTest.kt | 2 +- .../mobile/commons/error/DomainErrorMapper.kt | 1 + .../resources/D2ErrorMessageProviderImpl.kt | 2 + .../composeResources/values/strings.xml | 1 + 9 files changed, 46 insertions(+), 21 deletions(-) diff --git a/aggregates/src/androidMain/kotlin/org/dhis2/mobile/aggregates/data/DataSetInstanceRepositoryImpl.kt b/aggregates/src/androidMain/kotlin/org/dhis2/mobile/aggregates/data/DataSetInstanceRepositoryImpl.kt index 66e74b898e7..d10db4a946c 100644 --- a/aggregates/src/androidMain/kotlin/org/dhis2/mobile/aggregates/data/DataSetInstanceRepositoryImpl.kt +++ b/aggregates/src/androidMain/kotlin/org/dhis2/mobile/aggregates/data/DataSetInstanceRepositoryImpl.kt @@ -415,11 +415,12 @@ internal class DataSetInstanceRepositoryImpl( .dataValueModule() .dataValues() .value( - periodId, - orgUnitUid, - dataElementUid, - categoryOptionComboUid, - attrOptionComboUid, + period = periodId, + organisationUnit = orgUnitUid, + dataElement = dataElementUid, + categoryOptionCombo = categoryOptionComboUid, + attributeOptionCombo = attrOptionComboUid, + sourceDataSet = dataSetUid, ).blockingGet() ?.syncState() @@ -817,6 +818,7 @@ internal class DataSetInstanceRepositoryImpl( orgUnitUid: String, categoryOptionComboUid: String, attrOptionComboUid: String, + sourceDataSetUid: String, ): Pair? { val dataElement = d2 @@ -847,6 +849,7 @@ internal class DataSetInstanceRepositoryImpl( dataElement = dataElementUid, categoryOptionCombo = categoryOptionComboUid, attributeOptionCombo = attrOptionComboUid, + sourceDataSet = sourceDataSetUid, ).blockingGet() ?.value() ?.toDoubleOrNull() @@ -982,6 +985,7 @@ internal class DataSetInstanceRepositoryImpl( attrOptionComboUid: String, dataElementUid: String, categoryOptionComboUid: String, + sourceDataSetUid: String, ) = d2 .dataValueModule() .dataValues() @@ -993,6 +997,7 @@ internal class DataSetInstanceRepositoryImpl( dataElementUid, categoryOptionComboUid, attrOptionComboUid, + sourceDataSetUid, ).blockingGet() ?.value() @@ -1003,6 +1008,7 @@ internal class DataSetInstanceRepositoryImpl( dataElementUid: String, categoryOptionComboUid: String, value: String?, + sourceDataSetUid: String, ): Result { val valueRepository = d2 @@ -1014,6 +1020,7 @@ internal class DataSetInstanceRepositoryImpl( dataElement = dataElementUid, categoryOptionCombo = categoryOptionComboUid, attributeOptionCombo = attrOptionComboUid, + sourceDataSet = sourceDataSetUid, ) val dataElement = @@ -1257,6 +1264,7 @@ internal class DataSetInstanceRepositoryImpl( ValidationResultStatus.valueOf(result.status().name), mapViolations( violations = result.violations(), + dataSetUid = dataSetUid, periodId = periodId, orgUnitUid = orgUnitUid, attrOptionComboUid = attrOptionComboUid, @@ -1291,6 +1299,7 @@ internal class DataSetInstanceRepositoryImpl( private fun mapViolations( violations: List, + dataSetUid: String, periodId: String, orgUnitUid: String, attrOptionComboUid: String, @@ -1301,6 +1310,7 @@ internal class DataSetInstanceRepositoryImpl( it.validationRule().instruction(), mapDataElements( dataElementUids = it.dataElementUids(), + dataSetUid = dataSetUid, periodId = periodId, orgUnitUid = orgUnitUid, attrOptionComboUid = attrOptionComboUid, @@ -1310,6 +1320,7 @@ internal class DataSetInstanceRepositoryImpl( private fun mapDataElements( dataElementUids: Set, + dataSetUid: String, periodId: String, orgUnitUid: String, attrOptionComboUid: String, @@ -1348,21 +1359,23 @@ internal class DataSetInstanceRepositoryImpl( .dataValueModule() .dataValues() .value( - periodId, - orgUnitUid, - de.uid(), - catOptCombo.uid(), - attrOptionComboUid, + period = periodId, + organisationUnit = orgUnitUid, + dataElement = de.uid(), + categoryOptionCombo = catOptCombo.uid(), + attributeOptionCombo = attrOptionComboUid, + sourceDataSet = dataSetUid, ).blockingExists() && d2 .dataValueModule() .dataValues() .value( - periodId, - orgUnitUid, - de.uid(), - catOptCombo.uid(), - attrOptionComboUid, + period = periodId, + organisationUnit = orgUnitUid, + dataElement = de.uid(), + categoryOptionCombo = catOptCombo.uid(), + attributeOptionCombo = attrOptionComboUid, + sourceDataSet = dataSetUid, ).blockingGet() ?.deleted() != true ) { @@ -1370,11 +1383,12 @@ internal class DataSetInstanceRepositoryImpl( .dataValueModule() .dataValues() .value( - periodId, - orgUnitUid, - de.uid(), - catOptCombo.uid(), - attrOptionComboUid, + period = periodId, + organisationUnit = orgUnitUid, + dataElement = de.uid(), + categoryOptionCombo = catOptCombo.uid(), + attributeOptionCombo = attrOptionComboUid, + sourceDataSet = dataSetUid, ).blockingGet() ?.value() ?: "-" } else { diff --git a/aggregates/src/commonMain/kotlin/org/dhis2/mobile/aggregates/data/DataSetInstanceRepository.kt b/aggregates/src/commonMain/kotlin/org/dhis2/mobile/aggregates/data/DataSetInstanceRepository.kt index b05c6f6d4db..9ef94b10437 100644 --- a/aggregates/src/commonMain/kotlin/org/dhis2/mobile/aggregates/data/DataSetInstanceRepository.kt +++ b/aggregates/src/commonMain/kotlin/org/dhis2/mobile/aggregates/data/DataSetInstanceRepository.kt @@ -87,6 +87,7 @@ internal interface DataSetInstanceRepository { attrOptionComboUid: String, dataElementUid: String, categoryOptionComboUid: String, + sourceDataSetUid: String, ): String? suspend fun updateValue( @@ -96,6 +97,7 @@ internal interface DataSetInstanceRepository { dataElementUid: String, categoryOptionComboUid: String, value: String?, + sourceDataSetUid: String, ): Result suspend fun categoryOptionComboFromCategoryOptions( @@ -165,6 +167,7 @@ internal interface DataSetInstanceRepository { orgUnitUid: String, categoryOptionComboUid: String, attrOptionComboUid: String, + sourceDataSetUid: String, ): Pair? suspend fun uploadFile( diff --git a/aggregates/src/commonMain/kotlin/org/dhis2/mobile/aggregates/domain/GetDataValueData.kt b/aggregates/src/commonMain/kotlin/org/dhis2/mobile/aggregates/domain/GetDataValueData.kt index 806d71cba6c..db2a48536d8 100644 --- a/aggregates/src/commonMain/kotlin/org/dhis2/mobile/aggregates/domain/GetDataValueData.kt +++ b/aggregates/src/commonMain/kotlin/org/dhis2/mobile/aggregates/domain/GetDataValueData.kt @@ -36,6 +36,7 @@ internal class GetDataValueData( orgUnitUid = orgUnitUid, attrOptionComboUid = attrOptionComboUid, categoryOptionComboUid = key.second, + sourceDataSetUid = datasetUid, )?.first, ) } diff --git a/aggregates/src/commonMain/kotlin/org/dhis2/mobile/aggregates/domain/GetDataValueInput.kt b/aggregates/src/commonMain/kotlin/org/dhis2/mobile/aggregates/domain/GetDataValueInput.kt index 10e579b42b6..0ae33c4e922 100644 --- a/aggregates/src/commonMain/kotlin/org/dhis2/mobile/aggregates/domain/GetDataValueInput.kt +++ b/aggregates/src/commonMain/kotlin/org/dhis2/mobile/aggregates/domain/GetDataValueInput.kt @@ -45,6 +45,7 @@ internal class GetDataValueInput( attrOptionComboUid = attrOptionComboUid, dataElementUid = dataElementUid, categoryOptionComboUid = categoryOptionComboUid, + sourceDataSetUid = dataSetUid, ) val conflicts = repository.conflicts( @@ -63,6 +64,7 @@ internal class GetDataValueInput( orgUnitUid = orgUnitUid, categoryOptionComboUid = categoryOptionComboUid, attrOptionComboUid = attrOptionComboUid, + sourceDataSetUid = dataSetUid, ) CellInfo( diff --git a/aggregates/src/commonMain/kotlin/org/dhis2/mobile/aggregates/domain/SetDataValue.kt b/aggregates/src/commonMain/kotlin/org/dhis2/mobile/aggregates/domain/SetDataValue.kt index 5ae00192639..d92058d2c90 100644 --- a/aggregates/src/commonMain/kotlin/org/dhis2/mobile/aggregates/domain/SetDataValue.kt +++ b/aggregates/src/commonMain/kotlin/org/dhis2/mobile/aggregates/domain/SetDataValue.kt @@ -25,6 +25,7 @@ internal class SetDataValue( dataElementUid = dataElementUid, categoryOptionComboUid = categoryOptionComboUid, value = value, + sourceDataSetUid = dataSetUid, ) } } diff --git a/aggregates/src/commonTest/kotlin/org/dhis2/mobile/aggregates/domain/GetDataValueInputTest.kt b/aggregates/src/commonTest/kotlin/org/dhis2/mobile/aggregates/domain/GetDataValueInputTest.kt index b6c8a3d380f..574902e8bdc 100644 --- a/aggregates/src/commonTest/kotlin/org/dhis2/mobile/aggregates/domain/GetDataValueInputTest.kt +++ b/aggregates/src/commonTest/kotlin/org/dhis2/mobile/aggregates/domain/GetDataValueInputTest.kt @@ -46,7 +46,7 @@ internal class GetDataValueInputTest : KoinTest { private val repository = mock { onRunBlocking { dataElementInfo(any(), any(), any()) } doReturn mockedDataElementInfo - onRunBlocking { value(any(), any(), any(), any(), any()) } doReturn "Current value" + onRunBlocking { value(any(), any(), any(), any(), any(), any()) } doReturn "Current value" onRunBlocking { conflicts(any(), any(), any(), any(), any(), any()) } doReturn Pair( emptyList(), diff --git a/commonskmm/src/androidMain/kotlin/org/dhis2/mobile/commons/error/DomainErrorMapper.kt b/commonskmm/src/androidMain/kotlin/org/dhis2/mobile/commons/error/DomainErrorMapper.kt index 2a13641ed6c..3fbe1042a92 100644 --- a/commonskmm/src/androidMain/kotlin/org/dhis2/mobile/commons/error/DomainErrorMapper.kt +++ b/commonskmm/src/androidMain/kotlin/org/dhis2/mobile/commons/error/DomainErrorMapper.kt @@ -80,6 +80,7 @@ class DomainErrorMapper( D2ErrorCode.NO_DHIS2_SERVER, D2ErrorCode.SERVER_URL_NULL, D2ErrorCode.SERVER_URL_MALFORMED, + D2ErrorCode.INVALID_CONFIGURATION, D2ErrorCode.INVALID_DHIS_VERSION, -> DomainError.ConfigurationError(errorMessage) diff --git a/commonskmm/src/androidMain/kotlin/org/dhis2/mobile/commons/resources/D2ErrorMessageProviderImpl.kt b/commonskmm/src/androidMain/kotlin/org/dhis2/mobile/commons/resources/D2ErrorMessageProviderImpl.kt index ec2d3bed3eb..beaa22da65b 100644 --- a/commonskmm/src/androidMain/kotlin/org/dhis2/mobile/commons/resources/D2ErrorMessageProviderImpl.kt +++ b/commonskmm/src/androidMain/kotlin/org/dhis2/mobile/commons/resources/D2ErrorMessageProviderImpl.kt @@ -203,6 +203,8 @@ class D2ErrorMessageProviderImpl : D2ErrorMessageProvider { D2ErrorCode.ORGUNIT_NOT_IN_SEARCH_SCOPE -> getString(Res.string.error_org_unit_scope) + D2ErrorCode.INVALID_CONFIGURATION -> + getString(Res.string.invalid_configuration) D2ErrorCode.INVALID_CHARACTERS -> getString(Res.string.error_invalid_characters) diff --git a/commonskmm/src/commonMain/composeResources/values/strings.xml b/commonskmm/src/commonMain/composeResources/values/strings.xml index d8ce06638d2..950703d6ec7 100644 --- a/commonskmm/src/commonMain/composeResources/values/strings.xml +++ b/commonskmm/src/commonMain/composeResources/values/strings.xml @@ -201,6 +201,7 @@ SMS is not supported. There are not enough attributes to perform the search. Please refine your search with more attributes. Online search is only available for your user search organisation units. + Invalid configuration There are invalid characters in the query. Please ask the administrator to verify the server configuration (relaxedQueryChars,...). The server is currently unavailable. Try again later. You are offline. Connect to the internet and try again. From e9e4c8a2421fc5317619300cf73554de8dc42406 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Miguel=20Rubio?= Date: Fri, 23 Jan 2026 12:14:35 +0100 Subject: [PATCH 022/114] fix: set compose multiplatform resources of type XML (#4608) --- .tx/config | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.tx/config b/.tx/config index 1041abf2e4c..e7420f6fab8 100644 --- a/.tx/config +++ b/.tx/config @@ -62,7 +62,7 @@ resource_name = Compose Table file_filter = tracker/src/commonMain/composeResources/values-/strings.xml source_file = tracker/src/commonMain/composeResources/values/strings.xml source_lang = en -type = ANDROID +type = XML minimum_perc = 0 resource_name = Tracker @@ -70,7 +70,7 @@ resource_name = Tracker file_filter = aggregates/src/commonMain/composeResources/values-/strings.xml source_file = aggregates/src/commonMain/composeResources/values/strings.xml source_lang = en -type = ANDROID +type = XML minimum_perc = 0 resource_name = Aggregates @@ -78,7 +78,7 @@ resource_name = Aggregates file_filter = commonskmm/src/commonMain/composeResources/values-/strings.xml source_file = commonskmm/src/commonMain/composeResources/values/strings.xml source_lang = en -type = ANDROID +type = XML minimum_perc = 0 resource_name = CommonsKMM @@ -86,7 +86,7 @@ resource_name = CommonsKMM file_filter = login/src/commonMain/composeResources/values-/strings.xml source_file = login/src/commonMain/composeResources/values/strings.xml source_lang = en -type = ANDROID +type = XML minimum_perc = 0 resource_name = Login @@ -94,7 +94,7 @@ resource_name = Login file_filter = sync/src/commonMain/composeResources/values-/strings.xml source_file = sync/src/commonMain/composeResources/values/strings.xml source_lang = en -type = ANDROID +type = XML minimum_perc = 0 resource_name = Sync From feec09ff1fa03f51069a4f12989334585478e452 Mon Sep 17 00:00:00 2001 From: Xavier Molloy Date: Fri, 23 Jan 2026 13:34:56 +0100 Subject: [PATCH 023/114] fix: [ANDROAPP-7433] Do not format option set display name values (#4607) --- .../dhis2/form/data/RulesUtilsProviderImpl.kt | 66 +++++++++++-------- 1 file changed, 40 insertions(+), 26 deletions(-) diff --git a/form/src/main/java/org/dhis2/form/data/RulesUtilsProviderImpl.kt b/form/src/main/java/org/dhis2/form/data/RulesUtilsProviderImpl.kt index 3710d5b6c55..ab594dd1389 100644 --- a/form/src/main/java/org/dhis2/form/data/RulesUtilsProviderImpl.kt +++ b/form/src/main/java/org/dhis2/form/data/RulesUtilsProviderImpl.kt @@ -4,6 +4,7 @@ import org.dhis2.commons.bindings.formatData import org.dhis2.form.model.FieldUiModel import org.dhis2.form.model.ValueStoreResult import org.hisp.dhis.android.core.D2 +import org.hisp.dhis.android.core.common.ValueType import org.hisp.dhis.android.core.maintenance.D2Error import org.hisp.dhis.android.core.program.ProgramRuleActionType import org.hisp.dhis.android.core.program.ProgramStage @@ -287,6 +288,7 @@ class RulesUtilsProviderImpl( ruleEffect: RuleEffect, fieldViewModels: MutableMap, ) { + // Not implemented } private fun displayKeyValuePair( @@ -294,6 +296,7 @@ class RulesUtilsProviderImpl( ruleEffect: RuleEffect, fieldViewModels: MutableMap, ) { + // Not implemented } private fun hideSection( @@ -343,37 +346,13 @@ class RulesUtilsProviderImpl( valuesToChange[fieldUid] = it } } - val valueToShow = - if (field.optionSet != null && ruleEffect.data?.isNotEmpty() == true) { - val effectOption = - optionsRepository.getOptionByCode( - optionSet = field.optionSet!!, - code = ruleEffect.data!!, - ) - if (effectOption == null) { - configurationErrors.add( - RulesUtilsProviderConfigurationError( - currentRuleUid, - ActionType.ASSIGN, - ConfigurationError.VALUE_TO_ASSIGN_NOT_IN_OPTION_SET, - listOf( - currentRuleUid ?: "", - ruleEffect.data ?: "", - field.optionSet ?: "", - ), - ), - ) - } - effectOption?.displayName() - } else { - ruleEffect.data - } + val valueToShow = getDisplayValue(field.optionSet, ruleEffect.data) ruleEffect.data?.formatData(field.valueType)?.let { formattedValue -> val updatedField = fieldViewModels[assign.field()] ?.setValue(formattedValue) - ?.setDisplayName(valueToShow?.formatData(field.valueType)) + ?.setDisplayName(formatDisplayName(valueToShow, field.valueType, field.optionSet)) ?.setEditable(false) updatedField?.let { @@ -387,6 +366,41 @@ class RulesUtilsProviderImpl( } } + private fun formatDisplayName( + value: String?, + valueType: ValueType?, + optionSetUid: String?, + ): String? = if (optionSetUid != null) value else value?.formatData(valueType) + + private fun getDisplayValue( + optionSetUid: String?, + ruleEffectData: String?, + ): String? = + if (optionSetUid != null && ruleEffectData?.isNotEmpty() == true) { + val effectOption = + optionsRepository.getOptionByCode( + optionSet = optionSetUid, + code = ruleEffectData, + ) + if (effectOption == null) { + configurationErrors.add( + RulesUtilsProviderConfigurationError( + currentRuleUid, + ActionType.ASSIGN, + ConfigurationError.VALUE_TO_ASSIGN_NOT_IN_OPTION_SET, + listOf( + currentRuleUid ?: "", + ruleEffectData, + optionSetUid, + ), + ), + ) + } + effectOption?.displayName() + } else { + ruleEffectData + } + private fun createEvent( createEvent: RuleAction, fieldViewModels: MutableMap, From fdeb1929dae783d69b91e09ae835977b3c28322e Mon Sep 17 00:00:00 2001 From: Ferdy Rodriguez Date: Fri, 23 Jan 2026 14:41:55 +0100 Subject: [PATCH 024/114] chore: [ANDROAPP-7303] Update apk name and use custom debug keystore (#4603) * updates continues delivery workflow * updates continues delivery workflow * Add debug suffix to apk name * Add config for using debug keystore store in the CI * change debug keystore name and extension * change debug keystore name and extension --- .github/workflows/continuous-delivery.yml | 20 +++++++++++++++++- app/build.gradle.kts | 25 +++++++++++++++++++++++ gradle/verification-metadata.xml | 9 ++++++++ 3 files changed, 53 insertions(+), 1 deletion(-) diff --git a/.github/workflows/continuous-delivery.yml b/.github/workflows/continuous-delivery.yml index 37700ef863a..bb1777b6b94 100644 --- a/.github/workflows/continuous-delivery.yml +++ b/.github/workflows/continuous-delivery.yml @@ -42,20 +42,38 @@ jobs: - name: Change wrapper permissions run: chmod +x ./gradlew + - name: Decode Keystore + id: decode_keystore + uses: timheuer/base64-to-file@784a1a4a994315802b7d8e2084e116e783d157be + with: + fileName: 'debug.keystore' + encodedString: ${{ secrets.DEBUG_KEYSTORE_BASE64 }} + # Create APK Debug - name: Build apk debug project (APK) - ${{ env.main_project_module }} module run: ./gradlew --dependency-verification lenient assembleDhis2Debug env: SENTRY_DSN: ${{ secrets.SENTRY_DSN }} + DEBUG_KEYSTORE_ALIAS: ${{ secrets.DEBUG_KEYSTORE_ALIAS }} + DEBUG_KEY_PASS: ${{ secrets.DEBUG_KEY_PASS }} + DEBUG_KEYSTORE_PASSWORD: ${{ secrets.DEBUG_KEYSTORE_PASSWORD }} + DEBUG_KEYSTORE_PATH: ${{ steps.decode_keystore.outputs.filePath }} - name: Read version name from file working-directory: ./gradle id: read-version run: echo "vName=$(grep 'vName' libs.versions.toml | awk -F' = ' '{print $2}' | tr -d '"')" >> "$GITHUB_OUTPUT" + - name: Get JIRA issue number + id: jira-issue-number + run: | + BRANCH_NAME="${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}" + JIRA_ISSUE=$(echo "$BRANCH_NAME" | grep -oE '[a-zA-Z]+-[0-9]+' | head -1 || echo "$BRANCH_NAME") + echo "issue=$JIRA_ISSUE" >> "$GITHUB_OUTPUT" + # Upload Artifact Build - name: Upload Android artifacts uses: actions/upload-artifact@v6.0.0 with: name: ${{ env.repository_name }} - Android APK - ${{ steps.date.outputs.date }} - path: ${{ env.main_project_module }}/build/outputs/apk/dhis2/debug/dhis2-v${{ steps.read-version.outputs.vName }}.apk + path: ${{ env.main_project_module }}/build/outputs/apk/dhis2/debug/dhis2-v${{ steps.read-version.outputs.vName }}-${{ steps.jira-issue-number.outputs.issue}}.apk diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 479b5a6139f..449181cd068 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -39,6 +39,21 @@ android { } } + val getBranchName by extra { + fun(): String { + return try { + val process = ProcessBuilder("git", "rev-parse", "--abbrev-ref", "HEAD") + .redirectOutput(ProcessBuilder.Redirect.PIPE) + .redirectError(ProcessBuilder.Redirect.PIPE) + .start() + val branchName = process.inputStream.bufferedReader().readText().trim() + branchName.replace(Regex("[/\\\\:*?\"<>|]"), "-") + } catch (e: Exception) { + "unknown" + } + } + } + signingConfigs { create("release") { keyAlias = System.getenv("SIGNING_KEY_ALIAS") @@ -56,6 +71,15 @@ android { } storePassword = System.getenv("TRAINING_STORE_PASSWORD") } + val customKeystorePath = System.getenv("DEBUG_KEYSTORE_PATH") + if (customKeystorePath != null ) { + getByName("debug") { + keyAlias = System.getenv("DEBUG_KEYSTORE_ALIAS") + keyPassword = System.getenv("DEBUG_KEY_PASS") + storeFile = file(customKeystorePath) + storePassword = System.getenv("DEBUG_KEYSTORE_PASSWORD") + } + } } testOptions { @@ -215,6 +239,7 @@ android { val suffix = when { buildType == "release" && flavorName == "dhis2Training" -> "-training" buildType == "release" && flavorName == "dhis2PlayServices" -> "-googlePlay" + buildType == "debug" -> "-${getBranchName()}" else -> "" } diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index 386a632c1f6..1b4dfb351c8 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -11530,9 +11530,15 @@ + + + + + + @@ -12198,6 +12204,9 @@ + + + From e74911fd0f73f362bd29f0cd1b5e9392ce7c5bed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Miguel=20Rubio?= Date: Tue, 27 Jan 2026 09:46:49 +0100 Subject: [PATCH 025/114] ANDROAPP-7231-Test-legacy-login [skip size] (#4410) * refactor(tests): integrate ComposeTestRule into homeRobot for improved UI testing * tests: create shouldLoginWithoutOauth test * refactor(tests): remove redundant home screen checks in login tests * refactor(tests): Editing test to finish after accepting Tracking Permission * test: For landscape testing, close keyboard after entering credentials * test: keep waitUntilAtLeastOneExists on MainRobot.kt --- .../mocks/settingswebapp/generalsettings.json | 9 + .../org/dhis2/usescases/UseCaseTestsSuite.kt | 1 + .../org/dhis2/usescases/about/AboutTest.kt | 6 +- .../org/dhis2/usescases/login/LoginRobot.kt | 173 ++++++++++++------ .../org/dhis2/usescases/login/LoginTest.kt | 165 ++++++----------- .../org/dhis2/usescases/main/MainRobot.kt | 14 +- .../java/org/dhis2/usescases/main/MainTest.kt | 4 +- .../java/org/dhis2/usescases/pin/PinTest.kt | 6 +- .../dhis2/usescases/settings/SettingsTest.kt | 14 +- .../login/main/data/LoginRepositoryImpl.kt | 16 +- .../login/accounts/ui/screen/AccountItem.kt | 6 +- .../login/main/ui/screen/CredentialsScreen.kt | 17 +- 12 files changed, 230 insertions(+), 201 deletions(-) create mode 100644 app/src/androidTest/assets/mocks/settingswebapp/generalsettings.json diff --git a/app/src/androidTest/assets/mocks/settingswebapp/generalsettings.json b/app/src/androidTest/assets/mocks/settingswebapp/generalsettings.json new file mode 100644 index 00000000000..8b14c43405f --- /dev/null +++ b/app/src/androidTest/assets/mocks/settingswebapp/generalsettings.json @@ -0,0 +1,9 @@ +{ + "encryptDB": false, + "mobileConfiguration": { + "disableAllSettings": false + }, + "reservedValues": 100, + "smsGateway": "", + "smsResultSender": "" +} diff --git a/app/src/androidTest/java/org/dhis2/usescases/UseCaseTestsSuite.kt b/app/src/androidTest/java/org/dhis2/usescases/UseCaseTestsSuite.kt index 76b6b8edc7c..84e2ac1e94f 100644 --- a/app/src/androidTest/java/org/dhis2/usescases/UseCaseTestsSuite.kt +++ b/app/src/androidTest/java/org/dhis2/usescases/UseCaseTestsSuite.kt @@ -30,5 +30,6 @@ import org.junit.runners.Suite SyncActivityTest::class, TeiDashboardTest::class, SchedulingDialogUiTest::class, + LoginTest::class, ) class UseCaseTestsSuite diff --git a/app/src/androidTest/java/org/dhis2/usescases/about/AboutTest.kt b/app/src/androidTest/java/org/dhis2/usescases/about/AboutTest.kt index 2e3261c54e1..d2b1c598757 100644 --- a/app/src/androidTest/java/org/dhis2/usescases/about/AboutTest.kt +++ b/app/src/androidTest/java/org/dhis2/usescases/about/AboutTest.kt @@ -1,5 +1,6 @@ package org.dhis2.usescases.about +import androidx.compose.ui.test.junit4.createComposeRule import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.rule.ActivityTestRule import org.dhis2.bindings.buildInfo @@ -18,13 +19,16 @@ class AboutTest : BaseTest() { @get:Rule val rule = ActivityTestRule(MainActivity::class.java, false, false) + @get:Rule + val composeTestRule = createComposeRule() + @Test fun shouldCheckVersionsWhenOpenAboutScreen() { startActivity() val appVersion = getAppVersionName() val sdkVersion = getSDKVersionName() - homeRobot { + homeRobot(composeTestRule) { clickOnNavigationDrawerMenu() clickAbout() } diff --git a/app/src/androidTest/java/org/dhis2/usescases/login/LoginRobot.kt b/app/src/androidTest/java/org/dhis2/usescases/login/LoginRobot.kt index fce28c37788..a3fffd53c88 100644 --- a/app/src/androidTest/java/org/dhis2/usescases/login/LoginRobot.kt +++ b/app/src/androidTest/java/org/dhis2/usescases/login/LoginRobot.kt @@ -1,34 +1,24 @@ package org.dhis2.usescases.login import androidx.compose.ui.test.ExperimentalTestApi -import androidx.compose.ui.test.assert import androidx.compose.ui.test.assertIsDisplayed +import androidx.compose.ui.test.assertIsEnabled +import androidx.compose.ui.test.assertIsNotEnabled import androidx.compose.ui.test.hasTestTag import androidx.compose.ui.test.hasText import androidx.compose.ui.test.junit4.ComposeTestRule import androidx.compose.ui.test.onNodeWithTag -import androidx.compose.ui.test.onNodeWithText import androidx.compose.ui.test.performClick import androidx.compose.ui.test.performTextReplacement -import androidx.test.espresso.Espresso.onView -import androidx.test.espresso.action.ViewActions.click -import androidx.test.espresso.assertion.ViewAssertions.matches -import androidx.test.espresso.intent.Intents -import androidx.test.espresso.intent.matcher.IntentMatchers.hasComponent -import androidx.test.espresso.intent.matcher.IntentMatchers.hasExtra -import androidx.test.espresso.matcher.ViewMatchers.isDisplayed -import androidx.test.espresso.matcher.ViewMatchers.withId -import androidx.test.espresso.matcher.ViewMatchers.withText import androidx.test.platform.app.InstrumentationRegistry -import org.dhis2.R import org.dhis2.common.BaseRobot -import org.dhis2.commons.dialogs.bottomsheet.CLICKABLE_TEXT_TAG +import org.dhis2.mobile.login.accounts.ui.screen.ACCOUNT_ITEM_TAG +import org.dhis2.mobile.login.main.ui.screen.CREDENTIALS_ERROR_INFO_BAR_TAG +import org.dhis2.mobile.login.main.ui.screen.CREDENTIALS_LOGIN_BUTTON_TAG +import org.dhis2.mobile.login.main.ui.screen.CREDENTIALS_MANAGE_ACCOUNTS_BUTTON_TAG +import org.dhis2.mobile.login.main.ui.screen.CREDENTIALS_PASSWORD_INPUT_TAG +import org.dhis2.mobile.login.main.ui.screen.CREDENTIALS_USERNAME_INPUT_TAG import org.dhis2.mobile.login.main.ui.screen.SERVER_VALIDATION_CONTENT_BUTTON_TAG -import org.dhis2.usescases.BaseTest.Companion.MOCK_SERVER_URL -import org.dhis2.usescases.about.PolicyView -import org.dhis2.usescases.qrScanner.ScanActivity -import org.dhis2.utils.WebViewActivity -import org.hamcrest.CoreMatchers fun loginRobot( @@ -42,7 +32,6 @@ fun loginRobot( class LoginRobot(val composeTestRule: ComposeTestRule) : BaseRobot() { - val context = InstrumentationRegistry.getInstrumentation().targetContext @OptIn(ExperimentalTestApi::class) @@ -58,71 +47,135 @@ class LoginRobot(val composeTestRule: ComposeTestRule) : BaseRobot() { composeTestRule.onNodeWithTag("INPUT_QR_CODE_FIELD").performTextReplacement(server) } - fun clickQRButton() { - composeTestRule.onNodeWithTag("INPUT_QR_CODE_BUTTON").performClick() + @OptIn(ExperimentalTestApi::class) + fun checkServerInputIsDisplayed() { + composeTestRule.waitUntilExactlyOneExists( + hasTestTag("INPUT_QR_CODE_FIELD"), + TIMEOUT, + ) + composeTestRule.onNodeWithTag("INPUT_QR_CODE_FIELD").assertIsDisplayed() } - - fun checkAuthErrorAlertIsVisible() { - waitForView(withText(LOGIN_ERROR_TITLE)).check(matches(isDisplayed())) + @OptIn(ExperimentalTestApi::class) + fun typeUsername(username: String) { + // Wait for credentials screen to appear + composeTestRule.waitUntilExactlyOneExists( + hasTestTag(CREDENTIALS_USERNAME_INPUT_TAG), + TIMEOUT, + ) + // Click on the username input to focus it + composeTestRule.onNodeWithTag(CREDENTIALS_USERNAME_INPUT_TAG).performClick() + // Now find the inner text field and type the username + composeTestRule.onNodeWithTag("INPUT_USER_FIELD").performTextReplacement(username) } - fun clickOKAuthErrorAlert() { - onView(withText(OK)).perform(click()) + @OptIn(ExperimentalTestApi::class) + fun typePassword(password: String) { + // Wait for password field to appear + composeTestRule.waitUntilExactlyOneExists( + hasTestTag(CREDENTIALS_PASSWORD_INPUT_TAG), + TIMEOUT, + ) + // Click on the password input to focus it + composeTestRule.onNodeWithTag(CREDENTIALS_PASSWORD_INPUT_TAG).performClick() + // Now find the inner text field and type the password + composeTestRule.onNodeWithTag("INPUT_PASSWORD_TEXT_FIELD").performTextReplacement(password) } - fun checkUnblockSessionViewIsVisible() { - onView(withId(R.id.cardview_pin)).check(matches(isDisplayed())) + @OptIn(ExperimentalTestApi::class) + fun checkLoginButtonIsEnabled() { + closeKeyboard() + composeTestRule.waitUntilExactlyOneExists( + hasTestTag(CREDENTIALS_LOGIN_BUTTON_TAG), + TIMEOUT, + ) + composeTestRule.onNodeWithTag(CREDENTIALS_LOGIN_BUTTON_TAG) + .assertIsEnabled() } - fun checkURL(url: String) { - composeTestRule.onNodeWithTag("INPUT_QR_CODE_FIELD").assert(hasText(url)) + @OptIn(ExperimentalTestApi::class) + fun checkLoginButtonIsDisabled() { + composeTestRule.waitUntilExactlyOneExists( + hasTestTag(CREDENTIALS_LOGIN_BUTTON_TAG), + TIMEOUT, + ) + composeTestRule.onNodeWithTag(CREDENTIALS_LOGIN_BUTTON_TAG) + .assertIsNotEnabled() } - fun checkWebviewWithRecoveryAccountIsOpened() { - Intents.intended( - CoreMatchers.allOf( - hasExtra( - WebViewActivity.WEB_VIEW_URL, - "${MOCK_SERVER_URL}/dhis-web-commons/security/recovery.action" - ), - hasComponent(WebViewActivity::class.java.name) - ) + @OptIn(ExperimentalTestApi::class) + fun clickLoginButton() { + composeTestRule.waitUntilExactlyOneExists( + hasTestTag(CREDENTIALS_LOGIN_BUTTON_TAG), + TIMEOUT, ) + composeTestRule.onNodeWithTag(CREDENTIALS_LOGIN_BUTTON_TAG).performClick() } - fun checkQRScanIsOpened() { - Intents.intended(CoreMatchers.allOf(hasComponent(ScanActivity::class.java.name))) + @OptIn(ExperimentalTestApi::class) + fun checkServerValidationErrorIsDisplayed() { + // Wait for error to appear in the supporting text of the server input + composeTestRule.waitUntilAtLeastOneExists( + hasTestTag("INPUT_QR_CODE_FIELD"), + TIMEOUT, + ) + // The error is displayed as supporting text, we just need to verify the field is in error state } - fun checkShareDataDialogIsDisplayed() { - val title = InstrumentationRegistry.getInstrumentation() - .targetContext.getString(R.string.improve_app_msg_title) - composeTestRule.onNodeWithText(title) + @OptIn(ExperimentalTestApi::class) + fun checkCredentialsErrorIsDisplayed() { + // Wait for the InfoBar with error message to appear + composeTestRule.waitUntilAtLeastOneExists( + hasTestTag(CREDENTIALS_ERROR_INFO_BAR_TAG), + TIMEOUT, + ) + composeTestRule.onNodeWithTag(CREDENTIALS_ERROR_INFO_BAR_TAG).assertIsDisplayed() } - fun clickOnPrivacyPolicy() { - composeTestRule.onNodeWithTag(CLICKABLE_TEXT_TAG).performClick() + @OptIn(ExperimentalTestApi::class) + fun clickOnManageAccountsButton() { + composeTestRule.waitUntilExactlyOneExists( + hasTestTag(CREDENTIALS_MANAGE_ACCOUNTS_BUTTON_TAG), + TIMEOUT, + ) + composeTestRule.onNodeWithTag(CREDENTIALS_MANAGE_ACCOUNTS_BUTTON_TAG).performClick() } - fun acceptTrackerDialog() { - val title = InstrumentationRegistry - .getInstrumentation() - .targetContext.getString(R.string.improve_app_msg_title) - composeTestRule.onNodeWithText(title).assertIsDisplayed() + @OptIn(ExperimentalTestApi::class) + fun checkAccountIsListed(serverUrl: String, username: String) { + val accountTag = "${ACCOUNT_ITEM_TAG}_${serverUrl}_${username}" + composeTestRule.waitUntilExactlyOneExists( + hasTestTag(accountTag), + TIMEOUT, + ) + composeTestRule.onNodeWithTag(accountTag).assertIsDisplayed() } - fun clickYesOnAcceptTrackerDialog() { - composeTestRule.onNodeWithText(context.getString(R.string.yes)) - .performClick() + @OptIn(ExperimentalTestApi::class) + fun clickOnAccount(serverUrl: String, username: String) { + val accountTag = "${ACCOUNT_ITEM_TAG}_${serverUrl}_${username}" + composeTestRule.waitUntilExactlyOneExists( + hasTestTag(accountTag), + TIMEOUT, + ) + composeTestRule.onNodeWithTag(accountTag).performClick() } - fun checkPrivacyViewIsOpened() { - Intents.intended(CoreMatchers.allOf(hasComponent(PolicyView::class.java.name))) + @OptIn(ExperimentalTestApi::class) + fun checkTrackingPermissionDialogIsDisplayed() { + composeTestRule.waitUntilExactlyOneExists( + hasText("Do you want to help us improve this app?"), + TIMEOUT, + ) } - companion object { - const val LOGIN_ERROR_TITLE = "Login error" - const val OK = "OK" + @OptIn(ExperimentalTestApi::class) + fun acceptTrackingPermission() { + checkTrackingPermissionDialogIsDisplayed() + composeTestRule.waitUntilExactlyOneExists( + hasText("Yes"), + TIMEOUT, + ) + composeTestRule.onNode(hasText("Yes")).performClick() } } diff --git a/app/src/androidTest/java/org/dhis2/usescases/login/LoginTest.kt b/app/src/androidTest/java/org/dhis2/usescases/login/LoginTest.kt index a2cf81e3e12..708a2590a71 100644 --- a/app/src/androidTest/java/org/dhis2/usescases/login/LoginTest.kt +++ b/app/src/androidTest/java/org/dhis2/usescases/login/LoginTest.kt @@ -1,31 +1,20 @@ package org.dhis2.usescases.login -import android.app.Activity -import android.app.Instrumentation import android.content.Intent import androidx.compose.ui.test.junit4.createComposeRule import androidx.test.core.app.ApplicationProvider -import androidx.test.espresso.intent.Intents.intending -import androidx.test.espresso.intent.matcher.IntentMatchers import org.dhis2.common.keystore.KeyStoreRobot -import org.dhis2.commons.Constants.EXTRA_DATA -import org.dhis2.commons.prefs.Preference.Companion.PIN -import org.dhis2.commons.prefs.Preference.Companion.SESSION_LOCKED import org.dhis2.lazyActivityScenarioRule import org.dhis2.usescases.BaseTest -import org.dhis2.usescases.qrScanner.ScanActivity -import org.hamcrest.CoreMatchers.allOf import org.hisp.dhis.android.core.D2Manager import org.hisp.dhis.android.core.mockwebserver.ResponseController.Companion.API_ME_PATH import org.hisp.dhis.android.core.mockwebserver.ResponseController.Companion.API_SYSTEM_INFO_PATH import org.hisp.dhis.android.core.mockwebserver.ResponseController.Companion.GET import org.junit.FixMethodOrder -import org.junit.Ignore import org.junit.Rule import org.junit.Test import org.junit.runners.MethodSorters -@Ignore("implement in login module") @FixMethodOrder(MethodSorters.NAME_ASCENDING) class LoginTest : BaseTest() { @@ -39,6 +28,7 @@ class LoginTest : BaseTest() { restoreDataBaseOnBeforeAction = false super.setUp() setupMockServer() + clearAnalyticsPermission() D2Manager.removeCredentials() } @@ -46,110 +36,60 @@ class LoginTest : BaseTest() { override fun teardown() { restoreDataBaseOnBeforeAction = true super.teardown() + // Restore original credentials D2Manager.setCredentials(KeyStoreRobot.KEYSTORE_USERNAME, KeyStoreRobot.PASSWORD) } - @Ignore("implement in login module") @Test - fun loginFlow() { - mockWebServerRobot.addResponse(GET, API_LOGIN_CONFIG, API_LOGIN_CONFIG_RESPONSE, 200) - mockWebServerRobot.addResponse(GET, API_ME_PATH, API_ME_RESPONSE_OK) - mockWebServerRobot.addResponse(GET, API_SYSTEM_INFO_PATH, API_SYSTEM_INFO_RESPONSE_OK) - mockWebServerRobot.addResponse( - GET, - PATH_WEBAPP_GENERAL_SETTINGS, - API_METADATA_SETTINGS_RESPONSE_ERROR, - 404 - ) - mockWebServerRobot.addResponse(GET, PATH_WEBAPP_INFO, API_METADATA_SETTINGS_INFO_ERROR, 404) + fun shouldLoginWithoutOauth() { + enableIntents() startLoginActivity() loginRobot(composeTestRule) { - typeServerToValidate(MOCK_SERVER_URL) + // Step: Enter incorrect server URL and validate - should show error + typeServerToValidate("https://invalid-server.com") clickOnValidateServerButton() - // Test case - [ANDROAPP-4122](https://dhis2.atlassian.net/browse/ANDROAPP-4122) -// typeUsername(USERNAME) -// typePassword(PASSWORD) -// clearUsernameField() -// clearPasswordField() -// checkUsernameFieldIsClear() -// checkPasswordFieldIsClear() - - //Test case - [ANDROAPP-4123](https://dhis2.atlassian.net/browse/ANDROAPP-4123) -// checkLoginButtonIsHidden() - - // Test case - [ANDROAPP-4126](https://dhis2.atlassian.net/browse/ANDROAPP-4126) - enableIntents() -// clickAccountRecovery() - checkWebviewWithRecoveryAccountIsOpened() - pressBack() - - // Test case - [ANDROAPP-4121](https://dhis2.atlassian.net/browse/ANDROAPP-4121) - mockWebServerRobot.addResponse(GET, API_ME_PATH, API_ME_UNAUTHORIZE, HTTP_UNAUTHORIZE) -// selectUsernameField() -// typeUsername(USERNAME) -// typePassword(PASSWORD) - waitToDebounce(5000) -// clickLoginButton() - checkAuthErrorAlertIsVisible() - clickOKAuthErrorAlert() - - // Test case - [ANDROAPP-4121](https://dhis2.atlassian.net/browse/ANDROAPP-4121) - mockWebServerRobot.addResponse(GET, API_ME_PATH, API_ME_RESPONSE_OK) -// clearPasswordField() -// typePassword(PASSWORD) - waitToDebounce(5000) -// clickLoginButton() - - //Test case - [ANDROAPP-5184](https://dhis2.atlassian.net/browse/ANDROAPP-5184) - checkShareDataDialogIsDisplayed() - clickOnPrivacyPolicy() - checkPrivacyViewIsOpened() - pressBack() - acceptTrackerDialog() - clickYesOnAcceptTrackerDialog() - } - cleanDatabase() - } + checkServerValidationErrorIsDisplayed() - @Ignore("implement in login module") - @Test - fun goToPinScreenWhenPinWasSet() { - preferencesRobot.saveValue(SESSION_LOCKED, true) - preferencesRobot.saveValue(PIN, PIN_PASSWORD) - - startLoginActivity() - - loginRobot(composeTestRule) { + // Step: Enter correct server URL and validate - should proceed to credentials + mockWebServerRobot.addResponse(GET, API_LOGIN_CONFIG, API_LOGIN_CONFIG_RESPONSE, 200) + typeServerToValidate(MOCK_SERVER_URL) clickOnValidateServerButton() - checkUnblockSessionViewIsVisible() - } - } - @Ignore("implement in login module") - @Test - fun generateLoginThroughQR() { - preferencesRobot.cleanPreferences() - enableIntents() - startLoginActivity() + // Step: Credentials screen should be displayed + // Enter incorrect credentials - should show error + mockWebServerRobot.addResponse(GET, API_ME_PATH, API_ME_UNAUTHORIZE, HTTP_UNAUTHORIZE) + checkLoginButtonIsDisabled() + typeUsername("wronguser") + typePassword("wrongpassword") + checkLoginButtonIsEnabled() + clickLoginButton() + checkCredentialsErrorIsDisplayed() + + // Step: Enter correct credentials - should proceed to tracker dialog + mockWebServerRobot.addResponse(GET, API_ME_PATH, API_ME_RESPONSE_OK) + mockWebServerRobot.addResponse(GET, API_SYSTEM_INFO_PATH, API_SYSTEM_INFO_RESPONSE_OK) + mockWebServerRobot.addResponse( + GET, + PATH_WEBAPP_GENERAL_SETTINGS, + API_METADATA_SETTINGS_RESPONSE_OK, + 200 + ) + mockWebServerRobot.addResponse( + GET, + PATH_WEBAPP_INFO, + API_METADATA_SETTINGS_INFO_ERROR, + 404 + ) - loginRobot(composeTestRule) { - mockOnActivityForResult() - clickQRButton() - checkQRScanIsOpened() - checkURL(MOCK_SERVER_URL) - } - } + typeUsername(USERNAME) + typePassword(PASSWORD) + checkLoginButtonIsEnabled() + clickLoginButton() - private fun mockOnActivityForResult() { - val intent = Intent().apply { - putExtra(EXTRA_DATA, MOCK_SERVER_URL - ) + // Step: Handle tracking permission dialog + acceptTrackingPermission() } - val result = Instrumentation.ActivityResult(Activity.RESULT_OK, intent) - intending(allOf(IntentMatchers.hasComponent(ScanActivity::class.java.name))).respondWith( - result - ) } private fun startLoginActivity() { @@ -161,27 +101,32 @@ class LoginTest : BaseTest() { } - private fun cleanDatabase() { - context.deleteDatabase(DB_GENERATED_BY_LOGIN) + private fun clearAnalyticsPermission() { + D2Manager.getD2() + .dataStoreModule() + .localDataStore() + .value(ANALYTICS_PERMISSION_KEY) + .blockingDeleteIfExist() } companion object { const val HTTP_UNAUTHORIZE = 401 const val API_LOGIN_CONFIG = "/api/loginConfig" - const val API_LOGIN_CONFIG_RESPONSE ="mocks/loginconfig/legacy_flow_config.json" + const val API_LOGIN_CONFIG_RESPONSE = "mocks/loginconfig/legacy_flow_config.json" const val API_ME_RESPONSE_OK = "mocks/user/user.json" const val API_ME_UNAUTHORIZE = "mocks/user/unauthorize.json" const val API_SYSTEM_INFO_RESPONSE_OK = "mocks/systeminfo/systeminfo.json" - const val API_METADATA_SETTINGS_RESPONSE_ERROR = - "mocks/settingswebapp/generalsettings_404.json" + const val API_METADATA_SETTINGS_RESPONSE_OK = + "mocks/settingswebapp/generalsettings.json" const val API_METADATA_SETTINGS_INFO_ERROR = "mocks/settingswebapp/infosettings_404.json" const val PATH_WEBAPP_GENERAL_SETTINGS = "/api/dataStore/ANDROID_SETTING_APP/general_settings?.*" const val PATH_WEBAPP_INFO = "/api/dataStore/ANDROID_SETTINGS_APP/info?.*" - const val DB_GENERATED_BY_LOGIN = "127-0-0-1-8080_test_unencrypted.db" - const val PIN_PASSWORD = 1234 - const val USERNAME = "test" - const val PASSWORD = "Android123" + const val USERNAME = "android" // Existing test database username + const val PASSWORD = "Android123" // Existing test database password + + private const val ANALYTICS_PERMISSION_KEY = "analytics_permission" + } } diff --git a/app/src/androidTest/java/org/dhis2/usescases/main/MainRobot.kt b/app/src/androidTest/java/org/dhis2/usescases/main/MainRobot.kt index 07ad8529ebf..3ab5103fef8 100644 --- a/app/src/androidTest/java/org/dhis2/usescases/main/MainRobot.kt +++ b/app/src/androidTest/java/org/dhis2/usescases/main/MainRobot.kt @@ -17,13 +17,16 @@ import org.dhis2.common.BaseRobot import org.dhis2.usescases.main.program.HOME_ITEMS import org.dhis2.usescases.main.program.hasPrograms -fun homeRobot(robotBody: MainRobot.() -> Unit) { - MainRobot().apply { +fun homeRobot( + composeTestRule: ComposeTestRule, + robotBody: MainRobot.() -> Unit +) { + MainRobot(composeTestRule).apply { robotBody() } } -class MainRobot : BaseRobot() { +class MainRobot(val composeTestRule: ComposeTestRule) : BaseRobot() { fun clickOnNavigationDrawerMenu() = apply { waitForView(withId(R.id.menu)).perform(click()) @@ -43,10 +46,6 @@ class MainRobot : BaseRobot() { waitToDebounce(FRAGMENT_TRANSITION) } - fun clickDeleteAccount() = apply { - onView(withId(R.id.nav_view)).perform(NavigationViewActions.navigateTo(R.id.delete_account)) - } - fun checkViewIsNotEmpty(composeTestRule: ComposeTestRule) { composeTestRule.waitUntil() { composeTestRule.onNodeWithTag(HOME_ITEMS) @@ -65,6 +64,5 @@ class MainRobot : BaseRobot() { companion object { const val FRAGMENT_TRANSITION = 1500L - const val LOGOUT_TRANSITION = 2000L } } diff --git a/app/src/androidTest/java/org/dhis2/usescases/main/MainTest.kt b/app/src/androidTest/java/org/dhis2/usescases/main/MainTest.kt index 1df078c6a6a..5e90b83bcdf 100644 --- a/app/src/androidTest/java/org/dhis2/usescases/main/MainTest.kt +++ b/app/src/androidTest/java/org/dhis2/usescases/main/MainTest.kt @@ -32,7 +32,7 @@ class MainTest : BaseTest() { @Test fun checkHomeScreenRecyclerviewHasElements() { - homeRobot { + homeRobot(composeTestRule) { composeTestRule.waitForIdle() checkViewIsNotEmpty(composeTestRule) } @@ -40,7 +40,7 @@ class MainTest : BaseTest() { @Test fun shouldNavigateToHomeWhenBackPressed() { - homeRobot { + homeRobot(composeTestRule) { clickOnNavigationDrawerMenu() clickOnSettings() pressBack() diff --git a/app/src/androidTest/java/org/dhis2/usescases/pin/PinTest.kt b/app/src/androidTest/java/org/dhis2/usescases/pin/PinTest.kt index 75664686787..d05622e8d83 100644 --- a/app/src/androidTest/java/org/dhis2/usescases/pin/PinTest.kt +++ b/app/src/androidTest/java/org/dhis2/usescases/pin/PinTest.kt @@ -1,5 +1,6 @@ package org.dhis2.usescases.pin +import androidx.compose.ui.test.junit4.createComposeRule import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.rule.ActivityTestRule import org.dhis2.usescases.BaseTest @@ -15,11 +16,14 @@ class PinTest : BaseTest() { @get:Rule val rule = ActivityTestRule(MainActivity::class.java, false, false) + @get:Rule + val composeTestRule = createComposeRule() + @Test fun openPin() { startActivity() - homeRobot { + homeRobot(composeTestRule) { clickOnNavigationDrawerMenu() clickOnPin() } diff --git a/app/src/androidTest/java/org/dhis2/usescases/settings/SettingsTest.kt b/app/src/androidTest/java/org/dhis2/usescases/settings/SettingsTest.kt index ce1b9bcb812..bd1ffb25c07 100644 --- a/app/src/androidTest/java/org/dhis2/usescases/settings/SettingsTest.kt +++ b/app/src/androidTest/java/org/dhis2/usescases/settings/SettingsTest.kt @@ -34,7 +34,7 @@ class SettingsTest : BaseTest() { fun shouldFindEditPeriodDisabledWhenClickOnSyncData() { startActivity() - homeRobot { + homeRobot(composeTestRule) { clickOnNavigationDrawerMenu() clickOnSettings() } @@ -49,7 +49,7 @@ class SettingsTest : BaseTest() { fun shouldFindEditDisabledWhenClickOnSyncConfiguration() { startActivity() - homeRobot { + homeRobot(composeTestRule) { clickOnNavigationDrawerMenu() clickOnSettings() } @@ -64,7 +64,7 @@ class SettingsTest : BaseTest() { fun shouldFindEditDisableWhenClickOnSyncParameters() { startActivity() - homeRobot { + homeRobot(composeTestRule) { clickOnNavigationDrawerMenu() clickOnSettings() } @@ -79,7 +79,7 @@ class SettingsTest : BaseTest() { fun shouldRefillValuesWhenClickOnReservedValues() { startActivity() - homeRobot { + homeRobot(composeTestRule) { clickOnNavigationDrawerMenu() clickOnSettings() } @@ -94,7 +94,7 @@ class SettingsTest : BaseTest() { fun shouldSuccessfullyOpenLogs() { startActivity() - homeRobot { + homeRobot(composeTestRule) { clickOnNavigationDrawerMenu() clickOnSettings() } @@ -112,7 +112,7 @@ class SettingsTest : BaseTest() { startActivity() - homeRobot { + homeRobot(composeTestRule) { clickOnNavigationDrawerMenu() clickOnSettings() } @@ -129,7 +129,7 @@ class SettingsTest : BaseTest() { startActivity() - homeRobot { + homeRobot(composeTestRule) { clickOnNavigationDrawerMenu() clickOnSettings() } diff --git a/login/src/androidMain/kotlin/org/dhis2/mobile/login/main/data/LoginRepositoryImpl.kt b/login/src/androidMain/kotlin/org/dhis2/mobile/login/main/data/LoginRepositoryImpl.kt index e51814348e5..30f30552423 100644 --- a/login/src/androidMain/kotlin/org/dhis2/mobile/login/main/data/LoginRepositoryImpl.kt +++ b/login/src/androidMain/kotlin/org/dhis2/mobile/login/main/data/LoginRepositoryImpl.kt @@ -157,12 +157,16 @@ class LoginRepositoryImpl( override suspend fun displayTrackingMessage(): Boolean = withContext(dispatcher.io) { - d2 - .dataStoreModule() - .localDataStore() - .value(DATA_STORE_ANALYTICS_PERMISSION_KEY) - .blockingGet() - ?.value() == null + try { + d2 + .dataStoreModule() + .localDataStore() + .value(DATA_STORE_ANALYTICS_PERMISSION_KEY) + .blockingGet() + ?.value() == null + } catch (_: Exception) { + false + } } private fun hasEnabledBiometricsPermission(): Boolean = diff --git a/login/src/commonMain/kotlin/org/dhis2/mobile/login/accounts/ui/screen/AccountItem.kt b/login/src/commonMain/kotlin/org/dhis2/mobile/login/accounts/ui/screen/AccountItem.kt index af7a132c5e1..7ee54e2e0e5 100644 --- a/login/src/commonMain/kotlin/org/dhis2/mobile/login/accounts/ui/screen/AccountItem.kt +++ b/login/src/commonMain/kotlin/org/dhis2/mobile/login/accounts/ui/screen/AccountItem.kt @@ -9,6 +9,7 @@ import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.testTag import org.dhis2.mobile.commons.resources.getDrawableResource import org.dhis2.mobile.login.accounts.domain.model.AccountModel import org.hisp.dhis.mobile.ui.designsystem.component.AdditionalInfoItem @@ -20,6 +21,8 @@ import org.hisp.dhis.mobile.ui.designsystem.component.ListCardTitleModel import org.hisp.dhis.mobile.ui.designsystem.component.state.rememberAdditionalInfoColumnState import org.hisp.dhis.mobile.ui.designsystem.component.state.rememberListCardState +const val ACCOUNT_ITEM_TAG = "account_item" + @OptIn(ExperimentalMaterial3Api::class, ExperimentalSharedTransitionApi::class) @Composable fun AccountItem( @@ -61,7 +64,8 @@ fun AccountItem( ListCard( modifier = modifier - .fillMaxWidth(), + .fillMaxWidth() + .testTag("${ACCOUNT_ITEM_TAG}_${account.serverUrl}_${account.name}"), listCardState = listCardState, onCardClick = { onItemClicked(account) }, listAvatar = { diff --git a/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/ui/screen/CredentialsScreen.kt b/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/ui/screen/CredentialsScreen.kt index 8bd562f811c..bc133808cf6 100644 --- a/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/ui/screen/CredentialsScreen.kt +++ b/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/ui/screen/CredentialsScreen.kt @@ -37,6 +37,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.focus.FocusDirection import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalFocusManager +import androidx.compose.ui.platform.testTag import androidx.compose.ui.text.LinkAnnotation import androidx.compose.ui.text.SpanStyle import androidx.compose.ui.text.TextLinkStyles @@ -102,6 +103,12 @@ import org.jetbrains.compose.resources.stringResource import org.koin.compose.viewmodel.koinViewModel import org.koin.core.parameter.parametersOf +const val CREDENTIALS_USERNAME_INPUT_TAG = "credentials_username_input" +const val CREDENTIALS_PASSWORD_INPUT_TAG = "credentials_password_input" +const val CREDENTIALS_LOGIN_BUTTON_TAG = "credentials_login_button" +const val CREDENTIALS_ERROR_INFO_BAR_TAG = "credentials_error_info_bar" +const val CREDENTIALS_MANAGE_ACCOUNTS_BUTTON_TAG = "credentials_manage_accounts_button" + @OptIn(ExperimentalSharedTransitionApi::class) @Composable context(sharedTransitionScope: SharedTransitionScope, animatedVisibilityScope: AnimatedVisibilityScope) @@ -384,7 +391,7 @@ private fun CredentialsContainer( ) { if (isUsernameEditable) { InputUser( - modifier = Modifier.fillMaxWidth(), + modifier = Modifier.fillMaxWidth().testTag(CREDENTIALS_USERNAME_INPUT_TAG), uiModel = InputUserModel( title = stringResource(Res.string.username_hint), @@ -417,7 +424,7 @@ private fun CredentialsContainer( ) } InputPassword( - modifier = Modifier.fillMaxWidth(), + modifier = Modifier.fillMaxWidth().testTag(CREDENTIALS_PASSWORD_INPUT_TAG), uiModel = InputPasswordModel( title = stringResource(Res.string.password_hint), @@ -471,7 +478,7 @@ private fun LoginStatus( ) } else if (loginErrorMessage != null) { InfoBar( - modifier = Modifier, + modifier = Modifier.testTag(CREDENTIALS_ERROR_INFO_BAR_TAG), text = loginErrorMessage, textColor = MaterialTheme.colorScheme.onErrorContainer, backgroundColor = MaterialTheme.colorScheme.errorContainer, @@ -501,7 +508,7 @@ private fun CredentialActions( verticalArrangement = spacedBy(Spacing.Spacing0), ) { Button( - modifier = Modifier.fillMaxWidth(), + modifier = Modifier.fillMaxWidth().testTag(CREDENTIALS_LOGIN_BUTTON_TAG), enabled = canLogin, text = stringResource(Res.string.action_log_in), style = ButtonStyle.FILLED, @@ -591,7 +598,7 @@ private fun CredentialActions( contentAlignment = Alignment.BottomCenter, ) { Button( - modifier = Modifier.fillMaxWidth(), + modifier = Modifier.fillMaxWidth().testTag(CREDENTIALS_MANAGE_ACCOUNTS_BUTTON_TAG), text = stringResource(Res.string.action_manage_account), style = ButtonStyle.OUTLINED, onClick = { From 4a6bca730ae6cd1aadc2849cb9e9bb69452b6bd2 Mon Sep 17 00:00:00 2001 From: Xavier Molloy Date: Wed, 28 Jan 2026 09:27:08 +0100 Subject: [PATCH 026/114] chore: [ANDROAPP-7387] Update README.md (#4611) * chore: [ANDROAPP-7387] Update README.md * chore: [ANDROAPP-7387] Update README.md --- README.md | 29 +++++++++++++++++++++++++---- docs/README.md | 3 --- 2 files changed, 25 insertions(+), 7 deletions(-) delete mode 100644 docs/README.md diff --git a/README.md b/README.md index 1bc9fccc045..49d33cccdaa 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,31 @@ -# README # +# DHIS2 Android Capture App [![Lines of Code](https://sonarcloud.io/api/project_badges/measure?project=dhis2_dhis2-android-capture-app&metric=ncloc)](https://sonarcloud.io/summary/new_code?id=dhis2_dhis2-android-capture-app) [![Reliability Rating](https://sonarcloud.io/api/project_badges/measure?project=dhis2_dhis2-android-capture-app&metric=reliability_rating)](https://sonarcloud.io/summary/new_code?id=dhis2_dhis2-android-capture-app) -Check the [Wiki](https://github.com/dhis2/dhis2-android-capture-app/wiki) for information about how to build the project and its architecture **(WIP)** +## Introduction -### What is this repository for? ### +DHIS2 Android Capture App is a mobile application that allows offline data collection for DHIS2. It enables health workers and data collectors to access and update DHIS2 data from their mobile devices without requiring constant internet connectivity. -DHIS2 Android application. +Main features: + +- **Offline-first data capture**. Enter data for events, tracked entities, and data sets without an internet connection. Data is stored locally and synchronized when connectivity is available. +- **Complete DHIS2 workflows**. Support for Tracker programs, Event programs, and Data Sets with validation rules, program rules, and indicators. +- **Native mobile experience**. Built with modern Android technologies to provide a fast, intuitive, and reliable user experience. +- **Synchronized with DHIS2**. Seamlessly integrates with DHIS2 server instances, ensuring data consistency and compatibility across DHIS2 versions. + +## Documentation + +Implementation guidance and user documentation can be found in the [Android Implementation Guide](https://docs.dhis2.org/en/implement/android-implementation/executive-summary.html) in DHIS2 documentation. + +Developer-oriented documentation and architecture details can be found in [AGENTS.md](AGENTS.md). + +## Getting Started + +This app is built using the [DHIS2 Android SDK](https://github.com/dhis2/dhis2-android-sdk) and the [DHIS2 Mobile UI library](https://developers.dhis2.org/docs/mobile/mobile-ui/overview). To get started with development, check the [AGENTS.md](AGENTS.md) file for comprehensive development guidelines, architecture patterns, and best practices. + +## Community + +Community support can be found in the [DHIS2 Community portal](https://community.dhis2.org/c/implementation/mobile). Any feedback on the app will be highly appreciated. + +To report bugs or request new features, visit the [DHIS2 Jira project](https://jira.dhis2.org/projects/ANDROAPP/issues). diff --git a/docs/README.md b/docs/README.md deleted file mode 100644 index fbcac6a5156..00000000000 --- a/docs/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# DHIS 2 Android Capture App - Documentation - -This folder used to contain the the documentation of the DHIS 2 Android App and other technical docs. Since January 2022 it has been moved to [dhis2-android-docs](https://github.com/dhis2-android-docs). From a1fdd00fd8000a51a96e019b76fe1c724ff19d92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Miguel=20Rubio?= Date: Wed, 28 Jan 2026 17:46:57 +0100 Subject: [PATCH 027/114] deps: update sdk version (#4617) --- gradle/libs.versions.toml | 2 +- gradle/verification-metadata.xml | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index bba9b1f917f..068fa4c986d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -11,7 +11,7 @@ kotlin = '2.2.21' dagger = '2.57.2' jacoco = '0.8.14' designSystem = "0.7.0-SNAPSHOT" -dhis2sdk = "1.14.0-SNAPSHOT" +dhis2sdk = "1.14.0-20260126.105658-5" ruleEngine = "3.3.11" expressionParser = "1.2.2" appcompat = "1.7.1" diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index 1b4dfb351c8..b4a5eccf956 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -9734,6 +9734,14 @@ + + + + + + + + From 84112c1ff750cb7757c29daf577180637557d4f7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Miguel=20Rubio?= Date: Thu, 29 Jan 2026 08:15:44 +0100 Subject: [PATCH 028/114] chore: [ANDROAPP- 6429] feature/tracker-search-refactor [skip size] (#4586) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat(search): Add ParameterSelectorItemProvider in tracker module * feat(search): Add ParameterInputModel.kt for tracker UI * feat(search): Add ParameterSelectorItemProviderTest.kt * feat(search): Add ParameterInputProvider.kt * refactor(search): Move search parameter provider to tracker component * refactor(search): Remove ParameterRenderingType * refactor(search): unify scan callback methods * refactor(search): Improve parameter mapping and component stubs * refactor(search): Extract ParameterInputType.kt * refactor(search): Rename parameter input components * refactor(search): delete `ParameterSelectorItemProviderTest` The tests for `ParameterSelectorItemProvider` are no longer needed and have been removed. This is part of a refactoring effort to move search-related UI components to the design system library. * refactor(search): Add missing properties to TrackerInputModel.kt * refactor(search): Rename to TrackerInputModel.kt * refactor(search): Add InputDropdown * refactor(search): Add Not supported input types * feat(search): Add ParameterInputModel.kt for tracker UI * feat(search): Add ParameterSelectorItemProviderTest.kt * feat(search): Add ParameterInputProvider.kt * refactor(search): Remove ParameterRenderingType * refactor(search): Improve parameter mapping and component stubs * refactor(search): Extract ParameterInputType.kt * refactor(search): Rename parameter input components * refactor(search): delete `ParameterSelectorItemProviderTest` The tests for `ParameterSelectorItemProvider` are no longer needed and have been removed. This is part of a refactoring effort to move search-related UI components to the design system library. * refactor(search): Add missing properties to TrackerInputModel.kt * refactor(search): Rename to TrackerInputModel.kt * feat: [ANDROAPP-7451] implement multiselection in tracker input provider (#4594) * feat: [ANDROAPP-7251] implement multiselection in tracker input provider Signed-off-by: Manu Muñoz * onItemSelected Signed-off-by: Manu Muñoz * fix: take option only if not empty Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * fix: propagate editable value Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * fix: updated value to null if emtpy Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * feat(search): Set non supported types --------- Signed-off-by: Manu Muñoz Co-authored-by: Andrés Miguel Rubio Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * chore: [ANDROAPP-7450] Implement age and date time inputs in new tracker input provider (#4601) * feat(search): Add ParameterSelectorItemProvider in tracker module * feat(search): Add ParameterInputModel.kt for tracker UI * feat(search): Add ParameterSelectorItemProviderTest.kt * feat(search): Add ParameterInputProvider.kt * refactor(search): Move search parameter provider to tracker component * refactor(search): Remove ParameterRenderingType * refactor(search): unify scan callback methods * refactor(search): Improve parameter mapping and component stubs * refactor(search): Extract ParameterInputType.kt * refactor(search): Rename parameter input components * refactor(search): delete `ParameterSelectorItemProviderTest` The tests for `ParameterSelectorItemProvider` are no longer needed and have been removed. This is part of a refactoring effort to move search-related UI components to the design system library. * refactor(search): Add missing properties to TrackerInputModel.kt * refactor(search): Rename to TrackerInputModel.kt * refactor(search): Add InputDropdown * refactor(search): Add Not supported input types * chore: [ANDROAPP-7435] fix kapt error * chore: [ANDROAPP-7450] Implement Input age and date time inputs in new tracker Input provider * fix: [ANDROAPP-7450] fix rebase conflict changes * fix: [ANDROAPP-7450] resolve sonar code smells --------- Co-authored-by: andresmr Co-authored-by: danielTari * feat: [ANDROAPP-7452] Implement radioButtonInput and checkboxInput in search screen (#4591) * feat: [ANDROAPP-7452] Implement radioButtonInput and checkboxInput for search screen * fix: add options for boolean valueType and orientation Signed-off-by: Manu Muñoz * import Signed-off-by: Manu Muñoz * remove unused import --------- Signed-off-by: Manu Muñoz Co-authored-by: Manu Muñoz Co-authored-by: Pablo Pajuelo Cabezas * task: [ANDROAPP-7449] Add InputCustomIntent to TrackerInputProvider (#4602) * refactor: Move specific providers to provider package * refactor: Rename SearchAction.kt to TrackerInputAction.kt * refactor: Rename TrackerInputProvider.kt * refactor: Extract onItemClick and OnValueChange to TrackerInputUiEvent.kt * feat: Implement InputOrgUnit * refactor: remove RecyclerViewUiEvents handling from SearchParametersScreen.kt * refactor: code review fixes * refactor: code review fixes * fix: sonarcloud comments * fix: remove redundant focusRequester on ParameterSelectorItemProvider.kt * Add unit tests for ParameterInputModelMapper (#4615) * Update tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/provider/TrackerInputProvider.kt Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Update tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/provider/TrackerInputProvider.kt Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * Initial plan * Add comprehensive unit tests for ParameterInputModelMapper Co-authored-by: andresmr <3330344+andresmr@users.noreply.github.com> * Remove unused imports from test file Co-authored-by: andresmr <3330344+andresmr@users.noreply.github.com> * fix: rename library properties * fix: update test signature --------- Co-authored-by: Andrés Miguel Rubio Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: andresmr <3330344+andresmr@users.noreply.github.com> --------- Signed-off-by: Manu Muñoz Co-authored-by: Manu Muñoz Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> Co-authored-by: Xavier Molloy Co-authored-by: danielTari Co-authored-by: Pablo Pajuelo Cabezas Co-authored-by: Pablo Co-authored-by: Copilot <198982749+Copilot@users.noreply.github.com> Co-authored-by: andresmr <3330344+andresmr@users.noreply.github.com> --- .editorconfig | 1 + .../SearchRepositoryImplKt.kt | 10 + .../searchTrackEntity/SearchRepositoryKt.kt | 4 + .../searchTrackEntity/SearchTEIViewModel.kt | 50 +- .../SearchParametersScreen.kt | 145 ++- .../mapper/ParameterInputModelMapper.kt | 204 +++++ .../provider/ParameterSelectorItemProvider.kt | 138 --- .../SearchTEIViewModelTest.kt | 79 +- .../mapper/ParameterInputModelMapperTest.kt | 334 +++++++ commonskmm/build.gradle.kts | 2 +- .../composeResources/values/strings.xml | 5 + .../commons/dates/DateTimeInputsUtils.kt | 94 ++ .../inputfield/CustomIntentProvider.kt | 14 +- .../ui/provider/inputfield/FieldProvider.kt | 1 - .../composeResources/values-cs/strings.xml | 2 + .../composeResources/values-zh/strings.xml | 1 + .../composeResources/values/strings.xml | 1 + .../provider/ParameterSelectorItemProvider.kt | 87 ++ .../ui/input/action/TrackerInputAction.kt | 13 + .../ui/input/model/TrackerInputModel.kt | 56 ++ .../ui/input/model/TrackerInputType.kt | 35 + .../ui/input/model/TrackerInputUiEvent.kt | 27 + .../model/TrackerOptionSetConfiguration.kt | 16 + .../input/provider/TrackerAgeInputProvider.kt | 138 +++ .../provider/TrackerCheckboxInputProvider.kt | 56 ++ .../input/provider/TrackerDateTimeProvider.kt | 108 +++ .../ui/input/provider/TrackerInputProvider.kt | 825 ++++++++++++++++++ .../TrackerRadioButtonInputProvider.kt | 58 ++ 28 files changed, 2314 insertions(+), 190 deletions(-) create mode 100644 app/src/main/java/org/dhis2/usescases/searchTrackEntity/searchparameters/mapper/ParameterInputModelMapper.kt delete mode 100644 app/src/main/java/org/dhis2/usescases/searchTrackEntity/searchparameters/provider/ParameterSelectorItemProvider.kt create mode 100644 app/src/test/java/org/dhis2/usescases/searchTrackEntity/searchparameters/mapper/ParameterInputModelMapperTest.kt create mode 100644 commonskmm/src/commonMain/kotlin/org/dhis2/mobile/commons/dates/DateTimeInputsUtils.kt create mode 100644 tracker/src/commonMain/kotlin/org/dhis2/tracker/search/ui/provider/ParameterSelectorItemProvider.kt create mode 100644 tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/action/TrackerInputAction.kt create mode 100644 tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/model/TrackerInputModel.kt create mode 100644 tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/model/TrackerInputType.kt create mode 100644 tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/model/TrackerInputUiEvent.kt create mode 100644 tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/model/TrackerOptionSetConfiguration.kt create mode 100644 tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/provider/TrackerAgeInputProvider.kt create mode 100644 tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/provider/TrackerCheckboxInputProvider.kt create mode 100644 tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/provider/TrackerDateTimeProvider.kt create mode 100644 tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/provider/TrackerInputProvider.kt create mode 100644 tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/provider/TrackerRadioButtonInputProvider.kt diff --git a/.editorconfig b/.editorconfig index 9778c7012d1..f706f5dee15 100644 --- a/.editorconfig +++ b/.editorconfig @@ -6,3 +6,4 @@ ktlint_standard_no-wildcard-imports = enabled ktlint_standard_trailing-comma-on-call-site = enabled ktlint_standard_trailing-comma-on-declaration-site = enabled ktlint_standard_import-ordering = enabled +ktlint_experimental_no-unused-imports = enabled diff --git a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryImplKt.kt b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryImplKt.kt index 63daa1aa06b..c1fe2f61fc9 100644 --- a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryImplKt.kt +++ b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryImplKt.kt @@ -24,6 +24,7 @@ import org.dhis2.mobile.commons.customintents.CustomIntentRepository import org.dhis2.mobile.commons.extensions.toColor import org.dhis2.mobile.commons.model.CustomIntentActionTypeModel import org.dhis2.mobile.commons.model.CustomIntentModel +import org.dhis2.tracker.ui.input.action.FieldUid import org.dhis2.usescases.events.EventInfoProvider import org.dhis2.usescases.tracker.TrackedEntityInstanceInfoProvider import org.hisp.dhis.android.core.D2 @@ -432,6 +433,15 @@ class SearchRepositoryImplKt( } } + override suspend fun getCustomIntent(fieldUid: FieldUid) = + withContext(dispatcher.io()) { + customIntentRepository.getCustomIntent( + triggerUid = fieldUid, + orgUnitUid = null, + actionType = CustomIntentActionTypeModel.SEARCH, + ) + } + private fun trackedEntitySearchFields(teiTypeUid: String): List { val teTypeAttributes = d2 diff --git a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryKt.kt b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryKt.kt index 1b57f339c79..d07c0c6130e 100644 --- a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryKt.kt +++ b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryKt.kt @@ -5,6 +5,8 @@ import kotlinx.coroutines.flow.Flow import org.dhis2.data.search.SearchParametersModel import org.dhis2.form.model.FieldUiModel import org.dhis2.maps.model.MapItemModel +import org.dhis2.mobile.commons.model.CustomIntentModel +import org.dhis2.tracker.ui.input.action.FieldUid import org.hisp.dhis.android.core.program.Program import org.hisp.dhis.android.core.trackedentity.search.TrackedEntitySearchItem @@ -38,4 +40,6 @@ interface SearchRepositoryKt { teis: List, selectedProgram: Program?, ): List + + suspend fun getCustomIntent(fieldUid: FieldUid): CustomIntentModel? } diff --git a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEIViewModel.kt b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEIViewModel.kt index 3d645b7f686..9ce14658a12 100644 --- a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEIViewModel.kt +++ b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEIViewModel.kt @@ -45,6 +45,7 @@ import org.dhis2.commons.resources.ResourceManager import org.dhis2.commons.viewmodel.DispatcherProvider import org.dhis2.data.search.SearchParametersModel import org.dhis2.form.model.FieldUiModelImpl +import org.dhis2.form.ui.customintent.CustomIntentResult import org.dhis2.form.ui.intent.FormIntent import org.dhis2.form.ui.provider.DisplayNameProvider import org.dhis2.maps.extensions.toStringProperty @@ -54,6 +55,9 @@ import org.dhis2.maps.managers.MapManager import org.dhis2.maps.usecases.MapStyleConfiguration import org.dhis2.mobile.commons.coroutine.CoroutineTracker import org.dhis2.tracker.NavigationBarUIState +import org.dhis2.tracker.ui.input.action.CustomIntentUid +import org.dhis2.tracker.ui.input.action.FieldUid +import org.dhis2.tracker.ui.input.action.TrackerInputAction import org.dhis2.usescases.searchTrackEntity.listView.SearchResult import org.dhis2.usescases.searchTrackEntity.searchparameters.model.SearchParametersUiState import org.dhis2.usescases.searchTrackEntity.ui.UnableToSearchOutsideData @@ -142,6 +146,9 @@ class SearchTEIViewModel( private val onNewSearch = MutableSharedFlow(extraBufferCapacity = 1) + private val _searchActions = Channel() + val searchActions = _searchActions.receiveAsFlow() + val searchPagingData = onNewSearch .onStart { emit(Unit) } @@ -393,6 +400,7 @@ class SearchTEIViewModel( private fun updateSearchParameters( uid: String, values: List?, + errorMessage: String? = null, ) { val updatedItems = searchParametersUiState.items.map { @@ -406,6 +414,7 @@ class SearchTEIViewModel( optionSet = it.optionSet, periodType = it.periodSelector?.type, ), + error = errorMessage, ) } else { it @@ -446,7 +455,8 @@ class SearchTEIViewModel( ), ) } - searchParametersUiState = searchParametersUiState.copy(searchEnabled = queryData.isNotEmpty()) + searchParametersUiState = + searchParametersUiState.copy(searchEnabled = queryData.isNotEmpty()) } private suspend fun loadSearchResults() = @@ -621,7 +631,8 @@ class SearchTEIViewModel( R.string.search_min_num_attr, minAttributesToSearch, ) - searchParametersUiState = searchParametersUiState.copy(minAttributesMessage = message) + searchParametersUiState = + searchParametersUiState.copy(minAttributesMessage = message) searchParametersUiState.updateMinAttributeWarning(true) setSearchScreen() _refreshData.postValue(Unit) @@ -1175,4 +1186,39 @@ class SearchTEIViewModel( this.layersVisibility = layersVisibility fetchMapResults() } + + fun onLaunchCustomIntent( + fieldUid: FieldUid, + customIntentUid: CustomIntentUid, + ) { + viewModelScope.launch { + searchRepositoryKt.getCustomIntent(fieldUid)?.let { customIntentModel -> + _searchActions.send( + TrackerInputAction.LaunchCustomIntent( + fieldUid = fieldUid, + customIntentModel = customIntentModel, + ), + ) + } + } + } + + fun handleCustomIntentResult(customIntentResult: CustomIntentResult) { + when (customIntentResult) { + is CustomIntentResult.Error -> { + updateSearchParameters( + customIntentResult.fieldUid, + null, + resourceManager.getString(R.string.custom_intent_error), + ) + } + + is CustomIntentResult.Success -> { + updateSearchParameters( + customIntentResult.fieldUid, + listOf(customIntentResult.value), + ) + } + } + } } diff --git a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/searchparameters/SearchParametersScreen.kt b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/searchparameters/SearchParametersScreen.kt index 3189760befc..bd2ab645350 100644 --- a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/searchparameters/SearchParametersScreen.kt +++ b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/searchparameters/SearchParametersScreen.kt @@ -48,12 +48,20 @@ import org.dhis2.commons.resources.ResourceManager import org.dhis2.form.data.scan.ScanContract import org.dhis2.form.model.FieldUiModel import org.dhis2.form.model.FieldUiModelImpl +import org.dhis2.form.ui.customintent.CustomIntentActivityResultContract +import org.dhis2.form.ui.customintent.CustomIntentInput import org.dhis2.form.ui.event.RecyclerViewUiEvents import org.dhis2.form.ui.intent.FormIntent +import org.dhis2.mobile.commons.extensions.ObserveAsEvents import org.dhis2.mobile.commons.orgunit.OrgUnitSelectorScope +import org.dhis2.tracker.search.ui.provider.provideParameterSelectorItem +import org.dhis2.tracker.ui.input.action.CustomIntentUid +import org.dhis2.tracker.ui.input.action.FieldUid +import org.dhis2.tracker.ui.input.action.TrackerInputAction +import org.dhis2.tracker.ui.input.model.TrackerInputUiEvent import org.dhis2.usescases.searchTrackEntity.SearchTEIViewModel +import org.dhis2.usescases.searchTrackEntity.searchparameters.mapper.toParameterInputModel import org.dhis2.usescases.searchTrackEntity.searchparameters.model.SearchParametersUiState -import org.dhis2.usescases.searchTrackEntity.searchparameters.provider.provideParameterSelectorItem import org.hisp.dhis.android.core.common.ValueType import org.hisp.dhis.mobile.ui.designsystem.component.AdditionalInfoItemColor import org.hisp.dhis.mobile.ui.designsystem.component.Button @@ -79,6 +87,7 @@ fun SearchParametersScreen( onSearch: () -> Unit, onClear: () -> Unit, onClose: () -> Unit, + onLaunchCustomIntent: (FieldUid, CustomIntentUid) -> Unit, ) { val snackBarHostState = remember { SnackbarHostState() } val coroutineScope = rememberCoroutineScope() @@ -109,38 +118,7 @@ fun SearchParametersScreen( } override fun recyclerViewUiEvents(uiEvent: RecyclerViewUiEvents) { - when (uiEvent) { - is RecyclerViewUiEvents.OpenOrgUnitDialog -> - onShowOrgUnit( - uiEvent.uid, - uiEvent.value?.let { listOf(it) } ?: emptyList(), - uiEvent.orgUnitSelectorScope ?: OrgUnitSelectorScope.UserSearchScope(), - uiEvent.label, - ) - - is RecyclerViewUiEvents.ScanQRCode -> { - qrScanLauncher.launch( - ScanOptions().apply { - setDesiredBarcodeFormats() - setPrompt("") - setBeepEnabled(true) - setBarcodeImageEnabled(false) - addExtra(Constants.UID, uiEvent.uid) - uiEvent.optionSet?.let { - addExtra( - Constants.OPTION_SET, - uiEvent.optionSet, - ) - } - addExtra(Constants.SCAN_RENDERING_TYPE, uiEvent.renderingType) - }, - ) - } - - else -> { - // no-op - } - } + // no - op } } } @@ -252,16 +230,80 @@ fun SearchParametersScreen( .testTag("SEARCH_PARAM_ITEM"), model = provideParameterSelectorItem( - resources = resourceManager, - focusManager = focusManager, - fieldUiModel = fieldUiModel, - callback = callback, + inputModel = + fieldUiModel.toParameterInputModel( + fetchOptions = { + fieldUiModel.optionSet?.let { optionSetUid -> + intentHandler( + FormIntent.FetchOptions( + uid = fieldUiModel.uid, + optionSetUid = optionSetUid, + value = fieldUiModel.value, + ), + ) + } + }, + resourceManager = resourceManager, + ), + // TODO is this always the same string?, check if it is optional somewhere + helperText = resourceManager.getString(R.string.optional), onNextClicked = { val nextIndex = index + 1 if (nextIndex < uiState.items.size) { uiState.items[nextIndex].onItemClick() } }, + onUiEvent = { uiEvent -> + when (uiEvent) { + is TrackerInputUiEvent.OnScanButtonClicked -> { + qrScanLauncher.launch( + ScanOptions().apply { + setDesiredBarcodeFormats() + setPrompt("") + setBeepEnabled(true) + setBarcodeImageEnabled(false) + addExtra(Constants.UID, uiEvent.uid) + fieldUiModel.optionSet?.let { + addExtra( + Constants.OPTION_SET, + it, + ) + } + addExtra( + Constants.SCAN_RENDERING_TYPE, + fieldUiModel.renderingType, + ) + }, + ) + } + + is TrackerInputUiEvent.OnOrgUnitButtonClicked -> { + onShowOrgUnit( + uiEvent.uid, + uiEvent.value?.let { listOf(it) } + ?: emptyList(), + fieldUiModel.orgUnitSelectorScope + ?: OrgUnitSelectorScope.UserSearchScope(), + uiEvent.label, + ) + } + + is TrackerInputUiEvent.OnLaunchCustomIntent -> { + onLaunchCustomIntent( + uiEvent.uid, + uiEvent.customIntentUid, + ) + } + + is TrackerInputUiEvent.OnItemClick -> { + fieldUiModel.onItemClick() + } + + is TrackerInputUiEvent.OnValueChange -> { + fieldUiModel.onSave(uiEvent.value) + } + } + }, ), ) } @@ -351,6 +393,7 @@ fun SearchFormPreview() { onSearch = {}, onClear = {}, onClose = {}, + onLaunchCustomIntent = { _, _ -> }, ) } @@ -382,6 +425,7 @@ fun SearchFormPreviewWithClear() { onSearch = {}, onClear = {}, onClose = {}, + onLaunchCustomIntent = { _, _ -> }, ) } @@ -404,6 +448,32 @@ fun initSearchScreen( teiTypeUid = teiType, ) composeView.setContent { + val launcher = + rememberLauncherForActivityResult( + contract = CustomIntentActivityResultContract(), + onResult = viewModel::handleCustomIntentResult, + ) + + ObserveAsEvents( + flow = viewModel.searchActions, + ) { action -> + when (action) { + is TrackerInputAction.LaunchCustomIntent -> { + launcher.launch( + with(action) { + CustomIntentInput( + fieldUid = fieldUid, + customIntent = customIntentModel, + defaultTitle = + customIntentModel.name + ?: resources.getString(org.dhis2.form.R.string.select_app_intent), + ) + }, + ) + } + } + } + SearchParametersScreen( resourceManager = resources, uiState = viewModel.searchParametersUiState, @@ -416,6 +486,7 @@ fun initSearchScreen( viewModel.clearFocus() }, onClose = { viewModel.clearFocus() }, + onLaunchCustomIntent = viewModel::onLaunchCustomIntent, ) } } diff --git a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/searchparameters/mapper/ParameterInputModelMapper.kt b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/searchparameters/mapper/ParameterInputModelMapper.kt new file mode 100644 index 00000000000..e98369d5546 --- /dev/null +++ b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/searchparameters/mapper/ParameterInputModelMapper.kt @@ -0,0 +1,204 @@ +package org.dhis2.usescases.searchTrackEntity.searchparameters.mapper + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.derivedStateOf +import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember +import androidx.compose.ui.graphics.Color +import androidx.paging.compose.collectAsLazyPagingItems +import org.dhis2.commons.resources.ResourceManager +import org.dhis2.form.R +import org.dhis2.form.model.FieldUiModel +import org.dhis2.form.model.UiRenderType +import org.dhis2.tracker.ui.input.model.TrackerInputModel +import org.dhis2.tracker.ui.input.model.TrackerInputType +import org.dhis2.tracker.ui.input.model.TrackerOptionItem +import org.dhis2.tracker.ui.input.model.TrackerOptionSetConfiguration +import org.hisp.dhis.android.core.common.ValueType +import org.hisp.dhis.mobile.ui.designsystem.component.LegendData +import org.hisp.dhis.mobile.ui.designsystem.component.Orientation + +@Composable +fun FieldUiModel.toParameterInputModel( + fetchOptions: () -> Unit, + resourceManager: ResourceManager, +): TrackerInputModel { + val trackerInputType = + when { + optionSet != null && valueType != ValueType.MULTI_TEXT -> { + getInputTypeForOptionSetByRenderingType(renderingType) + } + + customIntent != null -> { + TrackerInputType.CUSTOM_INTENT + } + + eventCategories != null -> { + TrackerInputType.NOT_SUPPORTED + } + + else -> getInputTypeByValueType(valueType, renderingType) + } + + return TrackerInputModel( + uid = uid, + label = label, + value = value, + focused = focused, + valueType = trackerInputType, + optionSet = optionSet, + error = error, + warning = warning, + description = description, + mandatory = mandatory, + editable = editable, + legend = + legend?.let { + LegendData( + color = Color(it.color), + title = it.label ?: "", + popUpLegendDescriptionData = it.legendsInfo, + ) + }, + orientation = renderingType.getOrientation(), + optionSetConfiguration = + when (valueType) { + ValueType.BOOLEAN -> getBooleanOptionConfiguration(resourceManager) + else -> optionSetConfiguration?.toTrackerOptionSetConfiguration(fetchOptions) + }, + customIntentUid = customIntent?.uid, + displayName = displayName, + ) +} + +@Composable +private fun org.dhis2.form.model.OptionSetConfiguration.toTrackerOptionSetConfiguration( + fetchOptions: () -> Unit, +): TrackerOptionSetConfiguration { + val optionsData = + optionFlow + .collectAsLazyPagingItems() + .also { LaunchedEffect(this) { it.refresh() } } + + val options by remember { + derivedStateOf { + (0 until (optionsData.itemCount)).mapNotNull { index -> + optionsData[index]?.let { optionData -> + TrackerOptionItem( + code = optionData.option.code() ?: "", + displayName = optionData.option.displayName() ?: "", + ) + } + } + } + } + + return TrackerOptionSetConfiguration( + options = options, + onSearch = onSearch, + onLoadOptions = fetchOptions, + ) +} + +internal fun getInputTypeForOptionSetByRenderingType(renderingType: UiRenderType?): TrackerInputType = + when (renderingType) { + UiRenderType.HORIZONTAL_RADIOBUTTONS, + UiRenderType.VERTICAL_RADIOBUTTONS, + -> TrackerInputType.RADIO_BUTTON + + UiRenderType.HORIZONTAL_CHECKBOXES, + UiRenderType.VERTICAL_CHECKBOXES, + -> TrackerInputType.CHECKBOX + + UiRenderType.MATRIX -> TrackerInputType.MATRIX + + UiRenderType.SEQUENCIAL -> TrackerInputType.SEQUENTIAL + + else -> TrackerInputType.DROPDOWN + } + +internal fun getInputTypeByValueType( + valueType: ValueType?, + renderingType: UiRenderType?, +): TrackerInputType = + when (valueType) { + ValueType.TEXT -> { + when (renderingType) { + UiRenderType.QR_CODE, UiRenderType.GS1_DATAMATRIX -> TrackerInputType.QR_CODE + UiRenderType.BAR_CODE -> TrackerInputType.BAR_CODE + else -> TrackerInputType.TEXT + } + } + + ValueType.INTEGER_POSITIVE -> TrackerInputType.INTEGER_POSITIVE + ValueType.INTEGER_ZERO_OR_POSITIVE -> TrackerInputType.INTEGER_ZERO_OR_POSITIVE + ValueType.PERCENTAGE -> TrackerInputType.PERCENTAGE + ValueType.NUMBER -> TrackerInputType.NUMBER + ValueType.INTEGER_NEGATIVE -> TrackerInputType.INTEGER_NEGATIVE + ValueType.LONG_TEXT -> TrackerInputType.LONG_TEXT + ValueType.INTEGER -> TrackerInputType.INTEGER + ValueType.ORGANISATION_UNIT -> TrackerInputType.ORGANISATION_UNIT + ValueType.EMAIL -> TrackerInputType.EMAIL + ValueType.BOOLEAN -> { + when (renderingType) { + UiRenderType.HORIZONTAL_CHECKBOXES, + UiRenderType.VERTICAL_CHECKBOXES, + -> TrackerInputType.CHECKBOX + + else -> TrackerInputType.RADIO_BUTTON + } + } + + ValueType.TRUE_ONLY -> { + when (renderingType) { + UiRenderType.TOGGLE -> TrackerInputType.YES_ONLY_SWITCH + else -> TrackerInputType.YES_ONLY_CHECKBOX + } + } + + ValueType.PHONE_NUMBER -> TrackerInputType.PHONE_NUMBER + ValueType.DATE -> TrackerInputType.DATE + ValueType.DATETIME -> TrackerInputType.DATE_TIME + ValueType.TIME -> TrackerInputType.TIME + + ValueType.AGE -> TrackerInputType.AGE + ValueType.MULTI_TEXT -> TrackerInputType.MULTI_SELECTION + + ValueType.USERNAME, + ValueType.LETTER, + ValueType.UNIT_INTERVAL, + ValueType.TRACKER_ASSOCIATE, + ValueType.REFERENCE, + ValueType.COORDINATE, + ValueType.IMAGE, + ValueType.FILE_RESOURCE, + ValueType.GEOJSON, + ValueType.URL, + null, + -> TrackerInputType.NOT_SUPPORTED + } + +internal fun UiRenderType?.getOrientation(): Orientation = + when (this) { + UiRenderType.HORIZONTAL_CHECKBOXES, + UiRenderType.HORIZONTAL_RADIOBUTTONS, + -> Orientation.HORIZONTAL + + else -> Orientation.VERTICAL + } + +internal fun getBooleanOptionConfiguration(resourceManager: ResourceManager) = + TrackerOptionSetConfiguration( + options = + listOf( + TrackerOptionItem( + true.toString(), + resourceManager.getString(R.string.yes), + ), + TrackerOptionItem( + false.toString(), + resourceManager.getString(R.string.no), + ), + ), + ) diff --git a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/searchparameters/provider/ParameterSelectorItemProvider.kt b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/searchparameters/provider/ParameterSelectorItemProvider.kt deleted file mode 100644 index 1709f044e45..00000000000 --- a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/searchparameters/provider/ParameterSelectorItemProvider.kt +++ /dev/null @@ -1,138 +0,0 @@ -package org.dhis2.usescases.searchTrackEntity.searchparameters.provider - -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.outlined.AddCircleOutline -import androidx.compose.material.icons.outlined.QrCode2 -import androidx.compose.material3.Icon -import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.remember -import androidx.compose.ui.Modifier -import androidx.compose.ui.focus.FocusManager -import androidx.compose.ui.focus.FocusRequester -import androidx.compose.ui.focus.focusRequester -import org.dhis2.R -import org.dhis2.commons.resources.ResourceManager -import org.dhis2.form.model.FieldUiModel -import org.dhis2.form.model.UiRenderType -import org.dhis2.form.ui.event.RecyclerViewUiEvents -import org.dhis2.form.ui.provider.inputfield.FieldProvider -import org.hisp.dhis.android.core.common.ValueType -import org.hisp.dhis.mobile.ui.designsystem.component.InputStyle -import org.hisp.dhis.mobile.ui.designsystem.component.parameter.model.ParameterSelectorItemModel -import org.hisp.dhis.mobile.ui.designsystem.resource.provideDHIS2Icon -import org.hisp.dhis.mobile.ui.designsystem.theme.SurfaceColor - -@Composable -fun provideParameterSelectorItem( - resources: ResourceManager, - focusManager: FocusManager, - fieldUiModel: FieldUiModel, - callback: FieldUiModel.Callback, - onNextClicked: () -> Unit, -): ParameterSelectorItemModel { - val focusRequester = remember { FocusRequester() } - - val status = - if (fieldUiModel.focused) { - ParameterSelectorItemModel.Status.FOCUSED - } else if (fieldUiModel.value.isNullOrEmpty()) { - ParameterSelectorItemModel.Status.CLOSED - } else { - ParameterSelectorItemModel.Status.UNFOCUSED - } - - LaunchedEffect(key1 = status) { - if (status == ParameterSelectorItemModel.Status.FOCUSED) { - focusRequester.requestFocus() - } - } - - return ParameterSelectorItemModel( - icon = { ProvideIcon(fieldUiModel.valueType, fieldUiModel.renderingType) }, - label = fieldUiModel.label, - helper = resources.getString(R.string.optional), - inputField = { - FieldProvider( - modifier = - Modifier - .focusRequester(focusRequester), - inputStyle = InputStyle.ParameterInputStyle(), - fieldUiModel = fieldUiModel, - uiEventHandler = callback::recyclerViewUiEvents, - intentHandler = callback::intent, - resources = resources, - focusManager = focusManager, - onNextClicked = onNextClicked, - onFileSelected = { - // Not supported for search - }, - reEvaluateCustomIntentRequestParameters = false, - ) - }, - status = status, - onExpand = { - performOnExpandActions(fieldUiModel, callback) - }, - ) -} - -private fun performOnExpandActions( - fieldUiModel: FieldUiModel, - callback: FieldUiModel.Callback, -) { - fieldUiModel.onItemClick() - - if (fieldUiModel.renderingType == UiRenderType.QR_CODE || - fieldUiModel.renderingType == UiRenderType.BAR_CODE - ) { - callback.recyclerViewUiEvents( - RecyclerViewUiEvents.ScanQRCode( - uid = fieldUiModel.uid, - optionSet = fieldUiModel.optionSet, - renderingType = fieldUiModel.renderingType, - ), - ) - } -} - -@Composable -private fun ProvideIcon( - valueType: ValueType?, - renderingType: UiRenderType?, -) = when (valueType) { - ValueType.TEXT -> { - when (renderingType) { - UiRenderType.QR_CODE, UiRenderType.GS1_DATAMATRIX -> { - Icon( - imageVector = Icons.Outlined.QrCode2, - contentDescription = "Icon Button", - tint = SurfaceColor.Primary, - ) - } - - UiRenderType.BAR_CODE -> { - Icon( - painter = provideDHIS2Icon("material_barcode_scanner"), - contentDescription = "Icon Button", - tint = SurfaceColor.Primary, - ) - } - - else -> { - Icon( - imageVector = Icons.Outlined.AddCircleOutline, - contentDescription = "Icon Button", - tint = SurfaceColor.Primary, - ) - } - } - } - - else -> - Icon( - imageVector = Icons.Outlined.AddCircleOutline, - contentDescription = "Icon Button", - tint = SurfaceColor.Primary, - ) -} diff --git a/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchTEIViewModelTest.kt b/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchTEIViewModelTest.kt index 546d952cbd0..c101623c935 100644 --- a/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchTEIViewModelTest.kt +++ b/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchTEIViewModelTest.kt @@ -26,10 +26,13 @@ import org.dhis2.commons.viewmodel.DispatcherProvider import org.dhis2.data.search.SearchParametersModel import org.dhis2.form.model.FieldUiModel import org.dhis2.form.model.FieldUiModelImpl +import org.dhis2.form.ui.customintent.CustomIntentResult import org.dhis2.form.ui.intent.FormIntent import org.dhis2.form.ui.provider.DisplayNameProvider import org.dhis2.maps.geometry.mapper.EventsByProgramStage import org.dhis2.maps.usecases.MapStyleConfiguration +import org.dhis2.mobile.commons.model.CustomIntentModel +import org.dhis2.tracker.ui.input.action.TrackerInputAction import org.dhis2.usescases.searchTrackEntity.listView.SearchResult.SearchResultType import org.dhis2.utils.customviews.navigationbar.NavigationPage import org.hisp.dhis.android.core.common.ValueType @@ -48,7 +51,6 @@ import org.mockito.kotlin.mock import org.mockito.kotlin.times import org.mockito.kotlin.verify import org.mockito.kotlin.whenever -import kotlin.text.get @OptIn(ExperimentalCoroutinesApi::class) class SearchTEIViewModelTest { @@ -717,7 +719,8 @@ class SearchTEIViewModelTest { @Test fun `should return user-friendly names on search parameters fields`() { - viewModel.searchParametersUiState = viewModel.searchParametersUiState.copy(items = getFieldUIModels()) + viewModel.searchParametersUiState = + viewModel.searchParametersUiState.copy(items = getFieldUIModels()) val expectedMap = mapOf( "uid1" to "Friendly OrgUnit Name", @@ -737,7 +740,8 @@ class SearchTEIViewModelTest { @Test fun `should clear uiState when clearing data`() { - viewModel.searchParametersUiState = viewModel.searchParametersUiState.copy(items = getFieldUIModels()) + viewModel.searchParametersUiState = + viewModel.searchParametersUiState.copy(items = getFieldUIModels()) performSearch() viewModel.clearQueryData() assert(viewModel.queryData.isEmpty()) @@ -747,7 +751,8 @@ class SearchTEIViewModelTest { @Test fun `should return date without format`() { - viewModel.searchParametersUiState = viewModel.searchParametersUiState.copy(items = getMalformedDateFieldUIModels()) + viewModel.searchParametersUiState = + viewModel.searchParametersUiState.copy(items = getMalformedDateFieldUIModels()) val expectedMap = mapOf( "uid1" to "04", @@ -863,6 +868,72 @@ class SearchTEIViewModelTest { ) } + @Test + fun `should send launch custom intent action`() = + runTest { + val customIntentModel: CustomIntentModel = mock() + whenever(repositoryKt.getCustomIntent(any())) doReturn customIntentModel + viewModel.searchActions.test { + viewModel.onLaunchCustomIntent("fieldUid", "customIntentUid") + assertTrue(awaitItem() is TrackerInputAction.LaunchCustomIntent) + } + } + + @Test + fun `should set error if custom intent result is error`() { + whenever(resourceManager.getString(R.string.custom_intent_error)) doReturn "Custom intent error message" + viewModel.searchParametersUiState = + viewModel.searchParametersUiState.copy(items = customIntentFieldUIModels()) + viewModel.handleCustomIntentResult( + CustomIntentResult.Error("fieldUid"), + ) + assertTrue( + viewModel.searchParametersUiState.items + .first() + .error != null, + ) + } + + @Test + fun `should update values if custom intent result is successful`() = + runTest { + viewModel.searchParametersUiState = + viewModel.searchParametersUiState.copy(items = customIntentFieldUIModels()) + viewModel.handleCustomIntentResult( + CustomIntentResult.Success("fieldUid", "customValue"), + ) + assertTrue( + viewModel.searchParametersUiState.items + .first() + .error == null, + ) + assertTrue( + viewModel.searchParametersUiState.items + .first() + .value == "customValue", + ) + } + + private fun customIntentFieldUIModels() = + listOf( + FieldUiModelImpl( + uid = "fieldUid", + label = "CustomIntent", + value = null, + autocompleteList = emptyList(), + optionSetConfiguration = null, + customIntent = + CustomIntentModel( + uid = "customIntentUid", + name = "test", + packageName = "test.test.test", + customIntentRequest = listOf(), + customIntentResponse = listOf(), + ), + valueType = ValueType.TEXT, + ), + ) + private fun getMalformedDateFieldUIModels(): List = listOf( FieldUiModelImpl( diff --git a/app/src/test/java/org/dhis2/usescases/searchTrackEntity/searchparameters/mapper/ParameterInputModelMapperTest.kt b/app/src/test/java/org/dhis2/usescases/searchTrackEntity/searchparameters/mapper/ParameterInputModelMapperTest.kt new file mode 100644 index 00000000000..401655d54b2 --- /dev/null +++ b/app/src/test/java/org/dhis2/usescases/searchTrackEntity/searchparameters/mapper/ParameterInputModelMapperTest.kt @@ -0,0 +1,334 @@ +package org.dhis2.usescases.searchTrackEntity.searchparameters.mapper + +import org.dhis2.commons.resources.ResourceManager +import org.dhis2.form.R +import org.dhis2.form.model.UiRenderType +import org.dhis2.tracker.ui.input.model.TrackerInputType +import org.hisp.dhis.android.core.common.ValueType +import org.hisp.dhis.mobile.ui.designsystem.component.Orientation +import org.junit.Assert.assertEquals +import org.junit.Before +import org.junit.Test +import org.mockito.kotlin.doReturn +import org.mockito.kotlin.mock +import org.mockito.kotlin.whenever + +class ParameterInputModelMapperTest { + private val resourceManager: ResourceManager = mock() + + @Before + fun setUp() { + whenever(resourceManager.getString(R.string.yes)) doReturn "Yes" + whenever(resourceManager.getString(R.string.no)) doReturn "No" + } + + // Test getInputTypeForOptionSetByRenderingType + @Test + fun `should return RADIO_BUTTON for horizontal radio buttons rendering type`() { + val result = getInputTypeForOptionSetByRenderingType(UiRenderType.HORIZONTAL_RADIOBUTTONS) + assertEquals(TrackerInputType.RADIO_BUTTON, result) + } + + @Test + fun `should return RADIO_BUTTON for vertical radio buttons rendering type`() { + val result = getInputTypeForOptionSetByRenderingType(UiRenderType.VERTICAL_RADIOBUTTONS) + assertEquals(TrackerInputType.RADIO_BUTTON, result) + } + + @Test + fun `should return CHECKBOX for horizontal checkboxes rendering type`() { + val result = getInputTypeForOptionSetByRenderingType(UiRenderType.HORIZONTAL_CHECKBOXES) + assertEquals(TrackerInputType.CHECKBOX, result) + } + + @Test + fun `should return CHECKBOX for vertical checkboxes rendering type`() { + val result = getInputTypeForOptionSetByRenderingType(UiRenderType.VERTICAL_CHECKBOXES) + assertEquals(TrackerInputType.CHECKBOX, result) + } + + @Test + fun `should return MATRIX for matrix rendering type`() { + val result = getInputTypeForOptionSetByRenderingType(UiRenderType.MATRIX) + assertEquals(TrackerInputType.MATRIX, result) + } + + @Test + fun `should return SEQUENTIAL for sequential rendering type`() { + val result = getInputTypeForOptionSetByRenderingType(UiRenderType.SEQUENCIAL) + assertEquals(TrackerInputType.SEQUENTIAL, result) + } + + @Test + fun `should return DROPDOWN for null rendering type`() { + val result = getInputTypeForOptionSetByRenderingType(null) + assertEquals(TrackerInputType.DROPDOWN, result) + } + + @Test + fun `should return DROPDOWN for default rendering type`() { + val result = getInputTypeForOptionSetByRenderingType(UiRenderType.DEFAULT) + assertEquals(TrackerInputType.DROPDOWN, result) + } + + // Test getInputTypeByValueType for TEXT + @Test + fun `should return TEXT for TEXT value type with default rendering`() { + val result = getInputTypeByValueType(ValueType.TEXT, null) + assertEquals(TrackerInputType.TEXT, result) + } + + @Test + fun `should return QR_CODE for TEXT value type with QR_CODE rendering`() { + val result = getInputTypeByValueType(ValueType.TEXT, UiRenderType.QR_CODE) + assertEquals(TrackerInputType.QR_CODE, result) + } + + @Test + fun `should return QR_CODE for TEXT value type with GS1_DATAMATRIX rendering`() { + val result = getInputTypeByValueType(ValueType.TEXT, UiRenderType.GS1_DATAMATRIX) + assertEquals(TrackerInputType.QR_CODE, result) + } + + @Test + fun `should return BAR_CODE for TEXT value type with BAR_CODE rendering`() { + val result = getInputTypeByValueType(ValueType.TEXT, UiRenderType.BAR_CODE) + assertEquals(TrackerInputType.BAR_CODE, result) + } + + // Test getInputTypeByValueType for numeric types + @Test + fun `should return INTEGER_POSITIVE for INTEGER_POSITIVE value type`() { + val result = getInputTypeByValueType(ValueType.INTEGER_POSITIVE, null) + assertEquals(TrackerInputType.INTEGER_POSITIVE, result) + } + + @Test + fun `should return INTEGER_ZERO_OR_POSITIVE for INTEGER_ZERO_OR_POSITIVE value type`() { + val result = getInputTypeByValueType(ValueType.INTEGER_ZERO_OR_POSITIVE, null) + assertEquals(TrackerInputType.INTEGER_ZERO_OR_POSITIVE, result) + } + + @Test + fun `should return PERCENTAGE for PERCENTAGE value type`() { + val result = getInputTypeByValueType(ValueType.PERCENTAGE, null) + assertEquals(TrackerInputType.PERCENTAGE, result) + } + + @Test + fun `should return NUMBER for NUMBER value type`() { + val result = getInputTypeByValueType(ValueType.NUMBER, null) + assertEquals(TrackerInputType.NUMBER, result) + } + + @Test + fun `should return INTEGER_NEGATIVE for INTEGER_NEGATIVE value type`() { + val result = getInputTypeByValueType(ValueType.INTEGER_NEGATIVE, null) + assertEquals(TrackerInputType.INTEGER_NEGATIVE, result) + } + + @Test + fun `should return INTEGER for INTEGER value type`() { + val result = getInputTypeByValueType(ValueType.INTEGER, null) + assertEquals(TrackerInputType.INTEGER, result) + } + + // Test getInputTypeByValueType for text types + @Test + fun `should return LONG_TEXT for LONG_TEXT value type`() { + val result = getInputTypeByValueType(ValueType.LONG_TEXT, null) + assertEquals(TrackerInputType.LONG_TEXT, result) + } + + @Test + fun `should return EMAIL for EMAIL value type`() { + val result = getInputTypeByValueType(ValueType.EMAIL, null) + assertEquals(TrackerInputType.EMAIL, result) + } + + @Test + fun `should return PHONE_NUMBER for PHONE_NUMBER value type`() { + val result = getInputTypeByValueType(ValueType.PHONE_NUMBER, null) + assertEquals(TrackerInputType.PHONE_NUMBER, result) + } + + // Test getInputTypeByValueType for BOOLEAN + @Test + fun `should return RADIO_BUTTON for BOOLEAN value type with default rendering`() { + val result = getInputTypeByValueType(ValueType.BOOLEAN, null) + assertEquals(TrackerInputType.RADIO_BUTTON, result) + } + + @Test + fun `should return CHECKBOX for BOOLEAN value type with horizontal checkboxes rendering`() { + val result = getInputTypeByValueType(ValueType.BOOLEAN, UiRenderType.HORIZONTAL_CHECKBOXES) + assertEquals(TrackerInputType.CHECKBOX, result) + } + + @Test + fun `should return CHECKBOX for BOOLEAN value type with vertical checkboxes rendering`() { + val result = getInputTypeByValueType(ValueType.BOOLEAN, UiRenderType.VERTICAL_CHECKBOXES) + assertEquals(TrackerInputType.CHECKBOX, result) + } + + // Test getInputTypeByValueType for TRUE_ONLY + @Test + fun `should return YES_ONLY_CHECKBOX for TRUE_ONLY value type with default rendering`() { + val result = getInputTypeByValueType(ValueType.TRUE_ONLY, null) + assertEquals(TrackerInputType.YES_ONLY_CHECKBOX, result) + } + + @Test + fun `should return YES_ONLY_SWITCH for TRUE_ONLY value type with toggle rendering`() { + val result = getInputTypeByValueType(ValueType.TRUE_ONLY, UiRenderType.TOGGLE) + assertEquals(TrackerInputType.YES_ONLY_SWITCH, result) + } + + // Test getInputTypeByValueType for date/time types + @Test + fun `should return DATE for DATE value type`() { + val result = getInputTypeByValueType(ValueType.DATE, null) + assertEquals(TrackerInputType.DATE, result) + } + + @Test + fun `should return DATE_TIME for DATETIME value type`() { + val result = getInputTypeByValueType(ValueType.DATETIME, null) + assertEquals(TrackerInputType.DATE_TIME, result) + } + + @Test + fun `should return TIME for TIME value type`() { + val result = getInputTypeByValueType(ValueType.TIME, null) + assertEquals(TrackerInputType.TIME, result) + } + + @Test + fun `should return AGE for AGE value type`() { + val result = getInputTypeByValueType(ValueType.AGE, null) + assertEquals(TrackerInputType.AGE, result) + } + + // Test getInputTypeByValueType for other supported types + @Test + fun `should return ORGANISATION_UNIT for ORGANISATION_UNIT value type`() { + val result = getInputTypeByValueType(ValueType.ORGANISATION_UNIT, null) + assertEquals(TrackerInputType.ORGANISATION_UNIT, result) + } + + @Test + fun `should return MULTI_SELECTION for MULTI_TEXT value type`() { + val result = getInputTypeByValueType(ValueType.MULTI_TEXT, null) + assertEquals(TrackerInputType.MULTI_SELECTION, result) + } + + // Test getInputTypeByValueType for NOT_SUPPORTED types + @Test + fun `should return NOT_SUPPORTED for USERNAME value type`() { + val result = getInputTypeByValueType(ValueType.USERNAME, null) + assertEquals(TrackerInputType.NOT_SUPPORTED, result) + } + + @Test + fun `should return NOT_SUPPORTED for LETTER value type`() { + val result = getInputTypeByValueType(ValueType.LETTER, null) + assertEquals(TrackerInputType.NOT_SUPPORTED, result) + } + + @Test + fun `should return NOT_SUPPORTED for UNIT_INTERVAL value type`() { + val result = getInputTypeByValueType(ValueType.UNIT_INTERVAL, null) + assertEquals(TrackerInputType.NOT_SUPPORTED, result) + } + + @Test + fun `should return NOT_SUPPORTED for TRACKER_ASSOCIATE value type`() { + val result = getInputTypeByValueType(ValueType.TRACKER_ASSOCIATE, null) + assertEquals(TrackerInputType.NOT_SUPPORTED, result) + } + + @Test + fun `should return NOT_SUPPORTED for REFERENCE value type`() { + val result = getInputTypeByValueType(ValueType.REFERENCE, null) + assertEquals(TrackerInputType.NOT_SUPPORTED, result) + } + + @Test + fun `should return NOT_SUPPORTED for COORDINATE value type`() { + val result = getInputTypeByValueType(ValueType.COORDINATE, null) + assertEquals(TrackerInputType.NOT_SUPPORTED, result) + } + + @Test + fun `should return NOT_SUPPORTED for IMAGE value type`() { + val result = getInputTypeByValueType(ValueType.IMAGE, null) + assertEquals(TrackerInputType.NOT_SUPPORTED, result) + } + + @Test + fun `should return NOT_SUPPORTED for FILE_RESOURCE value type`() { + val result = getInputTypeByValueType(ValueType.FILE_RESOURCE, null) + assertEquals(TrackerInputType.NOT_SUPPORTED, result) + } + + @Test + fun `should return NOT_SUPPORTED for GEOJSON value type`() { + val result = getInputTypeByValueType(ValueType.GEOJSON, null) + assertEquals(TrackerInputType.NOT_SUPPORTED, result) + } + + @Test + fun `should return NOT_SUPPORTED for URL value type`() { + val result = getInputTypeByValueType(ValueType.URL, null) + assertEquals(TrackerInputType.NOT_SUPPORTED, result) + } + + @Test + fun `should return NOT_SUPPORTED for null value type`() { + val result = getInputTypeByValueType(null, null) + assertEquals(TrackerInputType.NOT_SUPPORTED, result) + } + + // Test getOrientation + @Test + fun `should return HORIZONTAL for horizontal checkboxes rendering type`() { + val result = UiRenderType.HORIZONTAL_CHECKBOXES.getOrientation() + assertEquals(Orientation.HORIZONTAL, result) + } + + @Test + fun `should return HORIZONTAL for horizontal radio buttons rendering type`() { + val result = UiRenderType.HORIZONTAL_RADIOBUTTONS.getOrientation() + assertEquals(Orientation.HORIZONTAL, result) + } + + @Test + fun `should return VERTICAL for vertical checkboxes rendering type`() { + val result = UiRenderType.VERTICAL_CHECKBOXES.getOrientation() + assertEquals(Orientation.VERTICAL, result) + } + + @Test + fun `should return VERTICAL for null rendering type`() { + val result = (null as UiRenderType?).getOrientation() + assertEquals(Orientation.VERTICAL, result) + } + + @Test + fun `should return VERTICAL for default rendering type`() { + val result = UiRenderType.DEFAULT.getOrientation() + assertEquals(Orientation.VERTICAL, result) + } + + // Test getBooleanOptionConfiguration + @Test + fun `should return correct boolean option configuration`() { + val result = getBooleanOptionConfiguration(resourceManager) + + assertEquals(2, result.options.size) + assertEquals("true", result.options[0].code) + assertEquals("Yes", result.options[0].displayName) + assertEquals("false", result.options[1].code) + assertEquals("No", result.options[1].displayName) + } +} diff --git a/commonskmm/build.gradle.kts b/commonskmm/build.gradle.kts index 110b39f9280..1d9c1cc2f75 100644 --- a/commonskmm/build.gradle.kts +++ b/commonskmm/build.gradle.kts @@ -101,7 +101,7 @@ kotlin { } compose.resources { - publicResClass = false + publicResClass = true packageOfResClass = "org.dhis2.mobile.commons.resources" generateResClass = always } diff --git a/commonskmm/src/commonMain/composeResources/values/strings.xml b/commonskmm/src/commonMain/composeResources/values/strings.xml index 950703d6ec7..2503658a720 100644 --- a/commonskmm/src/commonMain/composeResources/values/strings.xml +++ b/commonskmm/src/commonMain/composeResources/values/strings.xml @@ -212,5 +212,10 @@ + OR + AGE + DATE OF BIRTH + Cancel + OK \ No newline at end of file diff --git a/commonskmm/src/commonMain/kotlin/org/dhis2/mobile/commons/dates/DateTimeInputsUtils.kt b/commonskmm/src/commonMain/kotlin/org/dhis2/mobile/commons/dates/DateTimeInputsUtils.kt new file mode 100644 index 00000000000..402504b738e --- /dev/null +++ b/commonskmm/src/commonMain/kotlin/org/dhis2/mobile/commons/dates/DateTimeInputsUtils.kt @@ -0,0 +1,94 @@ +package org.dhis2.mobile.commons.dates + +import kotlinx.datetime.DateTimeUnit +import kotlinx.datetime.LocalDate +import kotlinx.datetime.TimeZone +import kotlinx.datetime.daysUntil +import kotlinx.datetime.minus +import kotlinx.datetime.number +import kotlinx.datetime.periodUntil +import kotlinx.datetime.todayIn +import kotlin.time.Clock +import kotlin.time.ExperimentalTime + +/** + * Calculates a date from an age value and time unit + * Uses kotlinx.datetime for date arithmetic + * @param ageValue The age value as an integer + * @param timeUnit The time unit (years, months, or days) - expects string values: "YEARS", "MONTHS", "DAYS" + * @return The calculated date in yyyy-MM-dd format, or null if calculation fails + */ +@OptIn(ExperimentalTime::class) +fun calculateDateFromAge( + ageValue: String, + timeUnit: String, +): String? { + return try { + val today = + Clock.System + .todayIn(TimeZone.currentSystemDefault()) + + val calculatedDate = + when (timeUnit) { + "YEARS" -> today.minus(ageValue.toInt(), DateTimeUnit.YEAR) + "MONTHS" -> today.minus(ageValue.toInt(), DateTimeUnit.MONTH) + "DAYS" -> today.minus(ageValue.toInt(), DateTimeUnit.DAY) + else -> return null + } + + calculatedDate.toString() + } catch (_: Exception) { + null + } +} + +/** + * Calculates age from a date string based on the specified time unit + * Uses kotlinx.datetime for period calculations + * @param dateString The birth date in yyyy-MM-dd format + * @param timeUnit The time unit to calculate age in - expects string values: "YEARS", "MONTHS", "DAYS" + * @return The calculated age as a string, or null if calculation fails + */ +@OptIn(ExperimentalTime::class) +fun calculateAgeFromDate( + dateString: String, + timeUnit: String, +): String? = + try { + val birthDate = LocalDate.parse(dateString) + val today = + Clock.System + .todayIn(TimeZone.currentSystemDefault()) + + when (timeUnit) { + "YEARS" -> { + val period = birthDate.periodUntil(today) + period.years.toString() + } + "MONTHS" -> { + monthsBetween(birthDate, today).toString() + } + "DAYS" -> { + birthDate.daysUntil(today).toString() + } + else -> null + } + } catch (_: Exception) { + null + } + +/** + * Calculates the number of months between two dates + * Uses kotlinx.datetime for accurate month calculations + * @param startDate The start date + * @param endDate The end date + * @return The number of months between the two dates + */ +fun monthsBetween( + startDate: LocalDate, + endDate: LocalDate, +): Int { + val startDateTotalMonths = 12 * startDate.year + startDate.month.number + val endDateTotalMonths = 12 * endDate.year + endDate.month.number + return endDateTotalMonths - startDateTotalMonths +} diff --git a/form/src/main/java/org/dhis2/form/ui/provider/inputfield/CustomIntentProvider.kt b/form/src/main/java/org/dhis2/form/ui/provider/inputfield/CustomIntentProvider.kt index 049b901e3df..47177937c8c 100644 --- a/form/src/main/java/org/dhis2/form/ui/provider/inputfield/CustomIntentProvider.kt +++ b/form/src/main/java/org/dhis2/form/ui/provider/inputfield/CustomIntentProvider.kt @@ -9,7 +9,7 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.runtime.snapshots.SnapshotStateList import androidx.compose.ui.Modifier -import org.dhis2.commons.resources.ResourceManager +import androidx.compose.ui.res.stringResource import org.dhis2.form.R import org.dhis2.form.extensions.inputState import org.dhis2.form.extensions.supportingText @@ -29,7 +29,6 @@ import org.hisp.dhis.mobile.ui.designsystem.component.SupportingTextState @Composable fun ProvideCustomIntentInput( fieldUiModel: FieldUiModel, - resources: ResourceManager, intentHandler: (FormIntent) -> Unit, uiEventHandler: (RecyclerViewUiEvents) -> Unit, inputStyle: InputStyle, @@ -48,7 +47,7 @@ fun ProvideCustomIntentInput( val errorGettingDataMessage = SupportingTextData( state = SupportingTextState.ERROR, - text = resources.getString(R.string.custom_intent_error), + text = stringResource(R.string.custom_intent_error), ) val fieldErrorMessage = SupportingTextData( @@ -86,9 +85,10 @@ fun ProvideCustomIntentInput( } } } + val defaultLauncherTitle = stringResource(R.string.select_app_intent) InputCustomIntent( title = fieldUiModel.label, - buttonText = resources.getString(R.string.custom_intent_launch), + buttonText = stringResource(R.string.custom_intent_launch), supportingText = supportingTextList.toList(), inputShellState = inputShellState, inputStyle = inputStyle, @@ -108,12 +108,12 @@ fun ProvideCustomIntentInput( if (supportingTextList.contains(errorGettingDataMessage)) { supportingTextList.remove(errorGettingDataMessage) } - fieldUiModel.customIntent?.let { + fieldUiModel.customIntent?.let { customIntent -> launcher.launch( CustomIntentInput( fieldUid = fieldUiModel.uid, - customIntent = it, - defaultTitle = fieldUiModel.customIntent?.name ?: resources.getString(R.string.select_app_intent), + customIntent = customIntent, + defaultTitle = customIntent.name ?: defaultLauncherTitle, ), ) } diff --git a/form/src/main/java/org/dhis2/form/ui/provider/inputfield/FieldProvider.kt b/form/src/main/java/org/dhis2/form/ui/provider/inputfield/FieldProvider.kt index 27ba6a2ee2b..0b39ebef224 100644 --- a/form/src/main/java/org/dhis2/form/ui/provider/inputfield/FieldProvider.kt +++ b/form/src/main/java/org/dhis2/form/ui/provider/inputfield/FieldProvider.kt @@ -130,7 +130,6 @@ fun FieldProvider( fieldUiModel = fieldUiModel, intentHandler = intentHandler, uiEventHandler = uiEventHandler, - resources = resources, inputStyle = inputStyle, reEvaluateRequestParams = reEvaluateCustomIntentRequestParameters, modifier = modifierWithFocus, diff --git a/tracker/src/commonMain/composeResources/values-cs/strings.xml b/tracker/src/commonMain/composeResources/values-cs/strings.xml index 6360fc3ac40..0e2b324281e 100644 --- a/tracker/src/commonMain/composeResources/values-cs/strings.xml +++ b/tracker/src/commonMain/composeResources/values-cs/strings.xml @@ -17,4 +17,6 @@ Vymazat hledání Hledat Volitelný + Spustit + \ No newline at end of file diff --git a/tracker/src/commonMain/composeResources/values-zh/strings.xml b/tracker/src/commonMain/composeResources/values-zh/strings.xml index e9bd51827e4..3d55157830f 100644 --- a/tracker/src/commonMain/composeResources/values-zh/strings.xml +++ b/tracker/src/commonMain/composeResources/values-zh/strings.xml @@ -17,5 +17,6 @@ 清除搜索 搜索 可选项描述 + 启动 \ No newline at end of file diff --git a/tracker/src/commonMain/composeResources/values/strings.xml b/tracker/src/commonMain/composeResources/values/strings.xml index a716e26fc62..3cbc1bb369b 100644 --- a/tracker/src/commonMain/composeResources/values/strings.xml +++ b/tracker/src/commonMain/composeResources/values/strings.xml @@ -18,5 +18,6 @@ Clear search Search Optional + Launch \ No newline at end of file diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/ui/provider/ParameterSelectorItemProvider.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/ui/provider/ParameterSelectorItemProvider.kt new file mode 100644 index 00000000000..20637114a78 --- /dev/null +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/ui/provider/ParameterSelectorItemProvider.kt @@ -0,0 +1,87 @@ +package org.dhis2.tracker.search.ui.provider + +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.AddCircleOutline +import androidx.compose.material.icons.outlined.QrCode2 +import androidx.compose.material3.Icon +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import org.dhis2.tracker.ui.input.model.TrackerInputModel +import org.dhis2.tracker.ui.input.model.TrackerInputType +import org.dhis2.tracker.ui.input.model.TrackerInputUiEvent +import org.dhis2.tracker.ui.input.provider.TrackerInputProvider +import org.hisp.dhis.mobile.ui.designsystem.component.InputStyle +import org.hisp.dhis.mobile.ui.designsystem.component.parameter.model.ParameterSelectorItemModel +import org.hisp.dhis.mobile.ui.designsystem.resource.provideDHIS2Icon +import org.hisp.dhis.mobile.ui.designsystem.theme.SurfaceColor + +@Composable +fun provideParameterSelectorItem( + inputModel: TrackerInputModel, + helperText: String, + onNextClicked: () -> Unit, + onUiEvent: (TrackerInputUiEvent) -> Unit, +): ParameterSelectorItemModel { + val status = + if (inputModel.focused) { + ParameterSelectorItemModel.Status.FOCUSED + } else if (inputModel.value.isNullOrEmpty()) { + ParameterSelectorItemModel.Status.CLOSED + } else { + ParameterSelectorItemModel.Status.UNFOCUSED + } + + return ParameterSelectorItemModel( + icon = { ProvideParameterIcon(inputModel.valueType) }, + label = inputModel.label, + helper = helperText, + inputField = { + TrackerInputProvider( + modifier = Modifier, + inputStyle = InputStyle.ParameterInputStyle(), + inputModel = inputModel, + onNextClicked = onNextClicked, + onUiEvent = onUiEvent, + ) + }, + status = status, + onExpand = { + onUiEvent(TrackerInputUiEvent.OnItemClick(inputModel.uid)) + when (inputModel.valueType) { + TrackerInputType.QR_CODE, + TrackerInputType.BAR_CODE, + -> + onUiEvent(TrackerInputUiEvent.OnScanButtonClicked(inputModel.uid)) + + else -> { + // no-op + } + } + }, + ) +} + +@Composable +private fun ProvideParameterIcon(valueType: TrackerInputType?) = + when (valueType) { + TrackerInputType.QR_CODE -> + Icon( + imageVector = Icons.Outlined.QrCode2, + contentDescription = "QR Code Icon", + tint = SurfaceColor.Primary, + ) + + TrackerInputType.BAR_CODE -> + Icon( + painter = provideDHIS2Icon("material_barcode_scanner"), + contentDescription = "Barcode Icon", + tint = SurfaceColor.Primary, + ) + + else -> + Icon( + imageVector = Icons.Outlined.AddCircleOutline, + contentDescription = "Add Icon", + tint = SurfaceColor.Primary, + ) + } diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/action/TrackerInputAction.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/action/TrackerInputAction.kt new file mode 100644 index 00000000000..1aea9c9c270 --- /dev/null +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/action/TrackerInputAction.kt @@ -0,0 +1,13 @@ +package org.dhis2.tracker.ui.input.action + +import org.dhis2.mobile.commons.model.CustomIntentModel + +typealias CustomIntentUid = String +typealias FieldUid = String + +sealed interface TrackerInputAction { + data class LaunchCustomIntent( + val fieldUid: FieldUid, + val customIntentModel: CustomIntentModel, + ) : TrackerInputAction +} diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/model/TrackerInputModel.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/model/TrackerInputModel.kt new file mode 100644 index 00000000000..b27887922d6 --- /dev/null +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/model/TrackerInputModel.kt @@ -0,0 +1,56 @@ +package org.dhis2.tracker.ui.input.model + +import org.hisp.dhis.mobile.ui.designsystem.component.InputShellState +import org.hisp.dhis.mobile.ui.designsystem.component.LegendData +import org.hisp.dhis.mobile.ui.designsystem.component.Orientation +import org.hisp.dhis.mobile.ui.designsystem.component.SupportingTextData +import org.hisp.dhis.mobile.ui.designsystem.component.SupportingTextState + +data class TrackerInputModel( + val uid: String, + val label: String, + val value: String?, + val focused: Boolean, + val valueType: TrackerInputType, + val optionSet: String?, + val error: String?, + val warning: String?, + val description: String?, + val mandatory: Boolean, + val editable: Boolean, + val legend: LegendData?, + val orientation: Orientation, + val optionSetConfiguration: TrackerOptionSetConfiguration? = null, + val customIntentUid: String? = null, + val displayName: String?, +) + +fun TrackerInputModel.supportingText(): List? = + listOfNotNull( + error?.let { + SupportingTextData( + it, + SupportingTextState.ERROR, + ) + }, + warning?.let { + SupportingTextData( + it, + SupportingTextState.WARNING, + ) + }, + description?.let { + SupportingTextData( + it, + SupportingTextState.DEFAULT, + ) + }, + ).ifEmpty { null } + +fun TrackerInputModel.inputState(): InputShellState = + when { + !editable -> InputShellState.DISABLED + error != null -> InputShellState.ERROR + focused -> InputShellState.FOCUSED + else -> InputShellState.UNFOCUSED + } diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/model/TrackerInputType.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/model/TrackerInputType.kt new file mode 100644 index 00000000000..f93a0af77f6 --- /dev/null +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/model/TrackerInputType.kt @@ -0,0 +1,35 @@ +package org.dhis2.tracker.ui.input.model + +enum class TrackerInputType { + TEXT, + LONG_TEXT, + LETTER, + PHONE_NUMBER, + EMAIL, + URL, + NUMBER, + INTEGER, + INTEGER_POSITIVE, + INTEGER_NEGATIVE, + INTEGER_ZERO_OR_POSITIVE, + PERCENTAGE, + UNIT_INTERVAL, + AGE, + ORGANISATION_UNIT, + MULTI_SELECTION, + QR_CODE, + BAR_CODE, + CHECKBOX, + RADIO_BUTTON, + YES_ONLY_SWITCH, + YES_ONLY_CHECKBOX, + DATE_TIME, + DATE, + TIME, + PERIOD_SELECTOR, + MATRIX, + SEQUENTIAL, + DROPDOWN, + NOT_SUPPORTED, + CUSTOM_INTENT, +} diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/model/TrackerInputUiEvent.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/model/TrackerInputUiEvent.kt new file mode 100644 index 00000000000..73beffde51f --- /dev/null +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/model/TrackerInputUiEvent.kt @@ -0,0 +1,27 @@ +package org.dhis2.tracker.ui.input.model + +sealed interface TrackerInputUiEvent { + data class OnScanButtonClicked( + val uid: String, + ) : TrackerInputUiEvent + + data class OnOrgUnitButtonClicked( + val uid: String, + val label: String, + val value: String?, + ) : TrackerInputUiEvent + + data class OnLaunchCustomIntent( + val uid: String, + val customIntentUid: String, + ) : TrackerInputUiEvent + + data class OnItemClick( + val uid: String, + ) : TrackerInputUiEvent + + data class OnValueChange( + val uid: String, + val value: String?, + ) : TrackerInputUiEvent +} diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/model/TrackerOptionSetConfiguration.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/model/TrackerOptionSetConfiguration.kt new file mode 100644 index 00000000000..9e47a4864b6 --- /dev/null +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/model/TrackerOptionSetConfiguration.kt @@ -0,0 +1,16 @@ +package org.dhis2.tracker.ui.input.model + +/** + * Configuration for option set fields in tracker inputs. + * Provides options and callbacks for dropdown/selection components. + */ +data class TrackerOptionSetConfiguration( + val options: List, + val onSearch: ((String) -> Unit)? = null, + val onLoadOptions: (() -> Unit)? = null, +) + +data class TrackerOptionItem( + val code: String, + val displayName: String, +) diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/provider/TrackerAgeInputProvider.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/provider/TrackerAgeInputProvider.kt new file mode 100644 index 00000000000..a4d43c9bec6 --- /dev/null +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/provider/TrackerAgeInputProvider.kt @@ -0,0 +1,138 @@ +package org.dhis2.tracker.ui.input.provider + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.DisposableEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.text.TextRange +import androidx.compose.ui.text.input.TextFieldValue +import org.dhis2.mobile.commons.dates.calculateAgeFromDate +import org.dhis2.mobile.commons.dates.calculateDateFromAge +import org.dhis2.mobile.commons.resources.Res +import org.dhis2.mobile.commons.resources.age +import org.dhis2.mobile.commons.resources.age_or +import org.dhis2.mobile.commons.resources.cancel +import org.dhis2.mobile.commons.resources.date_of_birth +import org.dhis2.mobile.commons.resources.ok +import org.dhis2.tracker.ui.input.model.TrackerInputModel +import org.dhis2.tracker.ui.input.model.inputState +import org.dhis2.tracker.ui.input.model.supportingText +import org.hisp.dhis.mobile.ui.designsystem.component.AgeInputType +import org.hisp.dhis.mobile.ui.designsystem.component.InputAge +import org.hisp.dhis.mobile.ui.designsystem.component.InputStyle +import org.hisp.dhis.mobile.ui.designsystem.component.state.InputAgeData +import org.hisp.dhis.mobile.ui.designsystem.component.state.rememberInputAgeState +import org.jetbrains.compose.resources.stringResource + +@Composable +fun ProvideTrackerAgeInput( + model: TrackerInputModel, + inputStyle: InputStyle, + onNextClicked: () -> Unit, + modifier: Modifier, + onValueChange: (String?) -> Unit, +) { + var inputType by remember { + mutableStateOf( + if (!model.value.isNullOrEmpty()) { + model.value.let { + AgeInputType.DateOfBirth(TextFieldValue(it, TextRange(it.length))) + } + } else { + AgeInputType.None + }, + ) + } + + DisposableEffect(model.value) { + when (inputType) { + is AgeInputType.Age -> + if (!model.value.isNullOrEmpty()) { + calculateAgeFromDate( + model.value, + (inputType as AgeInputType.Age).unit.name, + )?.let { + (inputType as AgeInputType.Age).copy( + value = + TextFieldValue( + it, + TextRange(it.length), + ), + ) + } ?: AgeInputType.None + } + + is AgeInputType.DateOfBirth -> + if (!model.value.isNullOrEmpty()) { + model.value.let { + (inputType as AgeInputType.DateOfBirth).copy( + value = + TextFieldValue( + it, + TextRange(it.length), + ), + ) + } + } + + AgeInputType.None -> { + // no-op + } + } + + onDispose { } + } + + InputAge( + state = + rememberInputAgeState( + inputAgeData = + InputAgeData( + title = model.label, + inputStyle = inputStyle, + isRequired = model.mandatory, + dateOfBirthLabel = stringResource(Res.string.date_of_birth), + orLabel = stringResource(Res.string.age_or), + ageLabel = stringResource(Res.string.age), + cancelText = stringResource(Res.string.cancel), + acceptText = stringResource(Res.string.ok), + ), + inputType = inputType, + inputState = model.inputState(), + legendData = model.legend, + supportingText = model.supportingText(), + ), + onValueChanged = { ageInputType -> + if (ageInputType != null) { + inputType = ageInputType + } + + when (val type = inputType) { + is AgeInputType.Age -> { + calculateDateFromAge(type.value.text, type.unit.name)?.let { calculatedDate -> + onValueChange(calculatedDate) + } + } + + is AgeInputType.DateOfBirth -> { + type.value.text + .takeIf { it != model.value } + ?.let { + onValueChange(it) + } + } + + AgeInputType.None -> { + onValueChange(null) + } + } + }, + onImeActionClick = { _ -> + onNextClicked() + }, + modifier = modifier, + ) +} diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/provider/TrackerCheckboxInputProvider.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/provider/TrackerCheckboxInputProvider.kt new file mode 100644 index 00000000000..ea648570e1b --- /dev/null +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/provider/TrackerCheckboxInputProvider.kt @@ -0,0 +1,56 @@ +package org.dhis2.tracker.ui.input.provider + +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import org.dhis2.tracker.ui.input.model.TrackerInputModel +import org.dhis2.tracker.ui.input.model.inputState +import org.dhis2.tracker.ui.input.model.supportingText +import org.hisp.dhis.mobile.ui.designsystem.component.CheckBoxData +import org.hisp.dhis.mobile.ui.designsystem.component.InputCheckBox +import org.hisp.dhis.mobile.ui.designsystem.component.InputStyle + +@Composable +fun TrackerCheckboxInputProvider( + model: TrackerInputModel, + inputStyle: InputStyle, + modifier: Modifier, + onValueChange: (String?) -> Unit, +) { + val dataMap = + buildMap { + model.optionSetConfiguration?.options.let { optionDataList -> + optionDataList?.forEach { optionData -> + put( + optionData.code, + CheckBoxData( + uid = optionData.code, + checked = model.value == optionData.code, + enabled = model.editable, + textInput = optionData.displayName, + ), + ) + } + } + } + + val (codeList, data) = dataMap.toList().unzip() + + InputCheckBox( + modifier = modifier, + inputStyle = inputStyle, + title = model.label, + checkBoxData = data, + orientation = model.orientation, + state = model.inputState(), + supportingText = model.supportingText(), + legendData = model.legend, + isRequired = model.mandatory, + onItemChange = { item -> + val selectedIndex = data.indexOf(item) + onValueChange(if (item.checked) null else codeList[selectedIndex]) + }, + onClearSelection = { + onValueChange(null) + }, + ) +} diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/provider/TrackerDateTimeProvider.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/provider/TrackerDateTimeProvider.kt new file mode 100644 index 00000000000..51e7da8dba2 --- /dev/null +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/provider/TrackerDateTimeProvider.kt @@ -0,0 +1,108 @@ +package org.dhis2.tracker.ui.input.provider + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.semantics.contentDescription +import androidx.compose.ui.semantics.semantics +import androidx.compose.ui.text.TextRange +import androidx.compose.ui.text.input.TextFieldValue +import org.dhis2.tracker.ui.input.model.TrackerInputModel +import org.dhis2.tracker.ui.input.model.TrackerInputType +import org.dhis2.tracker.ui.input.model.inputState +import org.dhis2.tracker.ui.input.model.supportingText +import org.hisp.dhis.mobile.ui.designsystem.component.DateTimeActionType +import org.hisp.dhis.mobile.ui.designsystem.component.InputDateTime +import org.hisp.dhis.mobile.ui.designsystem.component.InputStyle +import org.hisp.dhis.mobile.ui.designsystem.component.SelectableDates +import org.hisp.dhis.mobile.ui.designsystem.component.model.DateTimeTransformation +import org.hisp.dhis.mobile.ui.designsystem.component.model.DateTransformation +import org.hisp.dhis.mobile.ui.designsystem.component.model.TimeTransformation +import org.hisp.dhis.mobile.ui.designsystem.component.state.InputDateTimeData +import org.hisp.dhis.mobile.ui.designsystem.component.state.rememberInputDateTimeState + +@Composable +fun ProvideTrackerDateTimeInput( + model: TrackerInputModel, + inputStyle: InputStyle, + onNextClicked: () -> Unit, + modifier: Modifier, + onValueChange: (String?) -> Unit, +) { + val (actionType, visualTransformation) = + when (model.valueType) { + TrackerInputType.DATE_TIME -> DateTimeActionType.DATE_TIME to DateTimeTransformation() + TrackerInputType.TIME -> DateTimeActionType.TIME to TimeTransformation() + else -> DateTimeActionType.DATE to DateTransformation() + } + val textSelection = + TextRange( + model.value?.length ?: 0, + ) + + val yearIntRange = getYearRange() + val selectableDates = + SelectableDates( + initialDate = DEFAULT_MIN_DATE, + endDate = DEFAULT_MAX_DATE, + ) + + var value by remember(model.value) { + mutableStateOf( + model.value?.let { value -> + TextFieldValue( + value, + textSelection, + ) + } ?: TextFieldValue(), + ) + } + + val inputState = + rememberInputDateTimeState( + InputDateTimeData( + title = model.label, + actionType = actionType, + visualTransformation = visualTransformation, + isRequired = model.mandatory, + selectableDates = selectableDates, + yearRange = yearIntRange, + inputStyle = inputStyle, + ), + inputTextFieldValue = value, + inputState = model.inputState(), + legendData = model.legend, + supportingText = model.supportingText(), + ) + + InputDateTime( + state = inputState, + modifier = + modifier.semantics { + contentDescription = value.text + }, + onValueChanged = { + value = it ?: TextFieldValue() + onValueChange(value.text.ifEmpty { null }) + }, + onImeActionClick = { _ -> + onNextClicked() + }, + ) +} + +private fun getYearRange(): IntRange = + IntRange( + DEFAULT_MIN_DATE + .substring(4, 8) + .toInt(), + DEFAULT_MAX_DATE + .substring(4, 8) + .toInt(), + ) + +const val DEFAULT_MIN_DATE = "12111924" +const val DEFAULT_MAX_DATE = "12112124" diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/provider/TrackerInputProvider.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/provider/TrackerInputProvider.kt new file mode 100644 index 00000000000..467a5b004b2 --- /dev/null +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/provider/TrackerInputProvider.kt @@ -0,0 +1,825 @@ +package org.dhis2.tracker.ui.input.provider + +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.derivedStateOf +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.focus.FocusRequester +import androidx.compose.ui.focus.focusRequester +import androidx.compose.ui.text.TextRange +import androidx.compose.ui.text.input.ImeAction +import androidx.compose.ui.text.input.TextFieldValue +import org.dhis2.mobile.tracker.resources.Res +import org.dhis2.mobile.tracker.resources.custom_intent_launch +import org.dhis2.tracker.ui.input.model.TrackerInputModel +import org.dhis2.tracker.ui.input.model.TrackerInputType +import org.dhis2.tracker.ui.input.model.TrackerInputUiEvent +import org.dhis2.tracker.ui.input.model.inputState +import org.dhis2.tracker.ui.input.model.supportingText +import org.hisp.dhis.mobile.ui.designsystem.component.CheckBoxData +import org.hisp.dhis.mobile.ui.designsystem.component.CustomIntentState +import org.hisp.dhis.mobile.ui.designsystem.component.DropdownItem +import org.hisp.dhis.mobile.ui.designsystem.component.InputBarCode +import org.hisp.dhis.mobile.ui.designsystem.component.InputCustomIntent +import org.hisp.dhis.mobile.ui.designsystem.component.InputDropDown +import org.hisp.dhis.mobile.ui.designsystem.component.InputEmail +import org.hisp.dhis.mobile.ui.designsystem.component.InputInteger +import org.hisp.dhis.mobile.ui.designsystem.component.InputLetter +import org.hisp.dhis.mobile.ui.designsystem.component.InputLink +import org.hisp.dhis.mobile.ui.designsystem.component.InputLongText +import org.hisp.dhis.mobile.ui.designsystem.component.InputMultiSelection +import org.hisp.dhis.mobile.ui.designsystem.component.InputNegativeInteger +import org.hisp.dhis.mobile.ui.designsystem.component.InputNotSupported +import org.hisp.dhis.mobile.ui.designsystem.component.InputNumber +import org.hisp.dhis.mobile.ui.designsystem.component.InputOrgUnit +import org.hisp.dhis.mobile.ui.designsystem.component.InputPercentage +import org.hisp.dhis.mobile.ui.designsystem.component.InputPhoneNumber +import org.hisp.dhis.mobile.ui.designsystem.component.InputPositiveInteger +import org.hisp.dhis.mobile.ui.designsystem.component.InputPositiveIntegerOrZero +import org.hisp.dhis.mobile.ui.designsystem.component.InputQRCode +import org.hisp.dhis.mobile.ui.designsystem.component.InputStyle +import org.hisp.dhis.mobile.ui.designsystem.component.InputText +import org.hisp.dhis.mobile.ui.designsystem.component.InputUnitInterval +import org.hisp.dhis.mobile.ui.designsystem.component.InputYesOnlyCheckBox +import org.hisp.dhis.mobile.ui.designsystem.component.InputYesOnlySwitch +import org.jetbrains.compose.resources.stringResource + +@Composable +fun TrackerInputProvider( + modifier: Modifier = Modifier, + inputModel: TrackerInputModel, + inputStyle: InputStyle, + onNextClicked: () -> Unit, + onUiEvent: (TrackerInputUiEvent) -> Unit, +) { + var textValue by remember(inputModel.uid, inputModel.value) { + mutableStateOf( + TextFieldValue( + text = inputModel.value ?: "", + selection = TextRange(inputModel.value?.length ?: 0), + ), + ) + } + + val focusRequester = remember { FocusRequester() } + val modifierWithFocus = modifier.focusRequester(focusRequester) + + LaunchedEffect(inputModel.focused) { + if (inputModel.focused) { + focusRequester.requestFocus() + } + } + + val onImeActionClick: (ImeAction) -> Unit = { imeAction -> + if (imeAction == ImeAction.Next) { + onNextClicked() + } + } + + when (inputModel.valueType) { + TrackerInputType.TEXT -> { + InputText( + modifier = modifierWithFocus.fillMaxWidth(), + title = inputModel.label, + state = inputModel.inputState(), + supportingText = inputModel.supportingText(), + legendData = inputModel.legend, + isRequiredField = inputModel.mandatory, + inputStyle = inputStyle, + inputTextFieldValue = textValue, + onValueChanged = { newValue -> + newValue?.let { + if (it.text != inputModel.value) { + onUiEvent( + TrackerInputUiEvent.OnValueChange( + uid = inputModel.uid, + value = it.text.takeIf { text -> text.isNotEmpty() }, + ), + ) + } + } + }, + imeAction = ImeAction.Next, + onImeActionClick = onImeActionClick, + ) + } + + TrackerInputType.LONG_TEXT -> { + InputLongText( + modifier = modifierWithFocus.fillMaxWidth(), + title = inputModel.label, + state = inputModel.inputState(), + supportingText = inputModel.supportingText(), + legendData = inputModel.legend, + isRequiredField = inputModel.mandatory, + inputStyle = inputStyle, + inputTextFieldValue = textValue, + onValueChanged = { newValue -> + newValue?.let { + if (it.text != inputModel.value) { + onUiEvent( + TrackerInputUiEvent.OnValueChange( + uid = inputModel.uid, + value = it.text.takeIf { text -> text.isNotEmpty() }, + ), + ) + } + } + }, + imeAction = ImeAction.Next, + onImeActionClick = onImeActionClick, + ) + } + + TrackerInputType.LETTER -> { + InputLetter( + modifier = modifierWithFocus.fillMaxWidth(), + title = inputModel.label, + state = inputModel.inputState(), + supportingText = inputModel.supportingText(), + legendData = inputModel.legend, + isRequiredField = inputModel.mandatory, + inputStyle = inputStyle, + inputTextFieldValue = textValue, + onValueChanged = { newValue -> + newValue?.let { + if (it.text != inputModel.value) { + onUiEvent( + TrackerInputUiEvent.OnValueChange( + uid = inputModel.uid, + value = it.text.takeIf { text -> text.isNotEmpty() }, + ), + ) + } + } + }, + imeAction = ImeAction.Next, + onImeActionClick = onImeActionClick, + ) + } + + TrackerInputType.EMAIL -> { + InputEmail( + modifier = modifierWithFocus.fillMaxWidth(), + title = inputModel.label, + state = inputModel.inputState(), + supportingText = inputModel.supportingText(), + legendData = inputModel.legend, + isRequiredField = inputModel.mandatory, + inputStyle = inputStyle, + inputTextFieldValue = textValue, + onEmailActionCLicked = {}, + onValueChanged = { newValue -> + newValue?.let { + if (it.text != inputModel.value) { + onUiEvent( + TrackerInputUiEvent.OnValueChange( + uid = inputModel.uid, + value = it.text.takeIf { text -> text.isNotEmpty() }, + ), + ) + } + } + }, + imeAction = ImeAction.Next, + onImeActionClick = onImeActionClick, + ) + } + + TrackerInputType.PHONE_NUMBER -> { + InputPhoneNumber( + modifier = modifierWithFocus.fillMaxWidth(), + title = inputModel.label, + state = inputModel.inputState(), + supportingText = inputModel.supportingText(), + legendData = inputModel.legend, + isRequiredField = inputModel.mandatory, + inputStyle = inputStyle, + inputTextFieldValue = textValue, + onCallActionClicked = {}, + onValueChanged = { newValue -> + newValue?.let { + if (it.text != inputModel.value) { + onUiEvent( + TrackerInputUiEvent.OnValueChange( + uid = inputModel.uid, + value = it.text.takeIf { text -> text.isNotEmpty() }, + ), + ) + } + } + }, + imeAction = ImeAction.Next, + onImeActionClick = onImeActionClick, + ) + } + + TrackerInputType.URL -> { + InputLink( + modifier = modifierWithFocus.fillMaxWidth(), + title = inputModel.label, + state = inputModel.inputState(), + supportingText = inputModel.supportingText(), + legendData = inputModel.legend, + isRequiredField = inputModel.mandatory, + inputStyle = inputStyle, + inputTextFieldValue = textValue, + onLinkActionCLicked = {}, + onValueChanged = { newValue -> + newValue?.let { + if (it.text != inputModel.value) { + onUiEvent( + TrackerInputUiEvent.OnValueChange( + uid = inputModel.uid, + value = it.text.takeIf { text -> text.isNotEmpty() }, + ), + ) + } + } + }, + imeAction = ImeAction.Next, + onImeActionClick = onImeActionClick, + ) + } + + TrackerInputType.NUMBER -> { + InputNumber( + modifier = modifierWithFocus.fillMaxWidth(), + title = inputModel.label, + state = inputModel.inputState(), + supportingText = inputModel.supportingText(), + legendData = inputModel.legend, + isRequiredField = inputModel.mandatory, + inputStyle = inputStyle, + inputTextFieldValue = textValue, + onValueChanged = { newValue -> + newValue?.let { + if (it.text != inputModel.value) { + onUiEvent( + TrackerInputUiEvent.OnValueChange( + uid = inputModel.uid, + value = it.text.takeIf { text -> text.isNotEmpty() }, + ), + ) + } + } + }, + imeAction = ImeAction.Next, + onImeActionClick = onImeActionClick, + ) + } + + TrackerInputType.INTEGER -> { + InputInteger( + modifier = modifierWithFocus.fillMaxWidth(), + title = inputModel.label, + state = inputModel.inputState(), + supportingText = inputModel.supportingText(), + legendData = inputModel.legend, + isRequiredField = inputModel.mandatory, + inputStyle = inputStyle, + inputTextFieldValue = textValue, + onValueChanged = { newValue -> + newValue?.let { + if (it.text != inputModel.value) { + onUiEvent( + TrackerInputUiEvent.OnValueChange( + uid = inputModel.uid, + value = it.text.takeIf { text -> text.isNotEmpty() }, + ), + ) + } + } + }, + imeAction = ImeAction.Next, + onImeActionClick = onImeActionClick, + ) + } + + TrackerInputType.INTEGER_POSITIVE -> { + InputPositiveInteger( + modifier = modifierWithFocus.fillMaxWidth(), + title = inputModel.label, + state = inputModel.inputState(), + supportingText = inputModel.supportingText(), + legendData = inputModel.legend, + isRequiredField = inputModel.mandatory, + inputStyle = inputStyle, + inputTextFieldValue = textValue, + onValueChanged = { newValue -> + newValue?.let { + if (it.text != inputModel.value) { + onUiEvent( + TrackerInputUiEvent.OnValueChange( + uid = inputModel.uid, + value = it.text.takeIf { text -> text.isNotEmpty() }, + ), + ) + } + } + }, + imeAction = ImeAction.Next, + onImeActionClick = onImeActionClick, + ) + } + + TrackerInputType.INTEGER_NEGATIVE -> { + InputNegativeInteger( + modifier = modifierWithFocus.fillMaxWidth(), + title = inputModel.label, + state = inputModel.inputState(), + supportingText = inputModel.supportingText(), + legendData = inputModel.legend, + isRequiredField = inputModel.mandatory, + inputStyle = inputStyle, + inputTextFieldValue = textValue, + onValueChanged = { newValue -> + newValue?.let { + if (it.text != inputModel.value) { + onUiEvent( + TrackerInputUiEvent.OnValueChange( + uid = inputModel.uid, + value = it.text.takeIf { text -> text.isNotEmpty() }, + ), + ) + } + } + }, + imeAction = ImeAction.Next, + onImeActionClick = onImeActionClick, + ) + } + + TrackerInputType.INTEGER_ZERO_OR_POSITIVE -> { + InputPositiveIntegerOrZero( + modifier = modifierWithFocus.fillMaxWidth(), + title = inputModel.label, + state = inputModel.inputState(), + supportingText = inputModel.supportingText(), + legendData = inputModel.legend, + isRequiredField = inputModel.mandatory, + inputStyle = inputStyle, + inputTextFieldValue = textValue, + onValueChanged = { newValue -> + newValue?.let { + if (it.text != inputModel.value) { + onUiEvent( + TrackerInputUiEvent.OnValueChange( + uid = inputModel.uid, + value = it.text.takeIf { text -> text.isNotEmpty() }, + ), + ) + } + } + }, + imeAction = ImeAction.Next, + onImeActionClick = onImeActionClick, + ) + } + + TrackerInputType.PERCENTAGE -> { + InputPercentage( + modifier = modifierWithFocus.fillMaxWidth(), + title = inputModel.label, + state = inputModel.inputState(), + supportingText = inputModel.supportingText(), + legendData = inputModel.legend, + isRequiredField = inputModel.mandatory, + inputStyle = inputStyle, + inputTextFieldValue = textValue, + onValueChanged = { newValue -> + newValue?.let { + if (it.text != inputModel.value) { + onUiEvent( + TrackerInputUiEvent.OnValueChange( + uid = inputModel.uid, + value = it.text.takeIf { text -> text.isNotEmpty() }, + ), + ) + } + } + }, + imeAction = ImeAction.Next, + onImeActionClick = onImeActionClick, + ) + } + + TrackerInputType.UNIT_INTERVAL -> { + InputUnitInterval( + modifier = modifierWithFocus.fillMaxWidth(), + title = inputModel.label, + state = inputModel.inputState(), + supportingText = inputModel.supportingText(), + legendData = inputModel.legend, + isRequiredField = inputModel.mandatory, + inputStyle = inputStyle, + inputTextFieldValue = textValue, + onValueChanged = { newValue -> + newValue?.let { + if (it.text != inputModel.value) { + onUiEvent( + TrackerInputUiEvent.OnValueChange( + uid = inputModel.uid, + value = it.text.takeIf { text -> text.isNotEmpty() }, + ), + ) + } + } + }, + imeAction = ImeAction.Next, + onImeActionClick = onImeActionClick, + ) + } + + TrackerInputType.AGE -> { + ProvideTrackerAgeInput( + model = inputModel, + inputStyle = inputStyle, + onNextClicked = onNextClicked, + modifier = modifierWithFocus, + onValueChange = { newValue -> + onUiEvent( + TrackerInputUiEvent.OnValueChange( + uid = inputModel.uid, + value = newValue, + ), + ) + }, + ) + } + + TrackerInputType.DATE_TIME, TrackerInputType.DATE, TrackerInputType.TIME -> { + ProvideTrackerDateTimeInput( + model = inputModel, + inputStyle = inputStyle, + onNextClicked = onNextClicked, + modifier = modifierWithFocus, + onValueChange = { newValue -> + onUiEvent( + TrackerInputUiEvent.OnValueChange( + uid = inputModel.uid, + value = newValue, + ), + ) + }, + ) + } + + TrackerInputType.ORGANISATION_UNIT -> { + InputOrgUnit( + modifier = modifierWithFocus.fillMaxWidth(), + title = inputModel.label, + state = inputModel.inputState(), + supportingText = inputModel.supportingText(), + legendData = inputModel.legend, + isRequiredField = inputModel.mandatory, + inputStyle = inputStyle, + inputText = inputModel.displayName, + onValueChanged = { newValue -> + onUiEvent( + TrackerInputUiEvent.OnValueChange( + uid = inputModel.uid, + value = newValue, + ), + ) + }, + onOrgUnitActionCLicked = { + onUiEvent( + TrackerInputUiEvent.OnOrgUnitButtonClicked( + uid = inputModel.uid, + label = inputModel.label, + value = inputModel.value, + ), + ) + }, + ) + } + + TrackerInputType.MULTI_SELECTION -> { + val options = + inputModel.optionSetConfiguration?.options?.map { optionItem -> + CheckBoxData( + uid = optionItem.code, + checked = + optionItem.code.let { code -> + inputModel.value + ?.takeIf { it.isNotEmpty() } + ?.split(",") + ?.contains(code) + } ?: false, + enabled = inputModel.editable, + textInput = optionItem.displayName, + ) + } ?: emptyList() + + InputMultiSelection( + modifier = modifierWithFocus.fillMaxWidth(), + title = inputModel.label, + items = options, + state = inputModel.inputState(), + supportingTextData = inputModel.supportingText(), + legendData = inputModel.legend, + isRequired = inputModel.mandatory, + inputStyle = inputStyle, + onItemsSelected = { checkBoxData -> + val checkedValues = + checkBoxData + .filter { it.checked } + .joinToString(",") { it.uid } + .takeIf { it.isNotEmpty() } + onUiEvent( + TrackerInputUiEvent.OnValueChange( + uid = inputModel.uid, + value = checkedValues, + ), + ) + }, + onClearItemSelection = { + onUiEvent( + TrackerInputUiEvent.OnValueChange( + uid = inputModel.uid, + value = null, + ), + ) + }, + ) + } + + TrackerInputType.QR_CODE -> { + InputQRCode( + modifier = modifierWithFocus.fillMaxWidth(), + title = inputModel.label, + state = inputModel.inputState(), + supportingText = inputModel.supportingText(), + legendData = inputModel.legend, + isRequiredField = inputModel.mandatory, + inputStyle = inputStyle, + inputTextFieldValue = textValue, + onQRButtonClicked = { + onUiEvent( + TrackerInputUiEvent.OnScanButtonClicked( + uid = inputModel.uid, + ), + ) + }, + onValueChanged = { newValue -> + newValue?.let { + if (it.text != inputModel.value) { + onUiEvent( + TrackerInputUiEvent.OnValueChange( + uid = inputModel.uid, + value = it.text.takeIf { text -> text.isNotEmpty() }, + ), + ) + } + } + }, + imeAction = ImeAction.Next, + onImeActionClick = onImeActionClick, + ) + } + + TrackerInputType.BAR_CODE -> { + InputBarCode( + modifier = modifierWithFocus.fillMaxWidth(), + title = inputModel.label, + state = inputModel.inputState(), + supportingText = inputModel.supportingText(), + legendData = inputModel.legend, + isRequiredField = inputModel.mandatory, + inputStyle = inputStyle, + inputTextFieldValue = textValue, + onActionButtonClicked = { + onUiEvent( + TrackerInputUiEvent.OnScanButtonClicked( + uid = inputModel.uid, + ), + ) + }, + onValueChanged = { newValue -> + newValue?.let { + if (it.text != inputModel.value) { + onUiEvent( + TrackerInputUiEvent.OnValueChange( + uid = inputModel.uid, + value = it.text.takeIf { text -> text.isNotEmpty() }, + ), + ) + } + } + }, + imeAction = ImeAction.Next, + onImeActionClick = onImeActionClick, + ) + } + + TrackerInputType.CHECKBOX -> { + TrackerCheckboxInputProvider( + model = inputModel, + inputStyle = inputStyle, + modifier = modifierWithFocus, + onValueChange = { newValue -> + onUiEvent( + TrackerInputUiEvent.OnValueChange( + uid = inputModel.uid, + value = newValue, + ), + ) + }, + ) + } + + TrackerInputType.RADIO_BUTTON -> { + TrackerRadioButtonInputProvider( + model = inputModel, + inputStyle = inputStyle, + modifier = modifierWithFocus, + onValueChange = { newValue -> + onUiEvent( + TrackerInputUiEvent.OnValueChange( + uid = inputModel.uid, + value = newValue, + ), + ) + }, + ) + } + + TrackerInputType.YES_ONLY_SWITCH -> { + InputYesOnlySwitch( + modifier = modifierWithFocus.fillMaxWidth(), + title = inputModel.label, + state = inputModel.inputState(), + supportingText = inputModel.supportingText(), + legendData = inputModel.legend, + isRequired = inputModel.mandatory, + inputStyle = inputStyle, + isChecked = inputModel.value?.toBooleanStrictOrNull() == true, + onClick = { isChecked -> + onUiEvent( + TrackerInputUiEvent.OnValueChange( + uid = inputModel.uid, + value = if (isChecked) "true" else null, + ), + ) + }, + ) + } + + TrackerInputType.YES_ONLY_CHECKBOX -> { + InputYesOnlyCheckBox( + modifier = modifierWithFocus.fillMaxWidth(), + checkBoxData = + CheckBoxData( + uid = inputModel.uid, + checked = inputModel.value?.toBooleanStrictOrNull() == true, + enabled = inputModel.editable, + textInput = inputModel.label, + ), + state = inputModel.inputState(), + supportingText = inputModel.supportingText(), + legendData = inputModel.legend, + isRequired = inputModel.mandatory, + inputStyle = inputStyle, + onClick = { isChecked -> + onUiEvent( + TrackerInputUiEvent.OnValueChange( + uid = inputModel.uid, + value = if (isChecked) "true" else null, + ), + ) + }, + ) + } + + TrackerInputType.DROPDOWN -> { + val optionSetConfiguration = inputModel.optionSetConfiguration!! + + var selectedItem by remember(inputModel.uid, inputModel.value) { + val displayName = + optionSetConfiguration.options + .find { + it.code == inputModel.value + }?.displayName + mutableStateOf(displayName ?: inputModel.value ?: "") + } + + val options = optionSetConfiguration.options + val useDropdown by remember { + derivedStateOf { options.size < 15 } + } + + InputDropDown( + modifier = modifierWithFocus.fillMaxWidth(), + inputStyle = inputStyle, + title = inputModel.label, + state = inputModel.inputState(), + selectedItem = DropdownItem(selectedItem), + supportingTextData = inputModel.supportingText(), + legendData = inputModel.legend, + isRequiredField = inputModel.mandatory, + onResetButtonClicked = { + selectedItem = "" + onUiEvent( + TrackerInputUiEvent.OnValueChange( + uid = inputModel.uid, + value = null, + ), + ) + }, + fetchItem = { index -> + DropdownItem(options.getOrNull(index)?.displayName ?: "") + }, + onSearchOption = { query -> + optionSetConfiguration.onSearch?.invoke(query) + }, + itemCount = options.size, + useDropDown = useDropdown, + onItemSelected = { index, newSelectedItem -> + selectedItem = newSelectedItem.label + onUiEvent( + TrackerInputUiEvent.OnValueChange( + uid = inputModel.uid, + value = options.getOrNull(index)?.code, + ), + ) + }, + loadOptions = { + optionSetConfiguration.onLoadOptions?.invoke() + }, + onDismiss = { + optionSetConfiguration.onSearch?.invoke("") + }, + ) + } + + TrackerInputType.CUSTOM_INTENT -> { + val values by remember(inputModel) { + derivedStateOf { + inputModel.value + ?.takeIf { it.isNotEmpty() } + ?.split(",") + ?.toMutableList() ?: mutableListOf() + } + } + + var customIntentState by remember(inputModel, inputModel.value) { + mutableStateOf( + if (inputModel.value.isNullOrEmpty()) { + CustomIntentState.LAUNCH + } else { + CustomIntentState.LOADED + }, + ) + } + + InputCustomIntent( + title = inputModel.label, + buttonText = stringResource(Res.string.custom_intent_launch), + supportingText = inputModel.supportingText(), + inputShellState = inputModel.inputState(), + inputStyle = inputStyle, + modifier = modifier, + isRequired = inputModel.mandatory, + onLaunch = { + customIntentState = CustomIntentState.LOADING + inputModel.customIntentUid?.let { customIntentUid -> + onUiEvent( + TrackerInputUiEvent.OnLaunchCustomIntent( + inputModel.uid, + customIntentUid, + ), + ) + } + }, + onClear = { + onUiEvent( + TrackerInputUiEvent.OnValueChange( + uid = inputModel.uid, + value = null, + ), + ) + }, + customIntentState = customIntentState, + values = values.toList(), + ) + } + + TrackerInputType.PERIOD_SELECTOR, + TrackerInputType.MATRIX, + TrackerInputType.SEQUENTIAL, + TrackerInputType.NOT_SUPPORTED, + -> { + InputNotSupported( + modifier = modifierWithFocus.fillMaxWidth(), + title = inputModel.label, + inputStyle = inputStyle, + ) + } + } +} diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/provider/TrackerRadioButtonInputProvider.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/provider/TrackerRadioButtonInputProvider.kt new file mode 100644 index 00000000000..7cfcc3fc004 --- /dev/null +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/provider/TrackerRadioButtonInputProvider.kt @@ -0,0 +1,58 @@ +package org.dhis2.tracker.ui.input.provider + +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import org.dhis2.tracker.ui.input.model.TrackerInputModel +import org.dhis2.tracker.ui.input.model.inputState +import org.dhis2.tracker.ui.input.model.supportingText +import org.hisp.dhis.mobile.ui.designsystem.component.InputRadioButton +import org.hisp.dhis.mobile.ui.designsystem.component.InputStyle +import org.hisp.dhis.mobile.ui.designsystem.component.RadioButtonData + +@Composable +fun TrackerRadioButtonInputProvider( + model: TrackerInputModel, + inputStyle: InputStyle, + modifier: Modifier, + onValueChange: (String?) -> Unit, +) { + val dataMap = + buildMap { + model.optionSetConfiguration?.options.let { optionDataList -> + optionDataList?.forEach { optionData -> + put( + optionData.code, + RadioButtonData( + uid = optionData.code, + selected = model.value == optionData.code, + enabled = true, + textInput = optionData.displayName, + ), + ) + } + } + } + + val (codeList, data) = dataMap.toList().unzip() + + InputRadioButton( + modifier = modifier, + inputStyle = inputStyle, + title = model.label, + radioButtonData = data, + orientation = model.orientation, + state = model.inputState(), + supportingText = model.supportingText(), + legendData = model.legend, + isRequired = model.mandatory, + itemSelected = data.find { it.selected }, + onItemChange = { item -> + if (item != null) { + val selectedIndex = data.indexOf(item) + onValueChange(codeList[selectedIndex]) + } else { + onValueChange(null) + } + }, + ) +} From d3767fead261d73fda686cb5448f6baef8627b64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Miguel=20Rubio?= Date: Fri, 30 Jan 2026 11:19:24 +0100 Subject: [PATCH 029/114] ANDROAPP-7478-dependabot-specific-rules (#4619) * feat: Group dhis2-android-core dependabot updates * deps: create a specific group for rule engine ad expression parser --- .github/dependabot.yml | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index b75843dd40d..a1c12cd0f33 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -19,14 +19,36 @@ updates: update-types: ["version-update:semver-major", "version-update:semver-minor"] - dependency-name: "com.squareup.okhttp3:*" - dependency-name: "org.hisp.dhis.mobile:designsystem" - - dependency-name: "org.hisp.dhis:android-core" + - dependency-name: "org.hisp.dhis.rules:rule-engine-jvm" + - dependency-name: "org.hisp.dhis.lib.expression:expression-parser-jvm" groups: + dhis2-android-core: + patterns: + - "org.hisp.dhis:android-core" gradle-updates: patterns: - "*" # Group all Gradle updates into one PR update-types: - "patch" # Only include patch updates (no major or minor versions) + # Rule engine and expression parser updates (all semver types) + - package-ecosystem: "gradle" + directory: "/" + schedule: + interval: "weekly" + target-branch: "develop" + open-pull-requests-limit: 5 + commit-message: + prefix: "deps" + allow: + - dependency-name: "org.hisp.dhis.rules:rule-engine-jvm" + - dependency-name: "org.hisp.dhis.lib.expression:expression-parser-jvm" + groups: + dhis2-rules: + patterns: + - "org.hisp.dhis.rules:rule-engine-jvm" + - "org.hisp.dhis.lib.expression:expression-parser-jvm" + # GitHub Actions updates (optional) - package-ecosystem: "github-actions" directory: "/" From d63432c614c049bc68dc6de51e3bb99dc09f172a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Miguel=20Rubio?= Date: Fri, 30 Jan 2026 19:11:43 +0100 Subject: [PATCH 030/114] test: improve some tests (#4629) --- .../androidTest/java/org/dhis2/common/BaseRobot.kt | 13 ++++++++++++- .../org/dhis2/usescases/datasets/DataSetTest.kt | 4 ++++ .../dhis2/usescases/teidashboard/robot/NoteRobot.kt | 8 +++++++- 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/app/src/androidTest/java/org/dhis2/common/BaseRobot.kt b/app/src/androidTest/java/org/dhis2/common/BaseRobot.kt index bbc2ad5e85c..57f243124e9 100644 --- a/app/src/androidTest/java/org/dhis2/common/BaseRobot.kt +++ b/app/src/androidTest/java/org/dhis2/common/BaseRobot.kt @@ -10,10 +10,12 @@ import androidx.compose.ui.test.assertIsDisplayed import androidx.compose.ui.test.junit4.ComposeContentTestRule import androidx.compose.ui.test.onNodeWithText import androidx.test.espresso.Espresso.onView +import androidx.test.espresso.FailureHandler import androidx.test.espresso.NoMatchingViewException import androidx.test.espresso.UiController import androidx.test.espresso.ViewAction import androidx.test.espresso.ViewInteraction +import androidx.test.espresso.base.DefaultFailureHandler import androidx.test.espresso.matcher.ViewMatchers.isRoot import androidx.test.espresso.util.TreeIterables import androidx.test.platform.app.InstrumentationRegistry.getInstrumentation @@ -105,6 +107,13 @@ open class BaseRobot { val maxTries = waitMillis / waitMillisPerTry.toInt() var tries = 0 + val defaultFailureHandler = DefaultFailureHandler(getInstrumentation().targetContext) + val failureHandler = FailureHandler { error, matcher -> + if (error is NoMatchingViewException) { + throw error + } + defaultFailureHandler.handle(error, matcher) + } for (i in 0..maxTries) try { @@ -112,7 +121,9 @@ open class BaseRobot { tries++ // Search the root for the view - onView(isRoot()).perform(searchFor(viewMatcher)) + onView(isRoot()) + .withFailureHandler(failureHandler) + .perform(searchFor(viewMatcher)) // If we're here, we found our view. Now return it return onView(viewMatcher) diff --git a/app/src/androidTest/java/org/dhis2/usescases/datasets/DataSetTest.kt b/app/src/androidTest/java/org/dhis2/usescases/datasets/DataSetTest.kt index 93cf6e2f09a..f06f4c0182a 100644 --- a/app/src/androidTest/java/org/dhis2/usescases/datasets/DataSetTest.kt +++ b/app/src/androidTest/java/org/dhis2/usescases/datasets/DataSetTest.kt @@ -346,6 +346,10 @@ class DataSetTest : BaseTest() { dataSetDetailRobot(composeTestRule){ clickOnDataSetAtPosition(0) } + composeTestRule.waitUntilExactlyOneExists( + hasTestTag("TABLE_SCROLLABLE_COLUMN"), + timeoutMillis = 15000 + ) tableIsVisible() dataSetTableRobot(composeTestRule) { checkItemWithTextIsDisplayed("Re-open form to edit") diff --git a/app/src/androidTest/java/org/dhis2/usescases/teidashboard/robot/NoteRobot.kt b/app/src/androidTest/java/org/dhis2/usescases/teidashboard/robot/NoteRobot.kt index 53774a20689..6beae0c2fcd 100644 --- a/app/src/androidTest/java/org/dhis2/usescases/teidashboard/robot/NoteRobot.kt +++ b/app/src/androidTest/java/org/dhis2/usescases/teidashboard/robot/NoteRobot.kt @@ -4,12 +4,14 @@ import androidx.test.espresso.Espresso.onView import androidx.test.espresso.action.TypeTextAction import androidx.test.espresso.action.ViewActions.click import androidx.test.espresso.assertion.ViewAssertions.matches +import androidx.test.espresso.matcher.RootMatchers.isDialog import androidx.test.espresso.intent.Intents import androidx.test.espresso.intent.matcher.IntentMatchers.hasComponent import androidx.test.espresso.matcher.ViewMatchers.Visibility import androidx.test.espresso.matcher.ViewMatchers.hasDescendant import androidx.test.espresso.matcher.ViewMatchers.isDisplayed import androidx.test.espresso.matcher.ViewMatchers.isEnabled +import androidx.test.espresso.matcher.ViewMatchers.isRoot import androidx.test.espresso.matcher.ViewMatchers.withEffectiveVisibility import androidx.test.espresso.matcher.ViewMatchers.withId import androidx.test.espresso.matcher.ViewMatchers.withText @@ -49,7 +51,11 @@ class NoteRobot : BaseRobot() { } fun clickYesOnAlertDialog() { - waitForView(withText(R.string.yes)) + onView(isRoot()) + .inRoot(isDialog()) + .perform(searchFor(withId(android.R.id.button1))) + onView(withId(android.R.id.button1)) + .inRoot(isDialog()) .check(matches(isDisplayed())) .perform(click()) } From 468e168d26094c901ec62787d05a853009a44b4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Miguel=20Rubio?= Date: Fri, 30 Jan 2026 19:47:49 +0100 Subject: [PATCH 031/114] deps: update dependabot (#4630) --- .github/dependabot.yml | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/.github/dependabot.yml b/.github/dependabot.yml index a1c12cd0f33..e72b95fcd40 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -31,24 +31,6 @@ updates: update-types: - "patch" # Only include patch updates (no major or minor versions) - # Rule engine and expression parser updates (all semver types) - - package-ecosystem: "gradle" - directory: "/" - schedule: - interval: "weekly" - target-branch: "develop" - open-pull-requests-limit: 5 - commit-message: - prefix: "deps" - allow: - - dependency-name: "org.hisp.dhis.rules:rule-engine-jvm" - - dependency-name: "org.hisp.dhis.lib.expression:expression-parser-jvm" - groups: - dhis2-rules: - patterns: - - "org.hisp.dhis.rules:rule-engine-jvm" - - "org.hisp.dhis.lib.expression:expression-parser-jvm" - # GitHub Actions updates (optional) - package-ecosystem: "github-actions" directory: "/" From b3216755556d668b85e1fdbd5177a501975ec3e1 Mon Sep 17 00:00:00 2001 From: Pablo Date: Sun, 1 Feb 2026 10:35:19 +0100 Subject: [PATCH 032/114] build: Move flavor dependant class to correct path (#4612) --- .../org/dhis2/usescases/main/domain/DownloadNewVersion.kt | 0 .../main/domain/DownloadNewVersion.kt | 6 ++++-- 2 files changed, 4 insertions(+), 2 deletions(-) rename app/src/{main => dhis2}/java/org/dhis2/usescases/main/domain/DownloadNewVersion.kt (100%) rename app/src/dhis2PlayServices/java/org/dhis2/{usecases => usescases}/main/domain/DownloadNewVersion.kt (75%) diff --git a/app/src/main/java/org/dhis2/usescases/main/domain/DownloadNewVersion.kt b/app/src/dhis2/java/org/dhis2/usescases/main/domain/DownloadNewVersion.kt similarity index 100% rename from app/src/main/java/org/dhis2/usescases/main/domain/DownloadNewVersion.kt rename to app/src/dhis2/java/org/dhis2/usescases/main/domain/DownloadNewVersion.kt diff --git a/app/src/dhis2PlayServices/java/org/dhis2/usecases/main/domain/DownloadNewVersion.kt b/app/src/dhis2PlayServices/java/org/dhis2/usescases/main/domain/DownloadNewVersion.kt similarity index 75% rename from app/src/dhis2PlayServices/java/org/dhis2/usecases/main/domain/DownloadNewVersion.kt rename to app/src/dhis2PlayServices/java/org/dhis2/usescases/main/domain/DownloadNewVersion.kt index d2a07a80162..df2258b4d61 100644 --- a/app/src/dhis2PlayServices/java/org/dhis2/usecases/main/domain/DownloadNewVersion.kt +++ b/app/src/dhis2PlayServices/java/org/dhis2/usescases/main/domain/DownloadNewVersion.kt @@ -1,13 +1,15 @@ package org.dhis2.usescases.main.domain +import android.content.Context import org.dhis2.data.service.VersionRepository import org.dhis2.mobile.commons.domain.UseCase +import org.dhis2.mobile.commons.error.DomainError import org.dhis2.usescases.main.domain.model.DownloadMethod class DownloadNewVersion( private val versionRepository: VersionRepository, -) : UseCase { - override suspend fun invoke(input: Unit): Result = +) : UseCase { + override suspend fun invoke(input: Context): Result = try { val url = versionRepository.getUrl() url?.let { From b65076393817a251c22035587af13a21906f63ac Mon Sep 17 00:00:00 2001 From: Ferdy Rodriguez Date: Sun, 1 Feb 2026 23:53:11 +0100 Subject: [PATCH 033/114] ci: [ANDROAPP-7303] Updates Apk name and uploads correct artifact (#4621) * Logs apk path's and use the path to upload the artifacts * Removes steps that are not needed * tries to get the correct branch name on pull requests --- .github/workflows/continuous-delivery.yml | 20 ++++++++------------ app/build.gradle.kts | 6 ++++++ 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/.github/workflows/continuous-delivery.yml b/.github/workflows/continuous-delivery.yml index bb1777b6b94..7488214edaa 100644 --- a/.github/workflows/continuous-delivery.yml +++ b/.github/workflows/continuous-delivery.yml @@ -58,22 +58,18 @@ jobs: DEBUG_KEY_PASS: ${{ secrets.DEBUG_KEY_PASS }} DEBUG_KEYSTORE_PASSWORD: ${{ secrets.DEBUG_KEYSTORE_PASSWORD }} DEBUG_KEYSTORE_PATH: ${{ steps.decode_keystore.outputs.filePath }} - - - name: Read version name from file - working-directory: ./gradle - id: read-version - run: echo "vName=$(grep 'vName' libs.versions.toml | awk -F' = ' '{print $2}' | tr -d '"')" >> "$GITHUB_OUTPUT" - - - name: Get JIRA issue number - id: jira-issue-number + + - name: Locate built APK + id: apk-path run: | - BRANCH_NAME="${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}" - JIRA_ISSUE=$(echo "$BRANCH_NAME" | grep -oE '[a-zA-Z]+-[0-9]+' | head -1 || echo "$BRANCH_NAME") - echo "issue=$JIRA_ISSUE" >> "$GITHUB_OUTPUT" + echo "Searching for APKs under ${{ env.main_project_module }}/build/outputs/apk" + find "${{ env.main_project_module }}/build/outputs/apk" -type f -name "*.apk" + APK_PATH=$(find "${{ env.main_project_module }}/build/outputs/apk" -type f -name "*.apk" -print -quit) + echo "apk_path=$APK_PATH" >> "$GITHUB_OUTPUT" # Upload Artifact Build - name: Upload Android artifacts uses: actions/upload-artifact@v6.0.0 with: name: ${{ env.repository_name }} - Android APK - ${{ steps.date.outputs.date }} - path: ${{ env.main_project_module }}/build/outputs/apk/dhis2/debug/dhis2-v${{ steps.read-version.outputs.vName }}-${{ steps.jira-issue-number.outputs.issue}}.apk + path: ${{ steps.apk-path.outputs.apk_path }} diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 449181cd068..cca34391705 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -41,7 +41,13 @@ android { val getBranchName by extra { fun(): String { + val envBranchName = System.getenv("GITHUB_HEAD_REF") + ?: System.getenv("GITHUB_REF_NAME") + return try { + if (!envBranchName.isNullOrBlank()) { + return envBranchName.replace(Regex("[/\\\\:*?\"<>|]"), "-") + } val process = ProcessBuilder("git", "rev-parse", "--abbrev-ref", "HEAD") .redirectOutput(ProcessBuilder.Redirect.PIPE) .redirectError(ProcessBuilder.Redirect.PIPE) From a1501ca8bdf5ab51150e838c36aec08038385717 Mon Sep 17 00:00:00 2001 From: Xavier Molloy Date: Mon, 2 Feb 2026 07:27:21 +0100 Subject: [PATCH 034/114] feat: [ANDROAPP-7472] I Clean up old search repository [skip size] I (#4622) * feat: [ANDROAPP-7472] Clean up old search repository * feat: [ANDROAPP-7472] Add Paging data and dependency verification * fix: [ANDROAPP-7472] fix compilation error * feat: [ANDROAPP-7472] fix unit test * feat: [ANDROAPP-7472] copilot review * fix: [ANDROAPP-7472] revert library update * fix: [ANDROAPP-7472] fix sonar code smells --- .../main/program/ProgramRepositoryImpl.kt | 2 +- .../searchTrackEntity/SearchRepository.java | 10 - .../SearchRepositoryImpl.java | 105 +-- .../searchTrackEntity/SearchTEModule.java | 1 - .../main/program/ProgramRepositoryImplTest.kt | 2 +- .../searchTrackEntity/SearchRepositoryTest.kt | 3 - .../commons/filters/data/FilterPresenter.kt | 6 +- gradle/verification-metadata.xml | 646 +++++++++++++++++- tracker/build.gradle.kts | 1 + 9 files changed, 648 insertions(+), 128 deletions(-) diff --git a/app/src/main/java/org/dhis2/usescases/main/program/ProgramRepositoryImpl.kt b/app/src/main/java/org/dhis2/usescases/main/program/ProgramRepositoryImpl.kt index 7f1d6ed5119..f6bcd648454 100644 --- a/app/src/main/java/org/dhis2/usescases/main/program/ProgramRepositoryImpl.kt +++ b/app/src/main/java/org/dhis2/usescases/main/program/ProgramRepositoryImpl.kt @@ -178,7 +178,7 @@ internal class ProgramRepositoryImpl( private fun getTrackerTeiCount(program: Program): Int { val teiIds = filterPresenter - .filteredTrackerProgram(program) + .filteredTrackerProgram(program.uid()) .offlineFirst() .blockingGetUids() val teiCount = teiIds.size diff --git a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchRepository.java b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchRepository.java index 0c199898d14..80965866353 100644 --- a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchRepository.java +++ b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchRepository.java @@ -33,9 +33,6 @@ public interface SearchRepository { void clearFetchedList(); - @NonNull - Flowable> searchTeiForMap(SearchParametersModel searchParametersModel, boolean isOnline); - @NonNull Observable> saveToEnroll(@NonNull String teiType, @NonNull String orgUnitUID, @NonNull String programUid, @Nullable String teiUid, HashMap> queryData, @Nullable String fromRelationshipUid); @@ -47,8 +44,6 @@ public interface SearchRepository { TrackedEntityType getTrackedEntityType(); - List getEventsForMap(List teis); - Observable downloadTei(String teiUid); TeiDownloadResult download(String teiUid, @Nullable String enrollmentUid, String reason); @@ -85,9 +80,4 @@ public interface SearchRepository { boolean filtersApplyOnGlobalSearch(); - @NotNull HashSet getFetchedTeiUIDs(); - - SearchParametersModel getSavedSearchParameters(); - - FilterManager getSavedFilters(); } diff --git a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryImpl.java b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryImpl.java index cd66d341233..f994e09b025 100644 --- a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryImpl.java +++ b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryImpl.java @@ -8,14 +8,11 @@ import org.dhis2.bindings.ValueExtensionsKt; import org.dhis2.commons.Constants; import org.dhis2.commons.data.EntryMode; -import org.dhis2.commons.data.EventModel; -import org.dhis2.commons.data.EventViewModelType; import org.dhis2.commons.date.DateUtils; import org.dhis2.commons.filters.FilterManager; import org.dhis2.commons.filters.data.FilterPresenter; import org.dhis2.commons.filters.sorting.SortingItem; import org.dhis2.commons.network.NetworkUtils; -import org.dhis2.commons.resources.DhisPeriodUtils; import org.dhis2.commons.resources.MetadataIconProvider; import org.dhis2.commons.resources.ResourceManager; import org.dhis2.data.dhislogic.DhisEnrollmentUtils; @@ -86,7 +83,6 @@ import java.util.Map; import dhis2.org.analytics.charts.Charts; -import io.reactivex.Flowable; import io.reactivex.Observable; import io.reactivex.Single; import kotlin.Pair; @@ -99,10 +95,7 @@ public class SearchRepositoryImpl implements SearchRepository { private final D2 d2; private final SearchSortingValueSetter sortingValueSetter; private TrackedEntitySearchCollectionRepository trackedEntityInstanceQuery; - public SearchParametersModel savedSearchParameters; - private FilterManager savedFilters; private FilterPresenter filterPresenter; - private DhisPeriodUtils periodUtils; private String currentProgram; private final Charts charts; private final CrashReportController crashReportController; @@ -132,7 +125,6 @@ public class SearchRepositoryImpl implements SearchRepository { FilterPresenter filterPresenter, ResourceManager resources, SearchSortingValueSetter sortingValueSetter, - DhisPeriodUtils periodUtils, Charts charts, CrashReportController crashReportController, NetworkUtils networkUtils, @@ -148,7 +140,6 @@ public class SearchRepositoryImpl implements SearchRepository { this.resources = resources; this.sortingValueSetter = sortingValueSetter; this.filterPresenter = filterPresenter; - this.periodUtils = periodUtils; this.charts = charts; this.crashReportController = crashReportController; this.dateUtils = dateUtils; @@ -184,36 +175,15 @@ public void clearFetchedList() { fetchedTeiUids.clear(); } - @NonNull - @Override - public Flowable> searchTeiForMap(SearchParametersModel searchParametersModel, boolean isOnline) { - - boolean allowCache = false; - if (!searchParametersModel.equals(savedSearchParameters) || !FilterManager.getInstance().equals(savedFilters)) { - trackedEntityInstanceQuery = getFilteredRepository(searchParametersModel); - } else { - allowCache = true; - } - - if (isOnline && FilterManager.getInstance().getStateFilters().isEmpty()) - return trackedEntityInstanceQuery.allowOnlineCache().eq(allowCache).offlineFirst().get().toFlowable() - .flatMapIterable(list -> list) - .map(tei -> transform(tei, searchParametersModel.getSelectedProgram(), false, FilterManager.getInstance().getSortingItem())) - .toList().toFlowable(); - else - return trackedEntityInstanceQuery.allowOnlineCache().eq(allowCache).offlineOnly().get().toFlowable() - .flatMapIterable(list -> list) - .map(tei -> transform(tei, searchParametersModel.getSelectedProgram(), true, FilterManager.getInstance().getSortingItem())) - .toList().toFlowable(); - } @Override public TrackedEntitySearchCollectionRepository getFilteredRepository(SearchParametersModel searchParametersModel) { - this.savedSearchParameters = searchParametersModel.copy(); - this.savedFilters = FilterManager.getInstance().copy(); + String programUid = searchParametersModel.getSelectedProgram() != null + ? searchParametersModel.getSelectedProgram().uid() + : null; trackedEntityInstanceQuery = filterPresenter.filteredTrackedEntityInstances( - searchParametersModel.getSelectedProgram(), teiType + programUid, teiType ); for (int i = 0; i < searchParametersModel.getQueryData().keySet().size(); i++) { @@ -666,20 +636,6 @@ public boolean filtersApplyOnGlobalSearch() { !FilterManager.getInstance().getStateFilters().isEmpty(); } - @Override - public @NotNull HashSet getFetchedTeiUIDs() { - return fetchedTeiUids; - } - - @Override - public SearchParametersModel getSavedSearchParameters() { - return savedSearchParameters; - } - - @Override - public FilterManager getSavedFilters() { - return savedFilters; - } @Override public Observable getTrackedEntityType(String trackedEntityUid) { @@ -691,59 +647,6 @@ public TrackedEntityType getTrackedEntityType() { return d2.trackedEntityModule().trackedEntityTypes().uid(teiType).blockingGet(); } - @Override - public List getEventsForMap(List teis) { - List eventModels = new ArrayList<>(); - List teiUidList = new ArrayList<>(); - for (SearchTeiModel tei : teis) { - teiUidList.add(tei.getTei().uid()); - } - - List events = d2.eventModule().events() - .byTrackedEntityInstanceUids(teiUidList) - .byDeleted().isFalse() - .blockingGet(); - - HashMap cacheStages = new HashMap<>(); - - for (Event event : events) { - if (!cacheStages.containsKey(event.programStage())) { - ProgramStage stage = d2.programModule().programStages() - .uid(event.programStage()) - .blockingGet(); - cacheStages.put(event.programStage(), stage); - } - - eventModels.add( - new EventModel( - EventViewModelType.EVENT, - cacheStages.get(event.programStage()), - event, - 0, - null, - true, - true, - orgUnitName(event.organisationUnit()), - true, - null, - null, - false, - false, - false, - false, - false, - 0, - periodUtils.getPeriodUIString(cacheStages.get(event.programStage()).periodType(), event.eventDate() != null ? event.eventDate() : event.dueDate(), Locale.getDefault()), - null, - metadataIconProvider.invoke(cacheStages.get(event.programStage()).style()), - true, - true - )); - } - - return eventModels; - } - private String orgUnitName(String orgUnitUid) { if (!orgUnitNameCache.containsKey(orgUnitUid)) { OrganisationUnit organisationUnit = d2.organisationUnitModule() diff --git a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEModule.java b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEModule.java index 2bebf70266c..4419e730727 100644 --- a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEModule.java +++ b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEModule.java @@ -166,7 +166,6 @@ SearchRepository searchRepository(@NonNull D2 d2, filterPresenter, resources, searchSortingValueSetter, - periodUtils, charts, crashReportController, networkUtils, diff --git a/app/src/test/java/org/dhis2/usescases/main/program/ProgramRepositoryImplTest.kt b/app/src/test/java/org/dhis2/usescases/main/program/ProgramRepositoryImplTest.kt index ff8c3653a59..8b86f26d761 100644 --- a/app/src/test/java/org/dhis2/usescases/main/program/ProgramRepositoryImplTest.kt +++ b/app/src/test/java/org/dhis2/usescases/main/program/ProgramRepositoryImplTest.kt @@ -242,7 +242,7 @@ class ProgramRepositoryImplTest { filterPresenter.filteredTrackerProgram(any()).offlineFirst(), ) doReturn mock() whenever( - filterPresenter.filteredTrackerProgram(any()).offlineFirst().blockingGetUids(), + filterPresenter.filteredTrackerProgram(any()).offlineFirst().blockingGetUids(), ) doReturn listOf("0", "1") } diff --git a/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryTest.kt b/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryTest.kt index b2437a4242b..bf93de0c0ae 100644 --- a/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryTest.kt +++ b/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryTest.kt @@ -7,7 +7,6 @@ import org.dhis2.commons.filters.Filters import org.dhis2.commons.filters.data.FilterPresenter import org.dhis2.commons.filters.sorting.SortingItem import org.dhis2.commons.network.NetworkUtils -import org.dhis2.commons.resources.DhisPeriodUtils import org.dhis2.commons.resources.MetadataIconProvider import org.dhis2.commons.resources.ResourceManager import org.dhis2.commons.viewmodel.DispatcherProvider @@ -91,7 +90,6 @@ class SearchRepositoryTest { private val filterPresenter: FilterPresenter = mock() private val resourceManager: ResourceManager = mock() private val sortingValueSetter: SearchSortingValueSetter = mock() - private val dhisPeriodUtils: DhisPeriodUtils = mock() private val charts: Charts = mock() private val crashReporterController: CrashReportController = mock() private val networkUtils: NetworkUtils = mock() @@ -137,7 +135,6 @@ class SearchRepositoryTest { filterPresenter, resourceManager, sortingValueSetter, - dhisPeriodUtils, charts, crashReporterController, networkUtils, diff --git a/commons/src/main/java/org/dhis2/commons/filters/data/FilterPresenter.kt b/commons/src/main/java/org/dhis2/commons/filters/data/FilterPresenter.kt index b9e2fd347e5..a857bc0013f 100644 --- a/commons/src/main/java/org/dhis2/commons/filters/data/FilterPresenter.kt +++ b/commons/src/main/java/org/dhis2/commons/filters/data/FilterPresenter.kt @@ -34,15 +34,15 @@ class FilterPresenter fun filteredEventProgram(program: Program): EventQueryCollectionRepository = eventProgramFilterSearchHelper.getFilteredEventRepository(program) - fun filteredTrackerProgram(program: Program): TrackedEntitySearchCollectionRepository = - trackerFilterSearchHelper.getFilteredProgramRepository(program.uid()) + fun filteredTrackerProgram(program: String): TrackedEntitySearchCollectionRepository = + trackerFilterSearchHelper.getFilteredProgramRepository(program) fun filteredTrackedEntityTypes(trackedEntityTypeUid: String): TrackedEntitySearchCollectionRepository = trackerFilterSearchHelper .getFilteredTrackedEntityTypeRepository(trackedEntityTypeUid) fun filteredTrackedEntityInstances( - program: Program?, + program: String?, trackedEntityTypeUid: String, ): TrackedEntitySearchCollectionRepository = program?.let { filteredTrackerProgram(program) } diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index b4a5eccf956..3e51a169baf 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -9,6 +9,7 @@ + @@ -541,6 +542,19 @@ + + + + + + + + + + + + + @@ -582,6 +596,22 @@ + + + + + + + + + + + + + + + + @@ -619,6 +649,19 @@ + + + + + + + + + + + + + @@ -655,6 +698,22 @@ + + + + + + + + + + + + + + + + @@ -697,10 +756,18 @@ + + + + + + + + @@ -753,6 +820,22 @@ + + + + + + + + + + + + + + + + @@ -795,6 +878,19 @@ + + + + + + + + + + + + + @@ -836,6 +932,22 @@ + + + + + + + + + + + + + + + + @@ -1090,6 +1202,11 @@ + + + + + @@ -1135,6 +1252,14 @@ + + + + + + + + @@ -1159,6 +1284,11 @@ + + + + + @@ -1191,6 +1321,14 @@ + + + + + + + + @@ -1247,6 +1385,14 @@ + + + + + + + + @@ -1271,11 +1417,29 @@ + + + + + + + + + + + + + + + + + + @@ -1331,6 +1495,14 @@ + + + + + + + + @@ -1389,6 +1561,19 @@ + + + + + + + + + + + + + @@ -1418,6 +1603,22 @@ + + + + + + + + + + + + + + + + @@ -1450,11 +1651,29 @@ + + + + + + + + + + + + + + + + + + @@ -1484,6 +1703,27 @@ + + + + + + + + + + + + + + + + + + + + + @@ -1516,6 +1756,19 @@ + + + + + + + + + + + + + @@ -1545,6 +1798,22 @@ + + + + + + + + + + + + + + + + @@ -1569,6 +1838,11 @@ + + + + + @@ -1590,6 +1864,14 @@ + + + + + + + + @@ -1611,6 +1893,11 @@ + + + + + @@ -1632,6 +1919,14 @@ + + + + + + + + @@ -1656,6 +1951,14 @@ + + + + + + + + @@ -1688,6 +1991,19 @@ + + + + + + + + + + + + + @@ -1722,6 +2038,22 @@ + + + + + + + + + + + + + + + + @@ -1751,6 +2083,11 @@ + + + + + @@ -1772,6 +2109,14 @@ + + + + + + + + @@ -1796,6 +2141,11 @@ + + + + + @@ -1817,6 +2167,14 @@ + + + + + + + + @@ -1841,6 +2199,11 @@ + + + + + @@ -1862,6 +2225,14 @@ + + + + + + + + @@ -1894,6 +2265,19 @@ + + + + + + + + + + + + + @@ -1933,6 +2317,27 @@ + + + + + + + + + + + + + + + + + + + + + @@ -1957,6 +2362,16 @@ + + + + + + + + + + @@ -1991,6 +2406,27 @@ + + + + + + + + + + + + + + + + + + + + + @@ -3602,6 +4038,22 @@ + + + + + + + + + + + + + + + + @@ -3618,6 +4070,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -3642,6 +4134,22 @@ + + + + + + + + + + + + + + + + @@ -3650,6 +4158,22 @@ + + + + + + + + + + + + + + + + @@ -3658,6 +4182,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -3682,6 +4238,22 @@ + + + + + + + + + + + + + + + + @@ -3690,6 +4262,22 @@ + + + + + + + + + + + + + + + + @@ -3698,6 +4286,22 @@ + + + + + + + + + + + + + + + + @@ -4400,6 +5004,14 @@ + + + + + + + + @@ -4477,6 +5089,14 @@ + + + + + + + + @@ -4485,6 +5105,11 @@ + + + + + @@ -4493,6 +5118,14 @@ + + + + + + + + @@ -9734,14 +10367,6 @@ - - - - - - - - @@ -12100,6 +12725,11 @@ + + + + + diff --git a/tracker/build.gradle.kts b/tracker/build.gradle.kts index 39bd0a7dd63..857e11e1cd6 100644 --- a/tracker/build.gradle.kts +++ b/tracker/build.gradle.kts @@ -36,6 +36,7 @@ kotlin { implementation(libs.compose.material3.window) implementation(compose.components.resources) implementation(project(":commonskmm")) + implementation(libs.androidx.compose.paging) // Koin api(libs.koin.core) From e4e52e4c358ccfae4187874095b15d4a5c177c05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manu=20Mu=C3=B1oz?= Date: Mon, 2 Feb 2026 10:11:00 +0100 Subject: [PATCH 035/114] refactor: [ANDROAPP-7461] remove deprecated onNextClicked (#4613) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Manu Muñoz --- .../aggregates/ui/inputs/InputProvider.kt | 30 +++++++++---------- .../ui/provider/inputfield/AgeProvider.kt | 2 +- .../ui/provider/inputfield/DateProvider.kt | 2 +- .../ui/provider/inputfield/FieldProvider.kt | 30 +++++++++++-------- .../InputsForTextValueTypeProvider.kt | 6 ++-- .../inputfield/UnitIntervalInputProvider.kt | 2 +- .../main/ui/screen/ServerValidationContent.kt | 2 +- 7 files changed, 39 insertions(+), 35 deletions(-) diff --git a/aggregates/src/commonMain/kotlin/org/dhis2/mobile/aggregates/ui/inputs/InputProvider.kt b/aggregates/src/commonMain/kotlin/org/dhis2/mobile/aggregates/ui/inputs/InputProvider.kt index 18190b8143c..8c2fa2a7234 100644 --- a/aggregates/src/commonMain/kotlin/org/dhis2/mobile/aggregates/ui/inputs/InputProvider.kt +++ b/aggregates/src/commonMain/kotlin/org/dhis2/mobile/aggregates/ui/inputs/InputProvider.kt @@ -223,7 +223,7 @@ internal fun InputProvider( onAction(UiAction.OnValueChanged(inputData.id, value)) } }, - onNextClicked = { onAction.invoke(UiAction.OnNextClick(inputData.id)) }, + onImeActionClick = { onAction.invoke(UiAction.OnNextClick(inputData.id)) }, modifier = modifierWithFocus, ) } @@ -329,7 +329,7 @@ internal fun InputProvider( dateTextValue = it ?: TextFieldValue() onAction(UiAction.OnValueChanged(inputData.id, dateTextValue.text)) }, - onNextClicked = { onAction(UiAction.OnNextClick(inputData.id)) }, + onImeActionClick = { onAction(UiAction.OnNextClick(inputData.id)) }, modifier = modifierWithFocus, ) } @@ -342,7 +342,7 @@ internal fun InputProvider( legendData = inputData.legendData, inputTextFieldValue = textValue, isRequiredField = inputData.isRequired, - onNextClicked = { onAction.invoke(UiAction.OnNextClick(inputData.id)) }, + onImeActionClick = { onAction.invoke(UiAction.OnNextClick(inputData.id)) }, onValueChanged = { textValue = it ?: TextFieldValue() onAction(UiAction.OnValueChanged(inputData.id, textValue.text)) @@ -457,7 +457,7 @@ internal fun InputProvider( legendData = inputData.legendData, inputTextFieldValue = textValue, isRequiredField = inputData.isRequired, - onNextClicked = { onAction.invoke(UiAction.OnNextClick(inputData.id)) }, + onImeActionClick = { onAction.invoke(UiAction.OnNextClick(inputData.id)) }, onValueChanged = { textValue = it ?: TextFieldValue() onAction(UiAction.OnValueChanged(inputData.id, textValue.text)) @@ -477,7 +477,7 @@ internal fun InputProvider( legendData = inputData.legendData, inputTextFieldValue = textValue, isRequiredField = inputData.isRequired, - onNextClicked = { onAction.invoke(UiAction.OnNextClick(inputData.id)) }, + onImeActionClick = { onAction.invoke(UiAction.OnNextClick(inputData.id)) }, onValueChanged = { textValue = it ?: TextFieldValue() onAction(UiAction.OnValueChanged(inputData.id, textValue.text)) @@ -497,7 +497,7 @@ internal fun InputProvider( legendData = inputData.legendData, inputTextFieldValue = textValue, isRequiredField = inputData.isRequired, - onNextClicked = { onAction.invoke(UiAction.OnNextClick(inputData.id)) }, + onImeActionClick = { onAction.invoke(UiAction.OnNextClick(inputData.id)) }, onValueChanged = { textValue = it ?: TextFieldValue() onAction(UiAction.OnValueChanged(inputData.id, textValue.text)) @@ -517,7 +517,7 @@ internal fun InputProvider( legendData = inputData.legendData, inputTextFieldValue = textValue, isRequiredField = inputData.isRequired, - onNextClicked = { onAction.invoke(UiAction.OnNextClick(inputData.id)) }, + onImeActionClick = { onAction.invoke(UiAction.OnNextClick(inputData.id)) }, onValueChanged = { textValue = it ?: TextFieldValue() onAction(UiAction.OnValueChanged(inputData.id, textValue.text)) @@ -537,7 +537,7 @@ internal fun InputProvider( legendData = inputData.legendData, inputTextFieldValue = textValue, isRequiredField = inputData.isRequired, - onNextClicked = { onAction.invoke(UiAction.OnNextClick(inputData.id)) }, + onImeActionClick = { onAction.invoke(UiAction.OnNextClick(inputData.id)) }, onValueChanged = { if (textValue.text != it?.text) { textValue = it ?: TextFieldValue() @@ -559,7 +559,7 @@ internal fun InputProvider( legendData = inputData.legendData, inputTextFieldValue = textValue, isRequiredField = inputData.isRequired, - onNextClicked = { onAction.invoke(UiAction.OnNextClick(inputData.id)) }, + onImeActionClick = { onAction.invoke(UiAction.OnNextClick(inputData.id)) }, onValueChanged = { textValue = it ?: TextFieldValue() onAction(UiAction.OnValueChanged(inputData.id, textValue.text)) @@ -783,7 +783,7 @@ internal fun InputProvider( legendData = inputData.legendData, inputTextFieldValue = textValue, isRequiredField = inputData.isRequired, - onNextClicked = { onAction.invoke(UiAction.OnNextClick(inputData.id)) }, + onImeActionClick = { onAction.invoke(UiAction.OnNextClick(inputData.id)) }, onValueChanged = { textValue = it ?: TextFieldValue() onAction(UiAction.OnValueChanged(inputData.id, textValue.text)) @@ -824,7 +824,7 @@ internal fun InputProvider( legendData = inputData.legendData, inputTextFieldValue = textValue, isRequiredField = inputData.isRequired, - onNextClicked = { onAction.invoke(UiAction.OnNextClick(inputData.id)) }, + onImeActionClick = { onAction.invoke(UiAction.OnNextClick(inputData.id)) }, onValueChanged = { textValue = it ?: TextFieldValue() onAction(UiAction.OnValueChanged(inputData.id, textValue.text)) @@ -847,7 +847,7 @@ internal fun InputProvider( inputTextFieldValue = textValue, isRequiredField = inputData.isRequired, onCallActionClicked = { onAction(UiAction.OnCall(inputData.id, textValue.text)) }, - onNextClicked = { onAction.invoke(UiAction.OnNextClick(inputData.id)) }, + onImeActionClick = { onAction.invoke(UiAction.OnNextClick(inputData.id)) }, onValueChanged = { textValue = it ?: TextFieldValue() onAction(UiAction.OnValueChanged(inputData.id, textValue.text)) @@ -867,7 +867,7 @@ internal fun InputProvider( legendData = inputData.legendData, inputTextFieldValue = textValue, isRequiredField = inputData.isRequired, - onNextClicked = { onAction.invoke(UiAction.OnNextClick(inputData.id)) }, + onImeActionClick = { onAction.invoke(UiAction.OnNextClick(inputData.id)) }, onValueChanged = { textValue = it ?: TextFieldValue() onAction(UiAction.OnValueChanged(inputData.id, textValue.text)) @@ -909,7 +909,7 @@ internal fun InputProvider( legendData = inputData.legendData, inputTextFieldValue = textValue, isRequiredField = inputData.isRequired, - onNextClicked = { onAction.invoke(UiAction.OnNextClick(inputData.id)) }, + onImeActionClick = { onAction.invoke(UiAction.OnNextClick(inputData.id)) }, onValueChanged = { textValue = it ?: TextFieldValue() onAction(UiAction.OnValueChanged(inputData.id, textValue.text)) @@ -928,7 +928,7 @@ internal fun InputProvider( legendData = inputData.legendData, inputTextFieldValue = textValue, isRequiredField = inputData.isRequired, - onNextClicked = { onAction.invoke(UiAction.OnNextClick(inputData.id)) }, + onImeActionClick = { onAction.invoke(UiAction.OnNextClick(inputData.id)) }, onValueChanged = { textValue = it ?: TextFieldValue() onAction(UiAction.OnValueChanged(inputData.id, textValue.text)) diff --git a/form/src/main/java/org/dhis2/form/ui/provider/inputfield/AgeProvider.kt b/form/src/main/java/org/dhis2/form/ui/provider/inputfield/AgeProvider.kt index a7414fa1c45..ed9ff8f3c5e 100644 --- a/form/src/main/java/org/dhis2/form/ui/provider/inputfield/AgeProvider.kt +++ b/form/src/main/java/org/dhis2/form/ui/provider/inputfield/AgeProvider.kt @@ -151,7 +151,7 @@ fun ProvideInputAge( } } }, - onNextClicked = onNextClicked, + onImeActionClick = { onNextClicked() }, modifier = modifier, ) } diff --git a/form/src/main/java/org/dhis2/form/ui/provider/inputfield/DateProvider.kt b/form/src/main/java/org/dhis2/form/ui/provider/inputfield/DateProvider.kt index 868804d8474..f9a65c4df6d 100644 --- a/form/src/main/java/org/dhis2/form/ui/provider/inputfield/DateProvider.kt +++ b/form/src/main/java/org/dhis2/form/ui/provider/inputfield/DateProvider.kt @@ -105,7 +105,7 @@ fun ProvideInputDate( } intentHandler.invoke(formIntent) }, - onNextClicked = onNextClicked, + onImeActionClick = { onNextClicked() }, ) } diff --git a/form/src/main/java/org/dhis2/form/ui/provider/inputfield/FieldProvider.kt b/form/src/main/java/org/dhis2/form/ui/provider/inputfield/FieldProvider.kt index 0b39ebef224..b04c8cc3728 100644 --- a/form/src/main/java/org/dhis2/form/ui/provider/inputfield/FieldProvider.kt +++ b/form/src/main/java/org/dhis2/form/ui/provider/inputfield/FieldProvider.kt @@ -584,7 +584,7 @@ private fun ProvideIntegerPositive( legendData = fieldUiModel.legend(), inputTextFieldValue = value, isRequiredField = fieldUiModel.mandatory, - onNextClicked = { + onImeActionClick = { clickedOnNext = true onNextClicked() }, @@ -653,7 +653,7 @@ private fun ProvideIntegerPositiveOrZero( legendData = fieldUiModel.legend(), inputTextFieldValue = value, isRequiredField = fieldUiModel.mandatory, - onNextClicked = { + onImeActionClick = { clickedOnNext = true onNextClicked() }, @@ -722,7 +722,7 @@ private fun ProvidePercentage( legendData = fieldUiModel.legend(), inputTextFieldValue = value, isRequiredField = fieldUiModel.mandatory, - onNextClicked = { + onImeActionClick = { clickedOnNext = true onNextClicked() }, @@ -791,7 +791,7 @@ private fun ProvideNumber( legendData = fieldUiModel.legend(), inputTextFieldValue = value, isRequiredField = fieldUiModel.mandatory, - onNextClicked = { + onImeActionClick = { clickedOnNext = true onNextClicked() }, @@ -865,7 +865,7 @@ private fun ProvideIntegerNegative( legendData = fieldUiModel.legend(), inputTextFieldValue = value, isRequiredField = fieldUiModel.mandatory, - onNextClicked = { + onImeActionClick = { clickedOnNext = true onNextClicked() }, @@ -934,9 +934,13 @@ private fun ProvideLongText( legendData = fieldUiModel.legend(), inputTextFieldValue = value, isRequiredField = fieldUiModel.mandatory, - onNextClicked = { - clickedOnNext = true - onNextClicked() + onImeActionClick = { imeAction -> + when (imeAction) { + ImeAction.Next -> { + clickedOnNext = true + onNextClicked() + } + } }, onValueChanged = { value = it ?: TextFieldValue() @@ -1004,7 +1008,7 @@ private fun ProvideLetter( legendData = fieldUiModel.legend(), inputTextFieldValue = value, isRequiredField = fieldUiModel.mandatory, - onNextClicked = { + onImeActionClick = { clickedOnNext = true onNextClicked() }, @@ -1073,7 +1077,7 @@ private fun ProvideInteger( legendData = fieldUiModel.legend(), inputTextFieldValue = value, isRequiredField = fieldUiModel.mandatory, - onNextClicked = { + onImeActionClick = { clickedOnNext = true onNextClicked() }, @@ -1143,7 +1147,7 @@ private fun ProvideEmail( legendData = fieldUiModel.legend(), inputTextFieldValue = value, isRequiredField = fieldUiModel.mandatory, - onNextClicked = { + onImeActionClick = { clickedOnNext = true onNextClicked() }, @@ -1222,7 +1226,7 @@ private fun ProvideInputPhoneNumber( legendData = fieldUiModel.legend(), inputTextFieldValue = value, isRequiredField = fieldUiModel.mandatory, - onNextClicked = { + onImeActionClick = { clickedOnNext = true onNextClicked() }, @@ -1301,7 +1305,7 @@ private fun ProvideInputLink( legendData = fieldUiModel.legend(), inputTextFieldValue = value, isRequiredField = fieldUiModel.mandatory, - onNextClicked = { + onImeActionClick = { clickedOnNext = true onNextClicked() }, diff --git a/form/src/main/java/org/dhis2/form/ui/provider/inputfield/InputsForTextValueTypeProvider.kt b/form/src/main/java/org/dhis2/form/ui/provider/inputfield/InputsForTextValueTypeProvider.kt index 4cb4471e7ea..8d4d0541424 100644 --- a/form/src/main/java/org/dhis2/form/ui/provider/inputfield/InputsForTextValueTypeProvider.kt +++ b/form/src/main/java/org/dhis2/form/ui/provider/inputfield/InputsForTextValueTypeProvider.kt @@ -102,7 +102,7 @@ private fun ProvideQRInput( inputTextFieldValue = value, inputStyle = inputStyle, isRequiredField = fieldUiModel.mandatory, - onNextClicked = { + onImeActionClick = { clickedOnNext = true onNextClicked() }, @@ -187,7 +187,7 @@ private fun ProvideDefaultTextInput( inputTextFieldValue = value, inputStyle = inputStyle, isRequiredField = fieldUiModel.mandatory, - onNextClicked = { + onImeActionClick = { clickedOnNext = true onNextClicked() }, @@ -252,7 +252,7 @@ private fun ProvideBarcodeInput( legendData = fieldUiModel.legend(), inputTextFieldValue = value, isRequiredField = fieldUiModel.mandatory, - onNextClicked = { + onImeActionClick = { clickedOnNext = true onNextClicked() }, diff --git a/form/src/main/java/org/dhis2/form/ui/provider/inputfield/UnitIntervalInputProvider.kt b/form/src/main/java/org/dhis2/form/ui/provider/inputfield/UnitIntervalInputProvider.kt index b2e317aa419..b9331718646 100644 --- a/form/src/main/java/org/dhis2/form/ui/provider/inputfield/UnitIntervalInputProvider.kt +++ b/form/src/main/java/org/dhis2/form/ui/provider/inputfield/UnitIntervalInputProvider.kt @@ -39,7 +39,7 @@ fun ProvideUnitIntervalInput( legendData = fieldUiModel.legend(), inputTextFieldValue = value, isRequiredField = fieldUiModel.mandatory, - onNextClicked = onNextClicked, + onImeActionClick = { onNextClicked() }, onValueChanged = { value = it ?: TextFieldValue() intentHandler( diff --git a/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/ui/screen/ServerValidationContent.kt b/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/ui/screen/ServerValidationContent.kt index f8a34e422b3..31446065e0b 100644 --- a/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/ui/screen/ServerValidationContent.kt +++ b/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/ui/screen/ServerValidationContent.kt @@ -131,7 +131,7 @@ internal fun ServerValidationContent( server = it ?: TextFieldValue() }, imeAction = ImeAction.Done, - onNextClicked = { + onImeActionClick = { onValidate(server.text) inputFocusState = InputShellState.UNFOCUSED }, From feb6b1dff13fbc5d4a6968319fcda4d0e82cee58 Mon Sep 17 00:00:00 2001 From: Xavier Molloy Date: Mon, 2 Feb 2026 13:11:07 +0100 Subject: [PATCH 036/114] feat: [ANDROAPP-7472] II data models and mappers (#4623) * feat: [ANDROAPP-7472] data models and mappers * feat: [ANDROAPP-7472] ktlint and copilot review comments * feat: [ANDROAPP-7472] correct geometry mapping * feat: [ANDROAPP-7472] remove verbose imports * feat: [ANDROAPP-7472] copilot review * fix: [ANDROAPP-7472] copilot review * fix: [ANDROAPP-7472] sonar smell * fix: [ANDROAPP-7472] code review comments --- ...omainToSDKTrackedEntitySearchItemMapper.kt | 135 +++++++++++++++++ .../data/TrackedEntitySearchItemMapper.kt | 138 ++++++++++++++++++ .../model/SearchTrackedEntitiesInput.kt | 10 ++ .../model/SearchTrackedEntityAttribute.kt | 6 + .../model/TrackedEntitySearchItemResult.kt | 81 ++++++++++ 5 files changed, 370 insertions(+) create mode 100644 tracker/src/androidMain/kotlin/org/dhis2/tracker/search/data/DomainToSDKTrackedEntitySearchItemMapper.kt create mode 100644 tracker/src/androidMain/kotlin/org/dhis2/tracker/search/data/TrackedEntitySearchItemMapper.kt create mode 100644 tracker/src/commonMain/kotlin/org/dhis2/tracker/search/model/SearchTrackedEntitiesInput.kt create mode 100644 tracker/src/commonMain/kotlin/org/dhis2/tracker/search/model/SearchTrackedEntityAttribute.kt create mode 100644 tracker/src/commonMain/kotlin/org/dhis2/tracker/search/model/TrackedEntitySearchItemResult.kt diff --git a/tracker/src/androidMain/kotlin/org/dhis2/tracker/search/data/DomainToSDKTrackedEntitySearchItemMapper.kt b/tracker/src/androidMain/kotlin/org/dhis2/tracker/search/data/DomainToSDKTrackedEntitySearchItemMapper.kt new file mode 100644 index 00000000000..08b8664494e --- /dev/null +++ b/tracker/src/androidMain/kotlin/org/dhis2/tracker/search/data/DomainToSDKTrackedEntitySearchItemMapper.kt @@ -0,0 +1,135 @@ +package org.dhis2.tracker.search.data + +import org.dhis2.tracker.search.model.GeometryFeatureType +import org.dhis2.tracker.search.model.SyncState +import org.dhis2.tracker.search.model.TrackedEntityGeometry +import org.dhis2.tracker.search.model.TrackedEntitySearchItemAttributeDomain +import org.dhis2.tracker.search.model.TrackedEntitySearchItemResult +import org.dhis2.tracker.search.model.TrackedEntityTypeDomain +import org.dhis2.tracker.ui.input.model.TrackerInputType +import org.hisp.dhis.android.core.common.FeatureType +import org.hisp.dhis.android.core.common.Geometry +import org.hisp.dhis.android.core.common.State +import org.hisp.dhis.android.core.common.ValueType +import org.hisp.dhis.android.core.trackedentity.TrackedEntityType +import org.hisp.dhis.android.core.trackedentity.search.TrackedEntitySearchItem +import org.hisp.dhis.android.core.trackedentity.search.TrackedEntitySearchItemAttribute +import org.hisp.dhis.android.core.trackedentity.search.TrackedEntitySearchItemProgramOwner + +fun transformDomainTeiToSDKTei(trackedEntitySearchItemResult: TrackedEntitySearchItemResult): TrackedEntitySearchItem = + TrackedEntitySearchItem( + uid = trackedEntitySearchItemResult.uid, + created = trackedEntitySearchItemResult.created, + lastUpdated = trackedEntitySearchItemResult.lastUpdated, + createdAtClient = trackedEntitySearchItemResult.createdAtClient, + lastUpdatedAtClient = trackedEntitySearchItemResult.lastUpdatedAtClient, + organisationUnit = trackedEntitySearchItemResult.organisationUnit, + geometry = trackedEntitySearchItemResult.geometry?.toSDKGeometry(), + syncState = trackedEntitySearchItemResult.syncState?.toSDKState(), + aggregatedSyncState = trackedEntitySearchItemResult.aggregatedSyncState?.toSDKState(), + deleted = trackedEntitySearchItemResult.deleted, + isOnline = trackedEntitySearchItemResult.isOnline, + type = mapTrackedEntityType(trackedEntitySearchItemResult.type), + header = trackedEntitySearchItemResult.header, + attributeValues = trackedEntitySearchItemResult.attributeValues.map { it.toSDKAttribute() }, + programOwners = + trackedEntitySearchItemResult.programOwners.map { + TrackedEntitySearchItemProgramOwner( + program = it.program, + ownerOrgUnit = it.organisationUnit, + ) + }, + ) + +private fun TrackedEntityGeometry.toSDKGeometry(): Geometry? = + coordinates?.let { + Geometry + .builder() + .type(geometryFeatureType.toSDKFeatureType()) + .coordinates(it) + .build() + } + +private fun GeometryFeatureType.toSDKFeatureType(): FeatureType = + when (this) { + GeometryFeatureType.POINT -> FeatureType.POINT + GeometryFeatureType.POLYGON -> FeatureType.POLYGON + GeometryFeatureType.MULTI_POLYGON -> FeatureType.MULTI_POLYGON + GeometryFeatureType.NONE -> FeatureType.NONE + GeometryFeatureType.SYMBOL -> FeatureType.SYMBOL + } + +private fun SyncState.toSDKState(): State = + when (this) { + SyncState.TO_POST -> State.TO_POST + SyncState.TO_UPDATE -> State.TO_UPDATE + SyncState.ERROR -> State.ERROR + SyncState.SYNCED -> State.SYNCED + SyncState.WARNING -> State.WARNING + SyncState.UPLOADING -> State.UPLOADING + SyncState.RELATIONSHIP -> State.RELATIONSHIP + SyncState.SENT_VIA_SMS -> State.SENT_VIA_SMS + SyncState.SYNCED_VIA_SMS -> State.SYNCED_VIA_SMS + } + +private fun TrackedEntitySearchItemAttributeDomain.toSDKAttribute(): TrackedEntitySearchItemAttribute = + TrackedEntitySearchItemAttribute( + attribute = attribute, + displayName = displayName, + displayFormName = displayFormName, + value = value, + created = created, + lastUpdated = lastUpdated, + valueType = valueType.toSDKValueType(), + displayInList = displayInList, + optionSet = optionSet, + ) + +private fun TrackerInputType.toSDKValueType(): ValueType = + when (this) { + TrackerInputType.TEXT -> ValueType.TEXT + TrackerInputType.LONG_TEXT -> ValueType.LONG_TEXT + TrackerInputType.LETTER -> ValueType.LETTER + TrackerInputType.PHONE_NUMBER -> ValueType.PHONE_NUMBER + TrackerInputType.EMAIL -> ValueType.EMAIL + TrackerInputType.URL -> ValueType.URL + TrackerInputType.NUMBER -> ValueType.NUMBER + TrackerInputType.INTEGER -> ValueType.INTEGER + TrackerInputType.INTEGER_POSITIVE -> ValueType.INTEGER_POSITIVE + TrackerInputType.INTEGER_NEGATIVE -> ValueType.INTEGER_NEGATIVE + TrackerInputType.INTEGER_ZERO_OR_POSITIVE -> ValueType.INTEGER_ZERO_OR_POSITIVE + TrackerInputType.PERCENTAGE -> ValueType.PERCENTAGE + TrackerInputType.UNIT_INTERVAL -> ValueType.UNIT_INTERVAL + TrackerInputType.AGE -> ValueType.AGE + TrackerInputType.ORGANISATION_UNIT -> ValueType.ORGANISATION_UNIT + TrackerInputType.DATE_TIME -> ValueType.DATETIME + TrackerInputType.DATE -> ValueType.DATE + TrackerInputType.TIME -> ValueType.TIME + TrackerInputType.CHECKBOX, + TrackerInputType.RADIO_BUTTON, + -> ValueType.BOOLEAN + TrackerInputType.YES_ONLY_SWITCH, + TrackerInputType.YES_ONLY_CHECKBOX, + -> ValueType.TRUE_ONLY + TrackerInputType.QR_CODE, + TrackerInputType.BAR_CODE, + -> ValueType.TEXT + TrackerInputType.MULTI_SELECTION -> ValueType.MULTI_TEXT + TrackerInputType.DROPDOWN, + TrackerInputType.PERIOD_SELECTOR, + TrackerInputType.MATRIX, + TrackerInputType.SEQUENTIAL, + TrackerInputType.NOT_SUPPORTED, + TrackerInputType.CUSTOM_INTENT, + -> ValueType.TEXT + } + +private fun mapTrackedEntityType(trackedEntityTypeDomain: TrackedEntityTypeDomain): TrackedEntityType { + val firstAttribute = trackedEntityTypeDomain.trackedEntityTypeAttributeDomains.firstOrNull() + val teiTypeUid = firstAttribute?.trackedEntityTypeUid ?: "unknown" + + return TrackedEntityType + .builder() + .uid(teiTypeUid) + .build() +} diff --git a/tracker/src/androidMain/kotlin/org/dhis2/tracker/search/data/TrackedEntitySearchItemMapper.kt b/tracker/src/androidMain/kotlin/org/dhis2/tracker/search/data/TrackedEntitySearchItemMapper.kt new file mode 100644 index 00000000000..2b62b721425 --- /dev/null +++ b/tracker/src/androidMain/kotlin/org/dhis2/tracker/search/data/TrackedEntitySearchItemMapper.kt @@ -0,0 +1,138 @@ +package org.dhis2.tracker.search.data + +import org.dhis2.tracker.search.model.GeometryFeatureType +import org.dhis2.tracker.search.model.SyncState +import org.dhis2.tracker.search.model.TrackedEntityGeometry +import org.dhis2.tracker.search.model.TrackedEntitySearchItemAttributeDomain +import org.dhis2.tracker.search.model.TrackedEntitySearchItemProgramOwnerDomain +import org.dhis2.tracker.search.model.TrackedEntitySearchItemResult +import org.dhis2.tracker.search.model.TrackedEntityTypeAttributeDomain +import org.dhis2.tracker.search.model.TrackedEntityTypeDomain +import org.dhis2.tracker.ui.input.model.TrackerInputType +import org.hisp.dhis.android.core.common.FeatureType +import org.hisp.dhis.android.core.common.Geometry +import org.hisp.dhis.android.core.common.State +import org.hisp.dhis.android.core.common.ValueType +import org.hisp.dhis.android.core.trackedentity.TrackedEntityType +import org.hisp.dhis.android.core.trackedentity.TrackedEntityTypeAttribute +import org.hisp.dhis.android.core.trackedentity.search.TrackedEntitySearchItem +import org.hisp.dhis.android.core.trackedentity.search.TrackedEntitySearchItemAttribute +import org.hisp.dhis.android.core.trackedentity.search.TrackedEntitySearchItemProgramOwner + +fun TrackedEntitySearchItem.toTrackedEntitySearchItemResult(): TrackedEntitySearchItemResult = + TrackedEntitySearchItemResult( + uid = this.uid, + created = this.created, + lastUpdated = this.lastUpdated, + createdAtClient = this.createdAtClient, + lastUpdatedAtClient = this.lastUpdatedAtClient, + organisationUnit = this.organisationUnit, + geometry = this.geometry.toDomainGeometry(), + syncState = this.syncState?.toSyncState(), + aggregatedSyncState = this.aggregatedSyncState?.toSyncState(), + deleted = this.deleted, + isOnline = this.isOnline, + type = this.type.toTrackedEntityType(), + header = this.header, + attributeValues = this.attributeValues?.map { it.toTrackedEntitySearchItemAttribute() } ?: emptyList(), + programOwners = this.programOwners?.map { it.toTrackedEntitySearchItemProgramOwner() } ?: emptyList(), + ) + +private fun Geometry?.toDomainGeometry(): TrackedEntityGeometry? = + this?.let { + TrackedEntityGeometry( + geometryFeatureType = getGeometryType(it.type()), + coordinates = it.coordinates(), + ) + } + +private fun getGeometryType(type: FeatureType?): GeometryFeatureType = + when (type) { + FeatureType.POINT -> GeometryFeatureType.POINT + FeatureType.MULTI_POLYGON -> GeometryFeatureType.MULTI_POLYGON + FeatureType.POLYGON -> GeometryFeatureType.POLYGON + FeatureType.NONE -> GeometryFeatureType.NONE + FeatureType.SYMBOL -> GeometryFeatureType.SYMBOL + else -> GeometryFeatureType.NONE + } + +private fun State?.toSyncState(): SyncState? = + when (this) { + State.TO_POST -> SyncState.TO_POST + State.TO_UPDATE -> SyncState.TO_UPDATE + State.ERROR -> SyncState.ERROR + State.SYNCED -> SyncState.SYNCED + State.WARNING -> SyncState.WARNING + State.UPLOADING -> SyncState.UPLOADING + State.RELATIONSHIP -> SyncState.RELATIONSHIP + State.SENT_VIA_SMS -> SyncState.SENT_VIA_SMS + State.SYNCED_VIA_SMS -> SyncState.SYNCED_VIA_SMS + null -> null + } + +private fun TrackedEntityType.toTrackedEntityType(): TrackedEntityTypeDomain = + TrackedEntityTypeDomain( + trackedEntityTypeAttributeDomains = this.trackedEntityTypeAttributes()?.map { it.toTrackedEntityTypeAttribute() } ?: emptyList(), + featureType = getGeometryType(this.featureType()), + ) + +private fun TrackedEntityTypeAttribute.toTrackedEntityTypeAttribute(): TrackedEntityTypeAttributeDomain = + TrackedEntityTypeAttributeDomain( + trackedEntityTypeUid = this.trackedEntityType()?.uid(), + trackedEntityAttributeUid = this.trackedEntityAttribute()?.uid(), + displayInList = this.displayInList() ?: false, + mandatory = this.mandatory() ?: false, + searchable = this.searchable() ?: false, + sortOrder = this.sortOrder() ?: 0, + ) + +private fun TrackedEntitySearchItemAttribute.toTrackedEntitySearchItemAttribute(): TrackedEntitySearchItemAttributeDomain = + TrackedEntitySearchItemAttributeDomain( + attribute = this.attribute, + displayName = this.displayName, + displayFormName = this.displayFormName, + value = this.value, + created = this.created, + lastUpdated = this.lastUpdated, + valueType = this.valueType.toTrackerInputType(), + displayInList = this.displayInList, + optionSet = this.optionSet, + ) + +private fun ValueType.toTrackerInputType(): TrackerInputType = + when (this) { + ValueType.TEXT -> TrackerInputType.TEXT + ValueType.LONG_TEXT -> TrackerInputType.LONG_TEXT + ValueType.NUMBER -> TrackerInputType.NUMBER + ValueType.INTEGER -> TrackerInputType.INTEGER + ValueType.INTEGER_POSITIVE -> TrackerInputType.INTEGER_POSITIVE + ValueType.INTEGER_NEGATIVE -> TrackerInputType.INTEGER_NEGATIVE + ValueType.INTEGER_ZERO_OR_POSITIVE -> TrackerInputType.INTEGER_ZERO_OR_POSITIVE + ValueType.BOOLEAN -> TrackerInputType.CHECKBOX + ValueType.TRUE_ONLY -> TrackerInputType.YES_ONLY_CHECKBOX + ValueType.DATE -> TrackerInputType.DATE + ValueType.DATETIME -> TrackerInputType.DATE_TIME + ValueType.TIME -> TrackerInputType.TIME + ValueType.EMAIL -> TrackerInputType.EMAIL + ValueType.PHONE_NUMBER -> TrackerInputType.PHONE_NUMBER + ValueType.PERCENTAGE -> TrackerInputType.PERCENTAGE + ValueType.URL -> TrackerInputType.URL + ValueType.COORDINATE -> TrackerInputType.NOT_SUPPORTED + ValueType.AGE -> TrackerInputType.AGE + ValueType.ORGANISATION_UNIT -> TrackerInputType.ORGANISATION_UNIT + ValueType.UNIT_INTERVAL -> TrackerInputType.UNIT_INTERVAL + ValueType.FILE_RESOURCE -> TrackerInputType.NOT_SUPPORTED + ValueType.IMAGE -> TrackerInputType.NOT_SUPPORTED + ValueType.LETTER -> TrackerInputType.LETTER + ValueType.USERNAME -> TrackerInputType.TEXT + ValueType.TRACKER_ASSOCIATE -> TrackerInputType.NOT_SUPPORTED + ValueType.REFERENCE -> TrackerInputType.NOT_SUPPORTED + ValueType.GEOJSON -> TrackerInputType.NOT_SUPPORTED + ValueType.MULTI_TEXT -> TrackerInputType.MULTI_SELECTION + } + +private fun TrackedEntitySearchItemProgramOwner.toTrackedEntitySearchItemProgramOwner(): TrackedEntitySearchItemProgramOwnerDomain = + TrackedEntitySearchItemProgramOwnerDomain( + program = this.program, + organisationUnit = this.ownerOrgUnit, + ) diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/model/SearchTrackedEntitiesInput.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/model/SearchTrackedEntitiesInput.kt new file mode 100644 index 00000000000..07c69077884 --- /dev/null +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/model/SearchTrackedEntitiesInput.kt @@ -0,0 +1,10 @@ +package org.dhis2.tracker.search.model + +data class SearchTrackedEntitiesInput( + val selectedProgram: String?, + val allowCache: Boolean, + val excludeValues: Set?, + val hasStateFilters: Boolean, + val isOnline: Boolean, + val queryData: Map?>?, +) diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/model/SearchTrackedEntityAttribute.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/model/SearchTrackedEntityAttribute.kt new file mode 100644 index 00000000000..916ec481093 --- /dev/null +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/model/SearchTrackedEntityAttribute.kt @@ -0,0 +1,6 @@ +package org.dhis2.tracker.search.model + +data class SearchTrackedEntityAttribute( + val isUnique: Boolean, + val isOptionSet: Boolean, +) diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/model/TrackedEntitySearchItemResult.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/model/TrackedEntitySearchItemResult.kt new file mode 100644 index 00000000000..3bc4f9bd79b --- /dev/null +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/model/TrackedEntitySearchItemResult.kt @@ -0,0 +1,81 @@ +package org.dhis2.tracker.search.model + +import org.dhis2.tracker.ui.input.model.TrackerInputType +import java.util.Date + +data class TrackedEntitySearchItemResult( + val uid: String, + val created: Date?, + val lastUpdated: Date?, + val createdAtClient: Date?, + val lastUpdatedAtClient: Date?, + val organisationUnit: String?, + val geometry: TrackedEntityGeometry?, + val syncState: SyncState?, + val aggregatedSyncState: SyncState?, + val deleted: Boolean, + val isOnline: Boolean = false, + val type: TrackedEntityTypeDomain, + val header: String? = null, + val attributeValues: List, + val programOwners: List, +) + +data class TrackedEntitySearchItemAttributeDomain( + val attribute: String, + val displayName: String, + val displayFormName: String, + val value: String?, + val created: Date?, + val lastUpdated: Date?, + val valueType: TrackerInputType, + val displayInList: Boolean, + val optionSet: String?, +) + +data class TrackedEntityTypeDomain( + val trackedEntityTypeAttributeDomains: List, + val featureType: GeometryFeatureType, +) + +data class TrackedEntityTypeAttributeDomain( + val trackedEntityTypeUid: String?, + val trackedEntityAttributeUid: String?, + val displayInList: Boolean, + val mandatory: Boolean, + val searchable: Boolean, + val sortOrder: Int, +) + +data class TrackedEntitySearchItemProgramOwnerDomain( + val program: String, + val organisationUnit: String, +) + +data class TrackedEntityGeometry( + val geometryFeatureType: GeometryFeatureType, + val coordinates: String?, +) + +enum class GeometryFeatureType( + val featureType: String, + val geometryType: String, +) { + POINT("POINT", "Point"), + POLYGON("POLYGON", "Polygon"), + MULTI_POLYGON("MULTI_POLYGON", "MultiPolygon"), + NONE("NONE", "None"), + SYMBOL("SYMBOL", "Symbol"), +} + +enum class SyncState { + TO_POST, + TO_UPDATE, + ERROR, + SYNCED, + WARNING, + UPLOADING, + RELATIONSHIP, + SENT_VIA_SMS, + SYNCED_VIA_SMS, +} From de1a8180034dd9dd192a11f45ca18757333ac16b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Tar=C3=AD?= Date: Mon, 2 Feb 2026 15:12:48 +0100 Subject: [PATCH 037/114] fix: [ANDROAPP-7465] ds data input periods appear available but are actually closed (#4628) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * chore: [ANDROAPP-7465] add new DataSetNonEditableReason PERIOD_NOT_IN_DATA_INPUT_PERIODS * chore: [ANDROAPP-7465] fix sdk version * chore: [ANDROAPP-7465] fix ktlint format --------- Co-authored-by: Andrés Miguel Rubio --- .../aggregates/data/DataSetInstanceRepositoryImpl.kt | 8 +++++++- .../src/commonMain/composeResources/values/strings.xml | 1 + .../org/dhis2/mobile/aggregates/model/DataSetDetails.kt | 2 ++ .../org/dhis2/mobile/aggregates/ui/DataSetTableScreen.kt | 4 ++++ gradle/libs.versions.toml | 2 +- gradle/verification-metadata.xml | 5 +++++ 6 files changed, 20 insertions(+), 2 deletions(-) diff --git a/aggregates/src/androidMain/kotlin/org/dhis2/mobile/aggregates/data/DataSetInstanceRepositoryImpl.kt b/aggregates/src/androidMain/kotlin/org/dhis2/mobile/aggregates/data/DataSetInstanceRepositoryImpl.kt index d10db4a946c..eb0086a8113 100644 --- a/aggregates/src/androidMain/kotlin/org/dhis2/mobile/aggregates/data/DataSetInstanceRepositoryImpl.kt +++ b/aggregates/src/androidMain/kotlin/org/dhis2/mobile/aggregates/data/DataSetInstanceRepositoryImpl.kt @@ -179,6 +179,9 @@ internal class DataSetInstanceRepositoryImpl( DataSetNonEditableReason.EXPIRED -> NonEditableReason.Expired + + DataSetNonEditableReason.PERIOD_NOT_IN_DATA_INPUT_PERIODS -> + NonEditableReason.PeriodNotInDataInputPeriods } } ?: NonEditableReason.None, ) @@ -336,7 +339,10 @@ internal class DataSetInstanceRepositoryImpl( .blockingGet() ?.let { DataSetRenderingConfig( - useVerticalTabs = it.displayOptions()?.tabsDirection() == TabsDirection.VERTICAL, + useVerticalTabs = + it + .displayOptions() + ?.tabsDirection() == TabsDirection.VERTICAL, ) } ?: DataSetRenderingConfig( useVerticalTabs = true, diff --git a/aggregates/src/commonMain/composeResources/values/strings.xml b/aggregates/src/commonMain/composeResources/values/strings.xml index bc1831ca71d..7a7b077647f 100644 --- a/aggregates/src/commonMain/composeResources/values/strings.xml +++ b/aggregates/src/commonMain/composeResources/values/strings.xml @@ -72,6 +72,7 @@ %2$s is the attribute option combo name --> You cannot edit data for the period %1$s in %2$s + This data is not editable because the selected period is outside the data input period This data is not editable because it is marked as closed This data is not editable because its edition time has expired diff --git a/aggregates/src/commonMain/kotlin/org/dhis2/mobile/aggregates/model/DataSetDetails.kt b/aggregates/src/commonMain/kotlin/org/dhis2/mobile/aggregates/model/DataSetDetails.kt index 6845e8b4baa..cdd01bb9875 100644 --- a/aggregates/src/commonMain/kotlin/org/dhis2/mobile/aggregates/model/DataSetDetails.kt +++ b/aggregates/src/commonMain/kotlin/org/dhis2/mobile/aggregates/model/DataSetDetails.kt @@ -53,6 +53,8 @@ sealed class NonEditableReason { data object Closed : NonEditableReason() data object Expired : NonEditableReason() + + data object PeriodNotInDataInputPeriods : NonEditableReason() } enum class TextAlignment { diff --git a/aggregates/src/commonMain/kotlin/org/dhis2/mobile/aggregates/ui/DataSetTableScreen.kt b/aggregates/src/commonMain/kotlin/org/dhis2/mobile/aggregates/ui/DataSetTableScreen.kt index 6be8ccf6780..95e836b5cd5 100644 --- a/aggregates/src/commonMain/kotlin/org/dhis2/mobile/aggregates/ui/DataSetTableScreen.kt +++ b/aggregates/src/commonMain/kotlin/org/dhis2/mobile/aggregates/ui/DataSetTableScreen.kt @@ -70,6 +70,7 @@ import org.dhis2.mobile.aggregates.resources.empty_section_message import org.dhis2.mobile.aggregates.resources.no_data_write_access import org.dhis2.mobile.aggregates.resources.org_unit_not_in_capture_scope import org.dhis2.mobile.aggregates.resources.period_not_in_attribute_option_combo_range +import org.dhis2.mobile.aggregates.resources.period_not_in_data_input_periods import org.dhis2.mobile.aggregates.resources.period_not_in_org_unit_range import org.dhis2.mobile.aggregates.ui.component.HtmlContentBox import org.dhis2.mobile.aggregates.ui.component.ValidationBar @@ -575,6 +576,9 @@ private fun nonEditableReasonLabel(edition: DataSetEdition) = edition.nonEditableReason.periodLabel, edition.nonEditableReason.orgUnitLabel, ) + + is NonEditableReason.PeriodNotInDataInputPeriods -> + stringResource(Res.string.period_not_in_data_input_periods) } /** diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 068fa4c986d..1423b46e244 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -11,7 +11,7 @@ kotlin = '2.2.21' dagger = '2.57.2' jacoco = '0.8.14' designSystem = "0.7.0-SNAPSHOT" -dhis2sdk = "1.14.0-20260126.105658-5" +dhis2sdk = "1.14.0-20260129.154413-7" ruleEngine = "3.3.11" expressionParser = "1.2.2" appcompat = "1.7.1" diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index 3e51a169baf..6fa4869b326 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -10367,6 +10367,11 @@ + + + + + From 98ffe5b218ebc7a00eb8b56c56004d2f4e6b1298 Mon Sep 17 00:00:00 2001 From: "@dhis2-bot" Date: Tue, 3 Feb 2026 07:57:36 +0100 Subject: [PATCH 038/114] fix(translations): sync translations from transifex (develop) [skip size] (#4614) * fix(translations): sync translations from transifex (develop) * fix(translations): sync translations from transifex (develop) * fix: remove escaped characters --------- Co-authored-by: andresmr --- .../values-en-rUS/strings.xml | 26 +++ .../values-hi-rIN/strings.xml | 1 + .../composeResources/values-pt/strings.xml | 4 + app/src/main/res/values-en-rUS/strings.xml | 94 ++++++++ app/src/main/res/values-hi-rIN/strings.xml | 19 ++ commons/src/main/res/values-cs/strings.xml | 1 + .../src/main/res/values-en-rUS/strings.xml | 87 +++++++ .../src/main/res/values-hi-rIN/strings.xml | 4 + .../src/main/res/values-pt-rBR/strings.xml | 1 + commons/src/main/res/values-uk/strings.xml | 3 +- commons/src/main/res/values-vi/strings.xml | 1 + commons/src/main/res/values-zh/strings.xml | 1 + .../composeResources/values-cs/strings.xml | 1 + .../values-en-rUS/strings.xml | 214 ++++++++++++++++++ .../composeResources/values-es/strings.xml | 4 +- .../values-hi-rIN/strings.xml | 17 +- .../composeResources/values-zh/strings.xml | 1 + .../src/main/res/values-en-rUS/strings.xml | 4 + .../src/main/res/values-en-rUS/strings.xml | 4 + form/src/main/res/values-en-rUS/strings.xml | 93 ++++++++ form/src/main/res/values-hi-rIN/strings.xml | 3 + .../composeResources/values-cs/strings.xml | 51 ++++- .../values-en-rUS/strings.xml | 4 + .../composeResources/values-es/strings.xml | 5 + .../composeResources/values-zh/strings.xml | 51 ++++- .../src/main/res/values-en-rUS/strings.xml | 39 ++++ .../src/main/res/values-hi-rIN/strings.xml | 1 + .../composeResources/values-am/strings.xml | 5 + .../values-ar-rEG/strings.xml | 5 + .../values-ar-rIQ/strings.xml | 1 + .../values-ar-rSD/strings.xml | 5 + .../composeResources/values-ar/strings.xml | 1 + .../composeResources/values-bn/strings.xml | 1 + .../composeResources/values-ckb/strings.xml | 1 + .../composeResources/values-cs/strings.xml | 1 + .../composeResources/values-da/strings.xml | 1 + .../values-en-rUS/strings.xml | 5 + .../values-es-rES/strings.xml | 1 + .../values-es-rUS/strings.xml | 5 + .../composeResources/values-es/strings.xml | 1 + .../composeResources/values-fi/strings.xml | 5 + .../composeResources/values-fr/strings.xml | 1 + .../composeResources/values-fur/strings.xml | 5 + .../values-hi-rIN/strings.xml | 1 + .../composeResources/values-id/strings.xml | 1 + .../composeResources/values-it/strings.xml | 5 + .../composeResources/values-ka/strings.xml | 5 + .../composeResources/values-km/strings.xml | 1 + .../values-ko-rKR/strings.xml | 5 + .../composeResources/values-ko/strings.xml | 5 + .../composeResources/values-ku/strings.xml | 5 + .../composeResources/values-ky/strings.xml | 5 + .../composeResources/values-ln/strings.xml | 5 + .../composeResources/values-lo/strings.xml | 1 + .../composeResources/values-mk/strings.xml | 5 + .../composeResources/values-ml/strings.xml | 5 + .../composeResources/values-mn/strings.xml | 5 + .../composeResources/values-my/strings.xml | 1 + .../composeResources/values-nb/strings.xml | 1 + .../composeResources/values-ne/strings.xml | 5 + .../composeResources/values-nl/strings.xml | 1 + .../composeResources/values-no/strings.xml | 5 + .../composeResources/values-or/strings.xml | 1 + .../composeResources/values-pl/strings.xml | 5 + .../composeResources/values-prs/strings.xml | 1 + .../composeResources/values-ps/strings.xml | 1 + .../values-pt-rBR/strings.xml | 1 + .../composeResources/values-pt/strings.xml | 1 + .../composeResources/values-rn/strings.xml | 5 + .../composeResources/values-ro/strings.xml | 1 + .../composeResources/values-ru/strings.xml | 1 + .../composeResources/values-rw/strings.xml | 5 + .../composeResources/values-si/strings.xml | 1 + .../composeResources/values-sv/strings.xml | 1 + .../values-sw-rTZ/strings.xml | 5 + .../composeResources/values-tet/strings.xml | 1 + .../composeResources/values-tg/strings.xml | 1 + .../composeResources/values-th/strings.xml | 5 + .../composeResources/values-ti/strings.xml | 5 + .../composeResources/values-tl/strings.xml | 5 + .../composeResources/values-uk/strings.xml | 1 + .../composeResources/values-ur/strings.xml | 1 + .../values-uz-rUZ/strings.xml | 1 + .../composeResources/values-uz/strings.xml | 1 + .../composeResources/values-vi/strings.xml | 1 + .../values-zh-rCN/strings.xml | 2 +- .../values-zh-rHK/strings.xml | 5 + .../composeResources/values-zh/strings.xml | 1 + .../values-en-rUS/strings.xml | 4 + .../values-hi-rIN/strings.xml | 3 +- 90 files changed, 904 insertions(+), 7 deletions(-) create mode 100644 aggregates/src/commonMain/composeResources/values-en-rUS/strings.xml create mode 100644 app/src/main/res/values-en-rUS/strings.xml create mode 100644 commons/src/main/res/values-en-rUS/strings.xml create mode 100644 commonskmm/src/commonMain/composeResources/values-en-rUS/strings.xml create mode 100644 compose-table/src/main/res/values-en-rUS/strings.xml create mode 100644 dhis_android_analytics/src/main/res/values-en-rUS/strings.xml create mode 100644 form/src/main/res/values-en-rUS/strings.xml create mode 100644 login/src/commonMain/composeResources/values-en-rUS/strings.xml create mode 100644 stock-usecase/src/main/res/values-en-rUS/strings.xml create mode 100644 sync/src/commonMain/composeResources/values-am/strings.xml create mode 100644 sync/src/commonMain/composeResources/values-ar-rEG/strings.xml create mode 100644 sync/src/commonMain/composeResources/values-ar-rSD/strings.xml create mode 100644 sync/src/commonMain/composeResources/values-en-rUS/strings.xml create mode 100644 sync/src/commonMain/composeResources/values-es-rUS/strings.xml create mode 100644 sync/src/commonMain/composeResources/values-fi/strings.xml create mode 100644 sync/src/commonMain/composeResources/values-fur/strings.xml create mode 100644 sync/src/commonMain/composeResources/values-it/strings.xml create mode 100644 sync/src/commonMain/composeResources/values-ka/strings.xml create mode 100644 sync/src/commonMain/composeResources/values-ko-rKR/strings.xml create mode 100644 sync/src/commonMain/composeResources/values-ko/strings.xml create mode 100644 sync/src/commonMain/composeResources/values-ku/strings.xml create mode 100644 sync/src/commonMain/composeResources/values-ky/strings.xml create mode 100644 sync/src/commonMain/composeResources/values-ln/strings.xml create mode 100644 sync/src/commonMain/composeResources/values-mk/strings.xml create mode 100644 sync/src/commonMain/composeResources/values-ml/strings.xml create mode 100644 sync/src/commonMain/composeResources/values-mn/strings.xml create mode 100644 sync/src/commonMain/composeResources/values-ne/strings.xml create mode 100644 sync/src/commonMain/composeResources/values-no/strings.xml create mode 100644 sync/src/commonMain/composeResources/values-pl/strings.xml create mode 100644 sync/src/commonMain/composeResources/values-rn/strings.xml create mode 100644 sync/src/commonMain/composeResources/values-rw/strings.xml create mode 100644 sync/src/commonMain/composeResources/values-sw-rTZ/strings.xml create mode 100644 sync/src/commonMain/composeResources/values-th/strings.xml create mode 100644 sync/src/commonMain/composeResources/values-ti/strings.xml create mode 100644 sync/src/commonMain/composeResources/values-tl/strings.xml create mode 100644 sync/src/commonMain/composeResources/values-zh-rHK/strings.xml create mode 100644 tracker/src/commonMain/composeResources/values-en-rUS/strings.xml diff --git a/aggregates/src/commonMain/composeResources/values-en-rUS/strings.xml b/aggregates/src/commonMain/composeResources/values-en-rUS/strings.xml new file mode 100644 index 00000000000..ee2d73a4cec --- /dev/null +++ b/aggregates/src/commonMain/composeResources/values-en-rUS/strings.xml @@ -0,0 +1,26 @@ + + + Date of birth + Age + or + Accept + Cancel + No results found + Search to find more + Done + Latitude + Longitude + Add location + Out of range + Incorrect format + Not supported + Not now + Complete + Saved! + Error + Review + Add file + Add Image + Take Photo + Add from Gallery + \ No newline at end of file diff --git a/aggregates/src/commonMain/composeResources/values-hi-rIN/strings.xml b/aggregates/src/commonMain/composeResources/values-hi-rIN/strings.xml index ab97a4a588a..63817c5629b 100644 --- a/aggregates/src/commonMain/composeResources/values-hi-rIN/strings.xml +++ b/aggregates/src/commonMain/composeResources/values-hi-rIN/strings.xml @@ -14,6 +14,7 @@ सब ठीक है अभी नहीं पूरा हुआ + सेव ठीक है नहीं हाँ diff --git a/aggregates/src/commonMain/composeResources/values-pt/strings.xml b/aggregates/src/commonMain/composeResources/values-pt/strings.xml index 8b8a23fbbcf..b2f477af0e2 100644 --- a/aggregates/src/commonMain/composeResources/values-pt/strings.xml +++ b/aggregates/src/commonMain/composeResources/values-pt/strings.xml @@ -35,4 +35,8 @@ Tirar fotografia Indicadores Não tem permissão para editar estes dados + + Não tem permissão para editar dados para %1$s \ No newline at end of file diff --git a/app/src/main/res/values-en-rUS/strings.xml b/app/src/main/res/values-en-rUS/strings.xml new file mode 100644 index 00000000000..a93fa338c92 --- /dev/null +++ b/app/src/main/res/values-en-rUS/strings.xml @@ -0,0 +1,94 @@ + + + Error + There are no more reserved values. Contact your system administrator + Accept + Share + Enter text + Enter long text + Enter number + Enter negative integer + Enter positive integer or zero + Enter positive integer + Choose date + Error + Date + Org unit + Latitude + Longitude + + Due date + Cat combo + Cancel + No options available + + Accept + Cancel + Add file + Some fields need your attention.\nDo you want to review the form? + Coordinates for the + + + Days + Months + Years + Incident date + Share + Check this! + Error + This server is running a dhis version different than 2.29. Update your server version or use the testing environment to proceed. + Error while parsing results + This is not a valid phone number + This is not a valid email + Only negative numbers are allowed + Only positive numbers or zero allowed + Only positive numbers are allowed + Only values from 0 to 1 are allowed + Only values from 0 to 100 are allowed + The value should be unique, a coincidence has been found. It has not been saved. Please check it. + No info for this field + Accept + Close + Complete + Formatting error + This is not a valid url + Copied + Polygon captured + Polygon + Attributes - %s + Select time + Enter letter + Enter number from 0 to 1 + Enter percentage + Enter phone number + Enter email + Choose organisation unit + Enter url + Enter value + Saved! + Complete + Done + Date + Coordinates values are not valid + This field is mandatory + Close + Camera permission is denied.\nYou need to enable it to use this feature. + Take Photo + Unknown server + Value must be an integer + Do not show again + %s can\'t be parsed as a date + This field could not be updated. Please try again + Program rules warning + There is a configuration issue causing a loop in the rules. Contact you administrator. + Not saved + Some fields need your attention.\nDo you want to review the form? + You have some warning messages. + You have some warning messages.\nDo you want to mark this form as complete\? + Some fields have errors and they are not saved. \nDo you want to review the form? + Do you want to mark this form as complete? + You have some error messages.\nDo you want to review them? + %s details + Not now + Coordinates + diff --git a/app/src/main/res/values-hi-rIN/strings.xml b/app/src/main/res/values-hi-rIN/strings.xml index d3a58b70737..d8d42d13d12 100644 --- a/app/src/main/res/values-hi-rIN/strings.xml +++ b/app/src/main/res/values-hi-rIN/strings.xml @@ -24,8 +24,11 @@ साझा करें सर्च करें / खोजें + दिन चुनें इवेंट कंप्लीटेड त्रुटि + + बनाएँ अपडेट करें तारीख नया इवेंट @@ -46,13 +49,22 @@ दिन महीने वर्ष + सप्ताह साफ़ करें आगे सहेजें ठीक है साझा करें + अधिकतम त्रुटि सहेजें + यह मान्य फ़ोन नंबर नहीं है + यह मान्य ईमेल नहीं है + केवल नेगेटिव संख्या ही अनुमति है + केवल शून्य या पॉजिटिव संख्या ही अनुमति है + केवल पॉजिटिव संख्या ही अनुमति है + केवल 0 से 1 के मान ही अनुमति हैं + केवल 0 से 100 के वैल्यूज़ अनुमति हैं नया इवेंट जनरेट करें क्या आप एक और इवेंट बनाना चाहते हैं? छोड़ें @@ -62,15 +74,21 @@ पूरा हुआ रोज़ाना साप्ताहिक + यह मान्य URL नहीं है आज कल (बिता हुआ) + इस सप्ताह + पिछला सप्ताह इस महीने पिछला महीना अतिदेय विज़िट की गई पीछे जाएं + डेटा सेट्स कल (बिता हुआ) + समय चुनें सिंक की गलती + सेव नाम पूरा हुआ डेटा @@ -80,6 +98,7 @@ पीछे जाएं बंद करें इस वर्ष + पिछली तिमाही पिछला वर्ष वैल्यू यह प्रोग्राम सुरक्षित है diff --git a/commons/src/main/res/values-cs/strings.xml b/commons/src/main/res/values-cs/strings.xml index 433479b5f2a..50f2effd560 100644 --- a/commons/src/main/res/values-cs/strings.xml +++ b/commons/src/main/res/values-cs/strings.xml @@ -329,5 +329,6 @@ Import databáze se nezdařil Neplatný soubor Není v režimu registrace TOTP 2FA + Vymazat vše diff --git a/commons/src/main/res/values-en-rUS/strings.xml b/commons/src/main/res/values-en-rUS/strings.xml new file mode 100644 index 00000000000..b72c89af550 --- /dev/null +++ b/commons/src/main/res/values-en-rUS/strings.xml @@ -0,0 +1,87 @@ + + + Accept + Cancel + Done + + Date + Error + Complete + + Password is missing. Please enter password. + Username is missing. Please enter username. + This server is running a dhis version different than 2.29. Update your server version or use the testing environment to proceed. + This server is running a DHIS2 version different than %s. Update your server version or contact your admin. + Something went wrong. Please check that server URL, username and password are correct and try again. + Sorry! Something failed on the server side. + The URL provided is not a DHIS2 server. + The username or password are incorrect + Unknown server + Error while parsing results + Something unexpected went worng. + Your user has more than one root organisation units. Review your configuration or contact your admin. + Online results exceed the maximum number of tracker instances that can be shown. Please refine your search. + The server is a bit busy at this moment. Please try a bit later. + The user is already logged in. + The request has already been executed. + Server request is invalid. + The application name has not been set. + The application version has not been set. + Unable to access device keystore. + Creation aborted. The object already exists. + Deletion aborted. The object does not exist. + Unable to instantiate keystore. + We couldn´t reserve values for these record. Please contact your admin. + Please login to export the database. + Exporting an encrypted database is not supported. + You are importing an already existing database. + Please logout to import a new database. + The version of the imported database is higher than supported. + The file has not been found. + There was an error resizing the image. + It is not possible to generate coordinates. + Job report not available. + You might be running low on available values. + There is no user authenticated. + There is no user authenticated offline. + There are not enough values to reserve on the server. Please conctact your admin. + You are trying to login offline with a different user. + The geometry value is invalid. + There are no reserved values available. Go to settings and refill values when you have internet connection. + The object could not be updated. + The object could not be inserted. + You don\'t have access. + The server URL is missing. Please enter URL. + The server URL is not well formed. Please check it. + This version of the Settings Web App is not supported. + The Settings Web App is not installed in the server. + The server took too much time to respond. We canceled the request. + The relationship can\'t be updated. + There are too many periods. + We couldn´t find the URL. Please verify it. + Your user account have been disabled. If this is an error, contact your administrator. + Your user account is locked. If this is an error, contact your administrator. + The value could not be set. + The request to reserve values has taken too much time. Please retry. + There is a problem with the server certificates. Please, contact your administrator. + SMS is not supported. + There are not enough attributes to perform the search. Please refine your search with more attributes. + Online search is only available for your user search organisation units. + There are invalid characters in the query. Please ask the administrator to verify the server configuration (relaxedQueryChars,...). + The server is currently unavailable. Try again later. + You are offline. Connect to the internet and try again. + Add Image + Add file + Keep editing + Not now + Review + Complete + Discard changes + Open with + + %s data + Database import failed + Invalid file + Not in TOTP 2FA enrollment mode + + diff --git a/commons/src/main/res/values-hi-rIN/strings.xml b/commons/src/main/res/values-hi-rIN/strings.xml index 15dd7b04465..af792346c7c 100644 --- a/commons/src/main/res/values-hi-rIN/strings.xml +++ b/commons/src/main/res/values-hi-rIN/strings.xml @@ -8,6 +8,7 @@ नहीं सर्च करें / खोजें इवेंट्स + डेटा सेट्स पूरा हुआ तारीख @@ -22,9 +23,12 @@ आज कल (बिता हुआ) + इस सप्ताह + पिछला सप्ताह इस महीने पिछला महीना इस वर्ष + पिछली तिमाही पिछला वर्ष रोज़ाना साप्ताहिक diff --git a/commons/src/main/res/values-pt-rBR/strings.xml b/commons/src/main/res/values-pt-rBR/strings.xml index 29debb34bfb..4aa6983ff14 100644 --- a/commons/src/main/res/values-pt-rBR/strings.xml +++ b/commons/src/main/res/values-pt-rBR/strings.xml @@ -74,4 +74,5 @@ Semana Mês Ano + Limpar tudo diff --git a/commons/src/main/res/values-uk/strings.xml b/commons/src/main/res/values-uk/strings.xml index 9d3be7fc57f..e6cafb5a74f 100644 --- a/commons/src/main/res/values-uk/strings.xml +++ b/commons/src/main/res/values-uk/strings.xml @@ -264,4 +264,5 @@ Щодня Тиждень Рік - + Очистити все + diff --git a/commons/src/main/res/values-vi/strings.xml b/commons/src/main/res/values-vi/strings.xml index b8f0ab5403d..d5d27531d7b 100644 --- a/commons/src/main/res/values-vi/strings.xml +++ b/commons/src/main/res/values-vi/strings.xml @@ -271,5 +271,6 @@ Nhập cơ sở dữ liệu không thành công Tệp không hợp lệ Không ở chế độ đăng ký TOTP 2FA + Xóa tất cả diff --git a/commons/src/main/res/values-zh/strings.xml b/commons/src/main/res/values-zh/strings.xml index 296cd3050b1..51340ad9ab1 100644 --- a/commons/src/main/res/values-zh/strings.xml +++ b/commons/src/main/res/values-zh/strings.xml @@ -332,5 +332,6 @@ 数据库导入失败 无效文件 未进入 TOTP 2FA 注册模式 + 全清除 diff --git a/commonskmm/src/commonMain/composeResources/values-cs/strings.xml b/commonskmm/src/commonMain/composeResources/values-cs/strings.xml index f96dfc25db0..5e8d38ae346 100644 --- a/commonskmm/src/commonMain/composeResources/values-cs/strings.xml +++ b/commonskmm/src/commonMain/composeResources/values-cs/strings.xml @@ -206,6 +206,7 @@ Import databáze se nezdařil Neplatný soubor Není v režimu registrace TOTP 2FA + Ověřování zrušeno diff --git a/commonskmm/src/commonMain/composeResources/values-en-rUS/strings.xml b/commonskmm/src/commonMain/composeResources/values-en-rUS/strings.xml new file mode 100644 index 00000000000..cd5583d93ef --- /dev/null +++ b/commonskmm/src/commonMain/composeResources/values-en-rUS/strings.xml @@ -0,0 +1,214 @@ + + + Only values from 0 to 100 are allowed + Please review this field + Formatting error + Only positive numbers are allowed + This is not a valid phone number + This is not a valid email + Only negative numbers are allowed + Only positive numbers or zero allowed + Only values from 0 to 1 are allowed + This is not a valid url + Value must be an integer + It is not a correct format. + The configured pattern %s is wrong. + This field could not be updated. Please try again + Error + The value should be unique, a coincidence has been found. It has not been saved. Please check it. + Select time + Choose date + Choose organisation unit + Program rule %s is trying to assign value %s which does not belongs to option set %s + Value for field %s does not belong to the option set in %s + This field is mandatory + You have some warning messages. + You have some warning messages.\nDo you want to mark this form as complete? + Required + Date + Years + Months + Days + %s can\'t be parsed as a date + Polygon + Latitude + Longitude + Coordinates values are not valid + Polygon captured + Enter value + Enter url + Enter email + Enter phone number + Enter positive integer or zero + Enter negative integer + Enter positive integer + Enter number + Enter percentage + Enter number from 0 to 1 + Enter letter + Enter long text + Enter text + Due date + Mandatory field + Lat: + Long: + Not saved + Review + Complete + Discard changes + Saved! + You have some error messages.\nDo you want to review them? + Some fields have errors and they are not saved. \nDo you want to review the form? + Some fields need your attention.\nDo you want to review the form? + Not now + Save anyway + Keep editing + Do you want to mark this form as complete? + If you exit now all the information in the form will be discarded. + Some fields have errors and they are not saved. \nIf you exit now the changes will be discarded. + Some fields have errors and they are not saved. + Some mandatory fields are missing and the form cannot be saved. + Some mandatory fields are missing and the form cannot be saved. \nIf you exit now the changes will be discarded. + Share + Camera permission is denied.\nYou need to enable it to use this feature. + Close + Program rules warning + There is a configuration issue causing a loop in the rules. Contact you administrator. + Copied + No info for this field + Take Photo + From gallery + Check this! + Do not show again + the provided value is not allowed for this field + Invalid character 0 + Invalid character 1 + Value is neither true or false + This date format is not valid + This date and time format is not valid + This time format is not valid + The value is empty + The value contains more than one letter + The value is not a letter + The text is too long + Value is neither true or false + This field can only be true + Invalid character 1 + DataValues can\'t be saved using these arguments. Use the other one. + Leading zero numbers are not allowed + Couldn\'t retrieve data + Attributes - %s + Coordinates for the + There are no more reserved values. Contact your system administrator + Incident date + The location permission is needed for capturing coordinates. Please, enable them in the application settings + Open with + No option found + Download + Scan + QR code + Bar code + Add location + This form has no fields configured + %s details + %s data + Org unit + Coordinates + Category Combo + No options available + Cat combo + Storage permission is not granted.\nYou need to enable it to use this feature. + yes + no + Re-open form to edit + Date of birth + Age + or + Accept + Cancel + Latitude + Longitude + Add location + Out of range + Incorrect format + Add file + Add Image + Add from Gallery + No results found + Search to find more + Done + Not supported + + Password is missing. Please enter password. + Username is missing. Please enter username. + This server is running a dhis version different than 2.29. Update your server version or use the testing environment to proceed. + This server is running a DHIS2 version different than %s. Update your server version or contact your admin. + Something went wrong. Please check that server URL, username and password are correct and try again. + Sorry! Something failed on the server side. + The URL provided is not a DHIS2 server. + The username or password are incorrect + Unknown server + Error while parsing results + Something unexpected went worng. + Your user has more than one root organisation units. Review your configuration or contact your admin. + Online results exceed the maximum number of tracker instances that can be shown. Please refine your search. + The server is a bit busy at this moment. Please try a bit later. + The user is already logged in. + The request has already been executed. + Server request is invalid. + The application name has not been set. + The application version has not been set. + Unable to access device keystore. + Creation aborted. The object already exists. + Deletion aborted. The object does not exist. + Unable to instantiate keystore. + We couldn´t reserve values for these record. Please contact your admin. + Please login to export the database. + Exporting an encrypted database is not supported. + You are importing an already existing database. + Please logout to import a new database. + The version of the imported database is higher than supported. + The file has not been found. + There was an error resizing the image. + It is not possible to generate coordinates. + Job report not available. + You might be running low on available values. + There is no user authenticated. + There is no user authenticated offline. + There are not enough values to reserve on the server. Please conctact your admin. + You are trying to login offline with a different user. + The geometry value is invalid. + There are no reserved values available. Go to settings and refill values when you have internet connection. + The object could not be updated. + The object could not be inserted. + You don\'t have access. + The server URL is missing. Please enter URL. + The server URL is not well formed. Please check it. + This version of the Settings Web App is not supported. + The Settings Web App is not installed in the server. + The server took too much time to respond. We canceled the request. + The relationship can\'t be updated. + There are too many periods. + We couldn´t find the URL. Please verify it. + Your user account have been disabled. If this is an error, contact your administrator. + Your user account is locked. If this is an error, contact your administrator. + The value could not be set. + The request to reserve values has taken too much time. Please retry. + There is a problem with the server certificates. Please, contact your administrator. + SMS is not supported. + There are not enough attributes to perform the search. Please refine your search with more attributes. + Online search is only available for your user search organisation units. + There are invalid characters in the query. Please ask the administrator to verify the server configuration (relaxedQueryChars,...). + The server is currently unavailable. Try again later. + You are offline. Connect to the internet and try again. + Database import failed + Invalid file + Not in TOTP 2FA enrollment mode + Authentication cancelled + + + \ No newline at end of file diff --git a/commonskmm/src/commonMain/composeResources/values-es/strings.xml b/commonskmm/src/commonMain/composeResources/values-es/strings.xml index 20aedf80ee6..b9adfd39b39 100644 --- a/commonskmm/src/commonMain/composeResources/values-es/strings.xml +++ b/commonskmm/src/commonMain/composeResources/values-es/strings.xml @@ -63,7 +63,7 @@ Ahora no Guardar de todos modos Seguir editando - ¿Desea marcar este formulario como completo? + ¿Desea marcar este formulario como completo\? Si sale toda la información del formulario será descartada. Algunos campos presentan errores y no se han guardado.\nSi sales ahora, los cambios se descartarán. Algunos campos tienen errores y no serán guardados. @@ -202,6 +202,8 @@ La consulta contiene caracteres inválidos. Por favor contacte a su administrador para verificar la configuración del servidor (relaxedQueryChars,...). El servidor no está disponible actualmente. Vuelve a intentarlo más tarde. Estas desconectado. Conéctese a Internet e inténtelo nuevamente. + Importación de la base de datos fallida + Archivo no válido diff --git a/commonskmm/src/commonMain/composeResources/values-hi-rIN/strings.xml b/commonskmm/src/commonMain/composeResources/values-hi-rIN/strings.xml index ec4f6b15d7c..4f43e662b4e 100644 --- a/commonskmm/src/commonMain/composeResources/values-hi-rIN/strings.xml +++ b/commonskmm/src/commonMain/composeResources/values-hi-rIN/strings.xml @@ -1,10 +1,25 @@ - त्रुटि + केवल 0 से 100 के वैल्यूज़ अनुमति हैं + कृपया इस फ़ील्ड की रिव्यू करें + केवल पॉजिटिव संख्या ही अनुमति है + यह मान्य फ़ोन नंबर नहीं है + यह मान्य ईमेल नहीं है + केवल नेगेटिव संख्या ही अनुमति है + केवल शून्य या पॉजिटिव संख्या ही अनुमति है + केवल 0 से 1 के मान ही अनुमति हैं + यह मान्य URL नहीं है + एरर्स + समय चुनें + दिन चुनें आवश्यकता है + तारीख + वर्ष + महीने दिन रिव्यू पूरा हुआ + सेव अभी नहीं सेव करें संपादन करते रहें diff --git a/commonskmm/src/commonMain/composeResources/values-zh/strings.xml b/commonskmm/src/commonMain/composeResources/values-zh/strings.xml index 9bcc998280b..fb0c24ba6bc 100644 --- a/commonskmm/src/commonMain/composeResources/values-zh/strings.xml +++ b/commonskmm/src/commonMain/composeResources/values-zh/strings.xml @@ -206,6 +206,7 @@ 数据库导入失败 无效文件 未进入 TOTP 2FA 注册模式 + 认证取消 diff --git a/compose-table/src/main/res/values-en-rUS/strings.xml b/compose-table/src/main/res/values-en-rUS/strings.xml new file mode 100644 index 00000000000..22be4f21d21 --- /dev/null +++ b/compose-table/src/main/res/values-en-rUS/strings.xml @@ -0,0 +1,4 @@ + + + Accept + \ No newline at end of file diff --git a/dhis_android_analytics/src/main/res/values-en-rUS/strings.xml b/dhis_android_analytics/src/main/res/values-en-rUS/strings.xml new file mode 100644 index 00000000000..40df7fe8191 --- /dev/null +++ b/dhis_android_analytics/src/main/res/values-en-rUS/strings.xml @@ -0,0 +1,4 @@ + + + Accept + \ No newline at end of file diff --git a/form/src/main/res/values-en-rUS/strings.xml b/form/src/main/res/values-en-rUS/strings.xml new file mode 100644 index 00000000000..f7bc8b9bbd7 --- /dev/null +++ b/form/src/main/res/values-en-rUS/strings.xml @@ -0,0 +1,93 @@ + + + This field could not be updated. Please try again + Error + The value should be unique, a coincidence has been found. It has not been saved. Please check it. + Select time + Choose date + Choose organisation unit + Program rule %s is trying to assign value %s which does not belongs to option set %s + Value for field %s does not belong to the option set in %s + This field is mandatory + You have some warning messages. + You have some warning messages.\nDo you want to mark this form as complete? + Required + Date + Years + Months + Days + %s can\'t be parsed as a date + Polygon + Latitude + Longitude + Coordinates values are not valid + Polygon captured + Enter value + Enter url + Enter email + Enter phone number + Enter positive integer or zero + Enter negative integer + Enter positive integer + Enter number + Enter percentage + Enter number from 0 to 1 + Enter letter + Enter long text + Enter text + Due date + Mandatory field + Lat: + Long: + Not saved + Review + Complete + Discard changes + Saved! + You have some error messages.\nDo you want to review them? + Some fields have errors and they are not saved. \nDo you want to review the form? + Some fields need your attention.\nDo you want to review the form? + Not now + Save anyway + Keep editing + Do you want to mark this form as complete? + If you exit now all the information in the form will be discarded. + Some fields have errors and they are not saved. \nIf you exit now the changes will be discarded. + Some fields have errors and they are not saved. + Some mandatory fields are missing and the form cannot be saved. + Some mandatory fields are missing and the form cannot be saved. \nIf you exit now the changes will be discarded. + Share + Camera permission is denied.\nYou need to enable it to use this feature. + Close + Program rules warning + There is a configuration issue causing a loop in the rules. Contact you administrator. + Copied + No info for this field + Take Photo + From gallery + Check this! + Do not show again + DataValues can\'t be saved using these arguments. Use the other one. + Attributes - %s + Coordinates for the + There are no more reserved values. Contact your system administrator + Incident date + The location permission is needed for capturing coordinates. Please, enable them in the application settings + Open with + No option found + Download + Scan + QR code + Bar code + Add location + This form has no fields configured + %s details + %s data + Org unit + Coordinates + Category Combo + No options available + Cat combo + Storage permission is not granted.\nYou need to enable it to use this feature. + Couldn\'t retrieve data + \ No newline at end of file diff --git a/form/src/main/res/values-hi-rIN/strings.xml b/form/src/main/res/values-hi-rIN/strings.xml index 3d8474ea231..3058e1e0ae8 100644 --- a/form/src/main/res/values-hi-rIN/strings.xml +++ b/form/src/main/res/values-hi-rIN/strings.xml @@ -1,6 +1,8 @@ त्रुटि + समय चुनें + दिन चुनें आवश्यकता है तारीख वर्ष @@ -8,6 +10,7 @@ दिन रिव्यू पूरा हुआ + सेव अभी नहीं सेव करें संपादन करते रहें diff --git a/login/src/commonMain/composeResources/values-cs/strings.xml b/login/src/commonMain/composeResources/values-cs/strings.xml index 5ceb89a7371..2598d71c8c1 100644 --- a/login/src/commonMain/composeResources/values-cs/strings.xml +++ b/login/src/commonMain/composeResources/values-cs/strings.xml @@ -1,21 +1,70 @@ + Přidat nový účet Dvoufaktorové ověřování + Nelze se připojit k síti + K zapnutí nebo vypnutí dvoufaktorového ověřování potřebujete připojení k internetu. + Zkuste se znovu připojit + Kontrola stavu... + Dvoufaktorové ověřování je vypnuté + Zapnutí dvoufaktorového ověřování + 1. + Chcete-li povolit dvoufaktorové ověřování, ujistěte se, že máte v zařízení nainstalovanou aplikaci autentizátoru. Doporučujeme Google Authenticator, ale můžete použít jakoukoli aplikaci kompatibilní s TOTP. + 2. + Propojte aplikaci autentizátoru pomocí tohoto konfiguračního klíče v aplikaci autentizátoru. + 3. + Níže zadejte kód z aplikace autentizátoru. + Aplikace Google Authenticator Ověřovací kód + Nepodařilo se zapnout dvoufaktorové ověřování + Zapnout + Zapnutí... + Zpět na nastavení Další + Navázání spojení... + Ke kterému serveru se chcete připojit? + URL serveru Je zapnuté dvoufaktorové ověřování. + Vypnutí dvoufaktorového ověřování + Chcete-li vypnout dvoufaktorové ověřování, otevřete aplikaci Authenticator. + Níže zadejte kód z aplikace autentizátoru. Ověřovací kód + Vypnout + Vypnutí... + Nepodařilo se vypnout dvoufaktorové ověřování. + Není platná URL serveru Rychlé přihlášení Chcete se přihlásit pomocí otisku prstu nebo jiné biometrické metody? + Pověření již byla uložena + Pověření nebyla uložena Uživatelské jméno Heslo Přihlášování... Přihlášení + Obnovení účtu Nebo + Přihlášení pomocí openID + Správa účtů Chcete nám pomoci vylepšit tuto aplikaci? + Pokud řeknete ano, aplikace bude odesílat anonymní statistiky a protokoly o chybách, které nám pomáhají zlepšovat uživatelský komfort a výkon. + Další podrobnosti naleznete v našem Zásady ochrany osobních údajů Teď ne Ano + Vytvoření kódu PIN + Nastavte si kód PIN pro rychlý přístup k aplikaci v režimu offline. + Vytvořit kód PIN + Zadejte svůj kód PIN + Pro přístup k účtu zadejte čtyřmístný kód PIN. Odemknout + Zapomněli jste kód PIN? + Nesprávný kód PIN + Není nakonfigurován žádný kód PIN + Nepodařilo se uložit kód PIN + Nepodařilo se resetovat kód PIN + %1$s zbývající pokusy + Importovat databázi Import byl úspěšný - \ No newline at end of file + Přihlášení bylo zrušeno + Neplatný výsledek autorizace + \ No newline at end of file diff --git a/login/src/commonMain/composeResources/values-en-rUS/strings.xml b/login/src/commonMain/composeResources/values-en-rUS/strings.xml new file mode 100644 index 00000000000..3b3f80dc158 --- /dev/null +++ b/login/src/commonMain/composeResources/values-en-rUS/strings.xml @@ -0,0 +1,4 @@ + + + Not now + \ No newline at end of file diff --git a/login/src/commonMain/composeResources/values-es/strings.xml b/login/src/commonMain/composeResources/values-es/strings.xml index 9802bb43fa3..6d7a8e7a334 100644 --- a/login/src/commonMain/composeResources/values-es/strings.xml +++ b/login/src/commonMain/composeResources/values-es/strings.xml @@ -1,17 +1,22 @@ + Añadir una cuenta nueva Autenticación de dos factores Siguiente + Estableciendo conexión... La autenticación de dos factores está activada. Acceso rápido ¿Te gustaría usar tu huella o algún otro método biométrico para acceder? Nombre de usuario Contraseña + Iniciando sesión + Iniciar sesión O ¿Desea ayudarnos a mejorar esta aplicación? política de privacidad Ahora no Desbloquear + Importar base de datos Importado con éxito \ No newline at end of file diff --git a/login/src/commonMain/composeResources/values-zh/strings.xml b/login/src/commonMain/composeResources/values-zh/strings.xml index cf3bb6de0fe..034612438d4 100644 --- a/login/src/commonMain/composeResources/values-zh/strings.xml +++ b/login/src/commonMain/composeResources/values-zh/strings.xml @@ -1,21 +1,70 @@ + 添加新账户 双重身份验证 + 无法连接网络 + 您需要连接互联网才能打开或关闭双因素身份验证。 + 尝试重新连接 + 检查状态... + 双因素验证已关闭 + 开启双因素身份验证 + 1. + 要启用双因素身份验证,请确保您的设备上安装了身份验证程序。我们推荐使用 Google Authenticator,但您也可以使用任何兼容 TOTP 的应用程序。 + 2. + 使用认证程序上的配置密钥链接认证程序。 + 3. + 在下方输入验证程序中的代码。 + 谷歌身份验证应用程序 验证码 + 双因素身份验证开启失败 + 打开 + 打开... + 返回设置 下一步 + 建立连接... + 您想连接哪个服务器? + 服务器 URL 双因素身份验证已开启。 + 关闭双因素身份验证 + 要禁用双因素身份验证,请打开身份验证程序。 + 在下方输入验证程序中的代码。 验证码 + 关闭 + 关闭... + 未关闭双因素身份验证。 + 不是有效的服务器 URL 快速登录 您想使用指纹或其他生物识别方法登录吗? + 已保存证书 + 证书未保存 用户名 口令 登录... 登录 + 恢复账户 + 使用 openID 登录 + 管理账户 你想帮助我们改进这个应用程序吗? + 如果您同意,应用程序将发送匿名统计数据和错误日志,帮助我们改善用户体验和性能。 + 更多详情,请参阅我们的 隐私政策 现在不要 + 创建密码 + 设置 PIN 码,以便快速离线访问应用程序。 + 创建密码 + 输入密码 + 输入您的 4 位数字 PIN 码访问您的账户。 解锁 + 忘记密码? + 密码不正确 + 未配置密码 + 密码保存失败 + 重置密码失败 + %1$s 剩余尝试次数 + 导入数据库 导入成功 - \ No newline at end of file + 登录被取消 + 授权结果无效 + \ No newline at end of file diff --git a/stock-usecase/src/main/res/values-en-rUS/strings.xml b/stock-usecase/src/main/res/values-en-rUS/strings.xml new file mode 100644 index 00000000000..1765a6d8fde --- /dev/null +++ b/stock-usecase/src/main/res/values-en-rUS/strings.xml @@ -0,0 +1,39 @@ + + Review + Review + + Cancel + + Something went wrong. Please check that server URL, username and password are correct and try again. + Unknown server + Error while parsing results + The server is a bit busy at this moment. Please try a bit later. + The user is already logged in. + The request has already been executed. + Server request is invalid. + Creation aborted. The object already exists. + Please login to export the database. + Exporting an encrypted database is not supported. + You are importing an already existing database. + Please logout to import a new database. + The version of the imported database is higher than supported. + There is no user authenticated. + There is no user authenticated offline. + You are trying to login offline with a different user. + The object could not be updated. + The object could not be inserted. + The server URL is missing. Please enter URL. + The server URL is not well formed. Please check it. + This version of the Settings Web App is not supported. + The Settings Web App is not installed in the server. + The server took too much time to respond. We canceled the request. + We couldn´t find the URL. Please verify it. + Your user account have been disabled. If this is an error, contact your administrator. + Your user account is locked. If this is an error, contact your administrator. + The value could not be set. + There is a problem with the server certificates. Please, contact your administrator. + Not saved + Formatting error + Only positive numbers or zero allowed + Leading zero numbers are not allowed + \ No newline at end of file diff --git a/stock-usecase/src/main/res/values-hi-rIN/strings.xml b/stock-usecase/src/main/res/values-hi-rIN/strings.xml index 37b99cfa15d..d5eb4cb7ee3 100644 --- a/stock-usecase/src/main/res/values-hi-rIN/strings.xml +++ b/stock-usecase/src/main/res/values-hi-rIN/strings.xml @@ -12,4 +12,5 @@ भाषा सर्च करें / खोजें वापस जाएँ + केवल शून्य या पॉजिटिव संख्या ही अनुमति है \ No newline at end of file diff --git a/sync/src/commonMain/composeResources/values-am/strings.xml b/sync/src/commonMain/composeResources/values-am/strings.xml new file mode 100644 index 00000000000..4c1c46011bd --- /dev/null +++ b/sync/src/commonMain/composeResources/values-am/strings.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/sync/src/commonMain/composeResources/values-ar-rEG/strings.xml b/sync/src/commonMain/composeResources/values-ar-rEG/strings.xml new file mode 100644 index 00000000000..4c1c46011bd --- /dev/null +++ b/sync/src/commonMain/composeResources/values-ar-rEG/strings.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/sync/src/commonMain/composeResources/values-ar-rIQ/strings.xml b/sync/src/commonMain/composeResources/values-ar-rIQ/strings.xml index d573f95216f..4c1c46011bd 100644 --- a/sync/src/commonMain/composeResources/values-ar-rIQ/strings.xml +++ b/sync/src/commonMain/composeResources/values-ar-rIQ/strings.xml @@ -1,4 +1,5 @@ + diff --git a/sync/src/commonMain/composeResources/values-ar-rSD/strings.xml b/sync/src/commonMain/composeResources/values-ar-rSD/strings.xml new file mode 100644 index 00000000000..4c1c46011bd --- /dev/null +++ b/sync/src/commonMain/composeResources/values-ar-rSD/strings.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/sync/src/commonMain/composeResources/values-ar/strings.xml b/sync/src/commonMain/composeResources/values-ar/strings.xml index d573f95216f..4c1c46011bd 100644 --- a/sync/src/commonMain/composeResources/values-ar/strings.xml +++ b/sync/src/commonMain/composeResources/values-ar/strings.xml @@ -1,4 +1,5 @@ + diff --git a/sync/src/commonMain/composeResources/values-bn/strings.xml b/sync/src/commonMain/composeResources/values-bn/strings.xml index d573f95216f..4c1c46011bd 100644 --- a/sync/src/commonMain/composeResources/values-bn/strings.xml +++ b/sync/src/commonMain/composeResources/values-bn/strings.xml @@ -1,4 +1,5 @@ + diff --git a/sync/src/commonMain/composeResources/values-ckb/strings.xml b/sync/src/commonMain/composeResources/values-ckb/strings.xml index d573f95216f..4c1c46011bd 100644 --- a/sync/src/commonMain/composeResources/values-ckb/strings.xml +++ b/sync/src/commonMain/composeResources/values-ckb/strings.xml @@ -1,4 +1,5 @@ + diff --git a/sync/src/commonMain/composeResources/values-cs/strings.xml b/sync/src/commonMain/composeResources/values-cs/strings.xml index d573f95216f..4c1c46011bd 100644 --- a/sync/src/commonMain/composeResources/values-cs/strings.xml +++ b/sync/src/commonMain/composeResources/values-cs/strings.xml @@ -1,4 +1,5 @@ + diff --git a/sync/src/commonMain/composeResources/values-da/strings.xml b/sync/src/commonMain/composeResources/values-da/strings.xml index d573f95216f..4c1c46011bd 100644 --- a/sync/src/commonMain/composeResources/values-da/strings.xml +++ b/sync/src/commonMain/composeResources/values-da/strings.xml @@ -1,4 +1,5 @@ + diff --git a/sync/src/commonMain/composeResources/values-en-rUS/strings.xml b/sync/src/commonMain/composeResources/values-en-rUS/strings.xml new file mode 100644 index 00000000000..4c1c46011bd --- /dev/null +++ b/sync/src/commonMain/composeResources/values-en-rUS/strings.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/sync/src/commonMain/composeResources/values-es-rES/strings.xml b/sync/src/commonMain/composeResources/values-es-rES/strings.xml index d573f95216f..4c1c46011bd 100644 --- a/sync/src/commonMain/composeResources/values-es-rES/strings.xml +++ b/sync/src/commonMain/composeResources/values-es-rES/strings.xml @@ -1,4 +1,5 @@ + diff --git a/sync/src/commonMain/composeResources/values-es-rUS/strings.xml b/sync/src/commonMain/composeResources/values-es-rUS/strings.xml new file mode 100644 index 00000000000..4c1c46011bd --- /dev/null +++ b/sync/src/commonMain/composeResources/values-es-rUS/strings.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/sync/src/commonMain/composeResources/values-es/strings.xml b/sync/src/commonMain/composeResources/values-es/strings.xml index d573f95216f..4c1c46011bd 100644 --- a/sync/src/commonMain/composeResources/values-es/strings.xml +++ b/sync/src/commonMain/composeResources/values-es/strings.xml @@ -1,4 +1,5 @@ + diff --git a/sync/src/commonMain/composeResources/values-fi/strings.xml b/sync/src/commonMain/composeResources/values-fi/strings.xml new file mode 100644 index 00000000000..4c1c46011bd --- /dev/null +++ b/sync/src/commonMain/composeResources/values-fi/strings.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/sync/src/commonMain/composeResources/values-fr/strings.xml b/sync/src/commonMain/composeResources/values-fr/strings.xml index d573f95216f..4c1c46011bd 100644 --- a/sync/src/commonMain/composeResources/values-fr/strings.xml +++ b/sync/src/commonMain/composeResources/values-fr/strings.xml @@ -1,4 +1,5 @@ + diff --git a/sync/src/commonMain/composeResources/values-fur/strings.xml b/sync/src/commonMain/composeResources/values-fur/strings.xml new file mode 100644 index 00000000000..4c1c46011bd --- /dev/null +++ b/sync/src/commonMain/composeResources/values-fur/strings.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/sync/src/commonMain/composeResources/values-hi-rIN/strings.xml b/sync/src/commonMain/composeResources/values-hi-rIN/strings.xml index d573f95216f..4c1c46011bd 100644 --- a/sync/src/commonMain/composeResources/values-hi-rIN/strings.xml +++ b/sync/src/commonMain/composeResources/values-hi-rIN/strings.xml @@ -1,4 +1,5 @@ + diff --git a/sync/src/commonMain/composeResources/values-id/strings.xml b/sync/src/commonMain/composeResources/values-id/strings.xml index d573f95216f..4c1c46011bd 100644 --- a/sync/src/commonMain/composeResources/values-id/strings.xml +++ b/sync/src/commonMain/composeResources/values-id/strings.xml @@ -1,4 +1,5 @@ + diff --git a/sync/src/commonMain/composeResources/values-it/strings.xml b/sync/src/commonMain/composeResources/values-it/strings.xml new file mode 100644 index 00000000000..4c1c46011bd --- /dev/null +++ b/sync/src/commonMain/composeResources/values-it/strings.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/sync/src/commonMain/composeResources/values-ka/strings.xml b/sync/src/commonMain/composeResources/values-ka/strings.xml new file mode 100644 index 00000000000..4c1c46011bd --- /dev/null +++ b/sync/src/commonMain/composeResources/values-ka/strings.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/sync/src/commonMain/composeResources/values-km/strings.xml b/sync/src/commonMain/composeResources/values-km/strings.xml index d573f95216f..4c1c46011bd 100644 --- a/sync/src/commonMain/composeResources/values-km/strings.xml +++ b/sync/src/commonMain/composeResources/values-km/strings.xml @@ -1,4 +1,5 @@ + diff --git a/sync/src/commonMain/composeResources/values-ko-rKR/strings.xml b/sync/src/commonMain/composeResources/values-ko-rKR/strings.xml new file mode 100644 index 00000000000..4c1c46011bd --- /dev/null +++ b/sync/src/commonMain/composeResources/values-ko-rKR/strings.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/sync/src/commonMain/composeResources/values-ko/strings.xml b/sync/src/commonMain/composeResources/values-ko/strings.xml new file mode 100644 index 00000000000..4c1c46011bd --- /dev/null +++ b/sync/src/commonMain/composeResources/values-ko/strings.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/sync/src/commonMain/composeResources/values-ku/strings.xml b/sync/src/commonMain/composeResources/values-ku/strings.xml new file mode 100644 index 00000000000..4c1c46011bd --- /dev/null +++ b/sync/src/commonMain/composeResources/values-ku/strings.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/sync/src/commonMain/composeResources/values-ky/strings.xml b/sync/src/commonMain/composeResources/values-ky/strings.xml new file mode 100644 index 00000000000..4c1c46011bd --- /dev/null +++ b/sync/src/commonMain/composeResources/values-ky/strings.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/sync/src/commonMain/composeResources/values-ln/strings.xml b/sync/src/commonMain/composeResources/values-ln/strings.xml new file mode 100644 index 00000000000..4c1c46011bd --- /dev/null +++ b/sync/src/commonMain/composeResources/values-ln/strings.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/sync/src/commonMain/composeResources/values-lo/strings.xml b/sync/src/commonMain/composeResources/values-lo/strings.xml index d573f95216f..4c1c46011bd 100644 --- a/sync/src/commonMain/composeResources/values-lo/strings.xml +++ b/sync/src/commonMain/composeResources/values-lo/strings.xml @@ -1,4 +1,5 @@ + diff --git a/sync/src/commonMain/composeResources/values-mk/strings.xml b/sync/src/commonMain/composeResources/values-mk/strings.xml new file mode 100644 index 00000000000..4c1c46011bd --- /dev/null +++ b/sync/src/commonMain/composeResources/values-mk/strings.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/sync/src/commonMain/composeResources/values-ml/strings.xml b/sync/src/commonMain/composeResources/values-ml/strings.xml new file mode 100644 index 00000000000..4c1c46011bd --- /dev/null +++ b/sync/src/commonMain/composeResources/values-ml/strings.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/sync/src/commonMain/composeResources/values-mn/strings.xml b/sync/src/commonMain/composeResources/values-mn/strings.xml new file mode 100644 index 00000000000..4c1c46011bd --- /dev/null +++ b/sync/src/commonMain/composeResources/values-mn/strings.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/sync/src/commonMain/composeResources/values-my/strings.xml b/sync/src/commonMain/composeResources/values-my/strings.xml index d573f95216f..4c1c46011bd 100644 --- a/sync/src/commonMain/composeResources/values-my/strings.xml +++ b/sync/src/commonMain/composeResources/values-my/strings.xml @@ -1,4 +1,5 @@ + diff --git a/sync/src/commonMain/composeResources/values-nb/strings.xml b/sync/src/commonMain/composeResources/values-nb/strings.xml index d573f95216f..4c1c46011bd 100644 --- a/sync/src/commonMain/composeResources/values-nb/strings.xml +++ b/sync/src/commonMain/composeResources/values-nb/strings.xml @@ -1,4 +1,5 @@ + diff --git a/sync/src/commonMain/composeResources/values-ne/strings.xml b/sync/src/commonMain/composeResources/values-ne/strings.xml new file mode 100644 index 00000000000..4c1c46011bd --- /dev/null +++ b/sync/src/commonMain/composeResources/values-ne/strings.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/sync/src/commonMain/composeResources/values-nl/strings.xml b/sync/src/commonMain/composeResources/values-nl/strings.xml index d573f95216f..4c1c46011bd 100644 --- a/sync/src/commonMain/composeResources/values-nl/strings.xml +++ b/sync/src/commonMain/composeResources/values-nl/strings.xml @@ -1,4 +1,5 @@ + diff --git a/sync/src/commonMain/composeResources/values-no/strings.xml b/sync/src/commonMain/composeResources/values-no/strings.xml new file mode 100644 index 00000000000..4c1c46011bd --- /dev/null +++ b/sync/src/commonMain/composeResources/values-no/strings.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/sync/src/commonMain/composeResources/values-or/strings.xml b/sync/src/commonMain/composeResources/values-or/strings.xml index d573f95216f..4c1c46011bd 100644 --- a/sync/src/commonMain/composeResources/values-or/strings.xml +++ b/sync/src/commonMain/composeResources/values-or/strings.xml @@ -1,4 +1,5 @@ + diff --git a/sync/src/commonMain/composeResources/values-pl/strings.xml b/sync/src/commonMain/composeResources/values-pl/strings.xml new file mode 100644 index 00000000000..4c1c46011bd --- /dev/null +++ b/sync/src/commonMain/composeResources/values-pl/strings.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/sync/src/commonMain/composeResources/values-prs/strings.xml b/sync/src/commonMain/composeResources/values-prs/strings.xml index d573f95216f..4c1c46011bd 100644 --- a/sync/src/commonMain/composeResources/values-prs/strings.xml +++ b/sync/src/commonMain/composeResources/values-prs/strings.xml @@ -1,4 +1,5 @@ + diff --git a/sync/src/commonMain/composeResources/values-ps/strings.xml b/sync/src/commonMain/composeResources/values-ps/strings.xml index d573f95216f..4c1c46011bd 100644 --- a/sync/src/commonMain/composeResources/values-ps/strings.xml +++ b/sync/src/commonMain/composeResources/values-ps/strings.xml @@ -1,4 +1,5 @@ + diff --git a/sync/src/commonMain/composeResources/values-pt-rBR/strings.xml b/sync/src/commonMain/composeResources/values-pt-rBR/strings.xml index d573f95216f..4c1c46011bd 100644 --- a/sync/src/commonMain/composeResources/values-pt-rBR/strings.xml +++ b/sync/src/commonMain/composeResources/values-pt-rBR/strings.xml @@ -1,4 +1,5 @@ + diff --git a/sync/src/commonMain/composeResources/values-pt/strings.xml b/sync/src/commonMain/composeResources/values-pt/strings.xml index d573f95216f..4c1c46011bd 100644 --- a/sync/src/commonMain/composeResources/values-pt/strings.xml +++ b/sync/src/commonMain/composeResources/values-pt/strings.xml @@ -1,4 +1,5 @@ + diff --git a/sync/src/commonMain/composeResources/values-rn/strings.xml b/sync/src/commonMain/composeResources/values-rn/strings.xml new file mode 100644 index 00000000000..4c1c46011bd --- /dev/null +++ b/sync/src/commonMain/composeResources/values-rn/strings.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/sync/src/commonMain/composeResources/values-ro/strings.xml b/sync/src/commonMain/composeResources/values-ro/strings.xml index d573f95216f..4c1c46011bd 100644 --- a/sync/src/commonMain/composeResources/values-ro/strings.xml +++ b/sync/src/commonMain/composeResources/values-ro/strings.xml @@ -1,4 +1,5 @@ + diff --git a/sync/src/commonMain/composeResources/values-ru/strings.xml b/sync/src/commonMain/composeResources/values-ru/strings.xml index d573f95216f..4c1c46011bd 100644 --- a/sync/src/commonMain/composeResources/values-ru/strings.xml +++ b/sync/src/commonMain/composeResources/values-ru/strings.xml @@ -1,4 +1,5 @@ + diff --git a/sync/src/commonMain/composeResources/values-rw/strings.xml b/sync/src/commonMain/composeResources/values-rw/strings.xml new file mode 100644 index 00000000000..4c1c46011bd --- /dev/null +++ b/sync/src/commonMain/composeResources/values-rw/strings.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/sync/src/commonMain/composeResources/values-si/strings.xml b/sync/src/commonMain/composeResources/values-si/strings.xml index d573f95216f..4c1c46011bd 100644 --- a/sync/src/commonMain/composeResources/values-si/strings.xml +++ b/sync/src/commonMain/composeResources/values-si/strings.xml @@ -1,4 +1,5 @@ + diff --git a/sync/src/commonMain/composeResources/values-sv/strings.xml b/sync/src/commonMain/composeResources/values-sv/strings.xml index d573f95216f..4c1c46011bd 100644 --- a/sync/src/commonMain/composeResources/values-sv/strings.xml +++ b/sync/src/commonMain/composeResources/values-sv/strings.xml @@ -1,4 +1,5 @@ + diff --git a/sync/src/commonMain/composeResources/values-sw-rTZ/strings.xml b/sync/src/commonMain/composeResources/values-sw-rTZ/strings.xml new file mode 100644 index 00000000000..4c1c46011bd --- /dev/null +++ b/sync/src/commonMain/composeResources/values-sw-rTZ/strings.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/sync/src/commonMain/composeResources/values-tet/strings.xml b/sync/src/commonMain/composeResources/values-tet/strings.xml index d573f95216f..4c1c46011bd 100644 --- a/sync/src/commonMain/composeResources/values-tet/strings.xml +++ b/sync/src/commonMain/composeResources/values-tet/strings.xml @@ -1,4 +1,5 @@ + diff --git a/sync/src/commonMain/composeResources/values-tg/strings.xml b/sync/src/commonMain/composeResources/values-tg/strings.xml index d573f95216f..4c1c46011bd 100644 --- a/sync/src/commonMain/composeResources/values-tg/strings.xml +++ b/sync/src/commonMain/composeResources/values-tg/strings.xml @@ -1,4 +1,5 @@ + diff --git a/sync/src/commonMain/composeResources/values-th/strings.xml b/sync/src/commonMain/composeResources/values-th/strings.xml new file mode 100644 index 00000000000..4c1c46011bd --- /dev/null +++ b/sync/src/commonMain/composeResources/values-th/strings.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/sync/src/commonMain/composeResources/values-ti/strings.xml b/sync/src/commonMain/composeResources/values-ti/strings.xml new file mode 100644 index 00000000000..4c1c46011bd --- /dev/null +++ b/sync/src/commonMain/composeResources/values-ti/strings.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/sync/src/commonMain/composeResources/values-tl/strings.xml b/sync/src/commonMain/composeResources/values-tl/strings.xml new file mode 100644 index 00000000000..4c1c46011bd --- /dev/null +++ b/sync/src/commonMain/composeResources/values-tl/strings.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/sync/src/commonMain/composeResources/values-uk/strings.xml b/sync/src/commonMain/composeResources/values-uk/strings.xml index d573f95216f..4c1c46011bd 100644 --- a/sync/src/commonMain/composeResources/values-uk/strings.xml +++ b/sync/src/commonMain/composeResources/values-uk/strings.xml @@ -1,4 +1,5 @@ + diff --git a/sync/src/commonMain/composeResources/values-ur/strings.xml b/sync/src/commonMain/composeResources/values-ur/strings.xml index d573f95216f..4c1c46011bd 100644 --- a/sync/src/commonMain/composeResources/values-ur/strings.xml +++ b/sync/src/commonMain/composeResources/values-ur/strings.xml @@ -1,4 +1,5 @@ + diff --git a/sync/src/commonMain/composeResources/values-uz-rUZ/strings.xml b/sync/src/commonMain/composeResources/values-uz-rUZ/strings.xml index d573f95216f..4c1c46011bd 100644 --- a/sync/src/commonMain/composeResources/values-uz-rUZ/strings.xml +++ b/sync/src/commonMain/composeResources/values-uz-rUZ/strings.xml @@ -1,4 +1,5 @@ + diff --git a/sync/src/commonMain/composeResources/values-uz/strings.xml b/sync/src/commonMain/composeResources/values-uz/strings.xml index d573f95216f..4c1c46011bd 100644 --- a/sync/src/commonMain/composeResources/values-uz/strings.xml +++ b/sync/src/commonMain/composeResources/values-uz/strings.xml @@ -1,4 +1,5 @@ + diff --git a/sync/src/commonMain/composeResources/values-vi/strings.xml b/sync/src/commonMain/composeResources/values-vi/strings.xml index d573f95216f..4c1c46011bd 100644 --- a/sync/src/commonMain/composeResources/values-vi/strings.xml +++ b/sync/src/commonMain/composeResources/values-vi/strings.xml @@ -1,4 +1,5 @@ + diff --git a/sync/src/commonMain/composeResources/values-zh-rCN/strings.xml b/sync/src/commonMain/composeResources/values-zh-rCN/strings.xml index fde1d508bc0..4c1c46011bd 100644 --- a/sync/src/commonMain/composeResources/values-zh-rCN/strings.xml +++ b/sync/src/commonMain/composeResources/values-zh-rCN/strings.xml @@ -1,5 +1,5 @@ + - diff --git a/sync/src/commonMain/composeResources/values-zh-rHK/strings.xml b/sync/src/commonMain/composeResources/values-zh-rHK/strings.xml new file mode 100644 index 00000000000..4c1c46011bd --- /dev/null +++ b/sync/src/commonMain/composeResources/values-zh-rHK/strings.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/sync/src/commonMain/composeResources/values-zh/strings.xml b/sync/src/commonMain/composeResources/values-zh/strings.xml index d573f95216f..4c1c46011bd 100644 --- a/sync/src/commonMain/composeResources/values-zh/strings.xml +++ b/sync/src/commonMain/composeResources/values-zh/strings.xml @@ -1,4 +1,5 @@ + diff --git a/tracker/src/commonMain/composeResources/values-en-rUS/strings.xml b/tracker/src/commonMain/composeResources/values-en-rUS/strings.xml new file mode 100644 index 00000000000..b2079e4cc5a --- /dev/null +++ b/tracker/src/commonMain/composeResources/values-en-rUS/strings.xml @@ -0,0 +1,4 @@ + + + Cancel + \ No newline at end of file diff --git a/tracker/src/commonMain/composeResources/values-hi-rIN/strings.xml b/tracker/src/commonMain/composeResources/values-hi-rIN/strings.xml index 643cbe46861..a91e87c5a30 100644 --- a/tracker/src/commonMain/composeResources/values-hi-rIN/strings.xml +++ b/tracker/src/commonMain/composeResources/values-hi-rIN/strings.xml @@ -1,8 +1,9 @@ + कोई डेटा नहीं और दिखाएँ कम दिखाएँ रद्द करें हटाएं सर्च करें / खोजें - \ No newline at end of file + \ No newline at end of file From af7ccdd4d634dff96bf6cda427fb8941f084d438 Mon Sep 17 00:00:00 2001 From: Xavier Molloy Date: Wed, 4 Feb 2026 08:19:33 +0100 Subject: [PATCH 039/114] chore: [ANDROAPP-7472] Update paging data (#4632) * chore: [ANDROAPP-7472] Update Paging data and dependency verification file * chore: [ANDROAPP-7472] Fix login without oath test * chore: [ANDROAPP-7472] remove duplicate dependency * chore: [ANDROAPP-7472] Use different compose paging version for tracker module * Revert "chore: [ANDROAPP-7472] Fix login without oath test" This reverts commit 7a4170a8664a3736594dc6f816002638d6367dfe. * chore: [ANDROAPP-7472] Use different compose paging version for tracker module * chore: [ANDROAPP-7472] Force compose animation version --- build.gradle.kts | 4 ++ gradle/libs.versions.toml | 4 +- gradle/verification-metadata.xml | 102 ++++++------------------------- 3 files changed, 23 insertions(+), 87 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 7b62571c3c3..0f749f4a086 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -59,6 +59,10 @@ allprojects { eachDependency { if (requested.group == "org.jacoco") useVersion("0.8.10") + // Force androidx.compose.animation to 1.9.5 to maintain compatibility with sharedElement API + if (requested.group == "androidx.compose.animation") { + useVersion("1.9.3") + } } } } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 1423b46e244..fb837ce38c9 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -28,8 +28,8 @@ fragmentktx = "1.8.9" recyclerview = "1.4.0" compose = "1.9.5" composePluginVersion = "1.9.3" -composePaging = "3.3.6" -pagingTesting = "3.3.6" +composePaging = "3.4.0" +pagingTesting = "3.4.0" composeConstraintLayout = "1.1.1" activityCompose = "1.11.0" viewModelCompose = "2.9.4" diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index 6fa4869b326..5e475e877f2 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -585,6 +585,9 @@ + + + @@ -687,6 +690,9 @@ + + + @@ -809,6 +815,9 @@ + + + @@ -921,6 +930,9 @@ + + + @@ -1458,6 +1470,11 @@ + + + + + @@ -4046,14 +4063,6 @@ - - - - - - - - @@ -4078,14 +4087,6 @@ - - - - - - - - @@ -4094,14 +4095,6 @@ - - - - - - - - @@ -4142,14 +4135,6 @@ - - - - - - - - @@ -4166,14 +4151,6 @@ - - - - - - - - @@ -4190,14 +4167,6 @@ - - - - - - - - @@ -4206,14 +4175,6 @@ - - - - - - - - @@ -4246,14 +4207,6 @@ - - - - - - - - @@ -4270,14 +4223,6 @@ - - - - - - - - @@ -4294,14 +4239,6 @@ - - - - - - - - @@ -10367,11 +10304,6 @@ - - - - - From c0892d10a73c6ec367beb6ddf00c5e5bfbc67bae Mon Sep 17 00:00:00 2001 From: Marcos Campos Date: Wed, 4 Feb 2026 13:09:11 +0100 Subject: [PATCH 040/114] chore: [ANDROAPP-7483] Adapt app to changes caused by category combo refactor in updated android sdk [skip size] (#4633) * chore: [ANDROAPP-7484] adapt to ktor upgrade * chore: [ANDROAPP-7484] adapt to ktor upgrade * chore: [ANDROAPP-7465] fix sdk version * feat: [ANDROAPP-7472] I Clean up old search repository [skip size] I (#4622) * feat: [ANDROAPP-7472] Clean up old search repository * feat: [ANDROAPP-7472] Add Paging data and dependency verification * fix: [ANDROAPP-7472] fix compilation error * feat: [ANDROAPP-7472] fix unit test * feat: [ANDROAPP-7472] copilot review * fix: [ANDROAPP-7472] revert library update * fix: [ANDROAPP-7472] fix sonar code smells * chore: [ANDROAPP-7483] Add missing categoryCombo to DataElement builders in tests * chore: [ANDROAPP-7483] add categoryCombo to Program builders in tests * chore: [ANDROAPP-7483] update dhis2sdk lib version * chore: [ANDROAPP-7483] Add to list to deviceProviders * chore: [ANDROAPP-7483] KtlintFormat --------- Co-authored-by: danielTari Co-authored-by: Xavier Molloy --- .../dhis2/bindings/TEICardExtensionsTest.kt | 4 +- .../dhislogic/EnrollmentEventGeneratorTest.kt | 2 + .../dhis2/data/filter/FilterRepositoryTest.kt | 6 + .../data/forms/dataentry/ValueStoreTest.kt | 4 + .../sorting/SearchSortingValueSetterTest.kt | 3 + ...pCoordinateFieldToFeatureCollectionTest.kt | 4 + .../MapDataElementToFeatureTest.kt | 4 + .../EnrollmentFormRepositoryTest.kt | 2 + .../enrollment/EnrollmentPresenterImplTest.kt | 17 +- .../EventCaptureRepositoryImplTest.kt | 25 +- .../eventInitial/EventInitialPresenterTest.kt | 8 +- .../EventInitialRepositoryImplTest.kt | 1 + .../main/program/ProgramRepositoryImplTest.kt | 4 + .../usescases/notes/NotesRepositoryTest.kt | 2 + .../ProgramEventDetailPresenterTest.kt | 8 +- .../ProgramEventMapperTest.kt | 2 + .../searchTrackEntity/SearchRepositoryTest.kt | 23 +- .../SearchTEIViewModelTest.kt | 2 + .../SearchTEPresenterTest.kt | 5 + .../ui/mapper/TEICardMapperTest.kt | 3 + .../teiDashboard/TeiAttributesProviderTest.kt | 7 +- .../teiDashboard/TeiDashboardPresenterTest.kt | 14 +- .../TeiProgramListRepositoryImplTest.kt | 3 + .../ui/mapper/InfoBarMapperTest.kt | 3 + .../ui/mapper/TEIDetailMapperTest.kt | 3 + .../TrackedEntityInstanceInfoProviderTests.kt | 7 +- .../locationprovider/LocationProviderImpl.kt | 3 +- .../analytics/charts/ChartsRepositoryTest.kt | 4 +- .../org/dhis2/form/data/FormValueStoreTest.kt | 3 + gradle/libs.versions.toml | 2 +- gradle/verification-metadata.xml | 448 ++++++++++++++++++ .../android/rtsm/data/DataElementFactory.kt | 2 + .../android/rtsm/services/StockManagerTest.kt | 5 +- 33 files changed, 610 insertions(+), 23 deletions(-) diff --git a/app/src/test/java/org/dhis2/bindings/TEICardExtensionsTest.kt b/app/src/test/java/org/dhis2/bindings/TEICardExtensionsTest.kt index 6aa51739cbf..36e20959173 100644 --- a/app/src/test/java/org/dhis2/bindings/TEICardExtensionsTest.kt +++ b/app/src/test/java/org/dhis2/bindings/TEICardExtensionsTest.kt @@ -8,6 +8,7 @@ import org.dhis2.commons.resources.ColorUtils import org.dhis2.commons.resources.ResourceManager import org.dhis2.mobile.commons.model.MetadataIconData import org.hisp.dhis.android.core.common.ObjectStyle +import org.hisp.dhis.android.core.common.ObjectWithUid import org.hisp.dhis.android.core.program.Program import org.junit.Test import org.mockito.kotlin.any @@ -128,5 +129,6 @@ class TEICardExtensionsTest { .color("color") .icon("icon") .build(), - ).build() + ).categoryCombo(ObjectWithUid.create("categoryComboUid")) + .build() } diff --git a/app/src/test/java/org/dhis2/data/dhislogic/EnrollmentEventGeneratorTest.kt b/app/src/test/java/org/dhis2/data/dhislogic/EnrollmentEventGeneratorTest.kt index dff2410bd0c..5f1c85a5a64 100644 --- a/app/src/test/java/org/dhis2/data/dhislogic/EnrollmentEventGeneratorTest.kt +++ b/app/src/test/java/org/dhis2/data/dhislogic/EnrollmentEventGeneratorTest.kt @@ -1,6 +1,7 @@ package org.dhis2.data.dhislogic import org.dhis2.commons.Constants +import org.hisp.dhis.android.core.common.ObjectWithUid import org.hisp.dhis.android.core.enrollment.Enrollment import org.hisp.dhis.android.core.period.PeriodType import org.hisp.dhis.android.core.program.Program @@ -170,6 +171,7 @@ class EnrollmentEventGeneratorTest { .builder() .uid(PROGRAM_UID) .useFirstStageDuringRegistration(useFirstStage) + .categoryCombo(ObjectWithUid.create("categoryComboUid")) .build() private fun mockedAutogeneratedEvents( diff --git a/app/src/test/java/org/dhis2/data/filter/FilterRepositoryTest.kt b/app/src/test/java/org/dhis2/data/filter/FilterRepositoryTest.kt index fb4eb711151..ac6a58fa1b1 100644 --- a/app/src/test/java/org/dhis2/data/filter/FilterRepositoryTest.kt +++ b/app/src/test/java/org/dhis2/data/filter/FilterRepositoryTest.kt @@ -18,6 +18,7 @@ import org.dhis2.commons.filters.workingLists.ProgramStageToWorkingListItemMappe import org.dhis2.commons.filters.workingLists.TeiFilterToWorkingListItemMapper import org.hisp.dhis.android.core.D2 import org.hisp.dhis.android.core.category.CategoryCombo +import org.hisp.dhis.android.core.common.ObjectWithUid import org.hisp.dhis.android.core.program.Program import org.hisp.dhis.android.core.settings.FilterSetting import org.hisp.dhis.android.core.settings.HomeFilter @@ -211,6 +212,7 @@ class FilterRepositoryTest { Program .builder() .uid("random") + .categoryCombo(ObjectWithUid.create("categoryComboUid")) .programType(org.hisp.dhis.android.core.program.ProgramType.WITH_REGISTRATION) .build() val catCombo = @@ -286,6 +288,7 @@ class FilterRepositoryTest { Program .builder() .uid("random") + .categoryCombo(ObjectWithUid.create("categoryComboUid")) .programType(org.hisp.dhis.android.core.program.ProgramType.WITH_REGISTRATION) .build() val catCombo = @@ -380,6 +383,7 @@ class FilterRepositoryTest { Program .builder() .uid("random") + .categoryCombo(ObjectWithUid.create("categoryComboUid")) .programType(org.hisp.dhis.android.core.program.ProgramType.WITH_REGISTRATION) .build() val catCombo = @@ -459,6 +463,7 @@ class FilterRepositoryTest { Program .builder() .uid("random") + .categoryCombo(ObjectWithUid.create("categoryComboUid")) .programType(org.hisp.dhis.android.core.program.ProgramType.WITH_REGISTRATION) .trackedEntityType( TrackedEntityType @@ -600,6 +605,7 @@ class FilterRepositoryTest { Program .builder() .uid("random") + .categoryCombo(ObjectWithUid.create("categoryComboUid")) .programType(org.hisp.dhis.android.core.program.ProgramType.WITH_REGISTRATION) .trackedEntityType( TrackedEntityType diff --git a/app/src/test/java/org/dhis2/data/forms/dataentry/ValueStoreTest.kt b/app/src/test/java/org/dhis2/data/forms/dataentry/ValueStoreTest.kt index d177b550eec..68189846a02 100644 --- a/app/src/test/java/org/dhis2/data/forms/dataentry/ValueStoreTest.kt +++ b/app/src/test/java/org/dhis2/data/forms/dataentry/ValueStoreTest.kt @@ -8,6 +8,7 @@ import org.dhis2.form.model.ValueStoreResult import org.dhis2.mobile.commons.providers.FieldErrorMessageProvider import org.dhis2.mobile.commons.reporting.CrashReportController import org.hisp.dhis.android.core.D2 +import org.hisp.dhis.android.core.common.ObjectWithUid import org.hisp.dhis.android.core.common.ValueType import org.hisp.dhis.android.core.dataelement.DataElement import org.hisp.dhis.android.core.option.Option @@ -346,6 +347,7 @@ class ValueStoreTest { .builder() .uid("fieldUid") .valueType(ValueType.TEXT) + .categoryCombo(ObjectWithUid.create("categoryComboUid")) .build() val storeResult = deValueStore.deleteOptionValueIfSelected( @@ -418,6 +420,7 @@ class ValueStoreTest { .builder() .uid(testingUid) .valueType(ValueType.TEXT) + .categoryCombo(ObjectWithUid.create("categoryComboUid")) .build() whenever( d2 @@ -509,6 +512,7 @@ class ValueStoreTest { .builder() .uid("uid") .valueType(ValueType.TEXT) + .categoryCombo(ObjectWithUid.create("categoryComboUid")) .build() private fun mockedUniqueAttribute(): TrackedEntityAttribute = diff --git a/app/src/test/java/org/dhis2/data/sorting/SearchSortingValueSetterTest.kt b/app/src/test/java/org/dhis2/data/sorting/SearchSortingValueSetterTest.kt index 36203ba359f..0c6a4a2aff4 100644 --- a/app/src/test/java/org/dhis2/data/sorting/SearchSortingValueSetterTest.kt +++ b/app/src/test/java/org/dhis2/data/sorting/SearchSortingValueSetterTest.kt @@ -7,6 +7,7 @@ import org.dhis2.data.enrollment.EnrollmentUiDataHelper import org.dhis2.usescases.searchTrackEntity.SearchTeiModel import org.hisp.dhis.android.core.D2 import org.hisp.dhis.android.core.arch.repositories.scope.RepositoryScope +import org.hisp.dhis.android.core.common.ObjectWithUid import org.hisp.dhis.android.core.enrollment.Enrollment import org.hisp.dhis.android.core.enrollment.EnrollmentStatus import org.hisp.dhis.android.core.event.Event @@ -447,6 +448,7 @@ class SearchSortingValueSetterTest { Program .builder() .uid("programUid") + .categoryCombo(ObjectWithUid.create("categoryComboUid")) .enrollmentDateLabel("programEnrollmentDateLabel") .build() @@ -481,6 +483,7 @@ class SearchSortingValueSetterTest { Program .builder() .uid("programUid") + .categoryCombo(ObjectWithUid.create("categoryComboUid")) .build() val result = diff --git a/app/src/test/java/org/dhis2/uicomponents/map/geometry/MapCoordinateFieldToFeatureCollectionTest.kt b/app/src/test/java/org/dhis2/uicomponents/map/geometry/MapCoordinateFieldToFeatureCollectionTest.kt index c63760f9c95..24c0aa71ddc 100644 --- a/app/src/test/java/org/dhis2/uicomponents/map/geometry/MapCoordinateFieldToFeatureCollectionTest.kt +++ b/app/src/test/java/org/dhis2/uicomponents/map/geometry/MapCoordinateFieldToFeatureCollectionTest.kt @@ -7,6 +7,7 @@ import org.dhis2.maps.utils.CoordinateAttributeInfo import org.dhis2.maps.utils.CoordinateDataElementInfo import org.hisp.dhis.android.core.common.FeatureType import org.hisp.dhis.android.core.common.Geometry +import org.hisp.dhis.android.core.common.ObjectWithUid import org.hisp.dhis.android.core.dataelement.DataElement import org.hisp.dhis.android.core.enrollment.Enrollment import org.hisp.dhis.android.core.event.Event @@ -69,6 +70,7 @@ class MapCoordinateFieldToFeatureCollectionTest { .builder() .uid("deUid") .displayFormName("deName") + .categoryCombo(ObjectWithUid.create("categoryComboUid")) .build(), Enrollment .builder() @@ -96,6 +98,7 @@ class MapCoordinateFieldToFeatureCollectionTest { .builder() .uid("de2Uid") .displayFormName("de2Name") + .categoryCombo(ObjectWithUid.create("categoryComboUid")) .build(), Enrollment .builder() @@ -123,6 +126,7 @@ class MapCoordinateFieldToFeatureCollectionTest { .builder() .uid("deUid") .displayFormName("deName") + .categoryCombo(ObjectWithUid.create("categoryComboUid")) .build(), Enrollment .builder() diff --git a/app/src/test/java/org/dhis2/uicomponents/map/geometry/mapper/featurecollection/MapDataElementToFeatureTest.kt b/app/src/test/java/org/dhis2/uicomponents/map/geometry/mapper/featurecollection/MapDataElementToFeatureTest.kt index 41076b5017b..109afa7ac23 100644 --- a/app/src/test/java/org/dhis2/uicomponents/map/geometry/mapper/featurecollection/MapDataElementToFeatureTest.kt +++ b/app/src/test/java/org/dhis2/uicomponents/map/geometry/mapper/featurecollection/MapDataElementToFeatureTest.kt @@ -6,6 +6,7 @@ import org.dhis2.maps.utils.CoordinateDataElementInfo import org.dhis2.uicomponents.map.geometry.MapEventToFeatureCollectionTest import org.hisp.dhis.android.core.common.FeatureType import org.hisp.dhis.android.core.common.Geometry +import org.hisp.dhis.android.core.common.ObjectWithUid import org.hisp.dhis.android.core.dataelement.DataElement import org.hisp.dhis.android.core.enrollment.Enrollment import org.hisp.dhis.android.core.event.Event @@ -78,6 +79,7 @@ class MapDataElementToFeatureTest { .builder() .uid("deUid") .displayFormName("deName") + .categoryCombo(ObjectWithUid.create("categoryComboUid")) .build(), Enrollment .builder() @@ -105,6 +107,7 @@ class MapDataElementToFeatureTest { .builder() .uid("de2Uid") .displayFormName("de2Name") + .categoryCombo(ObjectWithUid.create("categoryComboUid")) .build(), Enrollment .builder() @@ -132,6 +135,7 @@ class MapDataElementToFeatureTest { .builder() .uid("deUid") .displayFormName("deName") + .categoryCombo(ObjectWithUid.create("categoryComboUid")) .build(), Enrollment .builder() diff --git a/app/src/test/java/org/dhis2/usescases/enrollment/EnrollmentFormRepositoryTest.kt b/app/src/test/java/org/dhis2/usescases/enrollment/EnrollmentFormRepositoryTest.kt index 8b59fa59d37..cdbfe200d15 100644 --- a/app/src/test/java/org/dhis2/usescases/enrollment/EnrollmentFormRepositoryTest.kt +++ b/app/src/test/java/org/dhis2/usescases/enrollment/EnrollmentFormRepositoryTest.kt @@ -3,6 +3,7 @@ package org.dhis2.usescases.enrollment import org.dhis2.data.dhislogic.DhisEnrollmentUtils import org.hisp.dhis.android.core.D2 import org.hisp.dhis.android.core.arch.repositories.`object`.ReadOnlyOneObjectRepositoryFinalImpl +import org.hisp.dhis.android.core.common.ObjectWithUid import org.hisp.dhis.android.core.enrollment.Enrollment import org.hisp.dhis.android.core.enrollment.EnrollmentObjectRepository import org.hisp.dhis.android.core.enrollment.EnrollmentStatus @@ -35,6 +36,7 @@ class EnrollmentFormRepositoryTest { .builder() .uid("programUid") .displayName("programName") + .categoryCombo(ObjectWithUid.create("categoryComboUid")) .build() whenever(enrollmentRepository.blockingGet()) doReturn Enrollment diff --git a/app/src/test/java/org/dhis2/usescases/enrollment/EnrollmentPresenterImplTest.kt b/app/src/test/java/org/dhis2/usescases/enrollment/EnrollmentPresenterImplTest.kt index 5b5233bf151..6ba88a9741e 100644 --- a/app/src/test/java/org/dhis2/usescases/enrollment/EnrollmentPresenterImplTest.kt +++ b/app/src/test/java/org/dhis2/usescases/enrollment/EnrollmentPresenterImplTest.kt @@ -15,6 +15,7 @@ import org.hisp.dhis.android.core.common.Access import org.hisp.dhis.android.core.common.DataAccess import org.hisp.dhis.android.core.common.FeatureType import org.hisp.dhis.android.core.common.Geometry +import org.hisp.dhis.android.core.common.ObjectWithUid import org.hisp.dhis.android.core.enrollment.EnrollmentAccess import org.hisp.dhis.android.core.enrollment.EnrollmentObjectRepository import org.hisp.dhis.android.core.enrollment.EnrollmentStatus @@ -73,6 +74,7 @@ class EnrollmentPresenterImplTest { Program .builder() .uid("") + .categoryCombo(ObjectWithUid.create("categoryComboUid")) .access( Access .builder() @@ -94,6 +96,7 @@ class EnrollmentPresenterImplTest { Program .builder() .uid("") + .categoryCombo(ObjectWithUid.create("categoryComboUid")) .access( Access .builder() @@ -161,7 +164,12 @@ class EnrollmentPresenterImplTest { .geometry(geometry) .uid("random") .build() - val program = Program.builder().uid("tUID").build() + val program = + Program + .builder() + .uid("tUID") + .categoryCombo(ObjectWithUid.create("categoryComboUid")) + .build() whenever(teiRepository.blockingGet()) doReturn tei whenever(programRepository.blockingGet()) doReturn program @@ -193,7 +201,12 @@ class EnrollmentPresenterImplTest { .geometry(geometry) .uid("random") .build() - val program = Program.builder().uid("tUID").build() + val program = + Program + .builder() + .uid("tUID") + .categoryCombo(ObjectWithUid.create("categoryComboUid")) + .build() whenever(teiRepository.blockingGet()) doReturn tei whenever(programRepository.blockingGet()) doReturn program diff --git a/app/src/test/java/org/dhis2/usescases/eventsWithoutRegistration/eventCapture/EventCaptureRepositoryImplTest.kt b/app/src/test/java/org/dhis2/usescases/eventsWithoutRegistration/eventCapture/EventCaptureRepositoryImplTest.kt index e79e8acf17a..263ca795f01 100644 --- a/app/src/test/java/org/dhis2/usescases/eventsWithoutRegistration/eventCapture/EventCaptureRepositoryImplTest.kt +++ b/app/src/test/java/org/dhis2/usescases/eventsWithoutRegistration/eventCapture/EventCaptureRepositoryImplTest.kt @@ -5,6 +5,7 @@ import io.reactivex.Single import org.dhis2.data.dhislogic.AUTH_ALL import org.dhis2.data.dhislogic.AUTH_UNCOMPLETE_EVENT import org.hisp.dhis.android.core.D2 +import org.hisp.dhis.android.core.common.ObjectWithUid import org.hisp.dhis.android.core.dataelement.DataElement import org.hisp.dhis.android.core.enrollment.Enrollment import org.hisp.dhis.android.core.enrollment.EnrollmentStatus @@ -752,7 +753,11 @@ class EventCaptureRepositoryImplTest { .sortOrder(sectionOrderC) .dataElements( mutableListOf( - DataElement.builder().uid(sectionCDataElementA).build(), + DataElement + .builder() + .uid(sectionCDataElementA) + .categoryCombo(ObjectWithUid.create("categoryComboUid")) + .build(), ), ).build(), ProgramStageSection @@ -762,8 +767,16 @@ class EventCaptureRepositoryImplTest { .sortOrder(sectionOrderB) .dataElements( mutableListOf( - DataElement.builder().uid(sectionBDataElementA).build(), - DataElement.builder().uid(sectionBDataElementB).build(), + DataElement + .builder() + .uid(sectionBDataElementA) + .categoryCombo(ObjectWithUid.create("categoryComboUid")) + .build(), + DataElement + .builder() + .uid(sectionBDataElementB) + .categoryCombo(ObjectWithUid.create("categoryComboUid")) + .build(), ), ).build(), ProgramStageSection @@ -773,7 +786,11 @@ class EventCaptureRepositoryImplTest { .sortOrder(sectionOrderA) .dataElements( mutableListOf( - DataElement.builder().uid(sectionADataElementA).build(), + DataElement + .builder() + .uid(sectionADataElementA) + .categoryCombo(ObjectWithUid.create("categoryComboUid")) + .build(), ), ).build(), ) diff --git a/app/src/test/java/org/dhis2/usescases/eventsWithoutRegistration/eventInitial/EventInitialPresenterTest.kt b/app/src/test/java/org/dhis2/usescases/eventsWithoutRegistration/eventInitial/EventInitialPresenterTest.kt index 0ba99a2cf04..6d1518444f3 100644 --- a/app/src/test/java/org/dhis2/usescases/eventsWithoutRegistration/eventInitial/EventInitialPresenterTest.kt +++ b/app/src/test/java/org/dhis2/usescases/eventsWithoutRegistration/eventInitial/EventInitialPresenterTest.kt @@ -12,6 +12,7 @@ import org.dhis2.usescases.eventsWithoutRegistration.eventCapture.EventFieldMapp import org.dhis2.utils.analytics.AnalyticsHelper import org.hisp.dhis.android.core.common.FeatureType import org.hisp.dhis.android.core.common.Geometry +import org.hisp.dhis.android.core.common.ObjectWithUid import org.hisp.dhis.android.core.event.Event import org.hisp.dhis.android.core.event.EventEditableStatus.Editable import org.hisp.dhis.android.core.event.EventEditableStatus.NonEditable @@ -364,7 +365,12 @@ class EventInitialPresenterTest { programStageUid: String?, moreOrgUnits: Boolean = false, ) { - val program = Program.builder().uid(uid).build() + val program = + Program + .builder() + .uid(uid) + .categoryCombo(ObjectWithUid.create("categoryComboUid")) + .build() val orgUnits = mutableListOf( OrganisationUnit diff --git a/app/src/test/java/org/dhis2/usescases/eventsWithoutRegistration/eventInitial/EventInitialRepositoryImplTest.kt b/app/src/test/java/org/dhis2/usescases/eventsWithoutRegistration/eventInitial/EventInitialRepositoryImplTest.kt index 501f6b8559f..6e28218ae7c 100644 --- a/app/src/test/java/org/dhis2/usescases/eventsWithoutRegistration/eventInitial/EventInitialRepositoryImplTest.kt +++ b/app/src/test/java/org/dhis2/usescases/eventsWithoutRegistration/eventInitial/EventInitialRepositoryImplTest.kt @@ -259,6 +259,7 @@ class EventInitialRepositoryImplTest { Program .builder() .uid("programUid") + .categoryCombo(ObjectWithUid.create("categoryComboUid")) .access(Access.create(true, true, DataAccess.create(true, hasAccess))) .build() } diff --git a/app/src/test/java/org/dhis2/usescases/main/program/ProgramRepositoryImplTest.kt b/app/src/test/java/org/dhis2/usescases/main/program/ProgramRepositoryImplTest.kt index 8b86f26d761..bbbd457b33f 100644 --- a/app/src/test/java/org/dhis2/usescases/main/program/ProgramRepositoryImplTest.kt +++ b/app/src/test/java/org/dhis2/usescases/main/program/ProgramRepositoryImplTest.kt @@ -18,6 +18,7 @@ import org.hisp.dhis.android.core.D2 import org.hisp.dhis.android.core.common.Access import org.hisp.dhis.android.core.common.DataAccess import org.hisp.dhis.android.core.common.ObjectStyle +import org.hisp.dhis.android.core.common.ObjectWithUid import org.hisp.dhis.android.core.common.State import org.hisp.dhis.android.core.dataset.DataSet import org.hisp.dhis.android.core.dataset.DataSetInstanceSummary @@ -88,6 +89,7 @@ class ProgramRepositoryImplTest { .builder() .uid("dataSetUid") .description("description") + .categoryCombo(ObjectWithUid.create("categoryComboUid")) .style( ObjectStyle .builder() @@ -274,6 +276,7 @@ class ProgramRepositoryImplTest { .displayName("program1") .programType(ProgramType.WITHOUT_REGISTRATION) .style(ObjectStyle.builder().build()) + .categoryCombo(ObjectWithUid.create("categoryComboUid")) .build(), Program .builder() @@ -281,6 +284,7 @@ class ProgramRepositoryImplTest { .displayName("program2") .programType(ProgramType.WITH_REGISTRATION) .style(ObjectStyle.builder().build()) + .categoryCombo(ObjectWithUid.create("categoryComboUid")) .trackedEntityType( TrackedEntityType .builder() diff --git a/app/src/test/java/org/dhis2/usescases/notes/NotesRepositoryTest.kt b/app/src/test/java/org/dhis2/usescases/notes/NotesRepositoryTest.kt index b931b2efaa0..1474e19945d 100644 --- a/app/src/test/java/org/dhis2/usescases/notes/NotesRepositoryTest.kt +++ b/app/src/test/java/org/dhis2/usescases/notes/NotesRepositoryTest.kt @@ -4,6 +4,7 @@ import io.reactivex.Single import org.hisp.dhis.android.core.D2 import org.hisp.dhis.android.core.common.Access import org.hisp.dhis.android.core.common.DataAccess +import org.hisp.dhis.android.core.common.ObjectWithUid import org.hisp.dhis.android.core.enrollment.Enrollment import org.hisp.dhis.android.core.note.Note import org.hisp.dhis.android.core.program.Program @@ -94,6 +95,7 @@ class NotesRepositoryTest { Program .builder() .uid(UUID.randomUUID().toString()) + .categoryCombo(ObjectWithUid.create("categoryComboUid")) .access( Access .builder() diff --git a/app/src/test/java/org/dhis2/usescases/programEventDetail/ProgramEventDetailPresenterTest.kt b/app/src/test/java/org/dhis2/usescases/programEventDetail/ProgramEventDetailPresenterTest.kt index 494382f094c..a14db2e227f 100644 --- a/app/src/test/java/org/dhis2/usescases/programEventDetail/ProgramEventDetailPresenterTest.kt +++ b/app/src/test/java/org/dhis2/usescases/programEventDetail/ProgramEventDetailPresenterTest.kt @@ -15,6 +15,7 @@ import org.dhis2.commons.prefs.PreferenceProvider import org.dhis2.data.schedulers.TrampolineSchedulerProvider import org.hisp.dhis.android.core.category.CategoryCombo import org.hisp.dhis.android.core.category.CategoryOptionCombo +import org.hisp.dhis.android.core.common.ObjectWithUid import org.hisp.dhis.android.core.program.Program import org.junit.After import org.junit.Assert.assertTrue @@ -69,7 +70,12 @@ class ProgramEventDetailPresenterTest { @Test fun `Should init screen`() { - val program = Program.builder().uid("programUid").build() + val program = + Program + .builder() + .uid("programUid") + .categoryCombo(ObjectWithUid.create("categoryComboUid")) + .build() whenever(repository.getAccessDataWrite()) doReturn true whenever(repository.program()) doReturn Single.just(program) diff --git a/app/src/test/java/org/dhis2/usescases/programEventDetail/ProgramEventMapperTest.kt b/app/src/test/java/org/dhis2/usescases/programEventDetail/ProgramEventMapperTest.kt index cb20610a333..d43e86829d3 100644 --- a/app/src/test/java/org/dhis2/usescases/programEventDetail/ProgramEventMapperTest.kt +++ b/app/src/test/java/org/dhis2/usescases/programEventDetail/ProgramEventMapperTest.kt @@ -7,6 +7,7 @@ import org.dhis2.mobile.commons.model.MetadataIconData import org.hisp.dhis.android.core.D2 import org.hisp.dhis.android.core.category.CategoryOptionCombo import org.hisp.dhis.android.core.common.ObjectStyle +import org.hisp.dhis.android.core.common.ObjectWithUid import org.hisp.dhis.android.core.common.State import org.hisp.dhis.android.core.event.Event import org.hisp.dhis.android.core.event.EventStatus @@ -226,6 +227,7 @@ class ProgramEventMapperTest { .uid("programUid") .completeEventsExpiryDays(0) .expiryDays(0) + .categoryCombo(ObjectWithUid.create("categoryComboUid")) .build() private fun dummyCategoryOptionCombo() = diff --git a/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryTest.kt b/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryTest.kt index bf93de0c0ae..d3c83ec6b23 100644 --- a/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryTest.kt +++ b/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryTest.kt @@ -25,6 +25,7 @@ import org.hisp.dhis.android.core.arch.repositories.filters.internal.BooleanFilt import org.hisp.dhis.android.core.arch.repositories.filters.internal.StringFilterConnector import org.hisp.dhis.android.core.arch.repositories.`object`.ReadOnlyOneObjectRepositoryFinalImpl import org.hisp.dhis.android.core.arch.repositories.scope.RepositoryScope +import org.hisp.dhis.android.core.common.ObjectWithUid import org.hisp.dhis.android.core.common.State import org.hisp.dhis.android.core.common.ValueType import org.hisp.dhis.android.core.enrollment.Enrollment @@ -167,7 +168,12 @@ class SearchRepositoryTest { @Test fun shouldTransformToSearchTeiModelWithOverdueEvents() { val searchItem = getTrackedEntitySearchItem("header") - val program = Program.builder().uid("programUid").build() + val program = + Program + .builder() + .uid("programUid") + .categoryCombo(ObjectWithUid.create("categoryComboUid")) + .build() val sorting = SortingItem.create(Filters.ENROLLMENT_DATE) val tei = TrackedEntitySearchItemHelper.toTrackedEntityInstance(searchItem) @@ -200,7 +206,12 @@ class SearchRepositoryTest { @Test fun shouldTransformToSearchTeiModelWithOverdueScheduledEvents() { val searchItem = getTrackedEntitySearchItem("header") - val program = Program.builder().uid("programUid").build() + val program = + Program + .builder() + .uid("programUid") + .categoryCombo(ObjectWithUid.create("categoryComboUid")) + .build() val sorting = SortingItem.create(Filters.ENROLLMENT_DATE) val tei = TrackedEntitySearchItemHelper.toTrackedEntityInstance(searchItem) @@ -232,7 +243,12 @@ class SearchRepositoryTest { @Test fun shouldTransformToSearchTeiModelWithOutOverdueEvents() { val searchItem = getTrackedEntitySearchItem("header") - val program = Program.builder().uid("programUid").build() + val program = + Program + .builder() + .uid("programUid") + .categoryCombo(ObjectWithUid.create("categoryComboUid")) + .build() val sorting = SortingItem.create(Filters.ENROLLMENT_DATE) val tei = TrackedEntitySearchItemHelper.toTrackedEntityInstance(searchItem) @@ -352,6 +368,7 @@ class SearchRepositoryTest { .builder() .uid(programUid) .displayFrontPageList(true) + .categoryCombo(ObjectWithUid.create("categoryComboUid")) .build() // Mock setOverdueEvents diff --git a/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchTEIViewModelTest.kt b/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchTEIViewModelTest.kt index c101623c935..bc25581f333 100644 --- a/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchTEIViewModelTest.kt +++ b/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchTEIViewModelTest.kt @@ -35,6 +35,7 @@ import org.dhis2.mobile.commons.model.CustomIntentModel import org.dhis2.tracker.ui.input.action.TrackerInputAction import org.dhis2.usescases.searchTrackEntity.listView.SearchResult.SearchResultType import org.dhis2.utils.customviews.navigationbar.NavigationPage +import org.hisp.dhis.android.core.common.ObjectWithUid import org.hisp.dhis.android.core.common.ValueType import org.hisp.dhis.android.core.program.Program import org.hisp.dhis.android.core.trackedentity.TrackedEntityType @@ -1035,6 +1036,7 @@ class SearchTEIViewModelTest { .displayFrontPageList(displayFrontPageList) .minAttributesRequiredToSearch(minAttributesToSearch) .trackedEntityType(TrackedEntityType.builder().uid("teTypeUid").build()) + .categoryCombo(ObjectWithUid.create("categoryComboUid")) .apply { maxTeiCountToReturn?.let { maxTeiCountToReturn(maxTeiCountToReturn) diff --git a/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchTEPresenterTest.kt b/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchTEPresenterTest.kt index aaac8009b41..0de7cf852e4 100644 --- a/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchTEPresenterTest.kt +++ b/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchTEPresenterTest.kt @@ -13,6 +13,7 @@ import org.dhis2.data.schedulers.TestSchedulerProvider import org.dhis2.data.service.SyncStatusController import org.dhis2.utils.analytics.AnalyticsHelper import org.hisp.dhis.android.core.D2 +import org.hisp.dhis.android.core.common.ObjectWithUid import org.hisp.dhis.android.core.program.Program import org.hisp.dhis.android.core.trackedentity.TrackedEntityType import org.junit.After @@ -58,6 +59,7 @@ class SearchTEPresenterTest { .uid(initialProgram) .displayFrontPageList(true) .minAttributesRequiredToSearch(0) + .categoryCombo(ObjectWithUid.create("categoryComboUid")) .build() whenever( @@ -98,6 +100,7 @@ class SearchTEPresenterTest { .uid("uid") .displayFrontPageList(true) .minAttributesRequiredToSearch(1) + .categoryCombo(ObjectWithUid.create("categoryComboUid")) .build() presenter.setProgramForTesting(program) @@ -115,6 +118,7 @@ class SearchTEPresenterTest { .uid("uid") .displayFrontPageList(true) .minAttributesRequiredToSearch(1) + .categoryCombo(ObjectWithUid.create("categoryComboUid")) .build() val newSelectedProgram = @@ -123,6 +127,7 @@ class SearchTEPresenterTest { .uid("uid2") .displayFrontPageList(true) .minAttributesRequiredToSearch(1) + .categoryCombo(ObjectWithUid.create("categoryComboUid")) .build() whenever( diff --git a/app/src/test/java/org/dhis2/usescases/searchTrackEntity/ui/mapper/TEICardMapperTest.kt b/app/src/test/java/org/dhis2/usescases/searchTrackEntity/ui/mapper/TEICardMapperTest.kt index cd9dd6ffdfd..aff56c83073 100644 --- a/app/src/test/java/org/dhis2/usescases/searchTrackEntity/ui/mapper/TEICardMapperTest.kt +++ b/app/src/test/java/org/dhis2/usescases/searchTrackEntity/ui/mapper/TEICardMapperTest.kt @@ -7,6 +7,7 @@ import org.dhis2.commons.date.toDateSpan import org.dhis2.commons.date.toOverdueOrScheduledUiText import org.dhis2.commons.resources.ResourceManager import org.dhis2.usescases.searchTrackEntity.SearchTeiModel +import org.hisp.dhis.android.core.common.ObjectWithUid import org.hisp.dhis.android.core.common.State import org.hisp.dhis.android.core.enrollment.Enrollment import org.hisp.dhis.android.core.enrollment.EnrollmentStatus @@ -143,6 +144,7 @@ class TEICardMapperTest { .builder() .uid("Program1Uid") .displayName("Program 1") + .categoryCombo(ObjectWithUid.create("categoryComboUid")) .build(), null, ) @@ -151,6 +153,7 @@ class TEICardMapperTest { .builder() .uid("Program2Uid") .displayName("Program 2") + .categoryCombo(ObjectWithUid.create("categoryComboUid")) .build(), null, ) diff --git a/app/src/test/java/org/dhis2/usescases/teiDashboard/TeiAttributesProviderTest.kt b/app/src/test/java/org/dhis2/usescases/teiDashboard/TeiAttributesProviderTest.kt index 68e2e2c7c8a..bd0d4f4b8bb 100644 --- a/app/src/test/java/org/dhis2/usescases/teiDashboard/TeiAttributesProviderTest.kt +++ b/app/src/test/java/org/dhis2/usescases/teiDashboard/TeiAttributesProviderTest.kt @@ -267,7 +267,12 @@ class TeiAttributesProviderTest { .byTrackedEntityTypeUid() .eq(teType) .blockingGet()[0], - ) doReturn Program.builder().uid(program).build() + ) doReturn + Program + .builder() + .uid(program) + .categoryCombo(ObjectWithUid.create("categoryComboUid")) + .build() whenever(d2.programModule().programTrackedEntityAttributes()) doReturn mock() whenever(d2.programModule().programTrackedEntityAttributes().byProgram()) doReturn mock() diff --git a/app/src/test/java/org/dhis2/usescases/teiDashboard/TeiDashboardPresenterTest.kt b/app/src/test/java/org/dhis2/usescases/teiDashboard/TeiDashboardPresenterTest.kt index f727dbf0576..692004883f3 100644 --- a/app/src/test/java/org/dhis2/usescases/teiDashboard/TeiDashboardPresenterTest.kt +++ b/app/src/test/java/org/dhis2/usescases/teiDashboard/TeiDashboardPresenterTest.kt @@ -12,6 +12,7 @@ import org.dhis2.mobile.commons.model.MetadataIconData import org.dhis2.utils.analytics.AnalyticsHelper import org.dhis2.utils.analytics.CLICK import org.dhis2.utils.analytics.DELETE_TEI +import org.hisp.dhis.android.core.common.ObjectWithUid import org.hisp.dhis.android.core.enrollment.Enrollment import org.hisp.dhis.android.core.enrollment.EnrollmentStatus import org.hisp.dhis.android.core.organisationunit.OrganisationUnit @@ -65,7 +66,12 @@ class TeiDashboardPresenterTest { @Test fun `Should set program and restore adapter`() { val programUid = "programUid" - val program = Program.builder().uid(programUid).build() + val program = + Program + .builder() + .uid(programUid) + .categoryCombo(ObjectWithUid.create("categoryComboUid")) + .build() val trackedEntityInstance = TrackedEntityInstance.builder().uid(teiUid).build() val enrollment = Enrollment.builder().uid("enrollmentUid").build() val programStages = listOf(ProgramStage.builder().uid("programStageUid").build()) @@ -81,7 +87,11 @@ class TeiDashboardPresenterTest { val programs = listOf( Pair( - Program.builder().uid(programUid).build(), + Program + .builder() + .uid(programUid) + .categoryCombo(ObjectWithUid.create("categoryComboUid")) + .build(), MetadataIconData.defaultIcon(), ), ) diff --git a/app/src/test/java/org/dhis2/usescases/teiDashboard/teiProgramList/TeiProgramListRepositoryImplTest.kt b/app/src/test/java/org/dhis2/usescases/teiDashboard/teiProgramList/TeiProgramListRepositoryImplTest.kt index c10529a1bd4..d86bd361a7c 100644 --- a/app/src/test/java/org/dhis2/usescases/teiDashboard/teiProgramList/TeiProgramListRepositoryImplTest.kt +++ b/app/src/test/java/org/dhis2/usescases/teiDashboard/teiProgramList/TeiProgramListRepositoryImplTest.kt @@ -5,6 +5,7 @@ import org.dhis2.commons.date.DateUtils import org.dhis2.commons.resources.MetadataIconProvider import org.dhis2.usescases.main.program.ProgramViewModelMapper import org.hisp.dhis.android.core.D2 +import org.hisp.dhis.android.core.common.ObjectWithUid import org.hisp.dhis.android.core.enrollment.Enrollment import org.hisp.dhis.android.core.enrollment.EnrollmentCreateProjection import org.hisp.dhis.android.core.program.Program @@ -61,6 +62,7 @@ class TeiProgramListRepositoryImplTest { .builder() .uid("programUid") .displayIncidentDate(true) + .categoryCombo(ObjectWithUid.create("categoryComboUid")) .build() whenever( @@ -125,6 +127,7 @@ class TeiProgramListRepositoryImplTest { .builder() .uid("programUid") .displayIncidentDate(false) + .categoryCombo(ObjectWithUid.create("categoryComboUid")) .build() whenever( diff --git a/app/src/test/java/org/dhis2/usescases/teiDashboard/ui/mapper/InfoBarMapperTest.kt b/app/src/test/java/org/dhis2/usescases/teiDashboard/ui/mapper/InfoBarMapperTest.kt index b9224df9966..baddf218723 100644 --- a/app/src/test/java/org/dhis2/usescases/teiDashboard/ui/mapper/InfoBarMapperTest.kt +++ b/app/src/test/java/org/dhis2/usescases/teiDashboard/ui/mapper/InfoBarMapperTest.kt @@ -5,6 +5,7 @@ import org.dhis2.commons.resources.ResourceManager import org.dhis2.mobile.commons.model.MetadataIconData import org.dhis2.usescases.teiDashboard.DashboardEnrollmentModel import org.dhis2.usescases.teiDashboard.ui.model.InfoBarType +import org.hisp.dhis.android.core.common.ObjectWithUid import org.hisp.dhis.android.core.common.State import org.hisp.dhis.android.core.enrollment.Enrollment import org.hisp.dhis.android.core.enrollment.EnrollmentStatus @@ -173,6 +174,7 @@ class InfoBarMapperTest { .builder() .uid("Program1Uid") .displayName("Program 1") + .categoryCombo(ObjectWithUid.create("categoryComboUid")) .build(), MetadataIconData.defaultIcon(), ), @@ -181,6 +183,7 @@ class InfoBarMapperTest { .builder() .uid("Program2Uid") .displayName("Program 2") + .categoryCombo(ObjectWithUid.create("categoryComboUid")) .build(), MetadataIconData.defaultIcon(), ), diff --git a/app/src/test/java/org/dhis2/usescases/teiDashboard/ui/mapper/TEIDetailMapperTest.kt b/app/src/test/java/org/dhis2/usescases/teiDashboard/ui/mapper/TEIDetailMapperTest.kt index 93de79a22de..d30cd759fa9 100644 --- a/app/src/test/java/org/dhis2/usescases/teiDashboard/ui/mapper/TEIDetailMapperTest.kt +++ b/app/src/test/java/org/dhis2/usescases/teiDashboard/ui/mapper/TEIDetailMapperTest.kt @@ -4,6 +4,7 @@ import org.dhis2.R import org.dhis2.commons.resources.ResourceManager import org.dhis2.mobile.commons.model.MetadataIconData import org.dhis2.usescases.teiDashboard.DashboardEnrollmentModel +import org.hisp.dhis.android.core.common.ObjectWithUid import org.hisp.dhis.android.core.common.State import org.hisp.dhis.android.core.enrollment.Enrollment import org.hisp.dhis.android.core.enrollment.EnrollmentStatus @@ -132,6 +133,7 @@ class TEIDetailMapperTest { .builder() .uid("Program1Uid") .displayName("Program 1") + .categoryCombo(ObjectWithUid.create("categoryComboUid")) .build(), MetadataIconData.defaultIcon(), ), @@ -140,6 +142,7 @@ class TEIDetailMapperTest { .builder() .uid("Program2Uid") .displayName("Program 2") + .categoryCombo(ObjectWithUid.create("categoryComboUid")) .build(), MetadataIconData.defaultIcon(), ), diff --git a/app/src/test/java/org/dhis2/usescases/tracker/TrackedEntityInstanceInfoProviderTests.kt b/app/src/test/java/org/dhis2/usescases/tracker/TrackedEntityInstanceInfoProviderTests.kt index 20b0453b82e..d0e9ed58c99 100644 --- a/app/src/test/java/org/dhis2/usescases/tracker/TrackedEntityInstanceInfoProviderTests.kt +++ b/app/src/test/java/org/dhis2/usescases/tracker/TrackedEntityInstanceInfoProviderTests.kt @@ -8,6 +8,7 @@ import org.dhis2.mobile.commons.model.MetadataIconData import org.dhis2.tracker.data.ProfilePictureProvider import org.hisp.dhis.android.core.D2 import org.hisp.dhis.android.core.common.ObjectStyle +import org.hisp.dhis.android.core.common.ObjectWithUid import org.hisp.dhis.android.core.program.Program import org.hisp.dhis.android.core.trackedentity.TrackedEntityInstance import org.hisp.dhis.mobile.ui.designsystem.component.AdditionalInfoItem @@ -216,7 +217,11 @@ class TrackedEntityInstanceInfoProviderTests { .build() private fun mockProgram(hasStyle: Boolean = false): Program { - val program = Program.builder().uid("programUid") + val program = + Program + .builder() + .uid("programUid") + .categoryCombo(ObjectWithUid.create("categoryComboUid")) if (hasStyle) { program.style( diff --git a/commons/src/main/java/org/dhis2/commons/locationprovider/LocationProviderImpl.kt b/commons/src/main/java/org/dhis2/commons/locationprovider/LocationProviderImpl.kt index 2959bc49df4..b924db56dde 100644 --- a/commons/src/main/java/org/dhis2/commons/locationprovider/LocationProviderImpl.kt +++ b/commons/src/main/java/org/dhis2/commons/locationprovider/LocationProviderImpl.kt @@ -10,7 +10,6 @@ import android.location.LocationListener import android.location.LocationManager import androidx.core.app.ActivityCompat import androidx.core.location.LocationListenerCompat -import okhttp3.internal.toImmutableList private const val FUSED_LOCATION_PROVIDER = "fused" @@ -69,7 +68,7 @@ open class LocationProviderImpl( onLocationProviderChanged() } } - val deviceProviders = locationManager.allProviders.toImmutableList() + val deviceProviders = locationManager.allProviders.toList() if (deviceProviders.contains(LocationManager.NETWORK_PROVIDER)) { locationManager.requestLocationUpdates( LocationManager.NETWORK_PROVIDER, diff --git a/dhis_android_analytics/src/test/java/dhis2/org/analytics/charts/ChartsRepositoryTest.kt b/dhis_android_analytics/src/test/java/dhis2/org/analytics/charts/ChartsRepositoryTest.kt index adf8c8f65be..416e55b4a47 100644 --- a/dhis_android_analytics/src/test/java/dhis2/org/analytics/charts/ChartsRepositoryTest.kt +++ b/dhis_android_analytics/src/test/java/dhis2/org/analytics/charts/ChartsRepositoryTest.kt @@ -16,6 +16,7 @@ import org.hisp.dhis.android.core.analytics.AnalyticsException import org.hisp.dhis.android.core.analytics.aggregated.DimensionItem import org.hisp.dhis.android.core.analytics.aggregated.GridAnalyticsResponse import org.hisp.dhis.android.core.arch.helpers.Result +import org.hisp.dhis.android.core.common.ObjectWithUid import org.hisp.dhis.android.core.common.RelativeOrganisationUnit import org.hisp.dhis.android.core.common.RelativePeriod import org.hisp.dhis.android.core.common.ValueType @@ -676,6 +677,7 @@ class ChartsRepositoryTest { .builder() .uid("de_1") .valueType(ValueType.NUMBER) + .categoryCombo(ObjectWithUid.create("categoryOptionComboUid")) .build() whenever( d2 @@ -706,7 +708,7 @@ class ChartsRepositoryTest { ProgramStageDataElement .builder() .uid("psde_uid_1") - .dataElement(DataElement.builder().uid("de_1").build()) + .dataElement(ObjectWithUid.create("de_1")) .build(), ) } diff --git a/form/src/test/java/org/dhis2/form/data/FormValueStoreTest.kt b/form/src/test/java/org/dhis2/form/data/FormValueStoreTest.kt index 2e91e0324c4..5899c327e98 100644 --- a/form/src/test/java/org/dhis2/form/data/FormValueStoreTest.kt +++ b/form/src/test/java/org/dhis2/form/data/FormValueStoreTest.kt @@ -731,6 +731,7 @@ class FormValueStoreTest { .builder() .uid("fieldUid") .valueType(ValueType.TEXT) + .categoryCombo(ObjectWithUid.create("categoryComboUid")) .build() val storeResult = deValueStore.deleteOptionValueIfSelected( @@ -1178,6 +1179,7 @@ class FormValueStoreTest { .builder() .uid(testingUid) .valueType(ValueType.TEXT) + .categoryCombo(ObjectWithUid.create("categoryComboUid")) .build() whenever( d2 @@ -1386,6 +1388,7 @@ class FormValueStoreTest { .builder() .uid("uid") .valueType(ValueType.TEXT) + .categoryCombo(ObjectWithUid.create("categoryComboUid")) .build() private fun mockedUniqueAttribute(): TrackedEntityAttribute = diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index fb837ce38c9..a9d6178ede3 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -11,7 +11,7 @@ kotlin = '2.2.21' dagger = '2.57.2' jacoco = '0.8.14' designSystem = "0.7.0-SNAPSHOT" -dhis2sdk = "1.14.0-20260129.154413-7" +dhis2sdk = "1.14.0-20260202.110438-9" ruleEngine = "3.3.11" expressionParser = "1.2.2" appcompat = "1.7.1" diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index 5e475e877f2..69d9a98c4ed 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -4704,6 +4704,14 @@ + + + + + + + + @@ -7628,6 +7636,22 @@ + + + + + + + + + + + + + + + + @@ -7636,6 +7660,22 @@ + + + + + + + + + + + + + + + + @@ -7660,6 +7700,14 @@ + + + + + + + + @@ -7681,6 +7729,14 @@ + + + + + + + + @@ -8403,6 +8459,14 @@ + + + + + + + + @@ -8419,6 +8483,14 @@ + + + + + + + + @@ -8435,6 +8507,14 @@ + + + + + + + + @@ -8451,6 +8531,14 @@ + + + + + + + + @@ -8467,6 +8555,14 @@ + + + + + + + + @@ -8483,6 +8579,14 @@ + + + + + + + + @@ -8499,6 +8603,14 @@ + + + + + + + + @@ -8515,6 +8627,14 @@ + + + + + + + + @@ -8531,6 +8651,14 @@ + + + + + + + + @@ -8547,6 +8675,14 @@ + + + + + + + + @@ -8563,6 +8699,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -8579,6 +8739,14 @@ + + + + + + + + @@ -8595,6 +8763,14 @@ + + + + + + + + @@ -8611,6 +8787,27 @@ + + + + + + + + + + + + + + + + + + + + + @@ -8627,6 +8824,14 @@ + + + + + + + + @@ -8643,6 +8848,14 @@ + + + + + + + + @@ -8659,6 +8872,14 @@ + + + + + + + + @@ -8675,6 +8896,14 @@ + + + + + + + + @@ -8691,6 +8920,14 @@ + + + + + + + + @@ -8707,6 +8944,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -8723,6 +8984,14 @@ + + + + + + + + @@ -8739,6 +9008,14 @@ + + + + + + + + @@ -8755,6 +9032,14 @@ + + + + + + + + @@ -8771,6 +9056,14 @@ + + + + + + + + @@ -8787,6 +9080,14 @@ + + + + + + + + @@ -8803,6 +9104,14 @@ + + + + + + + + @@ -12183,6 +12492,17 @@ + + + + + + + + + + + @@ -12265,6 +12585,11 @@ + + + + + @@ -13022,6 +13347,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -13047,6 +13419,14 @@ + + + + + + + + @@ -13086,6 +13466,14 @@ + + + + + + + + @@ -13126,6 +13514,14 @@ + + + + + + + + @@ -13160,6 +13556,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -13824,6 +14254,14 @@ + + + + + + + + @@ -13842,6 +14280,11 @@ + + + + + @@ -13867,6 +14310,11 @@ + + + + + diff --git a/stock-usecase/src/test/java/org/dhis2/android/rtsm/data/DataElementFactory.kt b/stock-usecase/src/test/java/org/dhis2/android/rtsm/data/DataElementFactory.kt index ada2b8e52fd..c41a2dd92bf 100644 --- a/stock-usecase/src/test/java/org/dhis2/android/rtsm/data/DataElementFactory.kt +++ b/stock-usecase/src/test/java/org/dhis2/android/rtsm/data/DataElementFactory.kt @@ -1,5 +1,6 @@ package org.dhis2.android.rtsm.data +import org.hisp.dhis.android.core.common.ObjectWithUid import org.hisp.dhis.android.core.dataelement.DataElement object DataElementFactory { @@ -12,5 +13,6 @@ object DataElementFactory { .uid(uid) .name(name) .displayName(name) + .categoryCombo(ObjectWithUid.create("categoryComboUid")) .build() } diff --git a/stock-usecase/src/test/java/org/dhis2/android/rtsm/services/StockManagerTest.kt b/stock-usecase/src/test/java/org/dhis2/android/rtsm/services/StockManagerTest.kt index 7bac851da6c..004feaa75f7 100644 --- a/stock-usecase/src/test/java/org/dhis2/android/rtsm/services/StockManagerTest.kt +++ b/stock-usecase/src/test/java/org/dhis2/android/rtsm/services/StockManagerTest.kt @@ -19,7 +19,6 @@ import org.hisp.dhis.android.core.arch.repositories.filters.internal.StringFilte import org.hisp.dhis.android.core.arch.repositories.`object`.ReadOnlyOneObjectRepositoryFinalImpl import org.hisp.dhis.android.core.arch.repositories.scope.RepositoryScope import org.hisp.dhis.android.core.common.ObjectWithUid -import org.hisp.dhis.android.core.dataelement.DataElement import org.hisp.dhis.android.core.enrollment.Enrollment import org.hisp.dhis.android.core.enrollment.EnrollmentCollectionRepository import org.hisp.dhis.android.core.enrollment.EnrollmentStatus @@ -270,7 +269,7 @@ class StockManagerTest { // Mock mandatory field check to pass val dataElement = - mock { + mock { on { uid() } doReturn "de_uid" } val mandatoryDataElement = @@ -343,7 +342,7 @@ class StockManagerTest { // Mock mandatory field check to fail val dataElement = - mock { + mock { on { uid() } doReturn "de_uid" } val mandatoryDataElement = From 381bfd258d31814275796f59b0182852cf5e03f5 Mon Sep 17 00:00:00 2001 From: Xavier Molloy Date: Wed, 4 Feb 2026 15:47:13 +0100 Subject: [PATCH 041/114] feat: [ANDROAPP-7472] III Repositories and usecase [skip size] (#4624) * feat: [ANDROAPP-7472] copilot review * feat: [ANDROAPP-7472] Repositories and usecase * feat: [ANDROAPP-7472] refactor prepare query * fix: [ANDROAPP-7472] make fetch results not suspend * fix: [ANDROAPP-7472] Code review comments * fix: [ANDROAPP-7472] Code review comments * feat: [ANDROAPP-7472] copilot review * fix: [ANDROAPP-7472] Code review comments * chore: [ANDROAPP-7472] reduce cognitive complexity * chore: [ANDROAPP-7472] Address final copilot review comments * feat: [ANDROAPP-7472] Add tests for new repository and usecases (#4625) * feat: [ANDROAPP-7472] IV Koin injection for implementation (#4626) * feat: [ANDROAPP-7472] Koin injection for implementation * feat: [ANDROAPP-7472] Remove verbose import * feat: [ANDROAPP-7472] Add usecase to viewmodel and its factory * feat: [ANDROAPP-7472] Fix compilation error, unit tests * fix: [ANDROAPP-7472] Code review comments * chore: [ANDROAPP-7472] Small code review improvements --- .../java/org/dhis2/di/KoinInitialization.kt | 6 + .../searchTrackEntity/SearchTEIViewModel.kt | 2 + .../searchTrackEntity/SearchTEModule.java | 34 +- .../SearchTeiViewModelFactory.kt | 3 + .../di/SearchTEKoinModule.kt | 72 +++ .../SearchTEIViewModelTest.kt | 5 + .../java/org/dhis2/commons/di/FilterModule.kt | 82 +++ .../dhis2/commons/di/ResourceManagerModule.kt | 6 +- .../filters/periods/di/FilterPeriodsModule.kt | 3 +- .../data/SearchTrackedEntityRepositoryImpl.kt | 108 ++++ .../search/di/TrackerSearchModule.android.kt | 20 + .../SearchTrackedEntityRepositoryImplTest.kt | 422 +++++++++++++++ .../data/SearchTrackedEntityRepository.kt | 35 ++ .../tracker/search/di/TrackerSearchModule.kt | 29 + .../search/domain/SearchTrackedEntities.kt | 95 ++++ .../domain/SearchTrackedEntitiesTest.kt | 504 ++++++++++++++++++ .../search/di/TrackerSearchModule.desktop.kt | 13 + 17 files changed, 1433 insertions(+), 6 deletions(-) create mode 100644 app/src/main/java/org/dhis2/usescases/searchTrackEntity/di/SearchTEKoinModule.kt create mode 100644 commons/src/main/java/org/dhis2/commons/di/FilterModule.kt create mode 100644 tracker/src/androidMain/kotlin/org/dhis2/tracker/search/data/SearchTrackedEntityRepositoryImpl.kt create mode 100644 tracker/src/androidMain/kotlin/org/dhis2/tracker/search/di/TrackerSearchModule.android.kt create mode 100644 tracker/src/androidUnitTest/kotlin/org/dhis2/tracker/search/data/SearchTrackedEntityRepositoryImplTest.kt create mode 100644 tracker/src/commonMain/kotlin/org/dhis2/tracker/search/data/SearchTrackedEntityRepository.kt create mode 100644 tracker/src/commonMain/kotlin/org/dhis2/tracker/search/di/TrackerSearchModule.kt create mode 100644 tracker/src/commonMain/kotlin/org/dhis2/tracker/search/domain/SearchTrackedEntities.kt create mode 100644 tracker/src/commonTest/kotlin/org/dhis2/tracker/search/domain/SearchTrackedEntitiesTest.kt create mode 100644 tracker/src/desktopMain/kotlin/org/dhis2/tracker/search/di/TrackerSearchModule.desktop.kt diff --git a/app/src/main/java/org/dhis2/di/KoinInitialization.kt b/app/src/main/java/org/dhis2/di/KoinInitialization.kt index 61bbf879f81..cd0ba2b8593 100644 --- a/app/src/main/java/org/dhis2/di/KoinInitialization.kt +++ b/app/src/main/java/org/dhis2/di/KoinInitialization.kt @@ -2,13 +2,16 @@ package org.dhis2.di import android.app.Application import org.dhis2.android.rtsm.di.stockModule +import org.dhis2.commons.di.filterModule import org.dhis2.commons.di.resourceManagerModule import org.dhis2.commons.filters.periods.di.filterPeriodsModule import org.dhis2.data.biometric.biometricModule import org.dhis2.mobile.aggregates.di.aggregatesModule import org.dhis2.mobile.commons.di.commonsModule import org.dhis2.mobile.login.main.di.loginModule +import org.dhis2.tracker.search.di.trackerSearchModule import org.dhis2.usescases.datasets.di.dataSetModules +import org.dhis2.usescases.searchTrackEntity.di.searchTEKoinModule import org.dhis2.usescases.settingsprogram.di.settingsProgramModule import org.dhis2.utils.analytics.matomo.matomoModule import org.hisp.dhis.android.core.D2Configuration @@ -25,11 +28,14 @@ object KoinInitialization { serverModule(d2Configuration), commonsModule, aggregatesModule, + filterModule, filterPeriodsModule, resourceManagerModule, dataSetModules, stockModule, loginModule, + trackerSearchModule, + searchTEKoinModule, settingsProgramModule, biometricModule, matomoModule, diff --git a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEIViewModel.kt b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEIViewModel.kt index 9ce14658a12..6dfe89d4a18 100644 --- a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEIViewModel.kt +++ b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEIViewModel.kt @@ -55,6 +55,7 @@ import org.dhis2.maps.managers.MapManager import org.dhis2.maps.usecases.MapStyleConfiguration import org.dhis2.mobile.commons.coroutine.CoroutineTracker import org.dhis2.tracker.NavigationBarUIState +import org.dhis2.tracker.search.domain.SearchTrackedEntities import org.dhis2.tracker.ui.input.action.CustomIntentUid import org.dhis2.tracker.ui.input.action.FieldUid import org.dhis2.tracker.ui.input.action.TrackerInputAction @@ -85,6 +86,7 @@ class SearchTEIViewModel( private val resourceManager: ResourceManager, private val displayNameProvider: DisplayNameProvider, private val filterManager: FilterManager, + private val searchTrackedEntities: SearchTrackedEntities, ) : ViewModel() { private var layersVisibility: Map = emptyMap() diff --git a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEModule.java b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEModule.java index 4419e730727..5bd9b79947d 100644 --- a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEModule.java +++ b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEModule.java @@ -63,6 +63,9 @@ import org.dhis2.mobile.commons.customintents.CustomIntentRepositoryImpl; import org.dhis2.mobile.commons.reporting.CrashReportController; import org.dhis2.tracker.data.ProfilePictureProvider; +import org.dhis2.tracker.search.data.SearchTrackedEntityRepository; +import org.dhis2.tracker.search.data.SearchTrackedEntityRepositoryImpl; +import org.dhis2.tracker.search.domain.SearchTrackedEntities; import org.dhis2.ui.ThemeManager; import org.dhis2.usescases.events.EventInfoProvider; import org.dhis2.usescases.searchTrackEntity.ui.mapper.TEICardMapper; @@ -326,7 +329,8 @@ SearchTeiViewModelFactory providesViewModelFactory( ResourceManager resourceManager, DisplayNameProvider displayNameProvider, FilterManager filterManager, - ProgramConfigurationRepository programConfigurationRepository + ProgramConfigurationRepository programConfigurationRepository, + SearchTrackedEntities searchTrackedEntities ) { return new SearchTeiViewModelFactory( searchRepository, @@ -345,7 +349,33 @@ SearchTeiViewModelFactory providesViewModelFactory( ), resourceManager, displayNameProvider, - filterManager + filterManager, + searchTrackedEntities + ); + } + + @Provides + @PerActivity + SearchTrackedEntities provideLoadSearchResultsUseCase( + SearchTrackedEntityRepository searchTrackedEntityRepository, + org.dhis2.mobile.commons.customintents.CustomIntentRepository customIntentRepository + ) { + return new SearchTrackedEntities( + searchTrackedEntityRepository, + customIntentRepository, + this.teiType + ); + } + + @Provides + @PerActivity + SearchTrackedEntityRepository provideLoadSearchResultsRepository( + D2 d2, + FilterPresenter filterPresenter + ) { + return new SearchTrackedEntityRepositoryImpl( + d2, + filterPresenter ); } diff --git a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTeiViewModelFactory.kt b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTeiViewModelFactory.kt index ee636e4696e..6358f8bebea 100644 --- a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTeiViewModelFactory.kt +++ b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTeiViewModelFactory.kt @@ -8,6 +8,7 @@ import org.dhis2.commons.resources.ResourceManager import org.dhis2.commons.viewmodel.DispatcherProvider import org.dhis2.form.ui.provider.DisplayNameProvider import org.dhis2.maps.usecases.MapStyleConfiguration +import org.dhis2.tracker.search.domain.SearchTrackedEntities class SearchTeiViewModelFactory( private val searchRepository: SearchRepository, @@ -22,6 +23,7 @@ class SearchTeiViewModelFactory( private val resourceManager: ResourceManager, private val displayNameProvider: DisplayNameProvider, private val filterManager: FilterManager, + private val searchTrackedEntities: SearchTrackedEntities, ) : ViewModelProvider.Factory { override fun create(modelClass: Class): T = SearchTEIViewModel( @@ -37,5 +39,6 @@ class SearchTeiViewModelFactory( resourceManager, displayNameProvider, filterManager, + searchTrackedEntities, ) as T } diff --git a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/di/SearchTEKoinModule.kt b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/di/SearchTEKoinModule.kt new file mode 100644 index 00000000000..c87e8f1a9a5 --- /dev/null +++ b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/di/SearchTEKoinModule.kt @@ -0,0 +1,72 @@ +package org.dhis2.usescases.searchTrackEntity.di + +import org.dhis2.usescases.searchTrackEntity.SearchRepository +import org.dhis2.usescases.searchTrackEntity.SearchTEIViewModel +import org.dhis2.usescases.searchTrackEntity.SearchTeiViewModelFactory +import org.koin.core.module.dsl.viewModel +import org.koin.core.parameter.parametersOf +import org.koin.dsl.module + +/** + * Koin module for Search Tracked Entity feature. + * This module provides dependencies for SearchTEIViewModel and related components. + * + * Note: This module coexists with the legacy Dagger SearchTEModule during the migration. + */ +val searchTEKoinModule = + module { + // SearchTeiViewModelFactory + // Factory for creating SearchTEIViewModel instances with SearchTrackedEntities + factory { params -> + val initialProgramUid: String? = params.getOrNull() + val initialQuery: MutableMap?>? = params.getOrNull() + val teType: String = params.get() // teType is required + + // Get SearchRepository from Dagger to access teType + val searchRepository: SearchRepository = get() + + SearchTeiViewModelFactory( + searchRepository = searchRepository, + searchRepositoryKt = get(), + searchNavPageConfigurator = get(), + initialProgramUid = initialProgramUid, + initialQuery = initialQuery, + mapDataRepository = get(), + networkUtils = get(), + dispatchers = get(), + mapStyleConfig = get(), + resourceManager = get(), + displayNameProvider = get(), + filterManager = get(), + searchTrackedEntities = get { parametersOf(teType) }, + ) + } + + // SearchTEIViewModel + // Note: This ViewModel requires parameters (initialProgramUid, initialQuery, teType) + // Use: viewModel { parametersOf(programUid, queryMap, teType) } + viewModel { params -> + val initialProgramUid: String? = params.getOrNull() + val initialQuery: MutableMap?>? = params.getOrNull() + val teType: String = params.get() // teType is required + + // Get SearchRepository from Dagger + val searchRepository: SearchRepository = get() + + SearchTEIViewModel( + initialProgramUid = initialProgramUid, + initialQuery = initialQuery, + searchRepository = searchRepository, + searchRepositoryKt = get(), + searchNavPageConfigurator = get(), + mapDataRepository = get(), + networkUtils = get(), + dispatchers = get(), + mapStyleConfig = get(), + resourceManager = get(), + displayNameProvider = get(), + filterManager = get(), + searchTrackedEntities = get { parametersOf(teType) }, + ) + } + } diff --git a/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchTEIViewModelTest.kt b/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchTEIViewModelTest.kt index bc25581f333..543fbdf0dba 100644 --- a/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchTEIViewModelTest.kt +++ b/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchTEIViewModelTest.kt @@ -32,6 +32,7 @@ import org.dhis2.form.ui.provider.DisplayNameProvider import org.dhis2.maps.geometry.mapper.EventsByProgramStage import org.dhis2.maps.usecases.MapStyleConfiguration import org.dhis2.mobile.commons.model.CustomIntentModel +import org.dhis2.tracker.search.domain.SearchTrackedEntities import org.dhis2.tracker.ui.input.action.TrackerInputAction import org.dhis2.usescases.searchTrackEntity.listView.SearchResult.SearchResultType import org.dhis2.utils.customviews.navigationbar.NavigationPage @@ -73,6 +74,7 @@ class SearchTEIViewModelTest { private val resourceManager: ResourceManager = mock() private val displayNameProvider: DisplayNameProvider = mock() private val filterManager: FilterManager = mock() + private val searchTrackedEntities: SearchTrackedEntities = mock() @ExperimentalCoroutinesApi private val testingDispatcher = StandardTestDispatcher() @@ -106,6 +108,7 @@ class SearchTEIViewModelTest { resourceManager = resourceManager, displayNameProvider = displayNameProvider, filterManager = filterManager, + searchTrackedEntities = searchTrackedEntities, ) testingDispatcher.scheduler.advanceUntilIdle() } @@ -798,6 +801,7 @@ class SearchTEIViewModelTest { resourceManager = resourceManager, displayNameProvider = displayNameProvider, filterManager = filterManager, + searchTrackedEntities = searchTrackedEntities, ) testingDispatcher.scheduler.advanceUntilIdle() @@ -844,6 +848,7 @@ class SearchTEIViewModelTest { }, displayNameProvider = displayNameProvider, filterManager = filterManager, + searchTrackedEntities = searchTrackedEntities, ) testingDispatcher.scheduler.advanceUntilIdle() diff --git a/commons/src/main/java/org/dhis2/commons/di/FilterModule.kt b/commons/src/main/java/org/dhis2/commons/di/FilterModule.kt new file mode 100644 index 00000000000..acf03d69a6c --- /dev/null +++ b/commons/src/main/java/org/dhis2/commons/di/FilterModule.kt @@ -0,0 +1,82 @@ +package org.dhis2.commons.di + +import org.dhis2.commons.filters.FilterManager +import org.dhis2.commons.filters.FilterResources +import org.dhis2.commons.filters.data.FilterPresenter +import org.dhis2.commons.filters.data.FilterRepository +import org.dhis2.commons.filters.data.GetFiltersApplyingWebAppConfig +import org.dhis2.commons.filters.workingLists.EventFilterToWorkingListItemMapper +import org.dhis2.commons.filters.workingLists.ProgramStageToWorkingListItemMapper +import org.dhis2.commons.filters.workingLists.TeiFilterToWorkingListItemMapper +import org.dhis2.commons.resources.EventResourcesProvider +import org.dhis2.commons.resources.ResourceManager +import org.koin.core.module.dsl.factoryOf +import org.koin.dsl.module + +val mainFilterModule = + module { + // Singleton for GetFiltersApplyingWebAppConfig + single { + GetFiltersApplyingWebAppConfig() + } + + // FilterManager - singleton per server + single { + FilterManager.initWith(get()) + } + + // FilterResources + factory { + FilterResources( + resourceManager = get(), + eventResourcesProvider = get(), + ) + } + + // EventResourcesProvider + factory { + EventResourcesProvider( + d2 = get(), + resourceManager = get(), + ) + } + + // Working list mappers + factory { + EventFilterToWorkingListItemMapper( + defaultWorkingListLabel = get().defaultWorkingListLabel(), + ) + } + + factory { + TeiFilterToWorkingListItemMapper( + defaultWorkingListLabel = get().defaultWorkingListLabel(), + ) + } + + factory { + ProgramStageToWorkingListItemMapper( + defaultWorkingListLabel = get().defaultWorkingListLabel(), + ) + } + + // FilterRepository + factory { + FilterRepository( + d2 = get(), + resources = get(), + getFiltersApplyingWebAppConfig = get(), + eventFilterToWorkingListItemMapper = get(), + teiFilterToWorkingListItemMapper = get(), + programStageToWorkingListItemMapper = get(), + ) + } + + // FilterPresenter + factoryOf(::FilterPresenter) + } + +val filterModule = + module { + includes(mainFilterModule, resourceManagerModule) + } diff --git a/commons/src/main/java/org/dhis2/commons/di/ResourceManagerModule.kt b/commons/src/main/java/org/dhis2/commons/di/ResourceManagerModule.kt index e67a160e02a..8f98dff4375 100644 --- a/commons/src/main/java/org/dhis2/commons/di/ResourceManagerModule.kt +++ b/commons/src/main/java/org/dhis2/commons/di/ResourceManagerModule.kt @@ -3,6 +3,7 @@ package org.dhis2.commons.di import org.dhis2.commons.periods.data.PeriodLabelProvider import org.dhis2.commons.resources.ColorUtils import org.dhis2.commons.resources.ResourceManager +import org.koin.android.ext.koin.androidContext import org.koin.dsl.module val resourceManagerModule = @@ -10,8 +11,9 @@ val resourceManagerModule = single { ColorUtils() } - factory { params -> - ResourceManager(params.get(), get()) + + single { + ResourceManager(androidContext(), get()) } factory { diff --git a/commons/src/main/java/org/dhis2/commons/filters/periods/di/FilterPeriodsModule.kt b/commons/src/main/java/org/dhis2/commons/filters/periods/di/FilterPeriodsModule.kt index 15bb0d6d421..402e5f224c5 100644 --- a/commons/src/main/java/org/dhis2/commons/filters/periods/di/FilterPeriodsModule.kt +++ b/commons/src/main/java/org/dhis2/commons/filters/periods/di/FilterPeriodsModule.kt @@ -7,7 +7,6 @@ import org.dhis2.commons.filters.periods.domain.GetFilterPeriods import org.dhis2.commons.filters.periods.ui.viewmodel.FilterPeriodsDialogViewmodel import org.koin.core.module.dsl.singleOf import org.koin.core.module.dsl.viewModel -import org.koin.core.parameter.parametersOf import org.koin.dsl.module val filterPeriodsModule = @@ -34,7 +33,7 @@ val filterPeriodsModule = FilterPeriodsDialogViewmodel( getFilterPeriods = get(), getFilterPeriodTypes = get(), - resourceManager = get { parametersOf(params.get()) }, + resourceManager = get(), periodTypeLabelProvider = get(), launchMode = params.get(), ) diff --git a/tracker/src/androidMain/kotlin/org/dhis2/tracker/search/data/SearchTrackedEntityRepositoryImpl.kt b/tracker/src/androidMain/kotlin/org/dhis2/tracker/search/data/SearchTrackedEntityRepositoryImpl.kt new file mode 100644 index 00000000000..2dc088b2573 --- /dev/null +++ b/tracker/src/androidMain/kotlin/org/dhis2/tracker/search/data/SearchTrackedEntityRepositoryImpl.kt @@ -0,0 +1,108 @@ +package org.dhis2.tracker.search.data + +import androidx.paging.PagingData +import androidx.paging.map +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.map +import org.dhis2.commons.filters.data.FilterPresenter +import org.dhis2.tracker.search.model.SearchTrackedEntityAttribute +import org.dhis2.tracker.search.model.TrackedEntitySearchItemResult +import org.hisp.dhis.android.core.D2 +import org.hisp.dhis.android.core.trackedentity.search.TrackedEntitySearchCollectionRepository + +class SearchTrackedEntityRepositoryImpl( + private val d2: D2, + private val filterPresenter: FilterPresenter, +) : SearchTrackedEntityRepository { + private var trackedEntityInstanceQuery: TrackedEntitySearchCollectionRepository? = null + + // Checks whether the dataId is an attribute of the teType + override suspend fun isTETypeAttribute( + teType: String, + dataId: String, + ): Boolean = + d2 + .trackedEntityModule() + .trackedEntityTypeAttributes() + .byTrackedEntityTypeUid() + .eq(teType) + .byTrackedEntityAttributeUid() + .eq(dataId) + .one() + .blockingExists() + + override suspend fun getTEAttribute(dataId: String): SearchTrackedEntityAttribute { + val attribute = + d2 + .trackedEntityModule() + .trackedEntityAttributes() + .uid(dataId) + .blockingGet() + return SearchTrackedEntityAttribute( + isUnique = attribute?.unique() == true, + isOptionSet = (attribute?.optionSet() != null), + ) + } + + override suspend fun addToQuery( + dataId: String, + dataValues: List, + isUnique: Boolean, + isOptionSet: Boolean, + ) { + trackedEntityInstanceQuery = + if (dataValues.size > 1) { + // return any tracked entities with attributes that match the values in the list + trackedEntityInstanceQuery?.byFilter(dataId)?.`in`(dataValues) + } else { + if (dataValues.size == 1) { + if (isUnique || isOptionSet) { + // If the attribute is unique or an option set, we want an exact match + trackedEntityInstanceQuery?.byFilter(dataId)?.eq(dataValues[0]) + } else { + // return tracked entities that contain the data value + trackedEntityInstanceQuery?.byFilter(dataId)?.like(dataValues[0]) + } + } else { + trackedEntityInstanceQuery + } + } + } + + override suspend fun addFiltersToQuery( + program: String?, + teType: String, + ) { + trackedEntityInstanceQuery = + filterPresenter.filteredTrackedEntityInstances( + program, + teType, + ) + } + + override suspend fun excludeValuesFromQuery(excludeValues: List) { + trackedEntityInstanceQuery = trackedEntityInstanceQuery?.excludeUids()?.`in`(excludeValues) + } + + override fun fetchResults( + isOnline: Boolean, + hasStateFilters: Boolean, + allowCache: Boolean, + ): Flow> { + // if the device is online and there are no state filters, we can use online cache + val pagerFlow = + if (isOnline && !hasStateFilters) { + trackedEntityInstanceQuery?.allowOnlineCache()?.eq(allowCache)?.offlineFirst() + } else { + // otherwise we use offline only + trackedEntityInstanceQuery?.allowOnlineCache()?.eq(allowCache)?.offlineOnly() + } + + // map the paging data to TrackedEntitySearchItemResult + return pagerFlow?.getPagingData(10)?.map { pagingData -> + pagingData.map { item -> + item.toTrackedEntitySearchItemResult() + } + } ?: throw IllegalStateException("TrackedEntityInstanceQuery is not initialized") + } +} diff --git a/tracker/src/androidMain/kotlin/org/dhis2/tracker/search/di/TrackerSearchModule.android.kt b/tracker/src/androidMain/kotlin/org/dhis2/tracker/search/di/TrackerSearchModule.android.kt new file mode 100644 index 00000000000..fa86fafc999 --- /dev/null +++ b/tracker/src/androidMain/kotlin/org/dhis2/tracker/search/di/TrackerSearchModule.android.kt @@ -0,0 +1,20 @@ +package org.dhis2.tracker.search.di + +import org.dhis2.tracker.search.data.SearchTrackedEntityRepository +import org.dhis2.tracker.search.data.SearchTrackedEntityRepositoryImpl +import org.koin.core.module.Module +import org.koin.dsl.module + +/** + * Android-specific implementation of the tracker search repository module. + */ +internal actual val trackerSearchRepositoryModule: Module = + module { + // SearchTrackedEntityRepository - factory implementation + factory { + SearchTrackedEntityRepositoryImpl( + d2 = get(), + filterPresenter = get(), + ) + } + } diff --git a/tracker/src/androidUnitTest/kotlin/org/dhis2/tracker/search/data/SearchTrackedEntityRepositoryImplTest.kt b/tracker/src/androidUnitTest/kotlin/org/dhis2/tracker/search/data/SearchTrackedEntityRepositoryImplTest.kt new file mode 100644 index 00000000000..7bc2c81871d --- /dev/null +++ b/tracker/src/androidUnitTest/kotlin/org/dhis2/tracker/search/data/SearchTrackedEntityRepositoryImplTest.kt @@ -0,0 +1,422 @@ +package org.dhis2.tracker.search.data + +import kotlinx.coroutines.test.runTest +import org.dhis2.commons.filters.data.FilterPresenter +import org.hisp.dhis.android.core.D2 +import org.hisp.dhis.android.core.arch.repositories.`object`.ReadOnlyOneObjectRepositoryFinalImpl +import org.hisp.dhis.android.core.trackedentity.TrackedEntityAttribute +import org.hisp.dhis.android.core.trackedentity.TrackedEntityTypeAttribute +import org.hisp.dhis.android.core.trackedentity.search.TrackedEntitySearchCollectionRepository +import org.junit.Assert.assertFalse +import org.junit.Assert.assertNotNull +import org.junit.Assert.assertTrue +import org.junit.Before +import org.junit.Test +import org.mockito.Mockito +import org.mockito.kotlin.any +import org.mockito.kotlin.doReturn +import org.mockito.kotlin.mock +import org.mockito.kotlin.verify +import org.mockito.kotlin.whenever + +class SearchTrackedEntityRepositoryImplTest { + private lateinit var repository: SearchTrackedEntityRepositoryImpl + + private val d2: D2 = mock(defaultAnswer = Mockito.RETURNS_DEEP_STUBS) + private val filterPresenter: FilterPresenter = mock() + + private val teType = "personType" + private val programUid = "programUid" + + @Before + fun setup() { + repository = + SearchTrackedEntityRepositoryImpl( + d2 = d2, + filterPresenter = filterPresenter, + ) + } + + @Test + fun `isTETypeAttribute should return true when attribute belongs to teType`() = + runTest { + // Given + val attributeUid = "attr1" + val mockOneRepository: ReadOnlyOneObjectRepositoryFinalImpl = mock() + + whenever( + d2 + .trackedEntityModule() + .trackedEntityTypeAttributes() + .byTrackedEntityTypeUid() + .eq(teType), + ) doReturn mock() + + whenever( + d2 + .trackedEntityModule() + .trackedEntityTypeAttributes() + .byTrackedEntityTypeUid() + .eq(teType) + .byTrackedEntityAttributeUid(), + ) doReturn mock() + + whenever( + d2 + .trackedEntityModule() + .trackedEntityTypeAttributes() + .byTrackedEntityTypeUid() + .eq(teType) + .byTrackedEntityAttributeUid() + .eq(attributeUid), + ) doReturn mock() + + whenever( + d2 + .trackedEntityModule() + .trackedEntityTypeAttributes() + .byTrackedEntityTypeUid() + .eq(teType) + .byTrackedEntityAttributeUid() + .eq(attributeUid) + .one(), + ) doReturn mockOneRepository + + whenever(mockOneRepository.blockingExists()) doReturn true + + // When + val result = repository.isTETypeAttribute(teType, attributeUid) + + // Then + assertTrue(result) + } + + @Test + fun `isTETypeAttribute should return false when attribute does not belong to teType`() = + runTest { + // Given + val attributeUid = "attr1" + val mockOneRepository: ReadOnlyOneObjectRepositoryFinalImpl = mock() + + whenever( + d2 + .trackedEntityModule() + .trackedEntityTypeAttributes() + .byTrackedEntityTypeUid() + .eq(teType), + ) doReturn mock() + + whenever( + d2 + .trackedEntityModule() + .trackedEntityTypeAttributes() + .byTrackedEntityTypeUid() + .eq(teType) + .byTrackedEntityAttributeUid(), + ) doReturn mock() + + whenever( + d2 + .trackedEntityModule() + .trackedEntityTypeAttributes() + .byTrackedEntityTypeUid() + .eq(teType) + .byTrackedEntityAttributeUid() + .eq(attributeUid), + ) doReturn mock() + + whenever( + d2 + .trackedEntityModule() + .trackedEntityTypeAttributes() + .byTrackedEntityTypeUid() + .eq(teType) + .byTrackedEntityAttributeUid() + .eq(attributeUid) + .one(), + ) doReturn mockOneRepository + + whenever(mockOneRepository.blockingExists()) doReturn false + + // When + val result = repository.isTETypeAttribute(teType, attributeUid) + + // Then + assertFalse(result) + } + + @Test + fun `getTEAttribute should return unique attribute properties`() = + runTest { + // Given + val attributeUid = "uniqueAttr" + val attribute = + TrackedEntityAttribute + .builder() + .uid(attributeUid) + .unique(true) + .optionSet(null) + .build() + + whenever( + d2 + .trackedEntityModule() + .trackedEntityAttributes() + .uid(attributeUid) + .blockingGet(), + ) doReturn attribute + + // When + val result = repository.getTEAttribute(attributeUid) + + // Then + assertTrue(result.isUnique) + assertFalse(result.isOptionSet) + } + + @Test + fun `getTEAttribute should return option set attribute properties`() = + runTest { + // Given + val attributeUid = "optionSetAttr" + + val attribute = + TrackedEntityAttribute + .builder() + .uid(attributeUid) + .unique(false) + .optionSet( + org.hisp.dhis.android.core.common.ObjectWithUid + .create("optionSetUid"), + ).build() + + whenever( + d2 + .trackedEntityModule() + .trackedEntityAttributes() + .uid(attributeUid) + .blockingGet(), + ) doReturn attribute + + // When + val result = repository.getTEAttribute(attributeUid) + + // Then + assertFalse(result.isUnique) + assertTrue(result.isOptionSet) + } + + @Test + fun `addToQuery should add filter with multiple values using in`() = + runTest { + // Given + val dataId = "attr1" + val dataValues = listOf("value1", "value2", "value3") + val mockQuery: TrackedEntitySearchCollectionRepository = mock(defaultAnswer = Mockito.RETURNS_DEEP_STUBS) + + // Initialize query first + whenever(filterPresenter.filteredTrackedEntityInstances(any(), any())) doReturn mockQuery + + repository.addFiltersToQuery(programUid, teType) + + // When + repository.addToQuery( + dataId = dataId, + dataValues = dataValues, + isUnique = false, + isOptionSet = false, + ) + + // Then - verify the filter was applied + verify(mockQuery).byFilter(dataId) + } + + @Test + fun `addToQuery should add filter with exact match for unique attribute`() = + runTest { + // Given + val dataId = "uniqueAttr" + val dataValues = listOf("exactValue") + val mockQuery: TrackedEntitySearchCollectionRepository = mock(defaultAnswer = Mockito.RETURNS_DEEP_STUBS) + + // Initialize query first + whenever(filterPresenter.filteredTrackedEntityInstances(any(), any())) doReturn mockQuery + + repository.addFiltersToQuery(programUid, teType) + + // When + repository.addToQuery( + dataId = dataId, + dataValues = dataValues, + isUnique = true, + isOptionSet = false, + ) + + // Then - verify the filter was applied + verify(mockQuery).byFilter(dataId) + } + + @Test + fun `addToQuery should add filter with exact match for option set attribute`() = + runTest { + // Given + val dataId = "optionSetAttr" + val dataValues = listOf("optionValue") + val mockQuery: TrackedEntitySearchCollectionRepository = mock(defaultAnswer = Mockito.RETURNS_DEEP_STUBS) + + // Initialize query first + whenever(filterPresenter.filteredTrackedEntityInstances(any(), any())) doReturn mockQuery + + repository.addFiltersToQuery(programUid, teType) + + // When + repository.addToQuery( + dataId = dataId, + dataValues = dataValues, + isUnique = false, + isOptionSet = true, + ) + + // Then - verify the filter was applied + verify(mockQuery).byFilter(dataId) + } + + @Test + fun `addToQuery should add filter with like for regular attribute`() = + runTest { + // Given + val dataId = "regularAttr" + val dataValues = listOf("searchValue") + val mockQuery: TrackedEntitySearchCollectionRepository = mock(defaultAnswer = Mockito.RETURNS_DEEP_STUBS) + + // Initialize query first + whenever(filterPresenter.filteredTrackedEntityInstances(any(), any())) doReturn mockQuery + + repository.addFiltersToQuery(programUid, teType) + + // When + repository.addToQuery( + dataId = dataId, + dataValues = dataValues, + isUnique = false, + isOptionSet = false, + ) + + // Then - verify the filter was applied + verify(mockQuery).byFilter(dataId) + } + + @Test + fun `addFiltersToQuery should initialize query with filter presenter`() = + runTest { + // Given + val mockQuery: TrackedEntitySearchCollectionRepository = mock() + whenever(filterPresenter.filteredTrackedEntityInstances(programUid, teType)) doReturn mockQuery + + // When + repository.addFiltersToQuery(programUid, teType) + + // Then + verify(filterPresenter).filteredTrackedEntityInstances(programUid, teType) + } + + @Test + fun `excludeValuesFromQuery should add exclude filter`() = + runTest { + // Given + val excludeValues = listOf("uid1", "uid2", "uid3") + val mockQuery: TrackedEntitySearchCollectionRepository = mock(defaultAnswer = Mockito.RETURNS_DEEP_STUBS) + + whenever(filterPresenter.filteredTrackedEntityInstances(any(), any())) doReturn mockQuery + + repository.addFiltersToQuery(programUid, teType) + + // When + repository.excludeValuesFromQuery(excludeValues) + + // Then + verify(mockQuery).excludeUids() + } + + @Test + fun `fetchResults should return offline only when offline or has state filters`() = + runTest { + // Given + val mockQuery: TrackedEntitySearchCollectionRepository = mock(defaultAnswer = Mockito.RETURNS_DEEP_STUBS) + + whenever(filterPresenter.filteredTrackedEntityInstances(any(), any())) doReturn mockQuery + + repository.addFiltersToQuery(programUid, teType) + + // When + val result = + repository.fetchResults( + isOnline = false, + hasStateFilters = false, + allowCache = true, + ) + + // Then + assertNotNull(result) + verify(mockQuery).allowOnlineCache() + } + + @Test + fun `fetchResults should return offline first when online and no state filters`() = + runTest { + // Given + val mockQuery: TrackedEntitySearchCollectionRepository = mock(defaultAnswer = Mockito.RETURNS_DEEP_STUBS) + + whenever(filterPresenter.filteredTrackedEntityInstances(any(), any())) doReturn mockQuery + + repository.addFiltersToQuery(programUid, teType) + + // When + val result = + repository.fetchResults( + isOnline = true, + hasStateFilters = false, + allowCache = false, + ) + + // Then + assertNotNull(result) + verify(mockQuery).allowOnlineCache() + } + + @Test + fun `fetchResults should use allowCache parameter correctly`() = + runTest { + // Given + val mockQuery: TrackedEntitySearchCollectionRepository = mock(defaultAnswer = Mockito.RETURNS_DEEP_STUBS) + + whenever(filterPresenter.filteredTrackedEntityInstances(any(), any())) doReturn mockQuery + + repository.addFiltersToQuery(programUid, teType) + + // When + repository.fetchResults( + isOnline = true, + hasStateFilters = false, + allowCache = true, + ) + + // Then + verify(mockQuery).allowOnlineCache() + } + + @Test(expected = IllegalStateException::class) + fun `fetchResults should throw exception when query not initialized`() = + runTest { + // Given - no query initialized + + // When + repository.fetchResults( + isOnline = false, + hasStateFilters = false, + allowCache = true, + ) + + // Then - exception is thrown + } +} diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/data/SearchTrackedEntityRepository.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/data/SearchTrackedEntityRepository.kt new file mode 100644 index 00000000000..577775d93a9 --- /dev/null +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/data/SearchTrackedEntityRepository.kt @@ -0,0 +1,35 @@ +package org.dhis2.tracker.search.data + +import androidx.paging.PagingData +import kotlinx.coroutines.flow.Flow +import org.dhis2.tracker.search.model.SearchTrackedEntityAttribute +import org.dhis2.tracker.search.model.TrackedEntitySearchItemResult + +interface SearchTrackedEntityRepository { + suspend fun isTETypeAttribute( + teType: String, + dataId: String, + ): Boolean + + suspend fun getTEAttribute(dataId: String): SearchTrackedEntityAttribute + + suspend fun addToQuery( + dataId: String, + dataValues: List, + isUnique: Boolean, + isOptionSet: Boolean, + ) + + suspend fun addFiltersToQuery( + program: String?, + teType: String, + ) + + suspend fun excludeValuesFromQuery(excludeValues: List) + + fun fetchResults( + isOnline: Boolean, + hasStateFilters: Boolean, + allowCache: Boolean, + ): Flow> +} diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/di/TrackerSearchModule.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/di/TrackerSearchModule.kt new file mode 100644 index 00000000000..8ad69ed4c6e --- /dev/null +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/di/TrackerSearchModule.kt @@ -0,0 +1,29 @@ +package org.dhis2.tracker.search.di + +import org.dhis2.tracker.search.domain.SearchTrackedEntities +import org.koin.core.module.Module +import org.koin.dsl.module + +/** + * Platform-specific repository module. + * Implemented in androidMain and other platform-specific source sets. + */ +internal expect val trackerSearchRepositoryModule: Module + +/** + * Common tracker search module containing use cases and common dependencies. + */ +val trackerSearchModule = + module { + // Include platform-specific repository implementations + includes(trackerSearchRepositoryModule) + + // SearchTrackedEntities - factory with teType parameter + factory { params -> + SearchTrackedEntities( + repository = get(), + customIntentRepository = get(), + teType = params.get(), + ) + } + } diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/domain/SearchTrackedEntities.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/domain/SearchTrackedEntities.kt new file mode 100644 index 00000000000..32c1d9fd291 --- /dev/null +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/domain/SearchTrackedEntities.kt @@ -0,0 +1,95 @@ +package org.dhis2.tracker.search.domain + +import androidx.paging.PagingData +import kotlinx.coroutines.flow.Flow +import org.dhis2.mobile.commons.customintents.CustomIntentRepository +import org.dhis2.mobile.commons.domain.UseCase +import org.dhis2.mobile.commons.error.DomainError +import org.dhis2.mobile.commons.model.CustomIntentActionTypeModel +import org.dhis2.tracker.search.data.SearchTrackedEntityRepository +import org.dhis2.tracker.search.model.SearchTrackedEntitiesInput +import org.dhis2.tracker.search.model.TrackedEntitySearchItemResult + +class SearchTrackedEntities( + private val repository: SearchTrackedEntityRepository, + private val customIntentRepository: CustomIntentRepository, + private val teType: String, +) : UseCase>> { + override suspend fun invoke(input: SearchTrackedEntitiesInput): Result>> { + try { + prepareQuery(input, teType) + // Due to performance issues and possible duplicates we exclude the values in the exclude list only when no program is selected + if (input.excludeValues?.isNotEmpty() == true && input.selectedProgram == null) { + repository.excludeValuesFromQuery(input.excludeValues.toList()) + } + // fetch results from repository based on the prepared query + // and if the device is online and has state filters + return Result.success( + repository.fetchResults( + isOnline = input.isOnline, + hasStateFilters = input.hasStateFilters, + allowCache = input.allowCache, + ), + ) + } catch (domainError: DomainError) { + // Errors will be handled by the view layer + return Result.failure(domainError) + } + } + + private suspend fun prepareQuery( + input: SearchTrackedEntitiesInput, + teType: String, + ) { + // Add filters from FilterManager + repository.addFiltersToQuery(input.selectedProgram, teType) + + input.queryData?.let { queryData -> + // iterate through the query data and add to the repository query + for ((dataId, dataValues) in queryData) { + // checks if the dataId is an attribute of the teType + val isTETypeAttribute = getIsTETypeAttribute(input.selectedProgram, dataId, teType) + + if (input.selectedProgram != null || isTETypeAttribute) { + // fetches the teAttribute details (isUnique, isOptionSet) + + dataValues?.let { values -> + // normalize values: if the attribute doesn't have custom intent that returns multiple values + // and there are multiple values, join them into a single comma-separated value + val normalizedValues = + if (values.size > 1 && + !customIntentRepository.attributeHasCustomIntentAndReturnsAListOfValues( + dataId, + CustomIntentActionTypeModel.SEARCH, + ) + ) { + mutableListOf(values.joinToString(",")) + } else { + values + } + + val teAttribute = repository.getTEAttribute(dataId) + + repository.addToQuery( + dataId, + normalizedValues, + teAttribute.isUnique, + teAttribute.isOptionSet, + ) + } + } + } + } + } + + private suspend fun getIsTETypeAttribute( + selectedProgram: String?, + dataId: String, + teType: String, + ): Boolean = + if (selectedProgram == null) { + repository.isTETypeAttribute(teType, dataId) + } else { + false + } +} diff --git a/tracker/src/commonTest/kotlin/org/dhis2/tracker/search/domain/SearchTrackedEntitiesTest.kt b/tracker/src/commonTest/kotlin/org/dhis2/tracker/search/domain/SearchTrackedEntitiesTest.kt new file mode 100644 index 00000000000..d8c89db0806 --- /dev/null +++ b/tracker/src/commonTest/kotlin/org/dhis2/tracker/search/domain/SearchTrackedEntitiesTest.kt @@ -0,0 +1,504 @@ +package org.dhis2.tracker.search.domain + +import androidx.paging.PagingData +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.test.runTest +import org.dhis2.mobile.commons.customintents.CustomIntentRepository +import org.dhis2.mobile.commons.error.DomainError +import org.dhis2.mobile.commons.model.CustomIntentActionTypeModel +import org.dhis2.tracker.search.data.SearchTrackedEntityRepository +import org.dhis2.tracker.search.model.SearchTrackedEntitiesInput +import org.dhis2.tracker.search.model.SearchTrackedEntityAttribute +import org.dhis2.tracker.search.model.TrackedEntitySearchItemResult +import org.junit.Assert.assertEquals +import org.junit.Assert.assertTrue +import org.junit.Before +import org.junit.Test +import org.mockito.kotlin.any +import org.mockito.kotlin.doReturn +import org.mockito.kotlin.eq +import org.mockito.kotlin.mock +import org.mockito.kotlin.never +import org.mockito.kotlin.verify +import org.mockito.kotlin.whenever + +class SearchTrackedEntitiesTest { + private lateinit var useCase: SearchTrackedEntities + + private val repository: SearchTrackedEntityRepository = mock() + private val customIntentRepository: CustomIntentRepository = mock() + private val teType = "personType" + + @Before + fun setup() { + useCase = + SearchTrackedEntities( + repository = repository, + customIntentRepository = customIntentRepository, + teType = teType, + ) + } + + @Test + fun `invoke should successfully return flow when query has data`() = + runTest { + // Given + val queryData = mutableMapOf?>("attr1" to listOf("value1"), "attr2" to listOf("value2")) + val searchParams = + SearchTrackedEntitiesInput( + selectedProgram = "programUid", + allowCache = true, + excludeValues = hashSetOf(), + hasStateFilters = false, + isOnline = true, + queryData = queryData, + ) + + val mockPagingData: PagingData = PagingData.empty() + val mockFlow: Flow> = flowOf(mockPagingData) + + whenever(repository.isTETypeAttribute(eq(teType), any())) doReturn true + whenever(repository.getTEAttribute(any())) doReturn + SearchTrackedEntityAttribute( + isUnique = false, + isOptionSet = false, + ) + whenever( + customIntentRepository.attributeHasCustomIntentAndReturnsAListOfValues( + any(), + eq(CustomIntentActionTypeModel.SEARCH), + ), + ) doReturn false + whenever(repository.fetchResults(any(), any(), any())) doReturn mockFlow + + // When + val result = useCase.invoke(searchParams) + + // Then + assertTrue(result.isSuccess) + verify(repository).addFiltersToQuery("programUid", teType) + verify(repository).addToQuery( + dataId = "attr1", + dataValues = listOf("value1"), + isUnique = false, + isOptionSet = false, + ) + verify(repository).addToQuery( + dataId = "attr2", + dataValues = listOf("value2"), + isUnique = false, + isOptionSet = false, + ) + verify(repository).fetchResults( + isOnline = true, + hasStateFilters = false, + allowCache = true, + ) + } + + @Test + fun `invoke should successfully return flow when query is null`() = + runTest { + // Given + val searchParams = + SearchTrackedEntitiesInput( + selectedProgram = "programUid", + allowCache = true, + excludeValues = hashSetOf(), + hasStateFilters = false, + isOnline = false, + queryData = null, + ) + + val mockPagingData: PagingData = PagingData.empty() + val mockFlow: Flow> = flowOf(mockPagingData) + + whenever(repository.fetchResults(any(), any(), any())) doReturn mockFlow + + // When + val result = useCase.invoke(searchParams) + + // Then + assertTrue(result.isSuccess) + verify(repository).addFiltersToQuery("programUid", teType) + verify(repository, never()).addToQuery(any(), any(), any(), any()) + verify(repository).fetchResults( + isOnline = false, + hasStateFilters = false, + allowCache = true, + ) + } + + @Test + fun `invoke should exclude values when no program is selected`() = + runTest { + // Given + val excludedValues = hashSetOf("excludedUid1", "excludedUid2") + val searchParams = + SearchTrackedEntitiesInput( + selectedProgram = null, + allowCache = true, + excludeValues = excludedValues, + hasStateFilters = false, + isOnline = false, + queryData = null, + ) + + val mockPagingData: PagingData = PagingData.empty() + val mockFlow: Flow> = flowOf(mockPagingData) + + whenever(repository.fetchResults(any(), any(), any())) doReturn mockFlow + + // When + val result = useCase.invoke(searchParams) + + // Then + assertTrue(result.isSuccess) + verify(repository).excludeValuesFromQuery(excludedValues.toList()) + } + + @Test + fun `invoke should not exclude values when program is selected`() = + runTest { + // Given + val excludedValues = hashSetOf("excludedUid1", "excludedUid2") + val searchParams = + SearchTrackedEntitiesInput( + selectedProgram = "programUid", + allowCache = true, + excludeValues = excludedValues, + hasStateFilters = false, + isOnline = false, + queryData = null, + ) + + val mockPagingData: PagingData = PagingData.empty() + val mockFlow: Flow> = flowOf(mockPagingData) + + whenever(repository.fetchResults(any(), any(), any())) doReturn mockFlow + + // When + val result = useCase.invoke(searchParams) + + // Then + assertTrue(result.isSuccess) + verify(repository, never()).excludeValuesFromQuery(any()) + } + + @Test + fun `invoke should add query for unique attributes`() = + runTest { + // Given + val queryData = mutableMapOf?>("uniqueAttr" to listOf("exactValue")) + val searchParams = + SearchTrackedEntitiesInput( + selectedProgram = "programUid", + allowCache = true, + excludeValues = hashSetOf(), + hasStateFilters = false, + isOnline = true, + queryData = queryData, + ) + + val mockPagingData: PagingData = PagingData.empty() + val mockFlow: Flow> = flowOf(mockPagingData) + + whenever(repository.isTETypeAttribute(eq(teType), any())) doReturn true + whenever(repository.getTEAttribute("uniqueAttr")) doReturn + SearchTrackedEntityAttribute( + isUnique = true, + isOptionSet = false, + ) + whenever( + customIntentRepository.attributeHasCustomIntentAndReturnsAListOfValues( + any(), + eq(CustomIntentActionTypeModel.SEARCH), + ), + ) doReturn false + whenever(repository.fetchResults(any(), any(), any())) doReturn mockFlow + + // When + val result = useCase.invoke(searchParams) + + // Then + assertTrue(result.isSuccess) + verify(repository).addToQuery( + dataId = "uniqueAttr", + dataValues = listOf("exactValue"), + isUnique = true, + isOptionSet = false, + ) + } + + @Test + fun `invoke should add query for option set attributes`() = + runTest { + // Given + val queryData = mutableMapOf?>("optionSetAttr" to listOf("optionValue")) + val searchParams = + SearchTrackedEntitiesInput( + selectedProgram = "programUid", + allowCache = true, + excludeValues = hashSetOf(), + hasStateFilters = false, + isOnline = true, + queryData = queryData, + ) + + val mockPagingData: PagingData = PagingData.empty() + val mockFlow: Flow> = flowOf(mockPagingData) + + whenever(repository.isTETypeAttribute(eq(teType), any())) doReturn true + whenever(repository.getTEAttribute("optionSetAttr")) doReturn + SearchTrackedEntityAttribute( + isUnique = false, + isOptionSet = true, + ) + whenever( + customIntentRepository.attributeHasCustomIntentAndReturnsAListOfValues( + any(), + eq(CustomIntentActionTypeModel.SEARCH), + ), + ) doReturn false + whenever(repository.fetchResults(any(), any(), any())) doReturn mockFlow + + // When + val result = useCase.invoke(searchParams) + + // Then + assertTrue(result.isSuccess) + verify(repository).addToQuery( + dataId = "optionSetAttr", + dataValues = listOf("optionValue"), + isUnique = false, + isOptionSet = true, + ) + } + + @Test + fun `invoke should join multiple values when custom intent does not return list`() = + runTest { + // Given + val queryData = mutableMapOf?>("attr1" to listOf("value1", "value2", "value3")) + val searchParams = + SearchTrackedEntitiesInput( + selectedProgram = "programUid", + allowCache = true, + excludeValues = hashSetOf(), + hasStateFilters = false, + isOnline = true, + queryData = queryData, + ) + + val mockPagingData: PagingData = PagingData.empty() + val mockFlow: Flow> = flowOf(mockPagingData) + + whenever(repository.isTETypeAttribute(eq(teType), any())) doReturn true + whenever(repository.getTEAttribute(any())) doReturn + SearchTrackedEntityAttribute( + isUnique = false, + isOptionSet = false, + ) + whenever( + customIntentRepository.attributeHasCustomIntentAndReturnsAListOfValues( + "attr1", + CustomIntentActionTypeModel.SEARCH, + ), + ) doReturn false + whenever(repository.fetchResults(any(), any(), any())) doReturn mockFlow + + // When + val result = useCase.invoke(searchParams) + + // Then + assertTrue(result.isSuccess) + verify(repository).addToQuery( + dataId = "attr1", + dataValues = listOf("value1,value2,value3"), + isUnique = false, + isOptionSet = false, + ) + } + + @Test + fun `invoke should keep multiple values when custom intent returns list`() = + runTest { + // Given + val queryData = mutableMapOf?>("attr1" to listOf("value1", "value2", "value3")) + val searchParams = + SearchTrackedEntitiesInput( + selectedProgram = "programUid", + allowCache = true, + excludeValues = hashSetOf(), + hasStateFilters = false, + isOnline = true, + queryData = queryData, + ) + + val mockPagingData: PagingData = PagingData.empty() + val mockFlow: Flow> = flowOf(mockPagingData) + + whenever(repository.isTETypeAttribute(eq(teType), any())) doReturn true + whenever(repository.getTEAttribute(any())) doReturn + SearchTrackedEntityAttribute( + isUnique = false, + isOptionSet = false, + ) + whenever( + customIntentRepository.attributeHasCustomIntentAndReturnsAListOfValues( + "attr1", + CustomIntentActionTypeModel.SEARCH, + ), + ) doReturn true + whenever(repository.fetchResults(any(), any(), any())) doReturn mockFlow + + // When + val result = useCase.invoke(searchParams) + + // Then + assertTrue(result.isSuccess) + verify(repository).addToQuery( + dataId = "attr1", + dataValues = listOf("value1", "value2", "value3"), + isUnique = false, + isOptionSet = false, + ) + } + + @Test + fun `invoke should skip attributes not belonging to teType when no program selected`() = + runTest { + // Given + val queryData = mutableMapOf?>("attr1" to listOf("value1"), "attr2" to listOf("value2")) + val searchParams = + SearchTrackedEntitiesInput( + selectedProgram = null, + allowCache = true, + excludeValues = hashSetOf(), + hasStateFilters = false, + isOnline = false, + queryData = queryData, + ) + + val mockPagingData: PagingData = PagingData.empty() + val mockFlow: Flow> = flowOf(mockPagingData) + + whenever(repository.isTETypeAttribute(teType, "attr1")) doReturn true + whenever(repository.isTETypeAttribute(teType, "attr2")) doReturn false + whenever(repository.getTEAttribute("attr1")) doReturn + SearchTrackedEntityAttribute( + isUnique = false, + isOptionSet = false, + ) + whenever( + customIntentRepository.attributeHasCustomIntentAndReturnsAListOfValues( + any(), + eq(CustomIntentActionTypeModel.SEARCH), + ), + ) doReturn false + whenever(repository.fetchResults(any(), any(), any())) doReturn mockFlow + + // When + val result = useCase.invoke(searchParams) + + // Then + assertTrue(result.isSuccess) + verify(repository).addToQuery( + dataId = "attr1", + dataValues = listOf("value1"), + isUnique = false, + isOptionSet = false, + ) + verify(repository, never()).getTEAttribute("attr2") + } + + @Test + fun `invoke should return failure when domain error occurs`() = + runTest { + // Given + val searchParams = + SearchTrackedEntitiesInput( + selectedProgram = "programUid", + allowCache = true, + excludeValues = hashSetOf(), + hasStateFilters = false, + isOnline = true, + queryData = null, + ) + + val domainError = DomainError.UnexpectedError("Test error") + + whenever(repository.fetchResults(any(), any(), any())).thenAnswer { throw domainError } + + // When + val result = useCase.invoke(searchParams) + + // Then + assertTrue(result.isFailure) + assertTrue(result.exceptionOrNull() is DomainError.UnexpectedError) + assertEquals("Test error", (result.exceptionOrNull() as DomainError.UnexpectedError).message) + } + + @Test + fun `invoke should handle online search with state filters`() = + runTest { + // Given + val searchParams = + SearchTrackedEntitiesInput( + selectedProgram = "programUid", + allowCache = false, + excludeValues = hashSetOf(), + hasStateFilters = true, + isOnline = true, + queryData = null, + ) + + val mockPagingData: PagingData = PagingData.empty() + val mockFlow: Flow> = flowOf(mockPagingData) + + whenever(repository.fetchResults(any(), any(), any())) doReturn mockFlow + + // When + val result = useCase.invoke(searchParams) + + // Then + assertTrue(result.isSuccess) + verify(repository).fetchResults( + isOnline = true, + hasStateFilters = true, + allowCache = false, + ) + } + + @Test + fun `invoke should handle offline search`() = + runTest { + // Given + val searchParams = + SearchTrackedEntitiesInput( + selectedProgram = "programUid", + allowCache = true, + excludeValues = hashSetOf(), + hasStateFilters = false, + isOnline = false, + queryData = null, + ) + + val mockPagingData: PagingData = PagingData.empty() + val mockFlow: Flow> = flowOf(mockPagingData) + + whenever(repository.fetchResults(any(), any(), any())) doReturn mockFlow + + // When + val result = useCase.invoke(searchParams) + + // Then + assertTrue(result.isSuccess) + verify(repository).fetchResults( + isOnline = false, + hasStateFilters = false, + allowCache = true, + ) + } +} diff --git a/tracker/src/desktopMain/kotlin/org/dhis2/tracker/search/di/TrackerSearchModule.desktop.kt b/tracker/src/desktopMain/kotlin/org/dhis2/tracker/search/di/TrackerSearchModule.desktop.kt new file mode 100644 index 00000000000..94b83b71c1d --- /dev/null +++ b/tracker/src/desktopMain/kotlin/org/dhis2/tracker/search/di/TrackerSearchModule.desktop.kt @@ -0,0 +1,13 @@ +package org.dhis2.tracker.search.di + +import org.koin.core.module.Module +import org.koin.dsl.module + +/** + * Desktop-specific implementation of the tracker search repository module. + * Currently empty as desktop support is not yet implemented for search. + */ +internal actual val trackerSearchRepositoryModule: Module = + module { + // Desktop implementation placeholder + } From f2dbbec51d1466adc19a3133eba6115b98ede5fa Mon Sep 17 00:00:00 2001 From: Xavier Molloy Date: Thu, 5 Feb 2026 16:10:12 +0100 Subject: [PATCH 042/114] feat: [ANDROAPP-7472] V Use case implementation into SearchTEIViewModel [skip size] (#4627) * feat: [ANDROAPP-7472] copilot review * fix: [ANDROAPP-7472] Code review comments * feat: [ANDROAPP-7472] copilot review * fix: [ANDROAPP-7472] Code review comments * feat: [ANDROAPP-7472] Add tests for new repository and usecases (#4625) * chore: [ANDROAPP-7472] Small code review improvements * feat: [ANDROAPP-7472] Load search results with new use case, map to old model * fix: [ANDROAPP-7472] Code review comments * chore: [ANDROAPP-7472] Replace old repository calls with new usecase * chore: [ANDROAPP-7472] Adapt tests to new usecase * chore: [ANDROAPP-7472] Adapt usecase to return unpaginated results, fix sonar code smells --- .../SearchRepositoryImplKt.kt | 70 ++---- .../searchTrackEntity/SearchRepositoryKt.kt | 20 +- .../searchTrackEntity/SearchTEIViewModel.kt | 235 ++++++++++-------- .../searchTrackEntity/SearchTEModule.java | 2 +- .../SearchTEIViewModelTest.kt | 48 ++-- .../data/SearchTrackedEntityRepositoryImpl.kt | 18 ++ .../data/SearchTrackedEntityRepository.kt | 5 + .../search/domain/SearchTrackedEntities.kt | 23 ++ 8 files changed, 227 insertions(+), 194 deletions(-) diff --git a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryImplKt.kt b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryImplKt.kt index c1fe2f61fc9..2b58b3492b2 100644 --- a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryImplKt.kt +++ b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryImplKt.kt @@ -2,11 +2,9 @@ package org.dhis2.usescases.searchTrackEntity -import androidx.paging.PagingData import androidx.paging.map import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.FlowPreview -import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.debounce import kotlinx.coroutines.flow.flatMapLatest @@ -63,49 +61,32 @@ class SearchRepositoryImplKt( private val fetchedTeiUids = HashSet() - override fun searchTrackedEntities( - searchParametersModel: SearchParametersModel, - isOnline: Boolean, - ): Flow> = - trackedEntitySearchQuery(searchParametersModel, isOnline) - .getPagingData(10) - - private fun trackedEntitySearchQuery( - searchParametersModel: SearchParametersModel, - isOnline: Boolean, - ): TrackedEntitySearchCollectionRepository { - var allowCache = false - savedSearchParameters = searchParametersModel.copy() - savedFilters = FilterManager.getInstance().copy() - - if (searchParametersModel != savedSearchParameters || - !FilterManager - .getInstance() - .sameFilters(savedFilters) - ) { - trackedEntityInstanceQuery = - searchRepositoryJava.getFilteredRepository(searchParametersModel) - } else { - trackedEntityInstanceQuery = - searchRepositoryJava.getFilteredRepository(searchParametersModel) - allowCache = true + override fun saveSearchValuesAndGetAllowCache( + queryData: MutableMap?>?, + programUid: String?, + ): Boolean { + if (!this::savedSearchParameters.isInitialized) { + savedSearchParameters = + SearchParametersModel(queryData = queryData, selectedProgram = searchRepositoryJava.getProgram(programUid)) } - - if (fetchedTeiUids.isNotEmpty() && searchParametersModel.selectedProgram == null) { - trackedEntityInstanceQuery = - trackedEntityInstanceQuery.excludeUids().`in`(fetchedTeiUids.toList()) + if (!this::savedFilters.isInitialized) { + savedFilters = FilterManager.getInstance().copy() } - - val pagerFlow = - if (isOnline && FilterManager.getInstance().stateFilters.isEmpty()) { - trackedEntityInstanceQuery.allowOnlineCache().eq(allowCache).offlineFirst() - } else { - trackedEntityInstanceQuery.allowOnlineCache().eq(allowCache).offlineOnly() - } - - return pagerFlow + val allowCache = + queryData == savedSearchParameters.queryData && + FilterManager + .getInstance() + .sameFilters(savedFilters) + savedSearchParameters = savedSearchParameters.copy(queryData = queryData) + savedFilters = FilterManager.getInstance().copy() + return allowCache } + override fun getExcludeValues(): HashSet? = + fetchedTeiUids.ifEmpty { + null + } + override suspend fun searchParameters( programUid: String?, teiTypeUid: String, @@ -136,13 +117,6 @@ class SearchRepositoryImplKt( .blockingGet() ?.unique() ?: false - override suspend fun searchTrackedEntitiesImmediate( - searchParametersModel: SearchParametersModel, - isOnline: Boolean, - ): List = - trackedEntitySearchQuery(searchParametersModel, isOnline) - .blockingGet() - override fun searchTeiForMap( searchParametersModel: SearchParametersModel, isOnline: Boolean, diff --git a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryKt.kt b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryKt.kt index d07c0c6130e..a69fd6198b0 100644 --- a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryKt.kt +++ b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryKt.kt @@ -1,31 +1,18 @@ package org.dhis2.usescases.searchTrackEntity -import androidx.paging.PagingData -import kotlinx.coroutines.flow.Flow import org.dhis2.data.search.SearchParametersModel import org.dhis2.form.model.FieldUiModel import org.dhis2.maps.model.MapItemModel import org.dhis2.mobile.commons.model.CustomIntentModel import org.dhis2.tracker.ui.input.action.FieldUid import org.hisp.dhis.android.core.program.Program -import org.hisp.dhis.android.core.trackedentity.search.TrackedEntitySearchItem interface SearchRepositoryKt { - fun searchTrackedEntities( - searchParametersModel: SearchParametersModel, - isOnline: Boolean, - ): Flow> - suspend fun searchParameters( programUid: String?, teiTypeUid: String, ): List - suspend fun searchTrackedEntitiesImmediate( - searchParametersModel: SearchParametersModel, - isOnline: Boolean, - ): List - fun searchTeiForMap( searchParametersModel: SearchParametersModel, isOnline: Boolean, @@ -42,4 +29,11 @@ interface SearchRepositoryKt { ): List suspend fun getCustomIntent(fieldUid: FieldUid): CustomIntentModel? + + fun saveSearchValuesAndGetAllowCache( + queryData: MutableMap?>?, + programUid: String?, + ): Boolean + + fun getExcludeValues(): HashSet? } diff --git a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEIViewModel.kt b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEIViewModel.kt index 6dfe89d4a18..213c805f2d7 100644 --- a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEIViewModel.kt +++ b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEIViewModel.kt @@ -43,7 +43,6 @@ import org.dhis2.commons.filters.FilterManager import org.dhis2.commons.network.NetworkUtils import org.dhis2.commons.resources.ResourceManager import org.dhis2.commons.viewmodel.DispatcherProvider -import org.dhis2.data.search.SearchParametersModel import org.dhis2.form.model.FieldUiModelImpl import org.dhis2.form.ui.customintent.CustomIntentResult import org.dhis2.form.ui.intent.FormIntent @@ -55,7 +54,9 @@ import org.dhis2.maps.managers.MapManager import org.dhis2.maps.usecases.MapStyleConfiguration import org.dhis2.mobile.commons.coroutine.CoroutineTracker import org.dhis2.tracker.NavigationBarUIState +import org.dhis2.tracker.search.data.transformDomainTeiToSDKTei import org.dhis2.tracker.search.domain.SearchTrackedEntities +import org.dhis2.tracker.search.model.SearchTrackedEntitiesInput import org.dhis2.tracker.ui.input.action.CustomIntentUid import org.dhis2.tracker.ui.input.action.FieldUid import org.dhis2.tracker.ui.input.action.TrackerInputAction @@ -461,116 +462,130 @@ class SearchTEIViewModel( searchParametersUiState.copy(searchEnabled = queryData.isNotEmpty()) } - private suspend fun loadSearchResults() = - withContext(dispatchers.io()) { - val searchParametersModel = - SearchParametersModel( - selectedProgram = searchRepository.getProgram(initialProgramUid), + private fun loadSearchResults(): Flow> = + flow { + // get uids to exclude for possible duplicates + val excludeValues = searchRepositoryKt.getExcludeValues() + + val isOnline = searching && networkUtils.isOnline() + val selectedProgram = searchRepository.getProgram(initialProgramUid) + + val allowCache = searchRepositoryKt.saveSearchValuesAndGetAllowCache(queryData, selectedProgram?.uid()) + val newTrackerSearchModel = + SearchTrackedEntitiesInput( + selectedProgram = selectedProgram?.uid(), + allowCache = allowCache, + excludeValues = excludeValues, + hasStateFilters = filterManager.stateFilters.isNotEmpty(), + isOnline = isOnline, queryData = queryData, ) - val getPagingData = - searchRepositoryKt.searchTrackedEntities( - searchParametersModel, - searching && networkUtils.isOnline(), - ) + val results = searchTrackedEntities.invoke(newTrackerSearchModel) - return@withContext getPagingData.map { pagingData -> - pagingData.map { item -> - withContext(dispatchers.io()) { - if ( - searching && - networkUtils.isOnline() && - filterManager.stateFilters.isEmpty() - ) { - searchRepository.transform( - item, - searchParametersModel.selectedProgram, - false, - filterManager.sortingItem, - ) - } else { + emitAll( + results.getOrThrow().map { pagingData -> + pagingData.map { item -> + withContext(dispatchers.io()) { + // TODO Create a new SearchTeiModel that does not use + // SDK objects and remove this mapping from the domain model back to the SDK one + val sdkTei = transformDomainTeiToSDKTei(item) + val searchOnline = + isOnline && + filterManager.stateFilters.isEmpty() searchRepository.transform( - item, - searchParametersModel.selectedProgram, - true, + sdkTei, + selectedProgram, + !searchOnline, filterManager.sortingItem, ) } } - } - } + }, + ) } - private suspend fun loadDisplayInListResults() = - withContext(dispatchers.io()) { - val searchParametersModel = - SearchParametersModel( - selectedProgram = searchRepository.getProgram(initialProgramUid), + private fun loadDisplayInListResults(): Flow> = + flow { + val excludeValues = searchRepositoryKt.getExcludeValues() + val selectedProgram = searchRepository.getProgram(initialProgramUid) + + val allowCache = searchRepositoryKt.saveSearchValuesAndGetAllowCache(queryData, selectedProgram?.uid()) + val newTrackerSearchModel = + SearchTrackedEntitiesInput( + selectedProgram = selectedProgram?.uid(), + allowCache = allowCache, + excludeValues = excludeValues, + hasStateFilters = filterManager.stateFilters.isNotEmpty(), + isOnline = false, queryData = queryData, ) - val getPagingData = - searchRepositoryKt.searchTrackedEntities( - searchParametersModel, - false, - ) + val results = searchTrackedEntities.invoke(newTrackerSearchModel) - return@withContext getPagingData.map { pagingData -> - pagingData.map { item -> - withContext(dispatchers.io()) { - searchRepository.transform( - item, - searchParametersModel.selectedProgram, - true, - filterManager.sortingItem, - ) + emitAll( + results.getOrThrow().map { pagingData -> + pagingData.map { item -> + withContext(dispatchers.io()) { + // TODO Create a new SearchTeiModel that does not use + // SDK objects and remove this mapping from the domain model back to the SDK one + val sdkTei = transformDomainTeiToSDKTei(item) + searchRepository.transform( + sdkTei, + selectedProgram, + true, + filterManager.sortingItem, + ) + } } - } - } + }, + ) } - suspend fun fetchGlobalResults() = - withContext(dispatchers.io()) { - val searchParametersModel = - SearchParametersModel( - selectedProgram = null, - queryData = queryData, - ) - val getPagingData = - searchRepositoryKt.searchTrackedEntities( - searchParametersModel, - searching && networkUtils.isOnline(), - ) - - return@withContext if (searching) { - getPagingData.map { pagingData -> - pagingData.map { item -> - withContext(dispatchers.io()) { - if ( - searching && - networkUtils.isOnline() && - filterManager.stateFilters.isEmpty() - ) { - searchRepository.transform( - item, - searchParametersModel.selectedProgram, - false, - filterManager.sortingItem, - ) - } else { + fun fetchGlobalResults(): Flow>? { + // get uids to exclude for possible duplicates + return if (searching) { + flow { + val excludeValues = searchRepositoryKt.getExcludeValues() + + val isOnline = searching && networkUtils.isOnline() + val selectedProgram = searchRepository.getProgram(initialProgramUid) + + val allowCache = searchRepositoryKt.saveSearchValuesAndGetAllowCache(queryData, selectedProgram?.uid()) + val newTrackerSearchModel = + SearchTrackedEntitiesInput( + selectedProgram = null, + allowCache = allowCache, + excludeValues = excludeValues, + hasStateFilters = filterManager.stateFilters.isNotEmpty(), + isOnline = isOnline, + queryData = queryData, + ) + val results = searchTrackedEntities.invoke(newTrackerSearchModel) + + emitAll( + results.getOrThrow().map { pagingData -> + pagingData.map { item -> + withContext(dispatchers.io()) { + // TODO Create a new SearchTeiModel that does not use + // SDK objects and remove this mapping from the domain model back to the SDK one + val sdkTei = transformDomainTeiToSDKTei(item) + val searchOnline = + isOnline && + filterManager.stateFilters.isEmpty() searchRepository.transform( - item, - searchParametersModel.selectedProgram, - true, + sdkTei, + selectedProgram, + !searchOnline, filterManager.sortingItem, ) } } - } - } - } else { - null + }, + ) } + } else { + null } + } fun fetchMapResults() { CoroutineTracker.increment() @@ -1070,33 +1085,43 @@ class SearchTEIViewModel( searchedItems = getFriendlyQueryData(), ) - val searchParametersModel = - SearchParametersModel( - selectedProgram = searchRepository.getProgram(initialProgramUid), + val isOnline = searching && networkUtils.isOnline() + val selectedProgram = searchRepository.getProgram(initialProgramUid) + + // get uids to exclude for possible duplicates + val excludeValues = searchRepositoryKt.getExcludeValues() + + val newTrackerSearchModel = + SearchTrackedEntitiesInput( + selectedProgram = selectedProgram?.uid(), + allowCache = false, // No need for cache in immediate search + excludeValues = excludeValues, + hasStateFilters = filterManager.stateFilters.isNotEmpty(), + isOnline = isOnline, queryData = queryData, ) - val isOnline = searching && networkUtils.isOnline() - val trackedEntities = - async(dispatchers.io()) { - searchRepositoryKt.searchTrackedEntitiesImmediate( - searchParametersModel = searchParametersModel, - isOnline = isOnline, - ) - }.await() + + // Use invokeImmediate for QR code scanning to get immediate non-paginated results + val trackedEntitiesResult = searchTrackedEntities.invokeImmediate(newTrackerSearchModel) + + val trackedEntities = trackedEntitiesResult.getOrNull() ?: emptyList() if (trackedEntities.isEmpty() || trackedEntities.size > 1) return@launch val tei = trackedEntities.first() + + // Transform domain model to SDK model for compatibility with existing code + val sdkTei = + withContext(dispatchers.io()) { + transformDomainTeiToSDKTei(tei) + } + val searchTeiModel = withContext(dispatchers.io()) { searchRepository.transform( - // searchItem = - tei, - // selectedProgram = - searchParametersModel.selectedProgram, - // offlineOnly = + sdkTei, + selectedProgram, !(isOnline && filterManager.stateFilters.isEmpty()), - // sortingItem = filterManager.sortingItem, ) } diff --git a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEModule.java b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEModule.java index 5bd9b79947d..372f433cfa4 100644 --- a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEModule.java +++ b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEModule.java @@ -358,7 +358,7 @@ SearchTeiViewModelFactory providesViewModelFactory( @PerActivity SearchTrackedEntities provideLoadSearchResultsUseCase( SearchTrackedEntityRepository searchTrackedEntityRepository, - org.dhis2.mobile.commons.customintents.CustomIntentRepository customIntentRepository + CustomIntentRepository customIntentRepository ) { return new SearchTrackedEntities( searchTrackedEntityRepository, diff --git a/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchTEIViewModelTest.kt b/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchTEIViewModelTest.kt index 543fbdf0dba..45e88671f9f 100644 --- a/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchTEIViewModelTest.kt +++ b/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchTEIViewModelTest.kt @@ -23,7 +23,6 @@ import org.dhis2.commons.filters.FilterManager import org.dhis2.commons.network.NetworkUtils import org.dhis2.commons.resources.ResourceManager import org.dhis2.commons.viewmodel.DispatcherProvider -import org.dhis2.data.search.SearchParametersModel import org.dhis2.form.model.FieldUiModel import org.dhis2.form.model.FieldUiModelImpl import org.dhis2.form.ui.customintent.CustomIntentResult @@ -33,6 +32,7 @@ import org.dhis2.maps.geometry.mapper.EventsByProgramStage import org.dhis2.maps.usecases.MapStyleConfiguration import org.dhis2.mobile.commons.model.CustomIntentModel import org.dhis2.tracker.search.domain.SearchTrackedEntities +import org.dhis2.tracker.search.model.SearchTrackedEntitiesInput import org.dhis2.tracker.ui.input.action.TrackerInputAction import org.dhis2.usescases.searchTrackEntity.listView.SearchResult.SearchResultType import org.dhis2.utils.customviews.navigationbar.NavigationPage @@ -49,8 +49,9 @@ import org.junit.Test import org.maplibre.geojson.BoundingBox import org.mockito.kotlin.any import org.mockito.kotlin.doReturn +import org.mockito.kotlin.eq import org.mockito.kotlin.mock -import org.mockito.kotlin.times +import org.mockito.kotlin.never import org.mockito.kotlin.verify import org.mockito.kotlin.whenever @@ -63,10 +64,7 @@ class SearchTEIViewModelTest { private val initialProgram = "programUid" private val initialQuery = mutableMapOf?>() private val repository: SearchRepository = mock() - private val repositoryKt: SearchRepositoryKt = - mock { - on { searchTrackedEntities(any(), any()) } doReturn flowOf(PagingData.empty()) - } + private val repositoryKt: SearchRepositoryKt = mock() private val pageConfigurator: SearchPageConfigurator = mock() private val mapDataRepository: MapDataRepository = mock() private val networkUtils: NetworkUtils = mock() @@ -74,7 +72,10 @@ class SearchTEIViewModelTest { private val resourceManager: ResourceManager = mock() private val displayNameProvider: DisplayNameProvider = mock() private val filterManager: FilterManager = mock() - private val searchTrackedEntities: SearchTrackedEntities = mock() + private val searchTrackedEntities: SearchTrackedEntities = + mock { + onBlocking { invoke(any()) } doReturn Result.success(flowOf(PagingData.empty())) + } @ExperimentalCoroutinesApi private val testingDispatcher = StandardTestDispatcher() @@ -88,6 +89,8 @@ class SearchTEIViewModelTest { whenever(repository.canCreateInProgramWithoutSearch()) doReturn true whenever(repository.getTrackedEntityType()) doReturn testingTrackedEntityType() whenever(repository.filtersApplyOnGlobalSearch()) doReturn true + whenever(repositoryKt.getExcludeValues()) doReturn HashSet() + whenever(repositoryKt.saveSearchValuesAndGetAllowCache(any(), any())) doReturn true viewModel = SearchTEIViewModel( initialProgram, @@ -279,12 +282,17 @@ class SearchTEIViewModelTest { viewModel.searchPagingData.take(1).asSnapshot() - verify(repositoryKt).searchTrackedEntities( - SearchParametersModel( - selectedProgram = testingProgram, - queryData = mutableMapOf(), + verify(searchTrackedEntities).invoke( + eq( + SearchTrackedEntitiesInput( + selectedProgram = testingProgram.uid(), + queryData = mutableMapOf(), + allowCache = true, + excludeValues = emptySet(), + hasStateFilters = false, + isOnline = false, + ), ), - false, ) } @@ -295,21 +303,7 @@ class SearchTEIViewModelTest { setCurrentProgram(testingProgram) viewModel.searchPagingData.test { awaitItem() - verify(repositoryKt, times(0)).searchTrackedEntities( - SearchParametersModel( - selectedProgram = testingProgram, - queryData = mutableMapOf(), - ), - true, - ) - - verify(repositoryKt, times(0)).searchTrackedEntities( - SearchParametersModel( - selectedProgram = testingProgram, - queryData = mutableMapOf(), - ), - false, - ) + verify(searchTrackedEntities, never()).invoke(any()) } } diff --git a/tracker/src/androidMain/kotlin/org/dhis2/tracker/search/data/SearchTrackedEntityRepositoryImpl.kt b/tracker/src/androidMain/kotlin/org/dhis2/tracker/search/data/SearchTrackedEntityRepositoryImpl.kt index 2dc088b2573..a4bfd48d5e4 100644 --- a/tracker/src/androidMain/kotlin/org/dhis2/tracker/search/data/SearchTrackedEntityRepositoryImpl.kt +++ b/tracker/src/androidMain/kotlin/org/dhis2/tracker/search/data/SearchTrackedEntityRepositoryImpl.kt @@ -105,4 +105,22 @@ class SearchTrackedEntityRepositoryImpl( } } ?: throw IllegalStateException("TrackedEntityInstanceQuery is not initialized") } + + override suspend fun fetchImmediateResults( + isOnline: Boolean, + hasStateFilters: Boolean, + ): List { + // if the device is online and there are no state filters, we can use online cache + val results = + if (isOnline && !hasStateFilters) { + trackedEntityInstanceQuery?.offlineFirst()?.blockingGet() + } else { + // otherwise we use offline only + trackedEntityInstanceQuery?.offlineOnly()?.blockingGet() + } + + return results?.map { item -> + item.toTrackedEntitySearchItemResult() + } ?: throw IllegalStateException("TrackedEntityInstanceQuery is not initialized") + } } diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/data/SearchTrackedEntityRepository.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/data/SearchTrackedEntityRepository.kt index 577775d93a9..2cd934ed16d 100644 --- a/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/data/SearchTrackedEntityRepository.kt +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/data/SearchTrackedEntityRepository.kt @@ -32,4 +32,9 @@ interface SearchTrackedEntityRepository { hasStateFilters: Boolean, allowCache: Boolean, ): Flow> + + suspend fun fetchImmediateResults( + isOnline: Boolean, + hasStateFilters: Boolean, + ): List } diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/domain/SearchTrackedEntities.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/domain/SearchTrackedEntities.kt index 32c1d9fd291..c313d045951 100644 --- a/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/domain/SearchTrackedEntities.kt +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/domain/SearchTrackedEntities.kt @@ -37,6 +37,29 @@ class SearchTrackedEntities( } } + /** + * Invoke method for immediate non-paginated results. + * Useful for scenarios like QR code scanning where immediate results are needed. + */ + suspend fun invokeImmediate(input: SearchTrackedEntitiesInput): Result> { + try { + prepareQuery(input, teType) + // Due to performance issues and possible duplicates we exclude the values in the exclude list only when no program is selected + if (input.excludeValues?.isNotEmpty() == true && input.selectedProgram == null) { + repository.excludeValuesFromQuery(input.excludeValues.toList()) + } + // fetch immediate results from repository + return Result.success( + repository.fetchImmediateResults( + isOnline = input.isOnline, + hasStateFilters = input.hasStateFilters, + ), + ) + } catch (domainError: DomainError) { + return Result.failure(domainError) + } + } + private suspend fun prepareQuery( input: SearchTrackedEntitiesInput, teType: String, From 42031e3fd6b0a51d1b934e430531051096126950 Mon Sep 17 00:00:00 2001 From: Pablo Date: Fri, 6 Feb 2026 07:10:45 +0100 Subject: [PATCH 043/114] feat: [ANDROAPP-7370] Support 6 and 12 hours metadata sync (#4605) * feat: [ANDROAPP-7370] Support 6 and 12 hours metadata sync * fix tests * ktlint * ktlint * fix: [ANDROAPP-7370] ktlint * fix test * restore ui when selecting sync period --------- Co-authored-by: Xavier Molloy --- .../usescases/settings/SettingsRepository.kt | 27 +++++------- .../settings/SyncManagerPresenter.kt | 9 +--- .../settings/ui/SyncMetadataSettingItem.kt | 44 +++++++++++++------ .../settings/SettingsRepositoryTest.kt | 42 ++++++++++++------ gradle/verification-metadata.xml | 11 +++-- 5 files changed, 80 insertions(+), 53 deletions(-) diff --git a/app/src/main/java/org/dhis2/usescases/settings/SettingsRepository.kt b/app/src/main/java/org/dhis2/usescases/settings/SettingsRepository.kt index 6c620134340..96f70fc217b 100644 --- a/app/src/main/java/org/dhis2/usescases/settings/SettingsRepository.kt +++ b/app/src/main/java/org/dhis2/usescases/settings/SettingsRepository.kt @@ -49,12 +49,7 @@ class SettingsRepository( null } private val programSettings: ProgramSettings? - get() = - if (d2.settingModule().programSetting().blockingExists()) { - d2.settingModule().programSetting().blockingGet() - } else { - null - } + get() = syncSettings?.programSettings() private val smsConfig: ConfigCase.SmsConfig get() = d2 @@ -179,13 +174,13 @@ class SettingsRepository( .isNotEmpty() private fun metadataPeriod(): Int = - generalSettings?.metadataSync()?.toSeconds() ?: prefs.getInt( + syncSettings?.metadataSync()?.toSeconds() ?: prefs.getInt( Preference.TIME_META, TIME_WEEKLY, ) private fun dataPeriod(): Int = - generalSettings?.dataSync()?.toSeconds() ?: prefs.getInt( + syncSettings?.dataSync()?.toSeconds() ?: prefs.getInt( Preference.TIME_DATA, TIME_DAILY, ) @@ -231,14 +226,11 @@ class SettingsRepository( private fun getLimitedScopeFromPreferences(): LimitScope { val byOrgUnit = prefs.getBoolean(Constants.LIMIT_BY_ORG_UNIT, false) val byProgram = prefs.getBoolean(Constants.LIMIT_BY_PROGRAM, false) - return if (byOrgUnit && !byProgram) { - LimitScope.PER_ORG_UNIT - } else if (!byOrgUnit && byProgram) { - LimitScope.PER_PROGRAM - } else if (byOrgUnit && byProgram) { - LimitScope.PER_OU_AND_PROGRAM - } else { - LimitScope.GLOBAL + return when { + byOrgUnit && byProgram -> LimitScope.PER_OU_AND_PROGRAM + byOrgUnit && !byProgram -> LimitScope.PER_ORG_UNIT + !byOrgUnit && byProgram -> LimitScope.PER_PROGRAM + else -> LimitScope.GLOBAL } } @@ -253,6 +245,7 @@ class SettingsRepository( suspend fun saveLimitScope(limitScope: LimitScope) { when (limitScope) { LimitScope.ALL_ORG_UNITS -> { + // Do nothing } LimitScope.GLOBAL -> { @@ -289,7 +282,7 @@ class SettingsRepository( .setGatewayNumber(gatewayNumber) .blockingAwait() } catch (e: Exception) { - Timber.d(e.message) + Timber.d(e) } } diff --git a/app/src/main/java/org/dhis2/usescases/settings/SyncManagerPresenter.kt b/app/src/main/java/org/dhis2/usescases/settings/SyncManagerPresenter.kt index ae5c98a3f97..d017aeb80d0 100644 --- a/app/src/main/java/org/dhis2/usescases/settings/SyncManagerPresenter.kt +++ b/app/src/main/java/org/dhis2/usescases/settings/SyncManagerPresenter.kt @@ -12,7 +12,6 @@ import kotlinx.coroutines.flow.receiveAsFlow import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch -import org.dhis2.commons.Constants import org.dhis2.commons.network.NetworkUtils import org.dhis2.commons.viewmodel.DispatcherProvider import org.dhis2.usescases.settings.domain.CheckVersionUpdate @@ -361,18 +360,14 @@ class SyncManagerPresenter( fun onSyncDataPeriodChanged(period: Int) { viewModelScope.launch(dispatcherProvider.io()) { launchSync(LaunchSync.SyncAction.UpdateSyncDataPeriod(period)) - if (period == Constants.TIME_MANUAL) { - loadData() - } + loadData() } } fun onSyncMetaPeriodChanged(period: Int) { viewModelScope.launch(dispatcherProvider.io()) { launchSync(LaunchSync.SyncAction.UpdateSyncMetadataPeriod(period)) - if (period == Constants.TIME_MANUAL) { - loadData() - } + loadData() } } diff --git a/app/src/main/java/org/dhis2/usescases/settings/ui/SyncMetadataSettingItem.kt b/app/src/main/java/org/dhis2/usescases/settings/ui/SyncMetadataSettingItem.kt index 7d78ecc6996..df68e65dbfe 100644 --- a/app/src/main/java/org/dhis2/usescases/settings/ui/SyncMetadataSettingItem.kt +++ b/app/src/main/java/org/dhis2/usescases/settings/ui/SyncMetadataSettingItem.kt @@ -1,6 +1,7 @@ package org.dhis2.usescases.settings.ui import android.content.Context +import androidx.annotation.StringRes import androidx.compose.foundation.layout.Arrangement.Absolute.spacedBy import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxWidth @@ -21,9 +22,11 @@ import androidx.compose.ui.text.capitalize import androidx.compose.ui.text.intl.Locale import androidx.compose.ui.unit.dp import org.dhis2.R +import org.dhis2.bindings.EVERY_12_HOUR import org.dhis2.bindings.EVERY_24_HOUR +import org.dhis2.bindings.EVERY_6_HOUR import org.dhis2.bindings.EVERY_7_DAYS -import org.dhis2.commons.Constants +import org.dhis2.commons.Constants.TIME_MANUAL import org.dhis2.usescases.settings.SettingItem import org.dhis2.usescases.settings.models.MetadataSettingsViewModel import org.hisp.dhis.mobile.ui.designsystem.component.AdditionalInfoItem @@ -77,11 +80,18 @@ internal fun SyncMetadataSettingItem( if (metadataSettings.canEdit) { val metaSyncPeriods = listOf( - stringResource(R.string.a_day), - stringResource(R.string.a_week), - stringResource(R.string.Manual), + SyncMetadataPeriods.Every6Hours, + SyncMetadataPeriods.Every12Hours, + SyncMetadataPeriods.Every24Hours, + SyncMetadataPeriods.EveryWeek, + SyncMetadataPeriods.Manual, ) + val dropdownItemLabel = + metaSyncPeriods.map { + stringResource(it.label) + } + var selectedItem by remember { mutableStateOf( @@ -101,21 +111,14 @@ internal fun SyncMetadataSettingItem( itemCount = metaSyncPeriods.size, onSearchOption = {}, fetchItem = { index -> - DropdownItem(metaSyncPeriods[index]) + DropdownItem(dropdownItemLabel[index]) }, selectedItem = selectedItem, onResetButtonClicked = { }, onItemSelected = { index, newItem -> selectedItem = newItem inputSyncConfigurationState = InputShellState.UNFOCUSED - when (index) { - 0 -> onSyncMetaPeriodChanged(EVERY_24_HOUR) - 1 -> onSyncMetaPeriodChanged(EVERY_7_DAYS) - 2 -> onSyncMetaPeriodChanged(Constants.TIME_MANUAL) - else -> { - // do nothing - } - } + onSyncMetaPeriodChanged(metaSyncPeriods[index].syncPeriod) }, showSearchBar = false, loadOptions = {}, @@ -193,3 +196,18 @@ private fun provideSyncInProgressInfoItems( isConstantItem = true, ), ) + +internal sealed class SyncMetadataPeriods( + @StringRes val label: Int, + val syncPeriod: Int, +) { + data object Every24Hours : SyncMetadataPeriods(R.string.a_day, EVERY_24_HOUR) + + data object Every12Hours : SyncMetadataPeriods(R.string.every_12_hours, EVERY_12_HOUR) + + data object Every6Hours : SyncMetadataPeriods(R.string.every_6_hours, EVERY_6_HOUR) + + data object EveryWeek : SyncMetadataPeriods(R.string.a_week, EVERY_7_DAYS) + + data object Manual : SyncMetadataPeriods(R.string.Manual, TIME_MANUAL) +} diff --git a/app/src/test/java/org/dhis2/usescases/settings/SettingsRepositoryTest.kt b/app/src/test/java/org/dhis2/usescases/settings/SettingsRepositoryTest.kt index 4f241f06d06..6fc5636760c 100644 --- a/app/src/test/java/org/dhis2/usescases/settings/SettingsRepositoryTest.kt +++ b/app/src/test/java/org/dhis2/usescases/settings/SettingsRepositoryTest.kt @@ -27,6 +27,7 @@ import org.hisp.dhis.android.core.settings.LimitScope import org.hisp.dhis.android.core.settings.MetadataSyncPeriod import org.hisp.dhis.android.core.settings.ProgramSetting import org.hisp.dhis.android.core.settings.ProgramSettings +import org.hisp.dhis.android.core.settings.SynchronizationSettings import org.hisp.dhis.android.core.sms.domain.interactor.ConfigCase import org.junit.Before import org.junit.Test @@ -70,6 +71,7 @@ class SettingsRepositoryTest { @Test fun `Should return metadata period from general settings if exist`() { + configureSyncSettings(true) configureGeneralSettings(true) val testObserver = settingsRepository.metaSync().test() testObserver @@ -92,6 +94,7 @@ class SettingsRepositoryTest { @Test fun `Should return data period from general settings if exist`() { + configureSyncSettings(true) configureGeneralSettings(true) configureDataErrors() val testObserver = settingsRepository.dataSync().test() @@ -116,8 +119,9 @@ class SettingsRepositoryTest { @Test fun `Should return parameters from general settings if exist`() { + configureSyncSettings(true) configureGeneralSettings(true) - configureProgramSettings(true) + val testObserver = settingsRepository.syncParameters().test() testObserver .assertNoErrors() @@ -130,8 +134,9 @@ class SettingsRepositoryTest { @Test fun `Should return parameters from preferences if general settings does not exist`() { + configureSyncSettings(false) configureGeneralSettings(false) - configureProgramSettings(false) + val testObserver = settingsRepository.syncParameters().test() testObserver .assertNoErrors() @@ -146,6 +151,7 @@ class SettingsRepositoryTest { fun `Should return reserved values from settings if exist`() { configureGeneralSettings(true) val testObserver = settingsRepository.reservedValues().test() + testObserver .assertNoErrors() .assertValue { @@ -157,6 +163,7 @@ class SettingsRepositoryTest { fun `Should return reserved values from preferences if settings does not exist`() { configureGeneralSettings(false) val testObserver = settingsRepository.reservedValues().test() + testObserver .assertNoErrors() .assertValue { @@ -168,6 +175,7 @@ class SettingsRepositoryTest { fun `Should return editable sms configuration if settings does not exist`() { configureGeneralSettings(false) val testObserver = settingsRepository.sms().test() + testObserver .assertNoErrors() .assertValue { @@ -175,6 +183,17 @@ class SettingsRepositoryTest { } } + private fun configureSyncSettings(hasSyncSettings: Boolean) { + whenever( + d2.settingModule().synchronizationSettings().blockingExists(), + ) doReturn hasSyncSettings + if (hasSyncSettings) { + whenever( + d2.settingModule().synchronizationSettings().blockingGet(), + ) doReturn mockedSyncSettings() + } + } + private fun configureGeneralSettings(hasGeneralSettings: Boolean) { whenever(d2.settingModule().generalSetting().blockingExists()) doReturn hasGeneralSettings @@ -185,15 +204,6 @@ class SettingsRepositoryTest { } } - private fun configureProgramSettings(hasProgramSettings: Boolean) { - whenever(d2.settingModule().programSetting().blockingExists()) doReturn - hasProgramSettings - if (hasProgramSettings) { - whenever(d2.settingModule().programSetting().blockingGet()) doReturn - mockedProgramSettings() - } - } - private fun configurePreferences() { whenever( preferencesProvider.getString(Constants.LAST_META_SYNC, "-"), @@ -469,11 +479,17 @@ class SettingsRepositoryTest { whenever(d2.smsModule().configCase()) doReturn configCase } - private fun mockedGeneralSettings(): GeneralSettings = - GeneralSettings + private fun mockedSyncSettings() = + SynchronizationSettings .builder() .dataSync(SETTINGS_DATA_PERIOD) .metadataSync(SETTINGS_METADATA_PERIOD) + .programSettings(mockedProgramSettings()) + .build() + + private fun mockedGeneralSettings(): GeneralSettings = + GeneralSettings + .builder() .encryptDB(SETTINGS_ENCRYPT) .reservedValues(SETTINGS_RV) .build() diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index 69d9a98c4ed..9da014e089c 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -12409,11 +12409,16 @@ - - - + + + + + + From 1759a884d70f5cedc8763037f1ff5dd2ba2edab7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Miguel=20Rubio?= Date: Mon, 9 Feb 2026 12:11:02 +0100 Subject: [PATCH 044/114] test: Add waitForView in openMenuMoreOptions action in EventRobot.kt and clear some unused functions (#4642) --- .../usescases/event/EventRegistrationRobot.kt | 40 --------------- .../teidashboard/robot/EventRobot.kt | 50 +------------------ 2 files changed, 1 insertion(+), 89 deletions(-) diff --git a/app/src/androidTest/java/org/dhis2/usescases/event/EventRegistrationRobot.kt b/app/src/androidTest/java/org/dhis2/usescases/event/EventRegistrationRobot.kt index d818ea3e31e..13f9abb3a6b 100644 --- a/app/src/androidTest/java/org/dhis2/usescases/event/EventRegistrationRobot.kt +++ b/app/src/androidTest/java/org/dhis2/usescases/event/EventRegistrationRobot.kt @@ -3,13 +3,10 @@ package org.dhis2.usescases.event import androidx.compose.ui.test.assertIsDisplayed import androidx.compose.ui.test.junit4.ComposeTestRule import androidx.compose.ui.test.onNodeWithText -import androidx.compose.ui.test.performClick import androidx.compose.ui.test.performScrollTo import androidx.test.espresso.Espresso.onView -import androidx.test.espresso.action.ViewActions.click import androidx.test.espresso.assertion.ViewAssertions.matches import androidx.test.espresso.matcher.ViewMatchers.withId -import androidx.test.platform.app.InstrumentationRegistry import org.dhis2.R import org.dhis2.common.BaseRobot import org.dhis2.common.matchers.hasCompletedPercentage @@ -25,45 +22,8 @@ fun eventRegistrationRobot( class EventRegistrationRobot(val composeTestRule: ComposeTestRule) : BaseRobot() { - fun openMenuMoreOptions() { - onView(withId(R.id.moreOptions)).perform(click()) - } - - fun clickOnDelete() { - with(InstrumentationRegistry.getInstrumentation().targetContext) { - composeTestRule.onNodeWithText(getString(R.string.delete)).performClick() - } - } - fun checkEventDataEntryIsOpened(completion: Int, orgUnit: String) { onView(withId(R.id.completion)).check(matches(hasCompletedPercentage(completion))) composeTestRule.onNodeWithText(orgUnit).performScrollTo().assertIsDisplayed() } - - fun clickOnShare() { - with(InstrumentationRegistry.getInstrumentation().targetContext) { - composeTestRule.onNodeWithText(getString(R.string.share)).performClick() - } - } - - private fun clickOnNextQR() { - waitForView(withId(R.id.next)).perform(click()) - } - - fun clickOnAllQR(listQR: Int) { - var qrLength = 1 - - while (qrLength < listQR) { - clickOnNextQR() - qrLength++ - } - } - - fun clickOnDeleteDialog() { - onView(withId(R.id.possitive)).perform(click()) - } - - fun clickNextButton() { - waitForView(withId(R.id.action_button)).perform(click()) - } } diff --git a/app/src/androidTest/java/org/dhis2/usescases/teidashboard/robot/EventRobot.kt b/app/src/androidTest/java/org/dhis2/usescases/teidashboard/robot/EventRobot.kt index b42e272c0ad..64200c78baa 100644 --- a/app/src/androidTest/java/org/dhis2/usescases/teidashboard/robot/EventRobot.kt +++ b/app/src/androidTest/java/org/dhis2/usescases/teidashboard/robot/EventRobot.kt @@ -3,17 +3,11 @@ package org.dhis2.usescases.teidashboard.robot import androidx.compose.ui.test.ExperimentalTestApi import androidx.compose.ui.test.assertIsDisplayed import androidx.compose.ui.test.assertIsNotDisplayed -import androidx.compose.ui.test.hasAnyAncestor -import androidx.compose.ui.test.hasAnySibling import androidx.compose.ui.test.hasTestTag -import androidx.compose.ui.test.hasText -import androidx.compose.ui.test.isDialog import androidx.compose.ui.test.junit4.ComposeTestRule -import androidx.compose.ui.test.onNodeWithContentDescription import androidx.compose.ui.test.onNodeWithTag import androidx.compose.ui.test.onNodeWithText import androidx.compose.ui.test.performClick -import androidx.compose.ui.test.performTextReplacement import androidx.test.espresso.Espresso.onView import androidx.test.espresso.action.ViewActions.click import androidx.test.espresso.assertion.ViewAssertions.matches @@ -52,22 +46,14 @@ class EventRobot(val composeTestRule: ComposeTestRule) : BaseRobot() { composeTestRule.onNodeWithTag(MAIN_BUTTON_TAG).performClick() } - fun checkSecondaryButtonNotVisible() { - composeTestRule.onNodeWithTag(SECONDARY_BUTTON_TAG).assertDoesNotExist() - } - @OptIn(ExperimentalTestApi::class) fun clickOnReopen() { composeTestRule.waitUntilAtLeastOneExists(hasTestTag("REOPEN_BUTTON")) composeTestRule.onNodeWithTag("REOPEN_BUTTON", useUnmergedTree = true).performClick() } - fun acceptUpdateEventDate() { - composeTestRule.onNodeWithText("OK", true).performClick() - } - fun openMenuMoreOptions() { - onView(withId(R.id.moreOptions)).perform(click()) + waitForView(withId(R.id.moreOptions)).perform(click()) } fun clickOnDelete() { @@ -81,36 +67,6 @@ class EventRobot(val composeTestRule: ComposeTestRule) : BaseRobot() { onView(withId(R.id.possitive)).perform(click()) } - fun clickOnEventDueDate() { - composeTestRule.onNode( - hasTestTag("INPUT_DATE_TIME_ACTION_BUTTON") and hasAnySibling( - hasText("Due date") - ) - ).assertIsDisplayed().performClick() - - } - - fun selectSpecificDate(currentDate: String, date: String) { - composeTestRule.onNodeWithTag("DATE_PICKER").assertIsDisplayed() - composeTestRule.onNodeWithContentDescription( - label = "text", - substring = true, - useUnmergedTree = true, - ).performClick() - composeTestRule.onNode( - hasText(currentDate) and hasAnyAncestor(isDialog()) - ).performTextReplacement(date) - } - - @OptIn(ExperimentalTestApi::class) - fun typeOnDateParameter(dateValue: String) { - composeTestRule.waitUntilAtLeastOneExists(hasTestTag("INPUT_DATE_TIME_TEXT_FIELD"),2000) - composeTestRule.apply { - onNodeWithTag("INPUT_DATE_TIME_TEXT_FIELD").performClick() - onNodeWithTag("INPUT_DATE_TIME_TEXT_FIELD").performTextReplacement(dateValue) - } - } - fun checkEventDetails(eventDate: String, eventOrgUnit: String) { waitForView((withId(R.id.completion))) onView(withId(R.id.completion)).check(matches(hasCompletedPercentage(100))) @@ -123,10 +79,6 @@ class EventRobot(val composeTestRule: ComposeTestRule) : BaseRobot() { Intents.intended(allOf(IntentMatchers.hasComponent(EventCaptureActivity::class.java.name))) } - fun openEventDetailsSection() { - composeTestRule.onNodeWithText("Event details").performClick() - } - fun checkEventIsOpen() { composeTestRule.onNodeWithTag("REOPEN_BUTTON").assertIsNotDisplayed() } From ca9f339fa67614436ba3bd511d56e2cf588a6a3e Mon Sep 17 00:00:00 2001 From: "@dhis2-bot" Date: Tue, 10 Feb 2026 07:03:25 +0100 Subject: [PATCH 045/114] fix(translations): sync translations from transifex (develop) (#4634) * fix(translations): sync translations from transifex (develop) * fix(translations): sync translations from transifex (develop) * fix: remove unescaped characters * fix(translations): sync translations from transifex (develop) --------- Co-authored-by: andresmr --- .../commonMain/composeResources/values-zh/strings.xml | 1 + app/src/main/res/values-en-rUS/strings.xml | 2 +- app/src/main/res/values-hi-rIN/strings.xml | 10 ++++++++-- commons/src/main/res/values-hi-rIN/strings.xml | 1 + .../commonMain/composeResources/values-es/strings.xml | 2 +- .../composeResources/values-hi-rIN/strings.xml | 6 ++++++ stock-usecase/src/main/res/values-hi-rIN/strings.xml | 6 ++++++ 7 files changed, 24 insertions(+), 4 deletions(-) diff --git a/aggregates/src/commonMain/composeResources/values-zh/strings.xml b/aggregates/src/commonMain/composeResources/values-zh/strings.xml index d04eee4fcbd..96c9eb79402 100644 --- a/aggregates/src/commonMain/composeResources/values-zh/strings.xml +++ b/aggregates/src/commonMain/composeResources/values-zh/strings.xml @@ -72,6 +72,7 @@ %2$s is the attribute option combo name --> 您不能编辑 %2$s中的时段%1$s的数据。 + 该数据 不可编辑,因为所选期间不在数据 输入周期内 此数据不可编辑,因为已标记为关闭状态 该数据不可编辑,因为其编辑时间已过 diff --git a/app/src/main/res/values-en-rUS/strings.xml b/app/src/main/res/values-en-rUS/strings.xml index a93fa338c92..b132a6c3afc 100644 --- a/app/src/main/res/values-en-rUS/strings.xml +++ b/app/src/main/res/values-en-rUS/strings.xml @@ -84,7 +84,7 @@ Not saved Some fields need your attention.\nDo you want to review the form? You have some warning messages. - You have some warning messages.\nDo you want to mark this form as complete\? + You have some warning messages.\nDo you want to mark this form as complete? Some fields have errors and they are not saved. \nDo you want to review the form? Do you want to mark this form as complete? You have some error messages.\nDo you want to review them? diff --git a/app/src/main/res/values-hi-rIN/strings.xml b/app/src/main/res/values-hi-rIN/strings.xml index d8d42d13d12..1d5d2fdbbc6 100644 --- a/app/src/main/res/values-hi-rIN/strings.xml +++ b/app/src/main/res/values-hi-rIN/strings.xml @@ -15,6 +15,8 @@ सिंक की गलती सिंक के दौरान एक त्रुटि हुई है। कृपया फिर से प्रयास करें। जोड़ें + यूज़रनेम + पासवर्ड रोज़ाना साप्ताहिक @@ -26,6 +28,7 @@ सर्च करें / खोजें दिन चुनें इवेंट कंप्लीटेड + पूरा हुआ त्रुटि बनाएँ @@ -66,7 +69,8 @@ केवल 0 से 1 के मान ही अनुमति हैं केवल 0 से 100 के वैल्यूज़ अनुमति हैं नया इवेंट जनरेट करें - क्या आप एक और इवेंट बनाना चाहते हैं? + क्या आप एक और इवेंट बनाना चाहते हैं\? + खत्म छोड़ें अतिदेय स्वीकार करें @@ -75,6 +79,7 @@ रोज़ाना साप्ताहिक यह मान्य URL नहीं है + पूरा हुआ आज कल (बिता हुआ) इस सप्ताह @@ -83,6 +88,7 @@ पिछला महीना अतिदेय विज़िट की गई + पूरा हुआ पीछे जाएं डेटा सेट्स कल (बिता हुआ) @@ -93,7 +99,7 @@ पूरा हुआ डेटा पूरा हुआ - क्या आप सुनिश्चित हैं? + क्या आप सुनिश्चित हैं\? तारीख पीछे जाएं बंद करें diff --git a/commons/src/main/res/values-hi-rIN/strings.xml b/commons/src/main/res/values-hi-rIN/strings.xml index af792346c7c..7104ef24343 100644 --- a/commons/src/main/res/values-hi-rIN/strings.xml +++ b/commons/src/main/res/values-hi-rIN/strings.xml @@ -19,6 +19,7 @@ त्रुटि अतिदेय विज़िट की गई + पूरा हुआ पूरा हुआ आज diff --git a/commonskmm/src/commonMain/composeResources/values-es/strings.xml b/commonskmm/src/commonMain/composeResources/values-es/strings.xml index b9adfd39b39..734e809d218 100644 --- a/commonskmm/src/commonMain/composeResources/values-es/strings.xml +++ b/commonskmm/src/commonMain/composeResources/values-es/strings.xml @@ -63,7 +63,7 @@ Ahora no Guardar de todos modos Seguir editando - ¿Desea marcar este formulario como completo\? + ¿Desea marcar este formulario como completo? Si sale toda la información del formulario será descartada. Algunos campos presentan errores y no se han guardado.\nSi sales ahora, los cambios se descartarán. Algunos campos tienen errores y no serán guardados. diff --git a/login/src/commonMain/composeResources/values-hi-rIN/strings.xml b/login/src/commonMain/composeResources/values-hi-rIN/strings.xml index 02cc514b5b2..af04834da4e 100644 --- a/login/src/commonMain/composeResources/values-hi-rIN/strings.xml +++ b/login/src/commonMain/composeResources/values-hi-rIN/strings.xml @@ -1,6 +1,12 @@ + ऑथेंटिकेशन कोड आगे + ऑथेंटिकेशन कोड + यूज़रनेम + पासवर्ड + लॉग इन हो रहा है… + लॉग इन या अभी नहीं हाँ diff --git a/stock-usecase/src/main/res/values-hi-rIN/strings.xml b/stock-usecase/src/main/res/values-hi-rIN/strings.xml index d5eb4cb7ee3..030e478daca 100644 --- a/stock-usecase/src/main/res/values-hi-rIN/strings.xml +++ b/stock-usecase/src/main/res/values-hi-rIN/strings.xml @@ -3,6 +3,10 @@ सेटिंग्स छोड़ें + यूज़रनेम + पासवर्ड + पासवर्ड भूल गए\? + रिव्यू हटाएं @@ -10,6 +14,8 @@ रद्द करें से भाषा + ईमेल + पासवर्ड सर्च करें / खोजें वापस जाएँ केवल शून्य या पॉजिटिव संख्या ही अनुमति है From 8c4244a484ee503684fc8313df8d9ebd0d82d486 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Miguel=20Rubio?= Date: Tue, 10 Feb 2026 11:36:47 +0100 Subject: [PATCH 046/114] test: update DataSetTableViewModel.kt to increment and decrement async tasks (#4643) --- .../ui/viewModel/DataSetTableViewModel.kt | 33 +++++++++++-------- .../usescases/datasets/DataSetTableRobot.kt | 4 +++ .../dhis2/usescases/datasets/DataSetTest.kt | 6 ++++ .../commons/extensions/ViewModelExtensions.kt | 20 ++++++----- 4 files changed, 41 insertions(+), 22 deletions(-) diff --git a/aggregates/src/commonMain/kotlin/org/dhis2/mobile/aggregates/ui/viewModel/DataSetTableViewModel.kt b/aggregates/src/commonMain/kotlin/org/dhis2/mobile/aggregates/ui/viewModel/DataSetTableViewModel.kt index 9906c538bb9..fce2ed7f0ff 100644 --- a/aggregates/src/commonMain/kotlin/org/dhis2/mobile/aggregates/ui/viewModel/DataSetTableViewModel.kt +++ b/aggregates/src/commonMain/kotlin/org/dhis2/mobile/aggregates/ui/viewModel/DataSetTableViewModel.kt @@ -58,6 +58,7 @@ import org.dhis2.mobile.aggregates.ui.states.OverwrittenDimension import org.dhis2.mobile.aggregates.ui.states.ValidationBarUiState import org.dhis2.mobile.aggregates.ui.states.mapper.InputDataUiStateMapper import org.dhis2.mobile.commons.coroutine.CoroutineTracker +import org.dhis2.mobile.commons.extensions.launchUseCase import org.dhis2.mobile.commons.input.CallbackStatus import org.dhis2.mobile.commons.input.InputType import org.dhis2.mobile.commons.input.UiAction @@ -104,7 +105,7 @@ internal class DataSetTableViewModel( ) fun loadDataSet() { - viewModelScope.launch(dispatcher.io()) { + launchUseCase(dispatcher.io()) { val dataSetInstanceData = getDataSetInstanceData(this) val initialSection = dataSetInstanceData.initialSectionToLoad @@ -379,7 +380,14 @@ internal class DataSetTableViewModel( } else { it.dataSetSectionTable }, - selectedCellInfo = if (showInputDialog) inputData else CellSelectionState.Default(TableSelection.Unselected()), + selectedCellInfo = + if (showInputDialog) { + inputData + } else { + CellSelectionState.Default( + TableSelection.Unselected(), + ) + }, ) ?: it } CoroutineTracker.decrement() @@ -432,11 +440,16 @@ internal class DataSetTableViewModel( selectedCellInfo is CellSelectionState.InputDataUiState && selectedCellInfo.inputType is InputType.MultiText -> !selectedCellInfo.multiTextExtras().optionsFetched + else -> false } - updateSelectedCell(uiAction.id, fetchOptions, showInputDialog = uiAction.showInputDialog) + updateSelectedCell( + uiAction.id, + fetchOptions, + showInputDialog = uiAction.showInputDialog, + ) }, onFailure = { updateSelectedCell( @@ -737,14 +750,11 @@ internal class DataSetTableViewModel( it } } - CoroutineTracker.decrement() } } private fun checkValidationRules() { - viewModelScope.launch { - CoroutineTracker.increment() - + launchUseCase { val rules = withContext(dispatcher.io()) { runValidationRules() @@ -793,7 +803,6 @@ internal class DataSetTableViewModel( } } } - CoroutineTracker.decrement() } } @@ -823,8 +832,7 @@ internal class DataSetTableViewModel( } private fun attemptToFinish() { - viewModelScope.launch { - CoroutineTracker.increment() + launchUseCase { val onSavedMessage = resourceManager.provideSaved() val result = @@ -851,13 +859,11 @@ internal class DataSetTableViewModel( } } } - CoroutineTracker.decrement() } } private fun attemptToComplete() { - viewModelScope.launch { - CoroutineTracker.increment() + launchUseCase { val result = withContext(dispatcher.io()) { completeDataSet() @@ -907,7 +913,6 @@ internal class DataSetTableViewModel( showSnackbar(resourceManager.provideErrorOnCompleteDataset()) } } - CoroutineTracker.decrement() } } diff --git a/app/src/androidTest/java/org/dhis2/usescases/datasets/DataSetTableRobot.kt b/app/src/androidTest/java/org/dhis2/usescases/datasets/DataSetTableRobot.kt index ae070a9fa4b..e8b6e272edf 100644 --- a/app/src/androidTest/java/org/dhis2/usescases/datasets/DataSetTableRobot.kt +++ b/app/src/androidTest/java/org/dhis2/usescases/datasets/DataSetTableRobot.kt @@ -400,6 +400,10 @@ internal class DataSetTableRobot( fun checkItemWithTextIsDisplayed(text: String) { assertTableIsDisplayed() + composeTestRule.waitUntilAtLeastOneExists( + hasText(text, substring = true), + timeoutMillis = 5000 + ) composeTestRule.onNodeWithText(text, substring = true, useUnmergedTree = true) .assertIsDisplayed() } diff --git a/app/src/androidTest/java/org/dhis2/usescases/datasets/DataSetTest.kt b/app/src/androidTest/java/org/dhis2/usescases/datasets/DataSetTest.kt index f06f4c0182a..5d1e1025397 100644 --- a/app/src/androidTest/java/org/dhis2/usescases/datasets/DataSetTest.kt +++ b/app/src/androidTest/java/org/dhis2/usescases/datasets/DataSetTest.kt @@ -5,6 +5,7 @@ import androidx.compose.ui.test.assertIsDisplayed import androidx.compose.ui.test.assertIsNotDisplayed import androidx.compose.ui.test.assertTextEquals import androidx.compose.ui.test.hasTestTag +import androidx.compose.ui.test.hasText import androidx.compose.ui.test.isDisplayed import androidx.compose.ui.test.junit4.createComposeRule import androidx.compose.ui.test.onNodeWithTag @@ -350,6 +351,11 @@ class DataSetTest : BaseTest() { hasTestTag("TABLE_SCROLLABLE_COLUMN"), timeoutMillis = 15000 ) + // Wait for completion state to be reflected in the UI + composeTestRule.waitUntilAtLeastOneExists( + hasText("Re-open form to edit"), + timeoutMillis = 10000 + ) tableIsVisible() dataSetTableRobot(composeTestRule) { checkItemWithTextIsDisplayed("Re-open form to edit") diff --git a/commonskmm/src/commonMain/kotlin/org/dhis2/mobile/commons/extensions/ViewModelExtensions.kt b/commonskmm/src/commonMain/kotlin/org/dhis2/mobile/commons/extensions/ViewModelExtensions.kt index ca4334259e2..27f2c919e50 100644 --- a/commonskmm/src/commonMain/kotlin/org/dhis2/mobile/commons/extensions/ViewModelExtensions.kt +++ b/commonskmm/src/commonMain/kotlin/org/dhis2/mobile/commons/extensions/ViewModelExtensions.kt @@ -5,6 +5,8 @@ import androidx.lifecycle.viewModelScope import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch import org.dhis2.mobile.commons.coroutine.CoroutineTracker +import kotlin.coroutines.CoroutineContext +import kotlin.coroutines.EmptyCoroutineContext /** * Launches a coroutine in the ViewModel's scope for executing a use case. @@ -13,12 +15,14 @@ import org.dhis2.mobile.commons.coroutine.CoroutineTracker * * @param block The suspend block of code to be executed within the coroutine. This is typically the use case logic. */ -fun ViewModel.launchUseCase(block: suspend CoroutineScope.() -> Unit) = - viewModelScope.launch { - CoroutineTracker.increment() - try { - block() - } finally { - CoroutineTracker.decrement() - } +fun ViewModel.launchUseCase( + dispatcher: CoroutineContext = EmptyCoroutineContext, + block: suspend CoroutineScope.() -> Unit, +) = viewModelScope.launch(dispatcher) { + CoroutineTracker.increment() + try { + block() + } finally { + CoroutineTracker.decrement() } +} From 78afccf054166aab906c908512047bb532a9c8e8 Mon Sep 17 00:00:00 2001 From: Ferdy Rodriguez Date: Tue, 10 Feb 2026 13:29:42 +0100 Subject: [PATCH 047/114] refactor: [ANDROAPP-7305] Include error when device doesn't have network available on login screen (#4609) --- .../commons/resources/D2ErrorMessageProviderImpl.kt | 9 +++++++-- .../login/main/ui/viewmodel/CredentialsViewModel.kt | 1 + 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/commonskmm/src/androidMain/kotlin/org/dhis2/mobile/commons/resources/D2ErrorMessageProviderImpl.kt b/commonskmm/src/androidMain/kotlin/org/dhis2/mobile/commons/resources/D2ErrorMessageProviderImpl.kt index beaa22da65b..47d10f04c7a 100644 --- a/commonskmm/src/androidMain/kotlin/org/dhis2/mobile/commons/resources/D2ErrorMessageProviderImpl.kt +++ b/commonskmm/src/androidMain/kotlin/org/dhis2/mobile/commons/resources/D2ErrorMessageProviderImpl.kt @@ -51,8 +51,13 @@ class D2ErrorMessageProviderImpl : D2ErrorMessageProvider { D2ErrorCode.BAD_CREDENTIALS -> getString(Res.string.login_error_bad_credentials) - D2ErrorCode.UNKNOWN_HOST -> - getString(Res.string.login_error_unknown_host) + D2ErrorCode.UNKNOWN_HOST -> { + if (isNetworkAvailable) { + getString(Res.string.login_error_unknown_host) + } else { + getString(Res.string.error_no_internet_connection) + } + } D2ErrorCode.UNEXPECTED -> getString(Res.string.error_unexpected) diff --git a/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/ui/viewmodel/CredentialsViewModel.kt b/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/ui/viewmodel/CredentialsViewModel.kt index e61bb6a1f27..83abc216aac 100644 --- a/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/ui/viewmodel/CredentialsViewModel.kt +++ b/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/ui/viewmodel/CredentialsViewModel.kt @@ -204,6 +204,7 @@ class CredentialsViewModel( _credentialsScreenState.update { it.copy( loginState = LoginState.Running, + errorMessage = null, ) } loginJob = From a30b68fbbcb39fd391fff03e88445921c00efa86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Miguel=20Rubio?= Date: Wed, 11 Feb 2026 06:48:49 +0100 Subject: [PATCH 048/114] translations: update transifex types to Android (#4645) --- .tx/config | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/.tx/config b/.tx/config index e7420f6fab8..dbefa2b2d9d 100644 --- a/.tx/config +++ b/.tx/config @@ -62,7 +62,7 @@ resource_name = Compose Table file_filter = tracker/src/commonMain/composeResources/values-/strings.xml source_file = tracker/src/commonMain/composeResources/values/strings.xml source_lang = en -type = XML +type = ANDROID minimum_perc = 0 resource_name = Tracker @@ -70,7 +70,7 @@ resource_name = Tracker file_filter = aggregates/src/commonMain/composeResources/values-/strings.xml source_file = aggregates/src/commonMain/composeResources/values/strings.xml source_lang = en -type = XML +type = ANDROID minimum_perc = 0 resource_name = Aggregates @@ -78,7 +78,7 @@ resource_name = Aggregates file_filter = commonskmm/src/commonMain/composeResources/values-/strings.xml source_file = commonskmm/src/commonMain/composeResources/values/strings.xml source_lang = en -type = XML +type = ANDROID minimum_perc = 0 resource_name = CommonsKMM @@ -86,7 +86,7 @@ resource_name = CommonsKMM file_filter = login/src/commonMain/composeResources/values-/strings.xml source_file = login/src/commonMain/composeResources/values/strings.xml source_lang = en -type = XML +type = ANDROID minimum_perc = 0 resource_name = Login @@ -94,7 +94,6 @@ resource_name = Login file_filter = sync/src/commonMain/composeResources/values-/strings.xml source_file = sync/src/commonMain/composeResources/values/strings.xml source_lang = en -type = XML +type = ANDROID minimum_perc = 0 resource_name = Sync - From bb677b061b49a15ad9c8e3d7b467d57e5e161bcd Mon Sep 17 00:00:00 2001 From: "@dhis2-bot" Date: Thu, 12 Feb 2026 08:15:54 +0100 Subject: [PATCH 049/114] fix(translations): sync translations from transifex (develop) [skip size] (#4646) * fix(translations): sync translations from transifex (develop) * fix: remove \? escape character in KMM modules * fix: remove \"+\" escape character in KMM modules * fix(translations): sync translations from transifex (develop) --------- Co-authored-by: andresmr --- .../values-hi-rIN/strings.xml | 53 ++++++++++++++++++- .../composeResources/values-lo/strings.xml | 1 + app/src/main/res/values-ar/strings.xml | 1 + app/src/main/res/values-en-rUS/strings.xml | 8 +-- app/src/main/res/values-es-rES/strings.xml | 5 +- app/src/main/res/values-es/strings.xml | 5 +- app/src/main/res/values-fr/strings.xml | 5 +- app/src/main/res/values-hi-rIN/strings.xml | 46 ++++++++++++++++ app/src/main/res/values-id/strings.xml | 5 +- app/src/main/res/values-lo/strings.xml | 7 ++- app/src/main/res/values-nb/strings.xml | 5 +- app/src/main/res/values-nl/strings.xml | 5 +- app/src/main/res/values-pt/strings.xml | 5 +- app/src/main/res/values-ru/strings.xml | 5 +- app/src/main/res/values-uk/strings.xml | 5 +- app/src/main/res/values-uz-rUZ/strings.xml | 5 +- app/src/main/res/values-uz/strings.xml | 5 +- app/src/main/res/values-vi/strings.xml | 5 +- app/src/main/res/values-zh-rCN/strings.xml | 1 + .../src/main/res/values-hi-rIN/strings.xml | 11 ++++ .../values-en-rUS/strings.xml | 31 +---------- .../values-hi-rIN/strings.xml | 30 +++++++++++ .../composeResources/values-lo/strings.xml | 1 + .../src/main/res/values-hi-rIN/strings.xml | 1 + form/src/main/res/values-en-rUS/strings.xml | 10 +--- form/src/main/res/values-hi-rIN/strings.xml | 28 +++++++++- .../src/main/res/values-hi-rIN/strings.xml | 4 ++ .../src/main/res/values-uz/strings.xml | 2 +- .../composeResources/values-ny_MW/strings.xml | 5 ++ .../values-ar-rEG/strings.xml | 2 +- .../values-ar-rIQ/strings.xml | 2 +- .../composeResources/values-ar/strings.xml | 2 +- .../composeResources/values-ckb/strings.xml | 2 +- .../composeResources/values-cs/strings.xml | 1 + .../composeResources/values-da/strings.xml | 3 +- .../values-es-rES/strings.xml | 2 +- .../composeResources/values-es/strings.xml | 3 +- .../composeResources/values-fr/strings.xml | 5 +- .../values-hi-rIN/strings.xml | 16 +++++- .../composeResources/values-id/strings.xml | 2 +- .../composeResources/values-km/strings.xml | 3 +- .../values-ko-rKR/strings.xml | 2 +- .../composeResources/values-lo/strings.xml | 3 +- .../composeResources/values-my/strings.xml | 3 +- .../composeResources/values-nb/strings.xml | 2 +- .../composeResources/values-ne/strings.xml | 2 +- .../composeResources/values-nl/strings.xml | 2 +- .../composeResources/values-prs/strings.xml | 2 +- .../composeResources/values-ps/strings.xml | 3 +- .../values-pt-rBR/strings.xml | 2 +- .../composeResources/values-pt/strings.xml | 3 +- .../composeResources/values-ro/strings.xml | 2 +- .../composeResources/values-ru/strings.xml | 3 +- .../composeResources/values-si/strings.xml | 2 +- .../composeResources/values-sv/strings.xml | 3 +- .../composeResources/values-tet/strings.xml | 3 +- .../composeResources/values-tg/strings.xml | 3 +- .../composeResources/values-uk/strings.xml | 7 ++- .../composeResources/values-ur/strings.xml | 3 +- .../values-uz-rUZ/strings.xml | 3 +- .../composeResources/values-uz/strings.xml | 2 +- .../composeResources/values-vi/strings.xml | 3 +- .../values-zh-rCN/strings.xml | 3 +- .../composeResources/values-zh/strings.xml | 1 + 64 files changed, 277 insertions(+), 128 deletions(-) create mode 100644 sync/src/commonMain/composeResources/values-ny_MW/strings.xml diff --git a/aggregates/src/commonMain/composeResources/values-hi-rIN/strings.xml b/aggregates/src/commonMain/composeResources/values-hi-rIN/strings.xml index 63817c5629b..8abd1a6dddf 100644 --- a/aggregates/src/commonMain/composeResources/values-hi-rIN/strings.xml +++ b/aggregates/src/commonMain/composeResources/values-hi-rIN/strings.xml @@ -1,5 +1,6 @@ + वैल्यू कुल जन्म तिथि आयु @@ -9,19 +10,69 @@ कोई परिणाम नहीं मिला खोजें और अधिक पाएं पूरा हुआ + अक्षांश + देशांतर लोकेशन + सीमा से बाहर + गलत फ़ॉर्मैट + सपोर्टेड नहीं है सब ठीक है + क्या आप डेटा सेट पूरा करना चाहते हैं? सब ठीक है + क्या आप डेटा सेट पूरा करना चाहते हैं? अभी नहीं पूरा हुआ सेव + कुछ अनिवार्य फ़ील्ड खाली हैं। डेटा सेट पूरा करने के लिए उन्हें भरें। + यदि आप कोई वैल्यू दर्ज करते हैं, तो डेटा सेट पूरा करने के लिए पूरी पंक्ति के सभी वैल्यू आवश्यक हैं। ठीक है + सेव और कंप्लीटेड + डेटा सेट पूरा करें में एक एरर हुआ + क्या आप डेटा क्वालिटी चेक करना चाहते हैं? नहीं हाँ त्रुटि एरर्स + फिर भी पूरा करें रिव्यू + रिव्यू के लिए डेटा + यह एक्शन नहीं की जा सकती आगे फ़ाइल जोड़ें + फ़ाइल सफलतापूर्वक डाउनलोड हो गई + फ़ाइल डाउनलोड नहीं हो सकी इमेज जोड़ें - \ No newline at end of file + फ़ोटो लें + गैलरी से ऐड करें + यह सेक्शन सही तरह से कॉन्फ़िगर नहीं है\nअपने एडमिन से संपर्क करें + यह डेटा सेट सही तरह से कॉन्फ़िगर नहीं है\nअपने एडमिन से संपर्क करें + + इंडिकेटर्स + इस डेटा को संपादित करने की अनुमति नहीं है + + %1$s डेटा को संपादित करने की अनुमति नहीं है + + आप %1$s से डेटा संपादित नहीं कर सकते + + आप %1$s में %2$s के लिए डेटा संपादित नहीं कर सकते + + आप %1$s में %2$s के लिए डेटा संपादित नहीं कर सकते + + आप %2$s में पीरियड %1$s के लिए डेटा संपादित नहीं कर सकते + यह डेटा संपादन योग्य नहीं है क्योंकि इसे क्लोज़ मार्क किया गया है + यह डेटा संपादन योग्य नहीं है क्योंकि संपादन का समय समाप्त हो गया है + + \ No newline at end of file diff --git a/aggregates/src/commonMain/composeResources/values-lo/strings.xml b/aggregates/src/commonMain/composeResources/values-lo/strings.xml index c27aaf37943..4462f935c05 100644 --- a/aggregates/src/commonMain/composeResources/values-lo/strings.xml +++ b/aggregates/src/commonMain/composeResources/values-lo/strings.xml @@ -12,6 +12,7 @@ ເສັ້ນຂະໜານ ເສັ້ນແວງ ເພີ່ມທີ່ຕັ້ງ + ບໍ່ຮອງຮັບ ທ່ານຕ້ອງການເຮັດຊຸດຂໍ້ມູນໃຫ້ຄົບຖ້ວນບໍ? ບໍ່​ແມ່ນ​ຕອນ​ນີ້ ສຳເລັດແລ້ວ diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 7cb98ce3856..178250337e8 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -493,6 +493,7 @@ قبول متابعة رابط الخادم + أدخل عنوان URL لخادم DHIS 2 لمؤسستك على النحو الذي حصلت عليه من مسؤول النظام.\n\n أو بدلاً من ذلك ، يمكنك مسح رمز الـ QR الذي يحتوي على عنوان URL لخادمك نسيت الرمز الخاص بك؟ ما الذي تريد فعله لهذا الحدث؟ إنهاء diff --git a/app/src/main/res/values-en-rUS/strings.xml b/app/src/main/res/values-en-rUS/strings.xml index b132a6c3afc..a28a6cbd146 100644 --- a/app/src/main/res/values-en-rUS/strings.xml +++ b/app/src/main/res/values-en-rUS/strings.xml @@ -25,7 +25,6 @@ Accept Cancel Add file - Some fields need your attention.\nDo you want to review the form? Coordinates for the @@ -72,7 +71,6 @@ Coordinates values are not valid This field is mandatory Close - Camera permission is denied.\nYou need to enable it to use this feature. Take Photo Unknown server Value must be an integer @@ -82,12 +80,8 @@ Program rules warning There is a configuration issue causing a loop in the rules. Contact you administrator. Not saved - Some fields need your attention.\nDo you want to review the form? You have some warning messages. - You have some warning messages.\nDo you want to mark this form as complete? - Some fields have errors and they are not saved. \nDo you want to review the form? - Do you want to mark this form as complete? - You have some error messages.\nDo you want to review them? + Do you want to mark this form as complete\? %s details Not now Coordinates diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index 0755788e474..4040f9348fb 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -466,6 +466,7 @@ Confirmar Seguir URL de servidor + Introduzca la URL del servidor DHIS 2 de su organización proporcionada por su administrador. También puede escanear un código QR con la URL de su servidor. ¿Olvido su código? ¿Que quiere hacer con este evento? FIN @@ -649,9 +650,9 @@ Detalles Comentarios ¡Guardado! - ¿Quiere validar la calidad de los datos? + ¿Quieree validar la calidad de los datos\? ¡Parece que todo está bien! - ¿Quiere completar también el set de datos? + ¿Quiere completar también el set de datos\? Marcar como completado Nombre Fórmula diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index f88780799f8..d4332bf6a1b 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -497,6 +497,7 @@ Confirmar Seguir URL de servidor + Introduzca la URL del servidor DHIS 2 de su organización proporcionada por su administrador. También puede escanear un código QR con la URL de su servidor. ¿Olvido su código? ¿Que quiere hacer con este evento? FIN @@ -681,9 +682,9 @@ Detalles Comentarios ¡Guardado! - ¿Quiere validar la calidad de los datos? + ¿Quieree validar la calidad de los datos\? ¡Parece que todo está bien! - ¿Quiere completar también el set de datos? + ¿Quiere completar también el set de datos\? Marcar como completado Nombre Fórmula diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 106f507ae8e..0267efee3d4 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -475,6 +475,7 @@ Accord Continuer URL du serveur + Saisissez l\'URL du serveur DHIS 2 de votre organisation tel que fourni par votre administrateur système.\n\nVous pouvez également scanner le code QR avec le lien URL du serveur Oublié le code? Que souhaitez-vous faire pour cet évènement? FIN @@ -658,9 +659,9 @@ Details Commentaires Enregistré! - Voulez-vous vérifier la qualité des données? + Voulez-vous vérifier la qualité des données\? Tout a l\'air bien! - Voulez-vous également compléter l\'ensemble de données? + Voulez-vous également compléter l\'ensemble de données\? Marquer comme terminé Nom Formule diff --git a/app/src/main/res/values-hi-rIN/strings.xml b/app/src/main/res/values-hi-rIN/strings.xml index 1d5d2fdbbc6..d8deda45566 100644 --- a/app/src/main/res/values-hi-rIN/strings.xml +++ b/app/src/main/res/values-hi-rIN/strings.xml @@ -9,6 +9,7 @@ सिंक हो रहा है सिंक हो रहा है + इवेंट्स खत्म सिंक पूरा हुआ @@ -26,7 +27,11 @@ साझा करें सर्च करें / खोजें + पाठ दर्ज करें + लंबा अक्षर दर्ज करें + नंबर दर्ज करें दिन चुनें + खोलें इवेंट कंप्लीटेड पूरा हुआ त्रुटि @@ -34,7 +39,11 @@ बनाएँ अपडेट करें तारीख + अक्षांश + देशांतर नया इवेंट + यदि आप कोई वैल्यू दर्ज करते हैं, तो डेटा सेट पूरा करने के लिए पूरी पंक्ति के सभी वैल्यू आवश्यक हैं। + कुछ अनिवार्य फ़ील्ड खाली हैं। डेटा सेट पूरा करने के लिए उन्हें भरें। रद्द करें हटाएं संपादन करें @@ -57,6 +66,7 @@ आगे सहेजें ठीक है + इवेंट्स साझा करें अधिकतम त्रुटि @@ -70,22 +80,29 @@ केवल 0 से 100 के वैल्यूज़ अनुमति हैं नया इवेंट जनरेट करें क्या आप एक और इवेंट बनाना चाहते हैं\? + इंडिकेटर्स + इंडिकेटर्स खत्म + मान अद्वितीय होना चाहिए। समान मान मिला है। इसे सहेजा नहीं गया। कृपया जाँच करें छोड़ें अतिदेय स्वीकार करें + संबंध बंद करें पूरा हुआ + खोलें रोज़ाना साप्ताहिक यह मान्य URL नहीं है पूरा हुआ + सिंक हो रहा है… आज कल (बिता हुआ) इस सप्ताह पिछला सप्ताह इस महीने पिछला महीना + खोलें अतिदेय विज़िट की गई पूरा हुआ @@ -93,31 +110,60 @@ डेटा सेट्स कल (बिता हुआ) समय चुनें + अक्षर दर्ज करें + 0 से 1 नंबर दर्ज करें + प्रतिशत दर्ज करें + फ़ोन नंबर दर्ज करें + ईमेल दर्ज करें + URL दर्ज करें + मान दर्ज करें सिंक की गलती सेव + क्या आप डेटा क्वालिटी चेक करना चाहते हैं\? + क्या आप डेटा सेट पूरा करना चाहते हैं\? नाम + फिर भी पूरा करें + रिव्यू के लिए डेटा + सेव और कंप्लीटेड + खोलें पूरा हुआ डेटा पूरा हुआ क्या आप सुनिश्चित हैं\? तारीख + यह फ़ील्ड आवश्यक है पीछे जाएं बंद करें इस वर्ष पिछली तिमाही पिछला वर्ष + इंडिकेटर्स वैल्यू + फ़ोटो लें यह प्रोग्राम सुरक्षित है गलत लॉगिन जानकारी + वैल्यू + %s डेट के रूप में पढ़ा नहीं जा सकता + यह फ़ील्ड अपडेट नहीं हो सका। कृपया फिर से प्रयास करें उपलब्ध + इस डेटा को संपादित करने की अनुमति नहीं है + इस डेटा को संपादित करने की अनुमति नहीं है अज्ञात भाषा + सेव नहीं नया बनाएँ + आपके पास कुछ चेतावनी संदेश हैं + आपके पास कुछ चेतावनी संदेश हैं\nक्या आप इस फ़ॉर्म को कम्प्लीट मार्क करना चाहते हैं\? सिंक हो रहा है अभी नहीं + केवल देखें सिंक की गलती रेफर करें इवेंट + खोज साफ़ करें + वैकल्पिक + उपयोग के लिए कोई खोज फ़ील्ड कॉन्फ़िगर नहीं है और दिखाएँ कम दिखाएँ + यह सेक्शन सही तरह से कॉन्फ़िगर नहीं है\n अपने एडमिन से संपर्क करें diff --git a/app/src/main/res/values-id/strings.xml b/app/src/main/res/values-id/strings.xml index 03b89200dbd..820b42c2ed8 100644 --- a/app/src/main/res/values-id/strings.xml +++ b/app/src/main/res/values-id/strings.xml @@ -455,6 +455,7 @@ Setuju Terus URL server + Masukkan url server DHIS 2 untuk organisasi Anda seperti yang disediakan oleh administrator sistem Anda.\n\nAtau, Anda dapat memindai kode QR yang berisi URL server Anda Lupa kode Anda? Apa yang ingin Anda lakukan untuk even ini? AKHIR @@ -747,9 +748,9 @@ Rincian Komentar Tersimpan! - Apakah Anda ingin memeriksa kualitas data? + Apakah Anda ingin memeriksa kualitas data\? Semuanya terlihat bagus! - Apakah Anda juga ingin melengkapi data set? + Apakah Anda juga ingin melengkapi data set\? Tandai sebagai selesai Nama Formula diff --git a/app/src/main/res/values-lo/strings.xml b/app/src/main/res/values-lo/strings.xml index 6433b7179f9..fca80f9df6a 100644 --- a/app/src/main/res/values-lo/strings.xml +++ b/app/src/main/res/values-lo/strings.xml @@ -470,6 +470,7 @@ ຍິນຍອມ ຕໍ່ໄປ ທີ່ຢູ່ຂອງເຄື່ອງຄອມພີວເຕີໜ່ວຍແມ່ + ປ້ອນທີ່ຢູ່ຂອງຄອມພິວເຕີໜ່ວຍແມ່ DHIS 2 ສຳລັບອົງກອນຂອງທ່ານ ຕາມທີ່ຜູ້ດູແລລະບົບຂອງທ່ານໃຫ້ມາ ຫຼື ທ່ານສາມາດສະແກນຄິວອາໂຄ້ດທີ່ມີທີ່ຢູ່ຂອງຄອມພິວເຕີໜ່ວຍແມ່ຂອງທ່ານ ລືມລະຫັດຂອງທ່ານ? ທ່ານຕ້ອງເຮັດຫຍັງສໍາລັບເຫດການນີ້? ສິ້ນສຸດ @@ -650,9 +651,9 @@ ລາຍລະອຽດ ຄຳເຫັນ ບັນທຶກແລ້ວ! - ທ່ານຕ້ອງການກວດສອບຄຸນນະພາບຂໍ້ມູນນີ້ບໍ? + ທ່ານຕ້ອງການກວດສອບຄຸນນະພາບຂໍ້ມູນນີ້ບໍ\? ທຸກຢ່າງຮຽບຮ້ອຍດີ - ທ່ານຕ້ອງການເຮັດຊຸດຂໍ້ມູນໃຫ້ຄົບຖ້ວນບໍ? + ທ່ານຕ້ອງການເຮັດຊຸດຂໍ້ມູນໃຫ້ຄົບຖ້ວນບໍ\? ເຮັດໃຫ້ສຳເລັດແລ້ວ ຊື່ Formula @@ -873,5 +874,7 @@ ສະແດງໃຫ້ເຫັນໜ້ອຍລົງ ອັບເດດຂໍ້ມູນໃຫ້ຄືກັນ ກຳລັງອັບເດດຂໍ້ມູນໃຫ້ຄືກັນ %s... + ສະແດງຄຳອະທິບາຍ + ເຊື່ອງຄຳອະທິບາຍ ໂອນ diff --git a/app/src/main/res/values-nb/strings.xml b/app/src/main/res/values-nb/strings.xml index 62716d80438..f37faac1a69 100644 --- a/app/src/main/res/values-nb/strings.xml +++ b/app/src/main/res/values-nb/strings.xml @@ -458,6 +458,7 @@ Enig Fortsett Server URL + Angi DHIS 2 server URL for din organisasjons som er oppgitt av din systemadministrator.\n\nAlternativt, kan du skanne en QR kode som inneholder URL til din server Har du glemt koden? Hva vil du gjøre for denne hendelsen? SLUTT @@ -638,9 +639,9 @@ Detaljer Kommentarer Lagret! - Vil du sjekke datakvaliteten? + Vil du sjekke datakvaliteten\? Alt ser bra ut - Vil du også fullføre datasettet? + Vil du også fullføre datasettet\? Merk som fullført Navn Formel diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index d003ccdedab..5ca9c9d85ca 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -472,6 +472,7 @@ Mee eens zijn Doorgaan Server-URL + Voer de DHIS 2-server-URL voor uw organisatie in zoals verstrekt door uw systeembeheerder.\n\nU kunt ook een QR-code scannen met de URL van uw server Ben je je code vergeten? Wat zou je willen doen voor dit evenement? EINDE @@ -655,9 +656,9 @@ Details Opmerkingen Opgeslagen! - Wilt u de datakwaliteit controleren? + Wilt u de datakwaliteit controleren\? Alles ziet er goed uit! - Wil je ook de dataset compleet maken? + Wil je ook de dataset compleet maken\? Markeer als voltooid Naam Formule diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 2858f9d1765..022335f6705 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -495,6 +495,7 @@ Aceita Continuar url do servidor + Digite o URL do servidor DHIS 2 da sua organização, conforme fornecido pelo administrador do sistema.\n\nAlternativamente, você pode digitalizar um código QR contendo o URL do seu servido Esqueceu seu código? O que você gostaria de fazer para este evento? FIM @@ -678,9 +679,9 @@ Detalhes Comentarios Gravado! - Você quer verificar a qualidade dos dados? + Você quer verificar a qualidade dos dados\? Tudo parece bem! - Você também deseja completar o conjunto de dados? + Você também deseja completar o conjunto de dados\? Marcar como completado Nome Fórmula diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 15b86e237a6..026770ee294 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -480,6 +480,7 @@ Согласен Продолжить Адрес веб-страницы сервера + Введите URL-адрес сервера DHIS 2 для Вашей организации, предоставленный Вашим системным администратором. Другой вариант - отсканировать QR-код, содержащий URL-адрес Вашего сервера. Забыли свой код? Что бы Вы хотели сделать для этого события? КОНЕЦ @@ -650,9 +651,9 @@ Детали Комментарии Сохранено! - Вы хотите проверить качество данных? + Вы хотите проверить качество данных\? Все выглядит хорошо! - Вы также хотите завершить набор данных? + Вы также хотите завершить набор данных\? Отметить как завершенное Название Формула diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 50377656940..2a103ab6774 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -484,6 +484,7 @@ Погодитись Продовжити URL-адреса серверу + Введіть URL-адресу серверу DHIS 2 для Вашої організації, надану Вашим системним адміністратором. Альтернативно, Ви можете відсканувати QR-код, що містить URL-адресу Вашого сервера Забули код? Що б Ви хотіли зробити для цього випадку? КІН @@ -667,9 +668,9 @@ Деталі Коментарі Збережено! - Хочете перевірити якість даних? + Хочете перевірити якість даних\? Все виглядає добре! - Ви бажаєте також завершити набір даних? + Ви бажаєте також завершити набір даних\? Позначити як виконане Ім\'я Формула diff --git a/app/src/main/res/values-uz-rUZ/strings.xml b/app/src/main/res/values-uz-rUZ/strings.xml index 8eb34822ab0..81af89fe43f 100644 --- a/app/src/main/res/values-uz-rUZ/strings.xml +++ b/app/src/main/res/values-uz-rUZ/strings.xml @@ -439,6 +439,7 @@ Roziman Davom etish Server URLi + Tashkilotingiz uchun tizim maʼmuri tomonidan taqdim etilgan DHIS2 server URL manzilini kiriting. \n\ Boshqa holda, siz serveringiz URL manzilini oʼz ichiga olgan QR kodini skanerlashingiz mumkin. Kodingizni unutdingizmi? Ushbu hodisa/tadbir uchun nima qilmoqchisiz? TАMOM @@ -617,9 +618,9 @@ Тафсилотлари Izohlar Saqlandi! - Maʼlumotlar sifatini tekshirishni xoxlaysizmi? + Maʼlumotlar sifatini tekshirishni xoxlaysizmi\? Koʼrinishidan hammasi yaxshi! - Maʼlumotlar toʼplamini toʼldirishni xoxlaysizmi? + Maʼlumotlar toʼplamini toʼldirishni xoxlaysizmi\? Tugallangan deb belgilang Исми Formula diff --git a/app/src/main/res/values-uz/strings.xml b/app/src/main/res/values-uz/strings.xml index d3749c8f8b2..5e84cfba12b 100644 --- a/app/src/main/res/values-uz/strings.xml +++ b/app/src/main/res/values-uz/strings.xml @@ -458,6 +458,7 @@ Розиман Давом этиш Сервер URLи + Ташкилотингиз учун тизим маъмури томонидан тақдим этилган DHIS2 сервер URL манзилини киритинг. \n\ Бошқа ҳолда, сиз серверингиз URL манзилини ўз ичига олган QR кодини сканерлашингиз мумкин. Кодингизни унутдингизми? Ушбу ҳодиса/тадбир учун нима қилмоқчисиз? ТАМОМ @@ -640,9 +641,9 @@ Тафсилотлари Изоҳлар Сақланди! - Маълумотлар сифатини текширишни хохлайсизми? + Маълумотлар сифатини текширишни хохлайсизми\? Кўринишидан ҳаммаси яхши! - Маълумотлар тўпламини тўлдиришни хохлайсизми? + Маълумотлар тўпламини тўлдиришни хохлайсизми\? Тугалланган сифатида белгилансин Исми Формула diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 4372fd2f7f6..1e16d6b8b29 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -491,6 +491,7 @@ Đồng ý Tiếp tục Đường dẫn đến máy chủ + Nhập đường dẫn liên kết đến máy chủ DHIS 2 với đơn vị được cung cấp bởi quản lý của bạn.\n\n Hoặc bạn có thể quét mã QR có chứa đường dẫn liên kết đến máy chủ. Bạn đã quên mã của bạn phải không? Bạn muốn làm gì với sự kiện này? KẾT THÚC @@ -674,9 +675,9 @@ Chi tiết Ghi chú Đã lưu! - Ban có muốn kiểm tra chất lượng dữ liệu không? + Ban có muốn kiểm tra chất lượng dữ liệu không\? Mọi thứ đều ổn! - Bạn cũng muốn hoàn tất biểu nhập phải không? + Bạn cũng muốn hoàn tất biểu nhập phải không\? Đánh dấu đã hoàn tất Tên Công thức diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 496d801487e..59694fa102e 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -491,6 +491,7 @@ 同意 继续 服务器URL + 输入管理员提供的服务器地址。\n\n 可选的你可以扫描服务器地址 二维码 忘记你的数字口令 对该事件你想做什么? 结束 diff --git a/commons/src/main/res/values-hi-rIN/strings.xml b/commons/src/main/res/values-hi-rIN/strings.xml index 7104ef24343..45fa1a37cb9 100644 --- a/commons/src/main/res/values-hi-rIN/strings.xml +++ b/commons/src/main/res/values-hi-rIN/strings.xml @@ -17,9 +17,13 @@ मासिक वार्षिक त्रुटि + संबंध + + खोलें अतिदेय विज़िट की गई पूरा हुआ + खोलें पूरा हुआ आज @@ -39,6 +43,7 @@ सिंक की गलती कल (बिता हुआ) + इंडिकेटर्स इमेज जोड़ें फ़ाइल जोड़ें संपादन करते रहें @@ -46,12 +51,18 @@ रिव्यू पूरा हुआ वैल्यू + बदलावों को छोड़ना है डेटा आज %d दिन बाकी है %d दिन बाकी है + फ़ाइल सफलतापूर्वक डाउनलोड हो गई + + + %s डेटा + सिंक हो रहा है… हटाएं रोज़ाना महीना diff --git a/commonskmm/src/commonMain/composeResources/values-en-rUS/strings.xml b/commonskmm/src/commonMain/composeResources/values-en-rUS/strings.xml index cd5583d93ef..451502a78b9 100644 --- a/commonskmm/src/commonMain/composeResources/values-en-rUS/strings.xml +++ b/commonskmm/src/commonMain/composeResources/values-en-rUS/strings.xml @@ -1,7 +1,6 @@ Only values from 0 to 100 are allowed - Please review this field Formatting error Only positive numbers are allowed This is not a valid phone number @@ -11,8 +10,6 @@ Only values from 0 to 1 are allowed This is not a valid url Value must be an integer - It is not a correct format. - The configured pattern %s is wrong. This field could not be updated. Please try again Error The value should be unique, a coincidence has been found. It has not been saved. Please check it. @@ -23,7 +20,6 @@ Value for field %s does not belong to the option set in %s This field is mandatory You have some warning messages. - You have some warning messages.\nDo you want to mark this form as complete? Required Date Years @@ -57,20 +53,14 @@ Complete Discard changes Saved! - You have some error messages.\nDo you want to review them? - Some fields have errors and they are not saved. \nDo you want to review the form? - Some fields need your attention.\nDo you want to review the form? Not now Save anyway Keep editing - Do you want to mark this form as complete? + Do you want to mark this form as complete\? If you exit now all the information in the form will be discarded. - Some fields have errors and they are not saved. \nIf you exit now the changes will be discarded. Some fields have errors and they are not saved. Some mandatory fields are missing and the form cannot be saved. - Some mandatory fields are missing and the form cannot be saved. \nIf you exit now the changes will be discarded. Share - Camera permission is denied.\nYou need to enable it to use this feature. Close Program rules warning There is a configuration issue causing a loop in the rules. Contact you administrator. @@ -80,20 +70,6 @@ From gallery Check this! Do not show again - the provided value is not allowed for this field - Invalid character 0 - Invalid character 1 - Value is neither true or false - This date format is not valid - This date and time format is not valid - This time format is not valid - The value is empty - The value contains more than one letter - The value is not a letter - The text is too long - Value is neither true or false - This field can only be true - Invalid character 1 DataValues can\'t be saved using these arguments. Use the other one. Leading zero numbers are not allowed Couldn\'t retrieve data @@ -117,10 +93,6 @@ Category Combo No options available Cat combo - Storage permission is not granted.\nYou need to enable it to use this feature. - yes - no - Re-open form to edit Date of birth Age or @@ -206,7 +178,6 @@ Database import failed Invalid file Not in TOTP 2FA enrollment mode - Authentication cancelled diff --git a/commonskmm/src/commonMain/composeResources/values-hi-rIN/strings.xml b/commonskmm/src/commonMain/composeResources/values-hi-rIN/strings.xml index 4f43e662b4e..7b6e0115917 100644 --- a/commonskmm/src/commonMain/composeResources/values-hi-rIN/strings.xml +++ b/commonskmm/src/commonMain/composeResources/values-hi-rIN/strings.xml @@ -9,35 +9,65 @@ केवल शून्य या पॉजिटिव संख्या ही अनुमति है केवल 0 से 1 के मान ही अनुमति हैं यह मान्य URL नहीं है + यह फ़ील्ड अपडेट नहीं हो सका। कृपया फिर से प्रयास करें एरर्स + मान अद्वितीय होना चाहिए। समान मान मिला है। इसे सहेजा नहीं गया। कृपया जाँच करें समय चुनें दिन चुनें + यह फ़ील्ड आवश्यक है + आपके पास कुछ चेतावनी संदेश हैं + आपके पास कुछ चेतावनी संदेश हैं\nक्या आप इस फ़ॉर्म को कम्प्लीट मार्क करना चाहते हैं\? आवश्यकता है तारीख वर्ष महीने दिन + %s डेट के रूप में पढ़ा नहीं जा सकता + अक्षांश + देशांतर + मान दर्ज करें + URL दर्ज करें + ईमेल दर्ज करें + फ़ोन नंबर दर्ज करें + नंबर दर्ज करें + प्रतिशत दर्ज करें + 0 से 1 नंबर दर्ज करें + अक्षर दर्ज करें + लंबा अक्षर दर्ज करें + पाठ दर्ज करें + अक्षांश + देशांतर + सेव नहीं रिव्यू पूरा हुआ + बदलावों को छोड़ना है सेव अभी नहीं सेव करें संपादन करते रहें साझा करें बंद करें + फ़ोटो लें डाउनलोड लोकेशन + %s डेटा जन्म तिथि आयु या स्वीकार करें रद्द करें + अक्षांश + देशांतर लोकेशन + सीमा से बाहर + गलत फ़ॉर्मैट फ़ाइल जोड़ें इमेज जोड़ें + गैलरी से ऐड करें कोई परिणाम नहीं मिला खोजें और अधिक पाएं पूरा हुआ + सपोर्टेड नहीं है diff --git a/commonskmm/src/commonMain/composeResources/values-lo/strings.xml b/commonskmm/src/commonMain/composeResources/values-lo/strings.xml index 41f3f814e7d..e9d1e1ed7b1 100644 --- a/commonskmm/src/commonMain/composeResources/values-lo/strings.xml +++ b/commonskmm/src/commonMain/composeResources/values-lo/strings.xml @@ -101,6 +101,7 @@ ເພີ່ມຮູບພາບ ບໍ່ພົບຜົນການຊອກຫາ ສຳເລັດ + ບໍ່ຮອງຮັບ diff --git a/dhis_android_analytics/src/main/res/values-hi-rIN/strings.xml b/dhis_android_analytics/src/main/res/values-hi-rIN/strings.xml index ec697df6cbd..a4e3d321508 100644 --- a/dhis_android_analytics/src/main/res/values-hi-rIN/strings.xml +++ b/dhis_android_analytics/src/main/res/values-hi-rIN/strings.xml @@ -9,5 +9,6 @@ साप्ताहिक मासिक वार्षिक + सभी रीसेट करें \ No newline at end of file diff --git a/form/src/main/res/values-en-rUS/strings.xml b/form/src/main/res/values-en-rUS/strings.xml index f7bc8b9bbd7..195e9fea377 100644 --- a/form/src/main/res/values-en-rUS/strings.xml +++ b/form/src/main/res/values-en-rUS/strings.xml @@ -10,7 +10,6 @@ Value for field %s does not belong to the option set in %s This field is mandatory You have some warning messages. - You have some warning messages.\nDo you want to mark this form as complete? Required Date Years @@ -44,20 +43,14 @@ Complete Discard changes Saved! - You have some error messages.\nDo you want to review them? - Some fields have errors and they are not saved. \nDo you want to review the form? - Some fields need your attention.\nDo you want to review the form? Not now Save anyway Keep editing - Do you want to mark this form as complete? + Do you want to mark this form as complete\? If you exit now all the information in the form will be discarded. - Some fields have errors and they are not saved. \nIf you exit now the changes will be discarded. Some fields have errors and they are not saved. Some mandatory fields are missing and the form cannot be saved. - Some mandatory fields are missing and the form cannot be saved. \nIf you exit now the changes will be discarded. Share - Camera permission is denied.\nYou need to enable it to use this feature. Close Program rules warning There is a configuration issue causing a loop in the rules. Contact you administrator. @@ -88,6 +81,5 @@ Category Combo No options available Cat combo - Storage permission is not granted.\nYou need to enable it to use this feature. Couldn\'t retrieve data \ No newline at end of file diff --git a/form/src/main/res/values-hi-rIN/strings.xml b/form/src/main/res/values-hi-rIN/strings.xml index 3058e1e0ae8..98d40ab6b26 100644 --- a/form/src/main/res/values-hi-rIN/strings.xml +++ b/form/src/main/res/values-hi-rIN/strings.xml @@ -1,21 +1,47 @@ + यह फ़ील्ड अपडेट नहीं हो सका। कृपया फिर से प्रयास करें त्रुटि + मान अद्वितीय होना चाहिए। समान मान मिला है। इसे सहेजा नहीं गया। कृपया जाँच करें समय चुनें दिन चुनें + यह फ़ील्ड आवश्यक है + आपके पास कुछ चेतावनी संदेश हैं + आपके पास कुछ चेतावनी संदेश हैं\nक्या आप इस फ़ॉर्म को कम्प्लीट मार्क करना चाहते हैं\? आवश्यकता है तारीख वर्ष महीने दिन + %s डेट के रूप में पढ़ा नहीं जा सकता + अक्षांश + देशांतर + मान दर्ज करें + URL दर्ज करें + ईमेल दर्ज करें + फ़ोन नंबर दर्ज करें + नंबर दर्ज करें + प्रतिशत दर्ज करें + 0 से 1 नंबर दर्ज करें + अक्षर दर्ज करें + लंबा पाठ दर्ज करें + पाठ दर्ज करें + अक्षांश + देशांतर + सेव नहीं रिव्यू पूरा हुआ + बदलावों को छोड़ना है सेव अभी नहीं सेव करें संपादन करते रहें साझा करें बंद करें + फ़ोटो लें डाउनलोड लोकेशन - \ No newline at end of file + %s डेटा + लॉन्च + + \ No newline at end of file diff --git a/stock-usecase/src/main/res/values-hi-rIN/strings.xml b/stock-usecase/src/main/res/values-hi-rIN/strings.xml index 030e478daca..75300e27444 100644 --- a/stock-usecase/src/main/res/values-hi-rIN/strings.xml +++ b/stock-usecase/src/main/res/values-hi-rIN/strings.xml @@ -14,9 +14,13 @@ रद्द करें से भाषा + लॉग आउट + + ईमेल पासवर्ड सर्च करें / खोजें वापस जाएँ + सेव नहीं केवल शून्य या पॉजिटिव संख्या ही अनुमति है \ No newline at end of file diff --git a/stock-usecase/src/main/res/values-uz/strings.xml b/stock-usecase/src/main/res/values-uz/strings.xml index da5cf96b3f9..6b402c132c1 100644 --- a/stock-usecase/src/main/res/values-uz/strings.xml +++ b/stock-usecase/src/main/res/values-uz/strings.xml @@ -24,7 +24,7 @@ ICRC ходимлари учун Фойдаланувчи исми Пароль - Паролни унутдингизми? + Паролни унутдингизми\? Охирги фаоллик юкланмоқда … Ҳозирда ҳеч қандай фаоллик амалга оширилмаган diff --git a/sync/src/commonMain/composeResources/values-ny_MW/strings.xml b/sync/src/commonMain/composeResources/values-ny_MW/strings.xml new file mode 100644 index 00000000000..4c1c46011bd --- /dev/null +++ b/sync/src/commonMain/composeResources/values-ny_MW/strings.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/tracker/src/commonMain/composeResources/values-ar-rEG/strings.xml b/tracker/src/commonMain/composeResources/values-ar-rEG/strings.xml index 2fe13df924f..5fff35c0890 100644 --- a/tracker/src/commonMain/composeResources/values-ar-rEG/strings.xml +++ b/tracker/src/commonMain/composeResources/values-ar-rEG/strings.xml @@ -1,4 +1,4 @@ إلغاء - \ No newline at end of file + \ No newline at end of file diff --git a/tracker/src/commonMain/composeResources/values-ar-rIQ/strings.xml b/tracker/src/commonMain/composeResources/values-ar-rIQ/strings.xml index d5c8672a934..89c900b726e 100644 --- a/tracker/src/commonMain/composeResources/values-ar-rIQ/strings.xml +++ b/tracker/src/commonMain/composeResources/values-ar-rIQ/strings.xml @@ -5,4 +5,4 @@ إلغاء إزالة البحث - \ No newline at end of file + \ No newline at end of file diff --git a/tracker/src/commonMain/composeResources/values-ar/strings.xml b/tracker/src/commonMain/composeResources/values-ar/strings.xml index 8dce4e073d0..49ad9b39dd4 100644 --- a/tracker/src/commonMain/composeResources/values-ar/strings.xml +++ b/tracker/src/commonMain/composeResources/values-ar/strings.xml @@ -10,4 +10,4 @@ إزلة بحث اختياري - \ No newline at end of file + \ No newline at end of file diff --git a/tracker/src/commonMain/composeResources/values-ckb/strings.xml b/tracker/src/commonMain/composeResources/values-ckb/strings.xml index f5ddbc7a2bf..194e179ced2 100644 --- a/tracker/src/commonMain/composeResources/values-ckb/strings.xml +++ b/tracker/src/commonMain/composeResources/values-ckb/strings.xml @@ -3,4 +3,4 @@ لابردن لابردن گەڕان - \ No newline at end of file + \ No newline at end of file diff --git a/tracker/src/commonMain/composeResources/values-cs/strings.xml b/tracker/src/commonMain/composeResources/values-cs/strings.xml index 0e2b324281e..23c94f46bf8 100644 --- a/tracker/src/commonMain/composeResources/values-cs/strings.xml +++ b/tracker/src/commonMain/composeResources/values-cs/strings.xml @@ -14,6 +14,7 @@ Zobrazit méně Zrušit Odstranit + Nejsou nakonfigurována žádná pole pro vyhledávání.\nObraťte se na správce. Vymazat hledání Hledat Volitelný diff --git a/tracker/src/commonMain/composeResources/values-da/strings.xml b/tracker/src/commonMain/composeResources/values-da/strings.xml index 60ff2b43248..755406527e6 100644 --- a/tracker/src/commonMain/composeResources/values-da/strings.xml +++ b/tracker/src/commonMain/composeResources/values-da/strings.xml @@ -3,5 +3,4 @@ Cancel Remove Optional - - \ No newline at end of file + \ No newline at end of file diff --git a/tracker/src/commonMain/composeResources/values-es-rES/strings.xml b/tracker/src/commonMain/composeResources/values-es-rES/strings.xml index 00394e9675c..83326a8a023 100644 --- a/tracker/src/commonMain/composeResources/values-es-rES/strings.xml +++ b/tracker/src/commonMain/composeResources/values-es-rES/strings.xml @@ -7,4 +7,4 @@ Cancelar Eliminar Buscar - \ No newline at end of file + \ No newline at end of file diff --git a/tracker/src/commonMain/composeResources/values-es/strings.xml b/tracker/src/commonMain/composeResources/values-es/strings.xml index 30a12a04e4f..5f312bc0403 100644 --- a/tracker/src/commonMain/composeResources/values-es/strings.xml +++ b/tracker/src/commonMain/composeResources/values-es/strings.xml @@ -17,5 +17,4 @@ Borrar búsqueda Buscar Opcional - - \ No newline at end of file + \ No newline at end of file diff --git a/tracker/src/commonMain/composeResources/values-fr/strings.xml b/tracker/src/commonMain/composeResources/values-fr/strings.xml index e60c3cb7d1f..d1753b587c8 100644 --- a/tracker/src/commonMain/composeResources/values-fr/strings.xml +++ b/tracker/src/commonMain/composeResources/values-fr/strings.xml @@ -1,6 +1,6 @@ - Il n'y a pas de relations, cliquez "+" pour en ajouter une nouvelle. + Il n\'y a pas de relations, cliquez "+" pour en ajouter une nouvelle. Relation créée le Supprimer %1$s? Le fichier %1$s sera supprimé. Cette action est irréversible. @@ -15,5 +15,4 @@ Supprimer Rechercher Optional - - \ No newline at end of file + \ No newline at end of file diff --git a/tracker/src/commonMain/composeResources/values-hi-rIN/strings.xml b/tracker/src/commonMain/composeResources/values-hi-rIN/strings.xml index a91e87c5a30..27cb0420f55 100644 --- a/tracker/src/commonMain/composeResources/values-hi-rIN/strings.xml +++ b/tracker/src/commonMain/composeResources/values-hi-rIN/strings.xml @@ -1,9 +1,23 @@ + कोई संबंध नहीं है, नया जोड़ने के लिए “+” पर क्लिक करें + संबंध बनाया गया + हटाएँ %1$s\? + %1$s हटा दिया जाएगा। यह कार्रवाई वापस नहीं की जा सकती + %1$d संबंध हटाएँ\? + %1$d हटा दिया जाएगा। यह कार्रवाई वापस नहीं की जा सकती + %1$d और दिखाएँ + संबंध कोई डेटा नहीं + सिंक हो रहा है… और दिखाएँ कम दिखाएँ रद्द करें हटाएं + उपयोग के लिए कोई खोज फ़ील्ड कॉन्फ़िगर नहीं है\nकृपया अपने एडमिन से संपर्क करें + खोज साफ़ करें सर्च करें / खोजें - \ No newline at end of file + वैकल्पिक + लॉन्च + + \ No newline at end of file diff --git a/tracker/src/commonMain/composeResources/values-id/strings.xml b/tracker/src/commonMain/composeResources/values-id/strings.xml index 487f5f0df04..181e9438838 100644 --- a/tracker/src/commonMain/composeResources/values-id/strings.xml +++ b/tracker/src/commonMain/composeResources/values-id/strings.xml @@ -9,4 +9,4 @@ Batal Hapus Pencarian - \ No newline at end of file + \ No newline at end of file diff --git a/tracker/src/commonMain/composeResources/values-km/strings.xml b/tracker/src/commonMain/composeResources/values-km/strings.xml index 354a52217c5..d49b5cb7837 100644 --- a/tracker/src/commonMain/composeResources/values-km/strings.xml +++ b/tracker/src/commonMain/composeResources/values-km/strings.xml @@ -6,5 +6,4 @@ លុបចេញ ស្វែងរក មិនមានក៏បាន - - \ No newline at end of file + \ No newline at end of file diff --git a/tracker/src/commonMain/composeResources/values-ko-rKR/strings.xml b/tracker/src/commonMain/composeResources/values-ko-rKR/strings.xml index 7b7dd413661..9401e526928 100644 --- a/tracker/src/commonMain/composeResources/values-ko-rKR/strings.xml +++ b/tracker/src/commonMain/composeResources/values-ko-rKR/strings.xml @@ -1,4 +1,4 @@ 제거 - \ No newline at end of file + \ No newline at end of file diff --git a/tracker/src/commonMain/composeResources/values-lo/strings.xml b/tracker/src/commonMain/composeResources/values-lo/strings.xml index e1a1a3aaa1d..d56ad65951f 100644 --- a/tracker/src/commonMain/composeResources/values-lo/strings.xml +++ b/tracker/src/commonMain/composeResources/values-lo/strings.xml @@ -10,5 +10,4 @@ ລົບອອກ ຄົ້ນຫາ ​ຢ່າງ​ຕ່ຳ ມີ​ ທັງ​ໝົດ 8 ຄຳ ໃນ​ນັ້ນ​ຕ້ອງ​ມີ​ໂຕ​ໃຫ​ຍ່ 1 ໂຕ ແລະ ໂຕ​ເລກ 1 ໂຕ - - \ No newline at end of file + \ No newline at end of file diff --git a/tracker/src/commonMain/composeResources/values-my/strings.xml b/tracker/src/commonMain/composeResources/values-my/strings.xml index 84af54c4bb4..6b9d631e693 100644 --- a/tracker/src/commonMain/composeResources/values-my/strings.xml +++ b/tracker/src/commonMain/composeResources/values-my/strings.xml @@ -4,5 +4,4 @@ ပယ်ဖျက်သည် ဖယ်ရှားခြင်း မဖြစ်မနေလုပ်ရန်မလိုပါ။ - - \ No newline at end of file + \ No newline at end of file diff --git a/tracker/src/commonMain/composeResources/values-nb/strings.xml b/tracker/src/commonMain/composeResources/values-nb/strings.xml index 26e67b8d849..2de83b014cf 100644 --- a/tracker/src/commonMain/composeResources/values-nb/strings.xml +++ b/tracker/src/commonMain/composeResources/values-nb/strings.xml @@ -10,4 +10,4 @@ Fjern Søk Valgfri - \ No newline at end of file + \ No newline at end of file diff --git a/tracker/src/commonMain/composeResources/values-ne/strings.xml b/tracker/src/commonMain/composeResources/values-ne/strings.xml index df266c4dfd6..d2c23fe891a 100644 --- a/tracker/src/commonMain/composeResources/values-ne/strings.xml +++ b/tracker/src/commonMain/composeResources/values-ne/strings.xml @@ -2,4 +2,4 @@ रद्द गर्नुहोस् खोज - \ No newline at end of file + \ No newline at end of file diff --git a/tracker/src/commonMain/composeResources/values-nl/strings.xml b/tracker/src/commonMain/composeResources/values-nl/strings.xml index b608c31358e..d3556058f1f 100644 --- a/tracker/src/commonMain/composeResources/values-nl/strings.xml +++ b/tracker/src/commonMain/composeResources/values-nl/strings.xml @@ -9,4 +9,4 @@ Annuleren Verwijderen Zoek - \ No newline at end of file + \ No newline at end of file diff --git a/tracker/src/commonMain/composeResources/values-prs/strings.xml b/tracker/src/commonMain/composeResources/values-prs/strings.xml index 66f37179cf9..a9146b48628 100644 --- a/tracker/src/commonMain/composeResources/values-prs/strings.xml +++ b/tracker/src/commonMain/composeResources/values-prs/strings.xml @@ -8,4 +8,4 @@ حذف جستجو گزینه ها - \ No newline at end of file + \ No newline at end of file diff --git a/tracker/src/commonMain/composeResources/values-ps/strings.xml b/tracker/src/commonMain/composeResources/values-ps/strings.xml index 1db8a3aef10..54b359fe55e 100644 --- a/tracker/src/commonMain/composeResources/values-ps/strings.xml +++ b/tracker/src/commonMain/composeResources/values-ps/strings.xml @@ -8,5 +8,4 @@ لرې کول جستجو اختیاري دی - - \ No newline at end of file + \ No newline at end of file diff --git a/tracker/src/commonMain/composeResources/values-pt-rBR/strings.xml b/tracker/src/commonMain/composeResources/values-pt-rBR/strings.xml index 7b0eb07e654..d6c05ff6e29 100644 --- a/tracker/src/commonMain/composeResources/values-pt-rBR/strings.xml +++ b/tracker/src/commonMain/composeResources/values-pt-rBR/strings.xml @@ -6,4 +6,4 @@ Remover Pesquisar Opcional - \ No newline at end of file + \ No newline at end of file diff --git a/tracker/src/commonMain/composeResources/values-pt/strings.xml b/tracker/src/commonMain/composeResources/values-pt/strings.xml index 7029762cabd..18e93aa987d 100644 --- a/tracker/src/commonMain/composeResources/values-pt/strings.xml +++ b/tracker/src/commonMain/composeResources/values-pt/strings.xml @@ -17,5 +17,4 @@ Limpar pesquisa Procurar Opcional - - \ No newline at end of file + \ No newline at end of file diff --git a/tracker/src/commonMain/composeResources/values-ro/strings.xml b/tracker/src/commonMain/composeResources/values-ro/strings.xml index 91c533061af..5e0229f510c 100644 --- a/tracker/src/commonMain/composeResources/values-ro/strings.xml +++ b/tracker/src/commonMain/composeResources/values-ro/strings.xml @@ -2,4 +2,4 @@ Anulare Căutare - \ No newline at end of file + \ No newline at end of file diff --git a/tracker/src/commonMain/composeResources/values-ru/strings.xml b/tracker/src/commonMain/composeResources/values-ru/strings.xml index a7f61c008ff..80ee1d781ad 100644 --- a/tracker/src/commonMain/composeResources/values-ru/strings.xml +++ b/tracker/src/commonMain/composeResources/values-ru/strings.xml @@ -17,5 +17,4 @@ Очистить поиск Поиск Опционно - - \ No newline at end of file + \ No newline at end of file diff --git a/tracker/src/commonMain/composeResources/values-si/strings.xml b/tracker/src/commonMain/composeResources/values-si/strings.xml index f8cda1f5046..94986d2b8af 100644 --- a/tracker/src/commonMain/composeResources/values-si/strings.xml +++ b/tracker/src/commonMain/composeResources/values-si/strings.xml @@ -3,4 +3,4 @@ වැඩියෙන් පෙන්වන්න ඉවත් කරන්න සොයන්න - \ No newline at end of file + \ No newline at end of file diff --git a/tracker/src/commonMain/composeResources/values-sv/strings.xml b/tracker/src/commonMain/composeResources/values-sv/strings.xml index e546e37a096..a8be5c79de8 100644 --- a/tracker/src/commonMain/composeResources/values-sv/strings.xml +++ b/tracker/src/commonMain/composeResources/values-sv/strings.xml @@ -6,5 +6,4 @@ Ta bort Sök Frivillig - - \ No newline at end of file + \ No newline at end of file diff --git a/tracker/src/commonMain/composeResources/values-tet/strings.xml b/tracker/src/commonMain/composeResources/values-tet/strings.xml index e45c3dc35e3..8e01704e5a1 100644 --- a/tracker/src/commonMain/composeResources/values-tet/strings.xml +++ b/tracker/src/commonMain/composeResources/values-tet/strings.xml @@ -4,5 +4,4 @@ Kansela Hasai Opsional - - \ No newline at end of file + \ No newline at end of file diff --git a/tracker/src/commonMain/composeResources/values-tg/strings.xml b/tracker/src/commonMain/composeResources/values-tg/strings.xml index 5a698c31b13..e59af9a3757 100644 --- a/tracker/src/commonMain/composeResources/values-tg/strings.xml +++ b/tracker/src/commonMain/composeResources/values-tg/strings.xml @@ -5,5 +5,4 @@ Тоза кардан Ҷустуҷӯ Ихтиёрӣ - - \ No newline at end of file + \ No newline at end of file diff --git a/tracker/src/commonMain/composeResources/values-uk/strings.xml b/tracker/src/commonMain/composeResources/values-uk/strings.xml index 12b515b7b84..6d354930f7b 100644 --- a/tracker/src/commonMain/composeResources/values-uk/strings.xml +++ b/tracker/src/commonMain/composeResources/values-uk/strings.xml @@ -1,7 +1,7 @@ Немає зв’язків, натисніть «+», щоб додати новий. - Зв'язок + Зв\'язок Немає даних Синхронізація... Показати більше @@ -10,6 +10,5 @@ Видалити Очистити пошук Пошук - Необов'язково - - \ No newline at end of file + Необов\'язково + \ No newline at end of file diff --git a/tracker/src/commonMain/composeResources/values-ur/strings.xml b/tracker/src/commonMain/composeResources/values-ur/strings.xml index 5458cc5374b..9d20049aa25 100644 --- a/tracker/src/commonMain/composeResources/values-ur/strings.xml +++ b/tracker/src/commonMain/composeResources/values-ur/strings.xml @@ -8,5 +8,4 @@ حذف تلاش کریں اختیاری - - \ No newline at end of file + \ No newline at end of file diff --git a/tracker/src/commonMain/composeResources/values-uz-rUZ/strings.xml b/tracker/src/commonMain/composeResources/values-uz-rUZ/strings.xml index 9647509a8a9..6c653b2157b 100644 --- a/tracker/src/commonMain/composeResources/values-uz-rUZ/strings.xml +++ b/tracker/src/commonMain/composeResources/values-uz-rUZ/strings.xml @@ -10,5 +10,4 @@ Олиб ташлаш Izlash Ixtiyoriy - - \ No newline at end of file + \ No newline at end of file diff --git a/tracker/src/commonMain/composeResources/values-uz/strings.xml b/tracker/src/commonMain/composeResources/values-uz/strings.xml index 8b5e8cc7d14..1849a1ca653 100644 --- a/tracker/src/commonMain/composeResources/values-uz/strings.xml +++ b/tracker/src/commonMain/composeResources/values-uz/strings.xml @@ -11,4 +11,4 @@ Олиб ташлаш Излаш Ихтиёрий - \ No newline at end of file + \ No newline at end of file diff --git a/tracker/src/commonMain/composeResources/values-vi/strings.xml b/tracker/src/commonMain/composeResources/values-vi/strings.xml index 7558b5f8bce..55e0c4c892a 100644 --- a/tracker/src/commonMain/composeResources/values-vi/strings.xml +++ b/tracker/src/commonMain/composeResources/values-vi/strings.xml @@ -17,5 +17,4 @@ Bỏ tìm kiếm Tìm kiếm Không bắt buộc - - \ No newline at end of file + \ No newline at end of file diff --git a/tracker/src/commonMain/composeResources/values-zh-rCN/strings.xml b/tracker/src/commonMain/composeResources/values-zh-rCN/strings.xml index e9bd51827e4..10588f2a543 100644 --- a/tracker/src/commonMain/composeResources/values-zh-rCN/strings.xml +++ b/tracker/src/commonMain/composeResources/values-zh-rCN/strings.xml @@ -17,5 +17,4 @@ 清除搜索 搜索 可选项描述 - - \ No newline at end of file + \ No newline at end of file diff --git a/tracker/src/commonMain/composeResources/values-zh/strings.xml b/tracker/src/commonMain/composeResources/values-zh/strings.xml index 3d55157830f..1809d042178 100644 --- a/tracker/src/commonMain/composeResources/values-zh/strings.xml +++ b/tracker/src/commonMain/composeResources/values-zh/strings.xml @@ -14,6 +14,7 @@ 显示较少 取消 移除 + 没有配置可使用的搜索字段。\n请联系您的管理员。 清除搜索 搜索 可选项描述 From 5e177fa5830a25940836bdbb5dba9b3f90de4a2c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Miguel=20Rubio?= Date: Thu, 12 Feb 2026 14:00:56 +0100 Subject: [PATCH 050/114] test: Add NotesIdlingResource to NoteDetailPresenter.kt on save() method (#4650) * test: Add NotesIdlingResource to NoteDetailPresenter.kt on save() method * Update app/src/main/java/org/dhis2/usescases/notes/noteDetail/NoteDetailPresenter.kt Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../usescases/notes/noteDetail/NoteDetailPresenter.kt | 3 +++ gradle/verification-metadata.xml | 11 +++-------- 2 files changed, 6 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/org/dhis2/usescases/notes/noteDetail/NoteDetailPresenter.kt b/app/src/main/java/org/dhis2/usescases/notes/noteDetail/NoteDetailPresenter.kt index e6177b63925..2b2ae97b545 100644 --- a/app/src/main/java/org/dhis2/usescases/notes/noteDetail/NoteDetailPresenter.kt +++ b/app/src/main/java/org/dhis2/usescases/notes/noteDetail/NoteDetailPresenter.kt @@ -2,6 +2,7 @@ package org.dhis2.usescases.notes.noteDetail import io.reactivex.disposables.CompositeDisposable import org.dhis2.commons.schedulers.SchedulerProvider +import org.dhis2.usescases.notes.NotesIdlingResource import timber.log.Timber class NoteDetailPresenter( @@ -33,6 +34,8 @@ class NoteDetailPresenter( disposable.add( repository .saveNote(noteType, uid, message) + .doOnSubscribe { NotesIdlingResource.increment() } + .doFinally { NotesIdlingResource.decrement() } .subscribeOn(scheduler.io()) .observeOn(scheduler.ui()) .subscribe( diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index 9da014e089c..69d9a98c4ed 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -12409,16 +12409,11 @@ - - - + + + - - - From d3fd9f891678428659c7467eba6c1f22083b985f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Miguel=20Rubio?= Date: Fri, 13 Feb 2026 07:13:43 +0100 Subject: [PATCH 051/114] review-flaky-tests (#4653) * test: add wait for view on DataSetTableRobot.kt * test: add waitForView on checkNoteWasNotCreated in NoteRobot.kt * test: add waitUntilExactlyOneExists on some actions in TeiDashboardRobot.kt * test: remove un used methods on TeiDashboardRobot.kt * wait for confirmation button to be displayed * wait for confirmation button to be displayed --------- Co-authored-by: Pablo Pajuelo Cabezas --- .../usescases/datasets/DataSetTableRobot.kt | 11 ++ .../usescases/flow/teiFlow/TeiFlowRobot.kt | 2 + .../programevent/ProgramEventTest.kt | 12 +- .../programevent/robot/ProgramEventsRobot.kt | 7 +- .../teidashboard/robot/EventRobot.kt | 3 +- .../usescases/teidashboard/robot/NoteRobot.kt | 2 +- .../teidashboard/robot/TeiDashboardRobot.kt | 164 ++---------------- 7 files changed, 36 insertions(+), 165 deletions(-) diff --git a/app/src/androidTest/java/org/dhis2/usescases/datasets/DataSetTableRobot.kt b/app/src/androidTest/java/org/dhis2/usescases/datasets/DataSetTableRobot.kt index e8b6e272edf..45df85f6752 100644 --- a/app/src/androidTest/java/org/dhis2/usescases/datasets/DataSetTableRobot.kt +++ b/app/src/androidTest/java/org/dhis2/usescases/datasets/DataSetTableRobot.kt @@ -115,8 +115,19 @@ internal class DataSetTableRobot( composeTestRule.onNodeWithTag(SYNC_BUTTON_TAG) .assertIsDisplayed() .performClick() + + // Wait for the dialog to appear before interacting with it + composeTestRule.waitUntilExactlyOneExists( + hasText("Refresh"), + TIMEOUT, + ) composeTestRule.onNodeWithText("Refresh") .assertIsDisplayed() + + composeTestRule.waitUntilExactlyOneExists( + hasText("Not now"), + TIMEOUT, + ) composeTestRule.onNodeWithText("Not now") .assertIsDisplayed() .performClick() diff --git a/app/src/androidTest/java/org/dhis2/usescases/flow/teiFlow/TeiFlowRobot.kt b/app/src/androidTest/java/org/dhis2/usescases/flow/teiFlow/TeiFlowRobot.kt index 59904781ca9..a8d0f167239 100644 --- a/app/src/androidTest/java/org/dhis2/usescases/flow/teiFlow/TeiFlowRobot.kt +++ b/app/src/androidTest/java/org/dhis2/usescases/flow/teiFlow/TeiFlowRobot.kt @@ -116,8 +116,10 @@ class TeiFlowRobot(val composeTestRule: ComposeTestRule) : BaseRobot() { teiDashboardRobot(composeTestRule) { clickOnMenuMoreOptions() clickOnTimelineEvents() + composeTestRule.waitForIdle() clickOnMenuMoreOptions() clickOnMenuComplete() + composeTestRule.waitForIdle() checkCanNotAddEvent() checkAllEventsAreClosed() } diff --git a/app/src/androidTest/java/org/dhis2/usescases/programevent/ProgramEventTest.kt b/app/src/androidTest/java/org/dhis2/usescases/programevent/ProgramEventTest.kt index 99bde9ffc87..094cbace362 100644 --- a/app/src/androidTest/java/org/dhis2/usescases/programevent/ProgramEventTest.kt +++ b/app/src/androidTest/java/org/dhis2/usescases/programevent/ProgramEventTest.kt @@ -80,13 +80,11 @@ class ProgramEventTest : BaseTest() { programEventsRobot(composeTestRule) { clickOnEvent(eventDate) - } - eventRobot(composeTestRule) { - openMenuMoreOptions() - clickOnDelete() - clickOnDeleteDialog() - } - programEventsRobot(composeTestRule) { + eventRobot(composeTestRule) { + openMenuMoreOptions() + clickOnDelete() + clickOnDeleteDialog() + } checkEventWasDeleted(eventDate) } } diff --git a/app/src/androidTest/java/org/dhis2/usescases/programevent/robot/ProgramEventsRobot.kt b/app/src/androidTest/java/org/dhis2/usescases/programevent/robot/ProgramEventsRobot.kt index e8d749e430e..ad20e27a443 100644 --- a/app/src/androidTest/java/org/dhis2/usescases/programevent/robot/ProgramEventsRobot.kt +++ b/app/src/androidTest/java/org/dhis2/usescases/programevent/robot/ProgramEventsRobot.kt @@ -9,12 +9,6 @@ import androidx.compose.ui.test.junit4.ComposeContentTestRule import androidx.compose.ui.test.onNodeWithTag import androidx.compose.ui.test.onNodeWithText import androidx.compose.ui.test.performClick -import androidx.test.espresso.Espresso.onView -import androidx.test.espresso.action.ViewActions.click -import androidx.test.espresso.assertion.ViewAssertions.matches -import androidx.test.espresso.matcher.ViewMatchers.isDisplayed -import androidx.test.espresso.matcher.ViewMatchers.withId -import org.dhis2.R import org.dhis2.common.BaseRobot fun programEventsRobot( @@ -68,6 +62,7 @@ class ProgramEventsRobot(val composeTestRule: ComposeContentTestRule) : BaseRobo } fun checkEventWasDeleted(eventDate: String) { + composeTestRule.waitForIdle() composeTestRule.onNodeWithText(eventDate).assertDoesNotExist() } diff --git a/app/src/androidTest/java/org/dhis2/usescases/teidashboard/robot/EventRobot.kt b/app/src/androidTest/java/org/dhis2/usescases/teidashboard/robot/EventRobot.kt index 64200c78baa..cb6475cdba3 100644 --- a/app/src/androidTest/java/org/dhis2/usescases/teidashboard/robot/EventRobot.kt +++ b/app/src/androidTest/java/org/dhis2/usescases/teidashboard/robot/EventRobot.kt @@ -60,11 +60,12 @@ class EventRobot(val composeTestRule: ComposeTestRule) : BaseRobot() { with(InstrumentationRegistry.getInstrumentation().targetContext) { val deleteLabel = getString(R.string.delete) composeTestRule.onNodeWithText(deleteLabel).performClick() + composeTestRule.waitForIdle() } } fun clickOnDeleteDialog() { - onView(withId(R.id.possitive)).perform(click()) + waitForView(withId(R.id.possitive)).perform(click()) } fun checkEventDetails(eventDate: String, eventOrgUnit: String) { diff --git a/app/src/androidTest/java/org/dhis2/usescases/teidashboard/robot/NoteRobot.kt b/app/src/androidTest/java/org/dhis2/usescases/teidashboard/robot/NoteRobot.kt index 6beae0c2fcd..15271cd54d8 100644 --- a/app/src/androidTest/java/org/dhis2/usescases/teidashboard/robot/NoteRobot.kt +++ b/app/src/androidTest/java/org/dhis2/usescases/teidashboard/robot/NoteRobot.kt @@ -61,7 +61,7 @@ class NoteRobot : BaseRobot() { } fun checkNoteWasNotCreated(text: String) { - onView(withId(R.id.notes_recycler)).check( + waitForView(withId(R.id.notes_recycler)).check( matches( not( atPosition( diff --git a/app/src/androidTest/java/org/dhis2/usescases/teidashboard/robot/TeiDashboardRobot.kt b/app/src/androidTest/java/org/dhis2/usescases/teidashboard/robot/TeiDashboardRobot.kt index 5c1ae787770..d43cf6a216f 100644 --- a/app/src/androidTest/java/org/dhis2/usescases/teidashboard/robot/TeiDashboardRobot.kt +++ b/app/src/androidTest/java/org/dhis2/usescases/teidashboard/robot/TeiDashboardRobot.kt @@ -7,8 +7,6 @@ import androidx.compose.ui.test.hasAnySibling import androidx.compose.ui.test.hasTestTag import androidx.compose.ui.test.hasText import androidx.compose.ui.test.junit4.ComposeTestRule -import androidx.compose.ui.test.onAllNodesWithText -import androidx.compose.ui.test.onFirst import androidx.compose.ui.test.onNodeWithTag import androidx.compose.ui.test.onNodeWithText import androidx.compose.ui.test.performClick @@ -17,7 +15,6 @@ import androidx.test.espresso.Espresso.onView import androidx.test.espresso.NoMatchingViewException import androidx.test.espresso.action.ViewActions.click import androidx.test.espresso.assertion.ViewAssertions.matches -import androidx.test.espresso.contrib.RecyclerViewActions.actionOnItem import androidx.test.espresso.contrib.RecyclerViewActions.actionOnItemAtPosition import androidx.test.espresso.intent.Intents import androidx.test.espresso.intent.matcher.IntentMatchers @@ -31,20 +28,14 @@ import androidx.test.platform.app.InstrumentationRegistry import org.dhis2.R import org.dhis2.common.BaseRobot import org.dhis2.common.matchers.RecyclerviewMatchers.Companion.atPosition -import org.dhis2.common.matchers.RecyclerviewMatchers.Companion.hasItem import org.dhis2.common.matchers.RecyclerviewMatchers.Companion.isNotEmpty -import org.dhis2.usescases.event.entity.EventStatusUIModel -import org.dhis2.usescases.event.entity.TEIProgramStagesUIModel -import org.dhis2.usescases.flow.teiFlow.entity.DateRegistrationUIModel import org.dhis2.usescases.programStageSelection.ProgramStageSelectionActivity import org.dhis2.usescases.programStageSelection.ProgramStageSelectionViewHolder -import org.dhis2.usescases.teiDashboard.dashboardfragments.teidata.teievents.EventViewHolder import org.dhis2.usescases.teiDashboard.ui.INFO_BAR_TEST_TAG import org.dhis2.usescases.teiDashboard.ui.TEST_ADD_EVENT_BUTTON import org.dhis2.usescases.teiDashboard.ui.TEST_ADD_EVENT_BUTTON_IN_TIMELINE import org.dhis2.usescases.teiDashboard.ui.model.InfoBarType import org.dhis2.usescases.teidashboard.entity.EnrollmentUIModel -import org.dhis2.usescases.teidashboard.entity.UpperEnrollmentUIModel import org.hamcrest.CoreMatchers.allOf import org.hamcrest.CoreMatchers.anyOf import org.hamcrest.CoreMatchers.equalTo @@ -58,6 +49,7 @@ fun teiDashboardRobot( } } +@OptIn(ExperimentalTestApi::class) class TeiDashboardRobot(val composeTestRule: ComposeTestRule) : BaseRobot() { fun goToNotes() { @@ -84,7 +76,7 @@ class TeiDashboardRobot(val composeTestRule: ComposeTestRule) : BaseRobot() { R.string.navigation_analytics ) composeTestRule.waitUntilExactlyOneExists( - hasText(analyticsText,true), + hasText(analyticsText, true), TIMEOUT ) composeTestRule.onNodeWithText(analyticsText, useUnmergedTree = true).performClick() @@ -113,11 +105,6 @@ class TeiDashboardRobot(val composeTestRule: ComposeTestRule) : BaseRobot() { composeTestRule.onNodeWithText(title).performClick() } - fun clickOnEventWith(searchParam: String) { - composeTestRule.onAllNodesWithText(searchParam, useUnmergedTree = true).onFirst() - .performClick() - } - fun clickOnFab() { composeTestRule.onNodeWithTag(TEST_ADD_EVENT_BUTTON_IN_TIMELINE, useUnmergedTree = true) .performClick() @@ -144,11 +131,6 @@ class TeiDashboardRobot(val composeTestRule: ComposeTestRule) : BaseRobot() { Intents.intended(allOf(IntentMatchers.hasComponent(ProgramStageSelectionActivity::class.java.name))) } - - fun clickOnReferralOption(oneTime: String) { - composeTestRule.onNodeWithText(oneTime).performClick() - } - fun clickOnReferralNextButton() { waitForView(withId(R.id.action_button)).perform(click()) } @@ -184,6 +166,10 @@ class TeiDashboardRobot(val composeTestRule: ComposeTestRule) : BaseRobot() { fun clickOnMenuComplete() { with(InstrumentationRegistry.getInstrumentation().targetContext) { + composeTestRule.waitUntilExactlyOneExists( + hasText(getString(R.string.complete)), + TIMEOUT + ) composeTestRule.onNodeWithText(getString(R.string.complete)).performClick() } } @@ -199,22 +185,6 @@ class TeiDashboardRobot(val composeTestRule: ComposeTestRule) : BaseRobot() { .assertDoesNotExist() } - fun clickOnShareButton() { - with(InstrumentationRegistry.getInstrumentation().targetContext) { - composeTestRule.onNodeWithText(getString(R.string.share)).performClick() - } - } - - fun clickOnNextQR() { - var qrLenght = 1 - - while (qrLenght < 8) { - waitForView(withId(R.id.next)) - onView(withId(R.id.next)).perform(click()) - qrLenght++ - } - } - fun clickOnMenuDeleteTEI() { with(InstrumentationRegistry.getInstrumentation().targetContext) { composeTestRule.onNodeWithText(getString(R.string.dashboard_menu_delete_person)) @@ -222,11 +192,6 @@ class TeiDashboardRobot(val composeTestRule: ComposeTestRule) : BaseRobot() { } } - fun checkUpperInfo(upperInformation: UpperEnrollmentUIModel) { - onView(withId(R.id.org_unit)) - .check(matches(withText(upperInformation.orgUnit))) - } - fun clickOnSeeDetails() { waitForView(withId(R.id.editButton)) .perform(click()) @@ -270,17 +235,14 @@ class TeiDashboardRobot(val composeTestRule: ComposeTestRule) : BaseRobot() { fun clickOnMenuProgramEnrollments() { with(InstrumentationRegistry.getInstrumentation().targetContext) { val programSelectorLabel = getString(R.string.more_enrollments) + composeTestRule.waitUntilExactlyOneExists( + hasText(programSelectorLabel), + TIMEOUT + ) composeTestRule.onNodeWithText(programSelectorLabel).performClick() } } - fun checkEventWasCreatedAndClosed(eventName: String) { - composeTestRule.onNodeWithText(eventName).assertIsDisplayed() - val targetContext: Context = InstrumentationRegistry.getInstrumentation().targetContext - val viewOnlyText = targetContext.resources.getString(R.string.view_only) - composeTestRule.onNodeWithText(viewOnlyText).assertDoesNotExist() - } - fun clickOnMenuDeleteEnrollment() { with(InstrumentationRegistry.getInstrumentation().targetContext) { val deleteEnrollmentLabel = getString(R.string.remove_from) @@ -292,6 +254,10 @@ class TeiDashboardRobot(val composeTestRule: ComposeTestRule) : BaseRobot() { with(InstrumentationRegistry.getInstrumentation().targetContext) { val timelineLabel = getString(R.string.view_timeline) try { + composeTestRule.waitUntilExactlyOneExists( + hasText(timelineLabel), + TIMEOUT + ) composeTestRule.onNodeWithText(timelineLabel).performClick() } catch (e: NoMatchingViewException) { checkIfGroupedEventsIsVisible() @@ -299,19 +265,6 @@ class TeiDashboardRobot(val composeTestRule: ComposeTestRule) : BaseRobot() { } } - fun clickOnReopen() { - with(InstrumentationRegistry.getInstrumentation().targetContext) { - val timelineLabel = getString(R.string.enrollment_reopen) - val eventLabel = resources.getQuantityString(R.plurals.event_label, 2) - val itemLabel = timelineLabel.format(eventLabel) - try { - onView(withText(itemLabel)).perform(click()) - } catch (e: NoMatchingViewException) { - checkIfGroupedEventsIsVisible() - } - } - } - private fun checkIfGroupedEventsIsVisible() { with(InstrumentationRegistry.getInstrumentation().targetContext) { val groupLabel = getString(R.string.group_by_stage) @@ -383,85 +336,6 @@ class TeiDashboardRobot(val composeTestRule: ComposeTestRule) : BaseRobot() { composeTestRule.onAllNodes(hasText(viewOnlyText), useUnmergedTree = false) } - fun clickOnStageGroup(programStageName: String) { - composeTestRule.onNodeWithText(programStageName).performClick() - } - - fun clickOnEventGroupByStage(eventDate: String) { - onView(withId(R.id.tei_recycler)) - .perform( - actionOnItem( - hasDescendant( - allOf( - withText(eventDate), - withId(R.id.event_date), - ), - ), - click(), - ), - ) - } - - fun checkEventWasDeletedStageGroup(teiProgramStages: TEIProgramStagesUIModel) { - val firstProgramStage = teiProgramStages.programStage_first - val secondProgramStage = teiProgramStages.programStage_second - val thirdProgramStage = teiProgramStages.programStage_third - - onView(withId(R.id.tei_recycler)) - .check( - matches( - allOf( - hasItem( - allOf( - hasDescendant(withText(firstProgramStage.name)), - hasDescendant(withText(firstProgramStage.events)), - ), - ), - hasItem( - allOf( - hasDescendant(withText(secondProgramStage.name)), - hasDescendant(withText(secondProgramStage.events)), - ), - ), - hasItem( - allOf( - hasDescendant(withText(thirdProgramStage.name)), - hasDescendant(withText(thirdProgramStage.events)), - ), - ), - ), - ), - ) - } - - fun checkEventStateStageGroup(eventDetails: EventStatusUIModel) { - var status = R.drawable.ic_event_status_open - when (eventDetails.status) { - "Open" -> status = R.drawable.ic_event_status_open - "Overdue" -> status = R.drawable.ic_event_status_overdue - "Event Completed" -> status = R.drawable.ic_event_status_complete - "Skip" -> status = R.drawable.ic_event_status_skipped - "Schedule" -> status = R.drawable.ic_event_status_schedule - } - - onView(withId(R.id.tei_recycler)) - .check( - matches( - hasItem( - allOf( - hasDescendant(withText(eventDetails.date)), - hasDescendant(withText(eventDetails.orgUnit)), - hasDescendant(withTagValue(equalTo(status))), - ), - ), - ), - ) - } - - fun clickOnEventGroupByStageUsingDate(dueDate: String) { - composeTestRule.onNodeWithText(dueDate).performClick() - } - fun clickOnConfirmDeleteTEI() { composeTestRule.onNodeWithText("Delete").performClick() } @@ -470,16 +344,6 @@ class TeiDashboardRobot(val composeTestRule: ComposeTestRule) : BaseRobot() { composeTestRule.onNodeWithText("Remove").performClick() } - fun checkEnrollmentDate(enrollmentDate: DateRegistrationUIModel) { - composeTestRule.onNode( - hasText( - "Date of enrollment: 0${enrollmentDate.day}/0${enrollmentDate.month}/${enrollmentDate.year}", - true - ), - useUnmergedTree = true - ).assertIsDisplayed() - } - fun typeOnInputDateField(dateValue: String, title: String) { composeTestRule.apply { onNode( From b52006de0fdce22fdfa8be4479c0cfd33c889ea1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Miguel=20Rubio?= Date: Fri, 13 Feb 2026 10:45:05 +0100 Subject: [PATCH 052/114] ANDROAPP-7218-Implement-OAuth-login-flow-Part-2-Retrieving-authentication-token-and-log-in [skip size] (#4637) * feat: Register the device * feat: Enroll device in the SDK * feat: POC full login with OAuth * feat: remove hardcoded server * feat: Move Oauth flow to CredentialsScreen.kt * feat: Clear CustomTabs sessions when starting the login flow * refactor: move hardcoded error message to resources * feat: hide credentialsContainer when is an OAuth login * change initialization order to avoid creashes * feat: update login button text to display oauth login * feat: set states for running log in process * SDK support * refactor: merge LegacyLogin and OAuthLogin * feat: Improve Server title and image background * refactor: Remove Login with DHIS2 button text * feat: automatically enroll when user arrives to credentials screen with OAuth * test: update CredentialsViewModelTest.kt * test: remove testing url * fix: Login Repository * fix: SonarCloud warnings * test: Add waitForView to assert that a note has been created * fix: avoid non null assertion in LoginUserWithOAuth.kt * fix: remove clear cache --- .../usescases/teidashboard/robot/NoteRobot.kt | 13 +- app/src/main/AndroidManifest.xml | 8 + .../data/forms/dataentry/ValueStoreImpl.kt | 8 + .../development/ConflictGenerator.kt | 7 +- gradle/libs.versions.toml | 2 +- gradle/verification-metadata.xml | 16 ++ .../login/main/data/LoginRepositoryImpl.kt | 94 +++++++--- .../login/main/di/LoginModule.android.kt | 19 +- .../ui/screen/WebAuthenticator.android.kt | 15 +- .../composeResources/values/strings.xml | 2 + .../ui/viewmodel/AccountsViewModel.kt | 3 +- .../mobile/login/main/data/LoginRepository.kt | 13 ++ .../dhis2/mobile/login/main/di/LoginModule.kt | 33 +++- .../main/domain/model/DeviceEnrollmentInfo.kt | 6 + .../main/domain/model/LoginScreenState.kt | 5 +- .../domain/model/ServerValidationResult.kt | 5 +- .../domain/usecase/GetDeviceEnrollmentUrl.kt | 16 ++ .../main/domain/usecase/GetInitialScreen.kt | 36 ++-- .../main/domain/usecase/LoginUserWithOAuth.kt | 32 ++++ .../domain/usecase/ProcessDeviceEnrollment.kt | 22 +++ .../login/main/ui/screen/CredentialsScreen.kt | 54 ++++-- .../login/main/ui/screen/LoginScreen.kt | 18 +- .../login/main/ui/state/CredentialsUiState.kt | 1 + .../main/ui/viewmodel/CredentialsViewModel.kt | 149 ++++++++++++++- .../login/main/ui/viewmodel/LoginViewModel.kt | 38 +--- .../login/main/LoginScreenIntegrationTest.kt | 30 +-- .../ui/viewmodel/CredentialsViewModelTest.kt | 171 +++++++++++++++++- .../main/ui/viewmodel/LoginViewModelTest.kt | 48 ----- .../usecase/GetInitialScreenUseCaseTest.kt | 17 +- 29 files changed, 661 insertions(+), 220 deletions(-) create mode 100644 login/src/commonMain/kotlin/org/dhis2/mobile/login/main/domain/model/DeviceEnrollmentInfo.kt create mode 100644 login/src/commonMain/kotlin/org/dhis2/mobile/login/main/domain/usecase/GetDeviceEnrollmentUrl.kt create mode 100644 login/src/commonMain/kotlin/org/dhis2/mobile/login/main/domain/usecase/LoginUserWithOAuth.kt create mode 100644 login/src/commonMain/kotlin/org/dhis2/mobile/login/main/domain/usecase/ProcessDeviceEnrollment.kt diff --git a/app/src/androidTest/java/org/dhis2/usescases/teidashboard/robot/NoteRobot.kt b/app/src/androidTest/java/org/dhis2/usescases/teidashboard/robot/NoteRobot.kt index 15271cd54d8..97cf54d2117 100644 --- a/app/src/androidTest/java/org/dhis2/usescases/teidashboard/robot/NoteRobot.kt +++ b/app/src/androidTest/java/org/dhis2/usescases/teidashboard/robot/NoteRobot.kt @@ -74,13 +74,12 @@ class NoteRobot : BaseRobot() { } fun checkNewNoteWasCreated(text: String) { - waitForView(withId(R.id.notes_recycler)).check( - matches( - allOf( - isDisplayed(), - isNotEmpty(), - atPosition(0, hasDescendant(withText(text))) - ) + waitForView( + allOf( + withId(R.id.notes_recycler), + isDisplayed(), + isNotEmpty(), + atPosition(0, hasDescendant(withText(text))) ) ) } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index dd346b3e6c1..015c7bc1c15 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -73,6 +73,14 @@ android:configChanges="orientation|screenSize" android:exported="true" android:launchMode="singleTask"> + + + + + + diff --git a/app/src/main/java/org/dhis2/data/forms/dataentry/ValueStoreImpl.kt b/app/src/main/java/org/dhis2/data/forms/dataentry/ValueStoreImpl.kt index 523c7b362cc..c505471e2c0 100644 --- a/app/src/main/java/org/dhis2/data/forms/dataentry/ValueStoreImpl.kt +++ b/app/src/main/java/org/dhis2/data/forms/dataentry/ValueStoreImpl.kt @@ -17,9 +17,11 @@ import org.hisp.dhis.android.core.D2 import org.hisp.dhis.android.core.arch.helpers.FileResizerHelper import org.hisp.dhis.android.core.arch.helpers.Result import org.hisp.dhis.android.core.common.ValueType +import org.hisp.dhis.android.core.datavalue.LegacyDataValueApi import org.hisp.dhis.android.core.enrollment.EnrollmentObjectRepository import java.io.File +@OptIn(LegacyDataValueApi::class) class ValueStoreImpl( private val d2: D2, private val recordUid: String, @@ -108,10 +110,12 @@ class ValueStoreImpl( .getFriendlyErrorMessage(validation.failure), ), ) + is Result.Success -> dataValueObject .set(value) .andThen(Flowable.just(StoreResult("", ValueStoreResult.VALUE_CHANGED))) + else -> Flowable.just( StoreResult( @@ -146,12 +150,14 @@ class ValueStoreImpl( .uid(uid) .blockingExists() -> saveDataElement(uid, value) + d2 .trackedEntityModule() .trackedEntityAttributes() .uid(uid) .blockingExists() -> saveAttribute(uid, value) + else -> Flowable.just(StoreResult(uid, ValueStoreResult.UID_IS_NOT_DE_OR_ATTR)) } @@ -176,6 +182,7 @@ class ValueStoreImpl( .blockingGet() enrollment?.trackedEntityInstance() } + EntryMode.ATTR -> recordUid EntryMode.DV -> null } @@ -381,6 +388,7 @@ class ValueStoreImpl( deleteOptionValuesForEnrollment( optionCodeValuesToDelete, ) + EntryMode.DV, -> throw IllegalArgumentException( "DataValues can't be saved using these arguments. Use the other one.", diff --git a/app/src/main/java/org/dhis2/usescases/development/ConflictGenerator.kt b/app/src/main/java/org/dhis2/usescases/development/ConflictGenerator.kt index 601483fe600..b8b9243cbdb 100644 --- a/app/src/main/java/org/dhis2/usescases/development/ConflictGenerator.kt +++ b/app/src/main/java/org/dhis2/usescases/development/ConflictGenerator.kt @@ -1,3 +1,5 @@ +@file:OptIn(LegacyDataValueApi::class) + package org.dhis2.usescases.development import kotlinx.coroutines.runBlocking @@ -8,6 +10,7 @@ import org.hisp.dhis.android.core.D2 import org.hisp.dhis.android.core.common.State import org.hisp.dhis.android.core.datavalue.DataValue import org.hisp.dhis.android.core.datavalue.DataValueConflict +import org.hisp.dhis.android.core.datavalue.LegacyDataValueApi import org.hisp.dhis.android.core.enrollment.Enrollment import org.hisp.dhis.android.core.event.Event import org.hisp.dhis.android.core.imports.ImportStatus @@ -423,7 +426,9 @@ class ConflictGenerator( try { runBlocking { d2.databaseAdapter().upsertObject(conflict, TrackerImportConflict::class) - d2.databaseAdapter().execSQL(updateEvent(event.uid(), importStatus.toSyncState().name)) + d2 + .databaseAdapter() + .execSQL(updateEvent(event.uid(), importStatus.toSyncState().name)) } } catch (e: Exception) { Timber.e(e) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index a9d6178ede3..10c1780dfe7 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -11,7 +11,7 @@ kotlin = '2.2.21' dagger = '2.57.2' jacoco = '0.8.14' designSystem = "0.7.0-SNAPSHOT" -dhis2sdk = "1.14.0-20260202.110438-9" +dhis2sdk = "1.14.0-20260209.084921-13" ruleEngine = "3.3.11" expressionParser = "1.2.2" appcompat = "1.7.1" diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index 69d9a98c4ed..ffb15d35b03 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -6427,6 +6427,14 @@ + + + + + + + + @@ -7452,6 +7460,14 @@ + + + + + + + + diff --git a/login/src/androidMain/kotlin/org/dhis2/mobile/login/main/data/LoginRepositoryImpl.kt b/login/src/androidMain/kotlin/org/dhis2/mobile/login/main/data/LoginRepositoryImpl.kt index 30f30552423..b6ae1019e9c 100644 --- a/login/src/androidMain/kotlin/org/dhis2/mobile/login/main/data/LoginRepositoryImpl.kt +++ b/login/src/androidMain/kotlin/org/dhis2/mobile/login/main/data/LoginRepositoryImpl.kt @@ -8,6 +8,8 @@ import org.dhis2.mobile.commons.auth.OpenIdController import org.dhis2.mobile.commons.biometrics.BiometricActions import org.dhis2.mobile.commons.biometrics.CryptographicActions import org.dhis2.mobile.commons.coroutine.Dispatcher +import org.dhis2.mobile.commons.error.DomainError +import org.dhis2.mobile.commons.error.DomainErrorMapper import org.dhis2.mobile.commons.providers.BIOMETRIC_CREDENTIALS import org.dhis2.mobile.commons.providers.PreferenceProvider import org.dhis2.mobile.commons.providers.SECURE_PASS @@ -17,11 +19,14 @@ import org.dhis2.mobile.commons.reporting.CrashReportController import org.dhis2.mobile.commons.resources.D2ErrorMessageProvider import org.dhis2.mobile.login.main.domain.model.ServerValidationResult import org.dhis2.mobile.login.resources.Res +import org.dhis2.mobile.login.resources.error_device_not_registered import org.dhis2.mobile.login.resources.openid_invalid_auth_result import org.dhis2.mobile.login.resources.openid_process_cancelled import org.dhis2.mobile.login.resources.server_url_error import org.hisp.dhis.android.core.D2 import org.hisp.dhis.android.core.arch.helpers.Result +import org.hisp.dhis.android.core.maintenance.D2Error +import org.hisp.dhis.android.core.user.oauth2.OAuth2Config import org.hisp.dhis.android.core.user.openid.IntentWithRequestCode import org.hisp.dhis.android.core.user.openid.OpenIDConnectConfig import org.jetbrains.compose.resources.getString @@ -47,6 +52,7 @@ class LoginRepositoryImpl( private val analyticActions: AnalyticActions, private val openIdController: OpenIdController, private val dispatcher: Dispatcher, + private val domainErrorMapper: DomainErrorMapper, ) : LoginRepository { override suspend fun validateServer( server: String, @@ -55,26 +61,24 @@ class LoginRepositoryImpl( withContext(dispatcher.io) { when (val result = d2.serverModule().blockingCheckServerUrl(server)) { is Result.Success -> { - if (result.value.isOauthEnabled()) { - ServerValidationResult.Oauth - } else { - val oidcProvider = result.value.oidcProviders.firstOrNull() - val serverName = - result.value.applicationTitle ?: try { - server.substringAfter("://").substringBefore("/") - } catch (_: Exception) { - server - } - ServerValidationResult.Legacy( - serverName = serverName, - serverDescription = result.value.applicationDescription, - countryFlag = result.value.countryFlag, - allowRecovery = result.value.allowAccountRecovery, - oidcIcon = oidcProvider?.icon, - oidcLoginText = oidcProvider?.loginText, - oidcUrl = oidcProvider?.url, - ) - } + val serverName = + result.value.applicationTitle ?: try { + server.substringAfter("://").substringBefore("/") + } catch (_: Exception) { + server + } + + val oidcProvider = result.value.oidcProviders.firstOrNull() + ServerValidationResult.Success( + serverName = serverName.ifEmpty { "DHIS2" }, + serverDescription = result.value.applicationDescription, + countryFlag = result.value.countryFlag, + allowRecovery = result.value.allowAccountRecovery, + oidcIcon = oidcProvider?.icon, + oidcLoginText = oidcProvider?.loginText, + oidcUrl = oidcProvider?.url, + oAuthEnabled = result.value.isOauthEnabled(), + ) } is Result.Failure -> { @@ -123,6 +127,51 @@ class LoginRepositoryImpl( } } + override suspend fun getDeviceEnrollmentUrl(serverUrl: String) = + withContext(dispatcher.io) { + try { + d2.userModule().oauth2Handler().blockingBuildEnrollmentUrl(serverUrl) + } catch (d2Error: D2Error) { + throw domainErrorMapper.mapToDomainError(d2Error) + } + } + + override suspend fun enrollDevice( + iat: String, + serverURL: String, + ) = withContext(dispatcher.io) { + try { + d2.userModule().oauth2Handler().blockingHandleEnrollmentResponse( + serverUrl = serverURL, + iat = iat, + ) + + if (!d2.userModule().oauth2Handler().isDeviceRegistered()) { + throw DomainError.AuthenticationError(getString(Res.string.error_device_not_registered)) + } + + val config = OAuth2Config(serverUrl = serverURL) + // Return the authorization URL + d2.userModule().oauth2Handler().blockingLogIn(config) + } catch (d2Error: D2Error) { + throw domainErrorMapper.mapToDomainError(d2Error) + } + } + + override suspend fun loginUserWithOAuth( + serverUrl: String, + code: String, + ) = withContext(dispatcher.io) { + try { + val user = + d2.userModule().oauth2Handler().blockingHandleLogInResponse(serverUrl, code) + kotlin.Result.success(user.username()) + } catch (d2Error: D2Error) { + val mappedError = domainErrorMapper.mapToDomainError(d2Error) + kotlin.Result.failure(mappedError) + } + } + override suspend fun getAvailableLoginUsernames(): List = withContext(dispatcher.io) { preferences.getSet(PREF_USERS, HashSet())?.toList() ?: emptyList() @@ -179,7 +228,10 @@ class LoginRepositoryImpl( override suspend fun initialSyncDone( serverUrl: String, username: String, - ): Boolean = withContext(dispatcher.io) { isImportedDatabase(serverUrl, username) or entryExists() } + ): Boolean = + withContext(dispatcher.io) { + isImportedDatabase(serverUrl, username) or entryExists() + } override suspend fun canLoginWithBiometrics(serverUrl: String): Boolean = withContext(dispatcher.io) { diff --git a/login/src/androidMain/kotlin/org/dhis2/mobile/login/main/di/LoginModule.android.kt b/login/src/androidMain/kotlin/org/dhis2/mobile/login/main/di/LoginModule.android.kt index 89064cbbbbe..67f3de6957d 100644 --- a/login/src/androidMain/kotlin/org/dhis2/mobile/login/main/di/LoginModule.android.kt +++ b/login/src/androidMain/kotlin/org/dhis2/mobile/login/main/di/LoginModule.android.kt @@ -26,15 +26,16 @@ internal actual val accountModule = factory { params -> LoginRepositoryImpl( - get(), - get(), - get(), - get(), - get(), - get(), - get(), - get { parametersOf(params.get()) }, - get(), + d2 = get(), + authenticator = get(), + cryptographyManager = get(), + preferences = get(), + d2ErrorMessageProvider = get(), + crashReportController = get(), + analyticActions = get(), + openIdController = get { parametersOf(params.get()) }, + dispatcher = get(), + domainErrorMapper = get(), ) } diff --git a/login/src/androidMain/kotlin/org/dhis2/mobile/login/main/ui/screen/WebAuthenticator.android.kt b/login/src/androidMain/kotlin/org/dhis2/mobile/login/main/ui/screen/WebAuthenticator.android.kt index e9999983252..8c4e18dfa78 100644 --- a/login/src/androidMain/kotlin/org/dhis2/mobile/login/main/ui/screen/WebAuthenticator.android.kt +++ b/login/src/androidMain/kotlin/org/dhis2/mobile/login/main/ui/screen/WebAuthenticator.android.kt @@ -14,17 +14,6 @@ actual fun WebAuthenticator( url: String, onDismiss: () -> Unit, ) { - // TODO Use the url parameter when the backend supports dynamic redirect URIs - val redirectUri = "https://vgarciabnz.github.io" - val oauthAuthUrl = - "https://dev.im.dhis2.org/oauth2-android-test/oauth2/authorize?" + - "response_type=code" + - "&client_id=dhis2-client" + - "&redirect_uri=$redirectUri" + - "&scope=openid%20email" + - "&state=abc123" - - // Custom Tab launcher will handle the result of the Custom Tab to detect if the user closed it val customTabLauncher = rememberLauncherForActivityResult( contract = ActivityResultContracts.StartActivityForResult(), @@ -41,11 +30,13 @@ actual fun WebAuthenticator( .setShowTitle(false) .setUrlBarHidingEnabled(true) .build() + // Custom Tab is not kept in the activity history stack and it's removed from memory. + // It won't appear in the "Recent Apps" list customTabsIntent.intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY) val intent = customTabsIntent.intent.apply { - data = oauthAuthUrl.toUri() + data = url.toUri() } customTabLauncher.launch(intent) diff --git a/login/src/commonMain/composeResources/values/strings.xml b/login/src/commonMain/composeResources/values/strings.xml index a257953321e..12f33c513f6 100644 --- a/login/src/commonMain/composeResources/values/strings.xml +++ b/login/src/commonMain/composeResources/values/strings.xml @@ -67,4 +67,6 @@ Import successful The login was cancelled Invalid authorization result + Device not registered + Missing username from OAuth login response \ No newline at end of file diff --git a/login/src/commonMain/kotlin/org/dhis2/mobile/login/accounts/ui/viewmodel/AccountsViewModel.kt b/login/src/commonMain/kotlin/org/dhis2/mobile/login/accounts/ui/viewmodel/AccountsViewModel.kt index 65acf2dbe6b..f751d0ec19c 100644 --- a/login/src/commonMain/kotlin/org/dhis2/mobile/login/accounts/ui/viewmodel/AccountsViewModel.kt +++ b/login/src/commonMain/kotlin/org/dhis2/mobile/login/accounts/ui/viewmodel/AccountsViewModel.kt @@ -36,12 +36,13 @@ class AccountsViewModel( fun onAccountClicked(account: AccountModel) { viewModelScope.launch { navigator.navigate( - LoginScreenState.LegacyLogin( + LoginScreenState.LoginCredentials( selectedServer = account.serverUrl, selectedUsername = account.name, serverName = account.serverName, selectedServerFlag = account.serverFlag, allowRecovery = account.allowRecovery, + oAuthEnabled = account.isOauthEnabled, ), ) } diff --git a/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/data/LoginRepository.kt b/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/data/LoginRepository.kt index 9da51f7fbfc..d815b28ed81 100644 --- a/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/data/LoginRepository.kt +++ b/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/data/LoginRepository.kt @@ -2,6 +2,7 @@ package org.dhis2.mobile.login.main.data import coil3.PlatformContext import org.dhis2.mobile.login.main.domain.model.ServerValidationResult + typealias UserPassword = String interface LoginRepository { @@ -64,4 +65,16 @@ interface LoginRepository { suspend fun getUsername(): String suspend fun logoutUser(): Result + + suspend fun getDeviceEnrollmentUrl(serverUrl: String): String + + suspend fun enrollDevice( + iat: String, + serverURL: String, + ): String + + suspend fun loginUserWithOAuth( + serverUrl: String, + code: String, + ): Result } diff --git a/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/di/LoginModule.kt b/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/di/LoginModule.kt index 895d4a6c236..ad3a8473672 100644 --- a/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/di/LoginModule.kt +++ b/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/di/LoginModule.kt @@ -5,12 +5,15 @@ import org.dhis2.mobile.login.authentication.di.twoFAModule import org.dhis2.mobile.login.main.domain.usecase.BiometricLogin import org.dhis2.mobile.login.main.domain.usecase.GetAvailableUsernames import org.dhis2.mobile.login.main.domain.usecase.GetBiometricInfo +import org.dhis2.mobile.login.main.domain.usecase.GetDeviceEnrollmentUrl import org.dhis2.mobile.login.main.domain.usecase.GetHasOtherAccounts import org.dhis2.mobile.login.main.domain.usecase.GetInitialScreen import org.dhis2.mobile.login.main.domain.usecase.ImportDatabase import org.dhis2.mobile.login.main.domain.usecase.LogOutUser import org.dhis2.mobile.login.main.domain.usecase.LoginUser +import org.dhis2.mobile.login.main.domain.usecase.LoginUserWithOAuth import org.dhis2.mobile.login.main.domain.usecase.OpenIdLogin +import org.dhis2.mobile.login.main.domain.usecase.ProcessDeviceEnrollment import org.dhis2.mobile.login.main.domain.usecase.UpdateBiometricPermission import org.dhis2.mobile.login.main.domain.usecase.UpdateTrackingPermission import org.dhis2.mobile.login.main.domain.usecase.ValidateServer @@ -71,15 +74,27 @@ internal val mainLoginModule = factory { params -> OpenIdLogin(get { parametersOf(params.get()) }) } + + factory { params -> + GetDeviceEnrollmentUrl(get { parametersOf(params.get()) }) + } + + factory { params -> + ProcessDeviceEnrollment(get { parametersOf(params.get()) }) + } + + factory { params -> + LoginUserWithOAuth(get { parametersOf(params.get()) }) + } + viewModel { parameters -> val context = parameters.get() LoginViewModel( - get(), - get(), - get { parametersOf(context) }, - get { parametersOf(context) }, - get(), - get(), + navigator = get(), + getInitialScreen = get(), + importDatabase = get { parametersOf(context) }, + validateServer = get { parametersOf(context) }, + networkStatusProvider = get(), ) } viewModel { parameters -> @@ -90,6 +105,7 @@ internal val mainLoginModule = val oidcInfo = parameters[4] as OidcInfo? val context = parameters[5] as PlatformContext val fromHome = parameters[6] as Boolean + val oAuthEnable = parameters[7] as Boolean CredentialsViewModel( navigator = get(), getAvailableUsernames = get { parametersOf(context) }, @@ -99,8 +115,12 @@ internal val mainLoginModule = logOutUser = get { parametersOf(context) }, openIdLogin = get { parametersOf(context) }, biometricLogin = get { parametersOf(context) }, + loginUserWithOAuth = get { parametersOf(context) }, + getDeviceEnrollmentUrl = get { parametersOf(context) }, + processDeviceEnrollment = get { parametersOf(context) }, updateTrackingPermission = get { parametersOf(context) }, updateBiometricPermission = get { parametersOf(context) }, + appLinkNavigation = get(), networkStatusProvider = get(), serverName = serverName, serverUrl = serverUrl, @@ -110,6 +130,7 @@ internal val mainLoginModule = oidcInfo = oidcInfo, forgotPinUseCase = get(), fromHome = fromHome, + oAuthEnable = oAuthEnable, ) } } diff --git a/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/domain/model/DeviceEnrollmentInfo.kt b/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/domain/model/DeviceEnrollmentInfo.kt new file mode 100644 index 00000000000..6b5031cdf17 --- /dev/null +++ b/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/domain/model/DeviceEnrollmentInfo.kt @@ -0,0 +1,6 @@ +package org.dhis2.mobile.login.main.domain.model + +data class DeviceEnrollmentInfo( + val iat: String, + val serverURL: String, +) diff --git a/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/domain/model/LoginScreenState.kt b/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/domain/model/LoginScreenState.kt index 7e2050a2434..2a11b406016 100644 --- a/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/domain/model/LoginScreenState.kt +++ b/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/domain/model/LoginScreenState.kt @@ -16,16 +16,17 @@ sealed interface LoginScreenState { ) : LoginScreenState @Serializable - data class LegacyLogin( + data class LoginCredentials( val selectedServer: String, val selectedUsername: String?, val serverName: String?, val selectedServerFlag: String?, val allowRecovery: Boolean, + val oAuthEnabled: Boolean, ) : LoginScreenState @Serializable - data class OauthLogin( + data class OauthAuthentication( val selectedServer: String, ) : LoginScreenState diff --git a/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/domain/model/ServerValidationResult.kt b/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/domain/model/ServerValidationResult.kt index 527f18a6c64..d870f7b880f 100644 --- a/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/domain/model/ServerValidationResult.kt +++ b/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/domain/model/ServerValidationResult.kt @@ -1,7 +1,7 @@ package org.dhis2.mobile.login.main.domain.model sealed interface ServerValidationResult { - data class Legacy( + data class Success( val serverName: String?, val serverDescription: String?, val countryFlag: String?, @@ -9,10 +9,9 @@ sealed interface ServerValidationResult { val oidcIcon: String?, val oidcLoginText: String?, val oidcUrl: String?, + val oAuthEnabled: Boolean, ) : ServerValidationResult - object Oauth : ServerValidationResult - data class Error( val message: String, ) : ServerValidationResult diff --git a/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/domain/usecase/GetDeviceEnrollmentUrl.kt b/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/domain/usecase/GetDeviceEnrollmentUrl.kt new file mode 100644 index 00000000000..fc3d1d5c854 --- /dev/null +++ b/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/domain/usecase/GetDeviceEnrollmentUrl.kt @@ -0,0 +1,16 @@ +package org.dhis2.mobile.login.main.domain.usecase + +import org.dhis2.mobile.commons.domain.UseCase +import org.dhis2.mobile.commons.error.DomainError +import org.dhis2.mobile.login.main.data.LoginRepository + +class GetDeviceEnrollmentUrl( + private val repository: LoginRepository, +) : UseCase { + override suspend fun invoke(input: String): Result = + try { + Result.success(repository.getDeviceEnrollmentUrl(input)) + } catch (e: DomainError) { + Result.failure(e) + } +} diff --git a/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/domain/usecase/GetInitialScreen.kt b/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/domain/usecase/GetInitialScreen.kt index 31af22fa7d8..0d8f56985ce 100644 --- a/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/domain/usecase/GetInitialScreen.kt +++ b/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/domain/usecase/GetInitialScreen.kt @@ -27,28 +27,24 @@ class GetInitialScreen( } private fun handleSingleAccount(account: AccountModel): LoginScreenState = - if (account.isOauthEnabled) { - LoginScreenState.OauthLogin(selectedServer = account.serverUrl) - } else { - account.toLegacyLoginState() - } + LoginScreenState.LoginCredentials( + selectedServer = account.serverUrl, + selectedUsername = account.name, + serverName = account.serverName, + selectedServerFlag = account.serverFlag, + allowRecovery = account.allowRecovery, + oAuthEnabled = account.isOauthEnabled, + ) private suspend fun handleLockedSession(): LoginScreenState { val activeAccount = accountRepository.getActiveAccount() ?: return LoginScreenState.Accounts - - return if (activeAccount.isOauthEnabled) { - LoginScreenState.OauthLogin(selectedServer = activeAccount.serverUrl) - } else { - activeAccount.toLegacyLoginState() - } - } - - private fun AccountModel.toLegacyLoginState(): LoginScreenState.LegacyLogin = - LoginScreenState.LegacyLogin( - selectedServer = serverUrl, - selectedUsername = name, - serverName = serverName, - selectedServerFlag = serverFlag, - allowRecovery = allowRecovery, + return LoginScreenState.LoginCredentials( + selectedServer = activeAccount.serverUrl, + selectedUsername = activeAccount.name, + serverName = activeAccount.serverName, + selectedServerFlag = activeAccount.serverFlag, + allowRecovery = activeAccount.allowRecovery, + oAuthEnabled = activeAccount.isOauthEnabled, ) + } } diff --git a/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/domain/usecase/LoginUserWithOAuth.kt b/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/domain/usecase/LoginUserWithOAuth.kt new file mode 100644 index 00000000000..87ea9e47967 --- /dev/null +++ b/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/domain/usecase/LoginUserWithOAuth.kt @@ -0,0 +1,32 @@ +package org.dhis2.mobile.login.main.domain.usecase + +import org.dhis2.mobile.login.main.data.LoginRepository +import org.dhis2.mobile.login.main.domain.model.LoginResult +import org.dhis2.mobile.login.resources.Res +import org.dhis2.mobile.login.resources.missing_username_from_oauth_login_response +import org.jetbrains.compose.resources.getString + +class LoginUserWithOAuth( + repository: LoginRepository, +) : BaseLogin(repository) { + suspend operator fun invoke( + serverUrl: String, + code: String, + ): LoginResult { + val result = repository.loginUserWithOAuth(serverUrl, code) + return when { + result.isSuccess -> { + val username = result.getOrNull() + if (username != null) { + handleResult(Result.success(Unit), serverUrl, username) + } else { + LoginResult.Error(getString(Res.string.missing_username_from_oauth_login_response)) + } + } + + else -> { + LoginResult.Error(result.exceptionOrNull()?.message) + } + } + } +} diff --git a/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/domain/usecase/ProcessDeviceEnrollment.kt b/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/domain/usecase/ProcessDeviceEnrollment.kt new file mode 100644 index 00000000000..36af353f0f2 --- /dev/null +++ b/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/domain/usecase/ProcessDeviceEnrollment.kt @@ -0,0 +1,22 @@ +package org.dhis2.mobile.login.main.domain.usecase + +import org.dhis2.mobile.commons.domain.UseCase +import org.dhis2.mobile.commons.error.DomainError +import org.dhis2.mobile.login.main.data.LoginRepository +import org.dhis2.mobile.login.main.domain.model.DeviceEnrollmentInfo + +class ProcessDeviceEnrollment( + private val repository: LoginRepository, +) : UseCase { + override suspend fun invoke(input: DeviceEnrollmentInfo): Result = + try { + Result.success( + repository.enrollDevice( + iat = input.iat, + serverURL = input.serverURL, + ), + ) + } catch (e: DomainError) { + Result.failure(e) + } +} diff --git a/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/ui/screen/CredentialsScreen.kt b/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/ui/screen/CredentialsScreen.kt index bc133808cf6..bdf7cc64e90 100644 --- a/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/ui/screen/CredentialsScreen.kt +++ b/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/ui/screen/CredentialsScreen.kt @@ -3,6 +3,7 @@ package org.dhis2.mobile.login.main.ui.screen import androidx.compose.animation.AnimatedVisibilityScope import androidx.compose.animation.ExperimentalSharedTransitionApi import androidx.compose.animation.SharedTransitionScope +import androidx.compose.foundation.background import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.layout.Arrangement.spacedBy import androidx.compose.foundation.layout.Box @@ -12,6 +13,7 @@ import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size +import androidx.compose.foundation.shape.CircleShape import androidx.compose.material.icons.Icons import androidx.compose.material.icons.automirrored.outlined.Login import androidx.compose.material.icons.automirrored.outlined.ShowChart @@ -98,6 +100,7 @@ import org.hisp.dhis.mobile.ui.designsystem.component.state.BottomSheetShellUISt import org.hisp.dhis.mobile.ui.designsystem.component.state.rememberAdditionalInfoColumnState import org.hisp.dhis.mobile.ui.designsystem.component.state.rememberListCardState import org.hisp.dhis.mobile.ui.designsystem.theme.Spacing +import org.hisp.dhis.mobile.ui.designsystem.theme.SurfaceColor import org.hisp.dhis.mobile.ui.designsystem.theme.TextColor import org.jetbrains.compose.resources.stringResource import org.koin.compose.viewmodel.koinViewModel @@ -120,6 +123,7 @@ fun CredentialsScreen( allowRecovery: Boolean, oidcInfo: OidcInfo?, fromHome: Boolean, + oAuthEnable: Boolean, ) { val context = LocalPlatformContext.current @@ -133,6 +137,7 @@ fun CredentialsScreen( oidcInfo, context, fromHome, + oAuthEnable, ) } @@ -190,25 +195,28 @@ fun CredentialsScreen( serverImageUrl = selectedServerFlag, ) } - CredentialsContainer( - availableUsernames = screenState.credentialsInfo.availableUsernames, - username = screenState.credentialsInfo.username, - password = screenState.credentialsInfo.password, - isUsernameEditable = screenState.credentialsInfo.usernameCanBeEdited, - isLoggingIn = isLoggingIn, - onCredentialsUpdate = { credentialsUpdate -> - when (credentialsUpdate) { - CredentialsUpdate.Complete -> - viewModel.onLoginClicked() - is CredentialsUpdate.Password -> - viewModel.updatePassword(credentialsUpdate.password) + if (!oAuthEnable) { + CredentialsContainer( + availableUsernames = screenState.credentialsInfo.availableUsernames, + username = screenState.credentialsInfo.username, + password = screenState.credentialsInfo.password, + isUsernameEditable = screenState.credentialsInfo.usernameCanBeEdited, + isLoggingIn = isLoggingIn, + onCredentialsUpdate = { credentialsUpdate -> + when (credentialsUpdate) { + CredentialsUpdate.Complete -> + viewModel.onLoginClicked() - is CredentialsUpdate.Username -> - viewModel.updateUsername(credentialsUpdate.username) - } - }, - ) + is CredentialsUpdate.Password -> + viewModel.updatePassword(credentialsUpdate.password) + + is CredentialsUpdate.Username -> + viewModel.updateUsername(credentialsUpdate.username) + } + }, + ) + } LoginStatus( isLoggingIn = isLoggingIn, loginErrorMessage = screenState.errorMessage, @@ -269,11 +277,13 @@ private fun handleCredentialAction( CredentialsAction.OnLoginClicked -> viewModel.onLoginClicked() + CredentialsAction.OnManageAccounts -> viewModel.onManageAccountsClicked() CredentialsAction.OnOpenIdLogin -> viewModel.onOpenIdLogin() + CredentialsAction.OnRecoverAccount -> viewModel.onRecoverAccountClicked() } @@ -326,6 +336,11 @@ private fun ServerInfo( ), listAvatar = { Avatar( + modifier = + Modifier.background( + color = SurfaceColor.PrimaryContainer, + shape = CircleShape, + ), style = flag?.let { painter -> AvatarStyleData.Image(painter) @@ -598,7 +613,10 @@ private fun CredentialActions( contentAlignment = Alignment.BottomCenter, ) { Button( - modifier = Modifier.fillMaxWidth().testTag(CREDENTIALS_MANAGE_ACCOUNTS_BUTTON_TAG), + modifier = + Modifier + .fillMaxWidth() + .testTag(CREDENTIALS_MANAGE_ACCOUNTS_BUTTON_TAG), text = stringResource(Res.string.action_manage_account), style = ButtonStyle.OUTLINED, onClick = { diff --git a/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/ui/screen/LoginScreen.kt b/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/ui/screen/LoginScreen.kt index 7c8d14f739d..04650c2d270 100644 --- a/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/ui/screen/LoginScreen.kt +++ b/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/ui/screen/LoginScreen.kt @@ -201,8 +201,8 @@ fun LoginScreen( onManageAccounts = viewModel::onBackToManageAccounts, ) } - composable { - val arg = it.toRoute() + composable { + val arg = it.toRoute() displayMoreActions = arg.selectedServer.isEmpty() displayBackArrow = true CredentialsScreen( @@ -216,13 +216,17 @@ fun LoginScreen( info.serverUrl == arg.selectedServer }, fromHome = fromHome, + oAuthEnable = arg.oAuthEnabled, ) } - composable { - val args = it.toRoute() - WebAuthenticator(url = args.selectedServer) { - viewModel.onOauthLoginCancelled() - } + composable { + val args = it.toRoute() + WebAuthenticator( + url = args.selectedServer, + onDismiss = { + viewModel.onOauthLoginCancelled() + }, + ) } composable { displayMoreActions = true diff --git a/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/ui/state/CredentialsUiState.kt b/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/ui/state/CredentialsUiState.kt index b6e2c17fc2c..dc9b17c8fc5 100644 --- a/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/ui/state/CredentialsUiState.kt +++ b/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/ui/state/CredentialsUiState.kt @@ -14,6 +14,7 @@ data class CredentialsUiState( val displayBiometricsDialog: Boolean, val hasOtherAccounts: Boolean, val isSessionLocked: Boolean, + val oAuthEnable: Boolean, ) { fun username() = serverInfo.username ?: credentialsInfo.username } diff --git a/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/ui/viewmodel/CredentialsViewModel.kt b/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/ui/viewmodel/CredentialsViewModel.kt index 83abc216aac..ef85ad58b7b 100644 --- a/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/ui/viewmodel/CredentialsViewModel.kt +++ b/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/ui/viewmodel/CredentialsViewModel.kt @@ -13,17 +13,22 @@ import org.dhis2.mobile.commons.domain.invoke import org.dhis2.mobile.commons.extensions.launchUseCase import org.dhis2.mobile.commons.extensions.withMinimumDuration import org.dhis2.mobile.commons.network.NetworkStatusProvider +import org.dhis2.mobile.login.main.domain.model.DeviceEnrollmentInfo import org.dhis2.mobile.login.main.domain.model.LoginResult import org.dhis2.mobile.login.main.domain.model.LoginScreenState import org.dhis2.mobile.login.main.domain.usecase.BiometricLogin import org.dhis2.mobile.login.main.domain.usecase.GetAvailableUsernames import org.dhis2.mobile.login.main.domain.usecase.GetBiometricInfo +import org.dhis2.mobile.login.main.domain.usecase.GetDeviceEnrollmentUrl import org.dhis2.mobile.login.main.domain.usecase.GetHasOtherAccounts import org.dhis2.mobile.login.main.domain.usecase.LogOutUser import org.dhis2.mobile.login.main.domain.usecase.LoginUser +import org.dhis2.mobile.login.main.domain.usecase.LoginUserWithOAuth import org.dhis2.mobile.login.main.domain.usecase.OpenIdLogin +import org.dhis2.mobile.login.main.domain.usecase.ProcessDeviceEnrollment import org.dhis2.mobile.login.main.domain.usecase.UpdateBiometricPermission import org.dhis2.mobile.login.main.domain.usecase.UpdateTrackingPermission +import org.dhis2.mobile.login.main.ui.navigation.AppLinkNavigation import org.dhis2.mobile.login.main.ui.navigation.Navigator import org.dhis2.mobile.login.main.ui.state.AfterLoginAction import org.dhis2.mobile.login.main.ui.state.CredentialsInfo @@ -43,8 +48,12 @@ class CredentialsViewModel( private val logOutUser: LogOutUser, private val biometricLogin: BiometricLogin, private val openIdLogin: OpenIdLogin, + private val loginUserWithOAuth: LoginUserWithOAuth, + private val getDeviceEnrollmentUrl: GetDeviceEnrollmentUrl, + private val processDeviceEnrollment: ProcessDeviceEnrollment, private val updateTrackingPermission: UpdateTrackingPermission, private val updateBiometricPermission: UpdateBiometricPermission, + private val appLinkNavigation: AppLinkNavigation, networkStatusProvider: NetworkStatusProvider, private val serverName: String?, private val serverUrl: String, @@ -54,6 +63,7 @@ class CredentialsViewModel( private val forgotPinUseCase: ForgotPinUseCase, private val oidcInfo: OidcInfo?, private val fromHome: Boolean, + private val oAuthEnable: Boolean, ) : ViewModel() { private val isNetworkOnline = networkStatusProvider.connectionStatus @@ -87,6 +97,7 @@ class CredentialsViewModel( hasOtherAccounts = false, isSessionLocked = false, displayBiometricsDialog = false, + oAuthEnable = oAuthEnable, ) private var loginJob: Job? = null @@ -102,6 +113,16 @@ class CredentialsViewModel( initialValue = initialState, ) + init { + launchUseCase { + appLinkNavigation.appLink.collect { urlString -> + if (credentialsScreenState.value.loginState is LoginState.Running) { + handleOAuthCallbacks(urlString) + } + } + } + } + private fun loadData() { launchUseCase { val biometricInfo = getBiometricInfo(serverUrl) @@ -121,7 +142,7 @@ class CredentialsViewModel( availableUsernames = getAvailableUsernames(), usernameCanBeEdited = username == null, ), - loginState = LoginState.Disabled, + loginState = if (oAuthEnable) LoginState.Enabled else LoginState.Disabled, errorMessage = null, allowRecovery = allowRecovery, canUseBiometrics = getBiometricInfo(serverUrl).canUseBiometrics, @@ -130,8 +151,116 @@ class CredentialsViewModel( hasOtherAccounts = getHasOtherAccounts(), isSessionLocked = getIsSessionLockedUseCase(), displayBiometricsDialog = biometricInfo.canUseBiometrics && !fromHome, + oAuthEnable = oAuthEnable, ), ) + + if (_credentialsScreenState.value.oAuthEnable && !fromHome) { + fetchOAuthEnrollmentUrl() + } + } + } + + private fun fetchOAuthEnrollmentUrl() { + _credentialsScreenState.update { + it.copy( + loginState = LoginState.Running, + ) + } + launchUseCase { + getDeviceEnrollmentUrl(serverUrl).fold( + onSuccess = { enrollmentURL -> + // First OAuth call (enrollment) - clear any previous OAuth sessions + navigator.navigate( + LoginScreenState.OauthAuthentication( + selectedServer = enrollmentURL, + ), + ) + }, + onFailure = { error -> + _credentialsScreenState.update { + it.copy( + loginState = LoginState.Enabled, + errorMessage = error.message, + ) + } + }, + ) + } + } + + private fun handleOAuthCallbacks(urlString: String) { + // First check if there is any error + val error = urlString.substringAfter("error=", "").substringBefore('&') + if (error.isNotEmpty()) { + _credentialsScreenState.update { + it.copy( + errorMessage = error, + loginState = LoginState.Enabled, + ) + } + return + } + + // Check if there is a device enrollment callback + val iat = urlString.substringAfter("iat=", "").substringBefore('&') + if (iat.isNotEmpty()) { + registerDevice(iat) + return + } + + // Check if there is a login callback with the authorization code + val code = urlString.substringAfter("code=", "").substringBefore('&') + if (code.isNotEmpty()) { + loginWithOAuthCode(code) + return + } + + _credentialsScreenState.update { + it.copy( + loginState = LoginState.Enabled, + ) + } + } + + private fun loginWithOAuthCode(code: String) { + startLoginJob { + loginUserWithOAuth( + serverUrl = serverUrl, + code = code, + ) + } + } + + private fun registerDevice(enrollmentIat: String) { + launchUseCase { + _credentialsScreenState.update { + it.copy(loginState = LoginState.Running) + } + + processDeviceEnrollment( + DeviceEnrollmentInfo( + iat = enrollmentIat, + serverURL = serverUrl, + ), + ).fold( + onSuccess = { consentUrl -> + // Second OAuth call (consent) - keep session from enrollment + navigator.navigate( + LoginScreenState.OauthAuthentication( + selectedServer = consentUrl, + ), + ) + }, + onFailure = { error -> + _credentialsScreenState.update { + it.copy( + errorMessage = error.message, + loginState = LoginState.Enabled, + ) + } + }, + ) } } @@ -176,13 +305,17 @@ class CredentialsViewModel( } fun onLoginClicked() { - startLoginJob { - loginUser( - serverUrl = _credentialsScreenState.value.serverInfo.serverUrl, - username = _credentialsScreenState.value.credentialsInfo.username, - password = _credentialsScreenState.value.credentialsInfo.password, - isNetworkAvailable = isNetworkOnline.value, - ) + if (_credentialsScreenState.value.oAuthEnable) { + fetchOAuthEnrollmentUrl() + } else { + startLoginJob { + loginUser( + serverUrl = _credentialsScreenState.value.serverInfo.serverUrl, + username = _credentialsScreenState.value.credentialsInfo.username, + password = _credentialsScreenState.value.credentialsInfo.password, + isNetworkAvailable = isNetworkOnline.value, + ) + } } } diff --git a/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/ui/viewmodel/LoginViewModel.kt b/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/ui/viewmodel/LoginViewModel.kt index b3295c1633c..ce1607ba114 100644 --- a/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/ui/viewmodel/LoginViewModel.kt +++ b/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/ui/viewmodel/LoginViewModel.kt @@ -12,13 +12,11 @@ import org.dhis2.mobile.commons.extensions.launchUseCase import org.dhis2.mobile.commons.extensions.withMinimumDuration import org.dhis2.mobile.commons.network.NetworkStatusProvider import org.dhis2.mobile.login.main.domain.model.LoginScreenState -import org.dhis2.mobile.login.main.domain.model.LoginScreenState.LegacyLogin -import org.dhis2.mobile.login.main.domain.model.LoginScreenState.OauthLogin +import org.dhis2.mobile.login.main.domain.model.LoginScreenState.LoginCredentials import org.dhis2.mobile.login.main.domain.model.ServerValidationResult import org.dhis2.mobile.login.main.domain.usecase.GetInitialScreen import org.dhis2.mobile.login.main.domain.usecase.ImportDatabase import org.dhis2.mobile.login.main.domain.usecase.ValidateServer -import org.dhis2.mobile.login.main.ui.navigation.AppLinkNavigation import org.dhis2.mobile.login.main.ui.navigation.Navigator import org.dhis2.mobile.login.main.ui.state.DatabaseImportState import org.dhis2.mobile.login.main.ui.state.ServerValidationUiState @@ -28,7 +26,6 @@ class LoginViewModel( private val getInitialScreen: GetInitialScreen, private val importDatabase: ImportDatabase, private val validateServer: ValidateServer, - private val appLinkNavigation: AppLinkNavigation, networkStatusProvider: NetworkStatusProvider, ) : ViewModel() { private val isNetworkOnline = @@ -46,14 +43,8 @@ class LoginViewModel( val importDatabaseState = _importDatabaseState.asStateFlow() private var serverValidationJob: Job? = null - private val redirectUri = "https://vgarciabnz.github.io" init { - launchUseCase { - appLinkNavigation.appLink.collect { urlString -> - handleAppLink(urlString) - } - } goToInitialScreen() } @@ -94,24 +85,20 @@ class LoginViewModel( } } - is ServerValidationResult.Legacy -> { + is ServerValidationResult.Success -> { navigator.navigate( destination = - LegacyLogin( + LoginCredentials( serverName = result.serverName, allowRecovery = result.allowRecovery, selectedServer = serverUrl, selectedServerFlag = result.countryFlag, selectedUsername = null, + oAuthEnabled = result.oAuthEnabled, ), ) stopValidation() } - - ServerValidationResult.Oauth -> { - navigator.navigate(OauthLogin(serverUrl)) - stopValidation() - } } } } @@ -125,23 +112,6 @@ class LoginViewModel( _serverValidationState.update { it.copy(validationRunning = false) } } - private fun handleAppLink(urlString: String) { - if (urlString.startsWith(redirectUri)) { - val code = urlString.substringAfter("code=").substringBefore('&') - if (code.isNotEmpty()) { - // TODO "Use the authorization code to get a token and log in, then show statistics screen" - } else { - val error = urlString.substringAfter("error=").substringBefore('&') - _serverValidationState.update { - it.copy( - error = error, - validationRunning = false, - ) - } - } - } - } - fun onOauthLoginCancelled() { navigateUp() } diff --git a/login/src/commonTest/kotlin/org/dhis2/mobile/login/main/LoginScreenIntegrationTest.kt b/login/src/commonTest/kotlin/org/dhis2/mobile/login/main/LoginScreenIntegrationTest.kt index 207a88957b0..4b8010875a0 100644 --- a/login/src/commonTest/kotlin/org/dhis2/mobile/login/main/LoginScreenIntegrationTest.kt +++ b/login/src/commonTest/kotlin/org/dhis2/mobile/login/main/LoginScreenIntegrationTest.kt @@ -2,7 +2,6 @@ package org.dhis2.mobile.login.main import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.ExperimentalCoroutinesApi -import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.test.UnconfinedTestDispatcher import kotlinx.coroutines.test.resetMain @@ -15,8 +14,8 @@ import org.dhis2.mobile.login.main.data.LoginRepository import org.dhis2.mobile.login.main.domain.model.LoginScreenState import org.dhis2.mobile.login.main.domain.usecase.GetInitialScreen import org.dhis2.mobile.login.main.domain.usecase.ImportDatabase +import org.dhis2.mobile.login.main.domain.usecase.ProcessDeviceEnrollment import org.dhis2.mobile.login.main.domain.usecase.ValidateServer -import org.dhis2.mobile.login.main.ui.navigation.AppLinkNavigation import org.dhis2.mobile.login.main.ui.navigation.Navigator import org.dhis2.mobile.login.main.ui.viewmodel.LoginViewModel import org.dhis2.mobile.login.pin.data.SessionRepository @@ -35,30 +34,24 @@ class LoginScreenIntegrationTest { private val navigator: Navigator = mock() private val accountRepository: AccountRepository = mock() private val sessionRepository: SessionRepository = mock() - private val loginRepository: LoginRepository = mock() - private val appLinkNavigation: AppLinkNavigation = mock() private val networkStatusProvider: NetworkStatusProvider = mock() - private val testDispatcher = UnconfinedTestDispatcher() - private val mockAppLinkFlow = MutableSharedFlow() private val mockNetworkStatusFlow = MutableStateFlow(true) - private lateinit var getInitialScreen: GetInitialScreen - private lateinit var importDatabase: ImportDatabase - private lateinit var validateServer: ValidateServer + private lateinit var processDeviceEnrollment: ProcessDeviceEnrollment @BeforeTest fun setUp() { Dispatchers.setMain(testDispatcher) - whenever(appLinkNavigation.appLink).thenReturn(mockAppLinkFlow) whenever(networkStatusProvider.connectionStatus).thenReturn(mockNetworkStatusFlow) importDatabase = ImportDatabase(repository = loginRepository) validateServer = ValidateServer(repository = loginRepository) getInitialScreen = GetInitialScreen(accountRepository, sessionRepository) + processDeviceEnrollment = ProcessDeviceEnrollment(repository = loginRepository) } @AfterTest @@ -117,12 +110,13 @@ class LoginScreenIntegrationTest { // Then goes to existing account screen (LegacyLogin) verify(navigator).navigate( eq( - LoginScreenState.LegacyLogin( + LoginScreenState.LoginCredentials( selectedServer = singleAccount.serverUrl, selectedUsername = singleAccount.name, serverName = singleAccount.serverName, selectedServerFlag = singleAccount.serverFlag, allowRecovery = singleAccount.allowRecovery, + oAuthEnabled = false, ), ), any(), @@ -145,9 +139,18 @@ class LoginScreenIntegrationTest { // When opening the app initViewModel() - // Then goes to OAuth login screen + // Then goes to login screen with OAuth verify(navigator).navigate( - eq(LoginScreenState.OauthLogin(selectedServer = oauthAccount.serverUrl)), + eq( + LoginScreenState.LoginCredentials( + selectedServer = oauthAccount.serverUrl, + selectedUsername = oauthAccount.name, + serverName = oauthAccount.serverName, + selectedServerFlag = oauthAccount.serverFlag, + allowRecovery = false, + oAuthEnabled = true, + ), + ), any(), ) } @@ -213,7 +216,6 @@ class LoginScreenIntegrationTest { getInitialScreen = getInitialScreen, importDatabase = importDatabase, validateServer = validateServer, - appLinkNavigation = appLinkNavigation, networkStatusProvider = networkStatusProvider, ) } diff --git a/login/src/commonTest/kotlin/org/dhis2/mobile/login/main/ui/viewmodel/CredentialsViewModelTest.kt b/login/src/commonTest/kotlin/org/dhis2/mobile/login/main/ui/viewmodel/CredentialsViewModelTest.kt index 5952605f521..897256990e4 100644 --- a/login/src/commonTest/kotlin/org/dhis2/mobile/login/main/ui/viewmodel/CredentialsViewModelTest.kt +++ b/login/src/commonTest/kotlin/org/dhis2/mobile/login/main/ui/viewmodel/CredentialsViewModelTest.kt @@ -4,6 +4,7 @@ import app.cash.turbine.test import coil3.PlatformContext import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.test.StandardTestDispatcher import kotlinx.coroutines.test.resetMain @@ -16,12 +17,16 @@ import org.dhis2.mobile.login.main.domain.model.LoginScreenState import org.dhis2.mobile.login.main.domain.usecase.BiometricLogin import org.dhis2.mobile.login.main.domain.usecase.GetAvailableUsernames import org.dhis2.mobile.login.main.domain.usecase.GetBiometricInfo +import org.dhis2.mobile.login.main.domain.usecase.GetDeviceEnrollmentUrl import org.dhis2.mobile.login.main.domain.usecase.GetHasOtherAccounts import org.dhis2.mobile.login.main.domain.usecase.LogOutUser import org.dhis2.mobile.login.main.domain.usecase.LoginUser +import org.dhis2.mobile.login.main.domain.usecase.LoginUserWithOAuth import org.dhis2.mobile.login.main.domain.usecase.OpenIdLogin +import org.dhis2.mobile.login.main.domain.usecase.ProcessDeviceEnrollment import org.dhis2.mobile.login.main.domain.usecase.UpdateBiometricPermission import org.dhis2.mobile.login.main.domain.usecase.UpdateTrackingPermission +import org.dhis2.mobile.login.main.ui.navigation.AppLinkNavigation import org.dhis2.mobile.login.main.ui.navigation.Navigator import org.dhis2.mobile.login.main.ui.state.LoginState import org.dhis2.mobile.login.pin.domain.usecase.ForgotPinUseCase @@ -34,6 +39,7 @@ import org.mockito.kotlin.doReturn import org.mockito.kotlin.eq import org.mockito.kotlin.mock import org.mockito.kotlin.never +import org.mockito.kotlin.times import org.mockito.kotlin.verify import org.mockito.kotlin.whenever import kotlin.test.assertEquals @@ -53,8 +59,12 @@ class CredentialsViewModelTest { private val loginOutUser: LogOutUser = mock() private val biometricLogin: BiometricLogin = mock() private val openIdLogin: OpenIdLogin = mock() + private val loginUserWithOAuth: LoginUserWithOAuth = mock() + private val getDeviceEnrollmentUrl: GetDeviceEnrollmentUrl = mock() + private val processDeviceEnrollment: ProcessDeviceEnrollment = mock() private val updateTrackingPermission: UpdateTrackingPermission = mock() private val updateBiometricPermission: UpdateBiometricPermission = mock() + private val appLinkNavigation: AppLinkNavigation = mock() private val networkStatusProvider: NetworkStatusProvider = mock() private val getIsSessionLockedUseCase: GetIsSessionLockedUseCase = mock() private val forgotPinUseCase: ForgotPinUseCase = mock() @@ -67,6 +77,7 @@ class CredentialsViewModelTest { fun setUp() { Dispatchers.setMain(testDispatcher) whenever(networkStatusProvider.connectionStatus) doReturn flowOf(true) + whenever(appLinkNavigation.appLink) doReturn MutableSharedFlow() } @After @@ -532,11 +543,164 @@ class CredentialsViewModelTest { } } + @Test + fun `GIVEN app link with authorization code WHEN link arrives THEN OAuth login is triggered`() = + runTest { + // GIVEN + val serverUrl = "https://test.server.org" + val authCode = "auth_code_123" + val appLinkUrl = "https://vgarciabnz.github.io?code=$authCode&state=test" + val mockAppLinkFlow = MutableSharedFlow() + val enrollmentUrl = "https://test.server.org/oauth2/enrollment" + + whenever(getAvailableUsernames()) doReturn emptyList() + whenever(getBiometricInfo(any())) doReturn BiometricsInfo(false, false) + whenever(getHasOtherAccounts.invoke()) doReturn false + whenever(getIsSessionLockedUseCase()) doReturn false + whenever(appLinkNavigation.appLink) doReturn mockAppLinkFlow + whenever(getDeviceEnrollmentUrl(any())) doReturn Result.success(enrollmentUrl) + whenever( + loginUserWithOAuth.invoke(any(), any()), + ) doReturn LoginResult.Success(initialSyncDone = true, displayTrackingMessage = false) + + // Use oAuthEnable=true and fromHome=true to avoid auto-launch but enable OAuth flow + initViewModel(serverUrl = serverUrl, username = "testuser", oAuthEnable = true, fromHome = true) + + viewModel.credentialsScreenState.test(timeout = turbineTimeout) { + awaitItem() + awaitItem() + + // Trigger OAuth flow by clicking login + viewModel.onLoginClicked() + testDispatcher.scheduler.advanceUntilIdle() + + // Login state should be running after clicking login + val runningState = awaitItem() + assertEquals(LoginState.Running, runningState.loginState) + + // WHEN - Send app link with authorization code (simulates OAuth callback) + mockAppLinkFlow.emit(appLinkUrl) + testDispatcher.scheduler.advanceUntilIdle() + + // Advance time for login to complete + testDispatcher.scheduler.advanceTimeBy(4.seconds) + + // Login should succeed and show after login actions + val finalState = awaitItem() + assertEquals(LoginState.Enabled, finalState.loginState) + assertTrue(finalState.afterLoginActions.isNotEmpty()) + + // Verify OAuth login was called with the correct code + verify(loginUserWithOAuth).invoke( + serverUrl = serverUrl, + code = authCode, + ) + + cancelAndIgnoreRemainingEvents() + } + } + + @Test + fun `GIVEN app link with IAT token WHEN link arrives THEN device enrollment is processed`() = + runTest { + // GIVEN + val serverUrl = "https://test.server.org" + val iat = "enrollment_iat_token" + val consentUrl = "https://test.server.org/oauth2/consent" + val enrollmentUrl = "https://test.server.org/oauth2/enrollment" + val appLinkUrl = "https://vgarciabnz.github.io?iat=$iat&state=test" + val mockAppLinkFlow = MutableSharedFlow() + + whenever(getAvailableUsernames()) doReturn emptyList() + whenever(getBiometricInfo(any())) doReturn BiometricsInfo(false, false) + whenever(getHasOtherAccounts.invoke()) doReturn false + whenever(getIsSessionLockedUseCase()) doReturn false + whenever(appLinkNavigation.appLink) doReturn mockAppLinkFlow + whenever(getDeviceEnrollmentUrl(any())) doReturn Result.success(enrollmentUrl) + whenever( + processDeviceEnrollment.invoke(any()), + ) doReturn Result.success(consentUrl) + + // Use oAuthEnable=true and fromHome=true to avoid auto-launch but enable OAuth flow + initViewModel(serverUrl = serverUrl, username = "testuser", oAuthEnable = true, fromHome = true) + + viewModel.credentialsScreenState.test(timeout = turbineTimeout) { + awaitItem() + awaitItem() + + // Trigger OAuth flow by clicking login + viewModel.onLoginClicked() + testDispatcher.scheduler.advanceUntilIdle() + + // Login state should be running after clicking login + val runningState = awaitItem() + assertEquals(LoginState.Running, runningState.loginState) + + // WHEN - Send app link with IAT token (simulates enrollment callback) + mockAppLinkFlow.emit(appLinkUrl) + testDispatcher.scheduler.advanceUntilIdle() + + // Verify device enrollment was called with the correct IAT + verify(processDeviceEnrollment).invoke(any()) + + // Verify navigation happened twice: once for enrollment URL, once for consent URL + verify(navigator, times(2)).navigate(any(), any()) + + cancelAndIgnoreRemainingEvents() + } + } + + @Test + fun `GIVEN app link with error WHEN link arrives THEN error message is displayed`() = + runTest { + // GIVEN + val serverUrl = "https://test.server.org" + val appLinkUrl = "https://vgarciabnz.github.io?error=access_denied&state=test" + val mockAppLinkFlow = MutableSharedFlow() + val enrollmentUrl = "https://test.server.org/oauth2/enrollment" + + whenever(getAvailableUsernames()) doReturn emptyList() + whenever(getBiometricInfo(any())) doReturn BiometricsInfo(false, false) + whenever(getHasOtherAccounts.invoke()) doReturn false + whenever(getIsSessionLockedUseCase()) doReturn false + whenever(appLinkNavigation.appLink) doReturn mockAppLinkFlow + whenever(getDeviceEnrollmentUrl(any())) doReturn Result.success(enrollmentUrl) + + // Use oAuthEnable=true and fromHome=true to avoid auto-launch but enable OAuth flow + initViewModel(serverUrl = serverUrl, username = "testuser", oAuthEnable = true, fromHome = true) + + viewModel.credentialsScreenState.test(timeout = turbineTimeout) { + awaitItem() + awaitItem() + + // Trigger OAuth flow by clicking login + viewModel.onLoginClicked() + testDispatcher.scheduler.advanceUntilIdle() + + // Login state should be running after clicking login + val runningState = awaitItem() + assertEquals(LoginState.Running, runningState.loginState) + + // WHEN - Send app link with error (simulates OAuth error callback) + mockAppLinkFlow.emit(appLinkUrl) + testDispatcher.scheduler.advanceUntilIdle() + + // THEN - Error message should be shown + val errorState = awaitItem() + assertEquals("access_denied", errorState.errorMessage) + assertEquals(LoginState.Enabled, errorState.loginState) + + cancelAndIgnoreRemainingEvents() + } + } + private fun initViewModel( serverName: String? = "Test Server", serverUrl: String = "https://test.server.org", username: String? = null, allowRecovery: Boolean = true, + oAuthEnable: Boolean = false, + fromHome: Boolean = false, ) { viewModel = CredentialsViewModel( @@ -548,8 +712,12 @@ class CredentialsViewModelTest { loginOutUser, biometricLogin, openIdLogin, + loginUserWithOAuth, + getDeviceEnrollmentUrl, + processDeviceEnrollment, updateTrackingPermission, updateBiometricPermission, + appLinkNavigation, networkStatusProvider, serverName, serverUrl, @@ -558,7 +726,8 @@ class CredentialsViewModelTest { getIsSessionLockedUseCase, forgotPinUseCase, oidcInfo = null, - false, + fromHome = fromHome, + oAuthEnable = oAuthEnable, ) } } diff --git a/login/src/commonTest/kotlin/org/dhis2/mobile/login/main/ui/viewmodel/LoginViewModelTest.kt b/login/src/commonTest/kotlin/org/dhis2/mobile/login/main/ui/viewmodel/LoginViewModelTest.kt index 8a7c39020c7..12c498cc340 100644 --- a/login/src/commonTest/kotlin/org/dhis2/mobile/login/main/ui/viewmodel/LoginViewModelTest.kt +++ b/login/src/commonTest/kotlin/org/dhis2/mobile/login/main/ui/viewmodel/LoginViewModelTest.kt @@ -3,7 +3,6 @@ package org.dhis2.mobile.login.main.ui.viewmodel import app.cash.turbine.test import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.ExperimentalCoroutinesApi -import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.test.UnconfinedTestDispatcher import kotlinx.coroutines.test.runTest @@ -14,7 +13,6 @@ import org.dhis2.mobile.login.main.domain.model.ServerValidationResult import org.dhis2.mobile.login.main.domain.usecase.GetInitialScreen import org.dhis2.mobile.login.main.domain.usecase.ImportDatabase import org.dhis2.mobile.login.main.domain.usecase.ValidateServer -import org.dhis2.mobile.login.main.ui.navigation.AppLinkNavigation import org.dhis2.mobile.login.main.ui.navigation.Navigator import org.dhis2.mobile.login.main.ui.state.DatabaseImportState import org.dhis2.mobile.login.main.ui.state.ServerValidationUiState @@ -36,16 +34,13 @@ class LoginViewModelTest { private val getInitialScreen: GetInitialScreen = mock() private val importDatabase: ImportDatabase = mock() private val validateServer: ValidateServer = mock() - private val appLinkNavigation: AppLinkNavigation = mock() private val testDispatcher = UnconfinedTestDispatcher() - private val mockAppLinkFlow = MutableSharedFlow() private val networkStatusProvider: NetworkStatusProvider = mock() private val mockNetworkStatusFlow = MutableStateFlow(true) @Before fun setUp() { Dispatchers.setMain(testDispatcher) - whenever(appLinkNavigation.appLink).thenReturn(mockAppLinkFlow) whenever(networkStatusProvider.connectionStatus).thenReturn(mockNetworkStatusFlow) } @@ -67,7 +62,6 @@ class LoginViewModelTest { getInitialScreen = getInitialScreen, importDatabase = importDatabase, validateServer = validateServer, - appLinkNavigation = appLinkNavigation, networkStatusProvider = networkStatusProvider, ) @@ -102,7 +96,6 @@ class LoginViewModelTest { getInitialScreen = getInitialScreen, importDatabase = importDatabase, validateServer = validateServer, - appLinkNavigation = appLinkNavigation, networkStatusProvider = networkStatusProvider, ) @@ -146,7 +139,6 @@ class LoginViewModelTest { getInitialScreen = getInitialScreen, importDatabase = importDatabase, validateServer = validateServer, - appLinkNavigation = appLinkNavigation, networkStatusProvider = networkStatusProvider, ) @@ -167,44 +159,6 @@ class LoginViewModelTest { } } - @Test - fun `app link with valid code is handled correctly`() = - runTest { - val redirectUri = "https://vgarciabnz.github.io" - val code = "auth_code_123" - val appLinkUrl = "$redirectUri?code=$code&state=test" - - whenever(getInitialScreen()).thenReturn( - LoginScreenState.ServerValidation( - currentServer = "https://test.dhis2.org", - availableServers = listOf("https://test.dhis2.org"), - hasAccounts = false, - ), - ) - - viewModel = - LoginViewModel( - navigator = navigator, - getInitialScreen = getInitialScreen, - importDatabase = importDatabase, - validateServer = validateServer, - appLinkNavigation = appLinkNavigation, - networkStatusProvider = networkStatusProvider, - ) - - viewModel.serverValidationState.test { - assertEquals(ServerValidationUiState(), awaitItem()) - - // Send app link - mockAppLinkFlow.emit(appLinkUrl) - - // TODO: Verify that the code is processed correctly - // Currently the LoginViewModel has a TODO comment for this functionality - - expectNoEvents() - } - } - @Test fun `successfully import database`() = runTest { @@ -218,7 +172,6 @@ class LoginViewModelTest { getInitialScreen = getInitialScreen, importDatabase = importDatabase, validateServer = validateServer, - appLinkNavigation = appLinkNavigation, networkStatusProvider = networkStatusProvider, ) @@ -245,7 +198,6 @@ class LoginViewModelTest { getInitialScreen = getInitialScreen, importDatabase = importDatabase, validateServer = validateServer, - appLinkNavigation = appLinkNavigation, networkStatusProvider = networkStatusProvider, ) diff --git a/login/src/commonTest/kotlin/org/dhis2/mobile/login/pin/domain/usecase/GetInitialScreenUseCaseTest.kt b/login/src/commonTest/kotlin/org/dhis2/mobile/login/pin/domain/usecase/GetInitialScreenUseCaseTest.kt index 953ed6bd72a..faf1072cd4c 100644 --- a/login/src/commonTest/kotlin/org/dhis2/mobile/login/pin/domain/usecase/GetInitialScreenUseCaseTest.kt +++ b/login/src/commonTest/kotlin/org/dhis2/mobile/login/pin/domain/usecase/GetInitialScreenUseCaseTest.kt @@ -50,11 +50,11 @@ class GetInitialScreenUseCaseTest { val result = useCase() // Then - assertTrue(result is LoginScreenState.LegacyLogin) + assertTrue(result is LoginScreenState.LoginCredentials) } @Test - fun `go to oauth if there is 1 logged account with oauth`() = + fun `go to credentials screen with logout if there is 1 logged account with oauth`() = runTest { // Given whenever(accountRepository.getLoggedInAccounts()) doReturn @@ -64,7 +64,8 @@ class GetInitialScreenUseCaseTest { val result = useCase() // Then - assertTrue(result is LoginScreenState.OauthLogin) + assertTrue(result is LoginScreenState.LoginCredentials) + assertEquals(true, result.oAuthEnabled) // OAuth enabled, enrollment URL will be fetched by CredentialsViewModel } @Test @@ -83,7 +84,7 @@ class GetInitialScreenUseCaseTest { } @Test - fun `invoke returns OauthLogin when multiple accounts and session locked with OAuth account`() = + fun `invoke returns LegacyLogin when multiple accounts and session locked with OAuth account`() = runTest { // Given val activeAccount = @@ -105,8 +106,10 @@ class GetInitialScreenUseCaseTest { val result = useCase() // Then - assertIs(result) + assertIs(result) assertEquals("https://active.com", result.selectedServer) + assertEquals("active_user", result.selectedUsername) + assertEquals(true, result.oAuthEnabled) // OAuth enabled, enrollment URL will be fetched by CredentialsViewModel } @Test @@ -133,7 +136,7 @@ class GetInitialScreenUseCaseTest { val result = useCase() // Then - assertIs(result) + assertIs(result) assertEquals("https://active.com", result.selectedServer) assertEquals("active_user", result.selectedUsername) } @@ -182,7 +185,7 @@ class GetInitialScreenUseCaseTest { val result = useCase() // Then - assertIs(result) + assertIs(result) assertEquals("locked_user", result.selectedUsername) } From b0fb5a0d82b9488d7ecf48daec7769497aba263f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Miguel=20Rubio?= Date: Mon, 16 Feb 2026 07:52:02 +0100 Subject: [PATCH 053/114] refactor(test): [Login] Update test annotations to use Kotlin test framework (#4529) * test(navigation): add integration tests for initial screen navigation logic Signed-off-by: andresmr * fix(navigation): update integration test setup to include LoginRepository Signed-off-by: andresmr * refactor(navigation): rename initial screen integration test to login screen and streamline setup Signed-off-by: andresmr * refactor(test): update LoginScreenIntegrationTest to use Kotlin test annotations Signed-off-by: andresmr * refactor(test): update test annotations to use Kotlin test framework Signed-off-by: andresmr * test: reset dispatchers after tests in PinViewModelTest.kt --------- Signed-off-by: andresmr --- login/build.gradle.kts | 4 ---- .../mobile/login/main/LoginScreenIntegrationTest.kt | 10 ++++++++++ .../main/ui/viewmodel/CredentialsViewModelTest.kt | 10 +++++----- .../login/main/ui/viewmodel/LoginViewModelTest.kt | 4 ++-- .../login/pin/domain/usecase/ForgotPinUseCaseTest.kt | 4 ++-- .../pin/domain/usecase/GetInitialScreenUseCaseTest.kt | 6 +++--- .../login/pin/domain/usecase/SavePinUseCaseTest.kt | 4 ++-- .../pin/domain/usecase/ValidatePinUseCaseTest.kt | 4 ++-- .../mobile/login/pin/ui/viewmodel/PinViewModelTest.kt | 11 +++++++++-- 9 files changed, 35 insertions(+), 22 deletions(-) diff --git a/login/build.gradle.kts b/login/build.gradle.kts index b142ac086d9..47cc88ba03d 100644 --- a/login/build.gradle.kts +++ b/login/build.gradle.kts @@ -58,10 +58,6 @@ kotlin { commonTest { dependencies { implementation(kotlin("test")) - // Koin Test features - implementation(libs.koin.test) - implementation(libs.koin.test.junit5) - implementation(libs.koin.test.junit4) implementation(libs.test.turbine) implementation(libs.test.kotlinCoroutines) implementation(libs.test.mockitoKotlin) diff --git a/login/src/commonTest/kotlin/org/dhis2/mobile/login/main/LoginScreenIntegrationTest.kt b/login/src/commonTest/kotlin/org/dhis2/mobile/login/main/LoginScreenIntegrationTest.kt index 4b8010875a0..0093f82cd53 100644 --- a/login/src/commonTest/kotlin/org/dhis2/mobile/login/main/LoginScreenIntegrationTest.kt +++ b/login/src/commonTest/kotlin/org/dhis2/mobile/login/main/LoginScreenIntegrationTest.kt @@ -63,6 +63,16 @@ class LoginScreenIntegrationTest { * * Test case: ANDROAPP-7220 * Scenario: Manage accounts screen + * Given the user is logged out + * And has accounts stored + * When opens the app + * Then goes to + * + * Examples: + * |number_of_accounts |destination_screen | + * | none |server configuration screen| + * | one |existing account screen | + * | two or more |manage accounts screen | * */ diff --git a/login/src/commonTest/kotlin/org/dhis2/mobile/login/main/ui/viewmodel/CredentialsViewModelTest.kt b/login/src/commonTest/kotlin/org/dhis2/mobile/login/main/ui/viewmodel/CredentialsViewModelTest.kt index 897256990e4..a9197a2aacb 100644 --- a/login/src/commonTest/kotlin/org/dhis2/mobile/login/main/ui/viewmodel/CredentialsViewModelTest.kt +++ b/login/src/commonTest/kotlin/org/dhis2/mobile/login/main/ui/viewmodel/CredentialsViewModelTest.kt @@ -31,9 +31,6 @@ import org.dhis2.mobile.login.main.ui.navigation.Navigator import org.dhis2.mobile.login.main.ui.state.LoginState import org.dhis2.mobile.login.pin.domain.usecase.ForgotPinUseCase import org.dhis2.mobile.login.pin.domain.usecase.GetIsSessionLockedUseCase -import org.junit.After -import org.junit.Before -import org.junit.Test import org.mockito.kotlin.any import org.mockito.kotlin.doReturn import org.mockito.kotlin.eq @@ -42,6 +39,9 @@ import org.mockito.kotlin.never import org.mockito.kotlin.times import org.mockito.kotlin.verify import org.mockito.kotlin.whenever +import kotlin.test.AfterTest +import kotlin.test.BeforeTest +import kotlin.test.Test import kotlin.test.assertEquals import kotlin.test.assertFalse import kotlin.test.assertTrue @@ -73,14 +73,14 @@ class CredentialsViewModelTest { private val turbineTimeout = 10.seconds - @Before + @BeforeTest fun setUp() { Dispatchers.setMain(testDispatcher) whenever(networkStatusProvider.connectionStatus) doReturn flowOf(true) whenever(appLinkNavigation.appLink) doReturn MutableSharedFlow() } - @After + @AfterTest fun tearDown() { Dispatchers.resetMain() } diff --git a/login/src/commonTest/kotlin/org/dhis2/mobile/login/main/ui/viewmodel/LoginViewModelTest.kt b/login/src/commonTest/kotlin/org/dhis2/mobile/login/main/ui/viewmodel/LoginViewModelTest.kt index 12c498cc340..1e7d20baacb 100644 --- a/login/src/commonTest/kotlin/org/dhis2/mobile/login/main/ui/viewmodel/LoginViewModelTest.kt +++ b/login/src/commonTest/kotlin/org/dhis2/mobile/login/main/ui/viewmodel/LoginViewModelTest.kt @@ -16,12 +16,12 @@ import org.dhis2.mobile.login.main.domain.usecase.ValidateServer import org.dhis2.mobile.login.main.ui.navigation.Navigator import org.dhis2.mobile.login.main.ui.state.DatabaseImportState import org.dhis2.mobile.login.main.ui.state.ServerValidationUiState -import org.junit.Before import org.mockito.kotlin.any import org.mockito.kotlin.eq import org.mockito.kotlin.mock import org.mockito.kotlin.verify import org.mockito.kotlin.whenever +import kotlin.test.BeforeTest import kotlin.test.Test import kotlin.test.assertEquals import kotlin.test.assertNull @@ -38,7 +38,7 @@ class LoginViewModelTest { private val networkStatusProvider: NetworkStatusProvider = mock() private val mockNetworkStatusFlow = MutableStateFlow(true) - @Before + @BeforeTest fun setUp() { Dispatchers.setMain(testDispatcher) whenever(networkStatusProvider.connectionStatus).thenReturn(mockNetworkStatusFlow) diff --git a/login/src/commonTest/kotlin/org/dhis2/mobile/login/pin/domain/usecase/ForgotPinUseCaseTest.kt b/login/src/commonTest/kotlin/org/dhis2/mobile/login/pin/domain/usecase/ForgotPinUseCaseTest.kt index 27c27f93ed1..d631a0d9c0a 100644 --- a/login/src/commonTest/kotlin/org/dhis2/mobile/login/pin/domain/usecase/ForgotPinUseCaseTest.kt +++ b/login/src/commonTest/kotlin/org/dhis2/mobile/login/pin/domain/usecase/ForgotPinUseCaseTest.kt @@ -2,10 +2,10 @@ package org.dhis2.mobile.login.pin.domain.usecase import kotlinx.coroutines.test.runTest import org.dhis2.mobile.login.pin.data.SessionRepository -import org.junit.Before import org.mockito.kotlin.mock import org.mockito.kotlin.verify import org.mockito.kotlin.whenever +import kotlin.test.BeforeTest import kotlin.test.Test import kotlin.test.assertTrue @@ -13,7 +13,7 @@ class ForgotPinUseCaseTest { private lateinit var useCase: ForgotPinUseCase private val repository: SessionRepository = mock() - @Before + @BeforeTest fun setUp() { useCase = ForgotPinUseCase(repository) } diff --git a/login/src/commonTest/kotlin/org/dhis2/mobile/login/pin/domain/usecase/GetInitialScreenUseCaseTest.kt b/login/src/commonTest/kotlin/org/dhis2/mobile/login/pin/domain/usecase/GetInitialScreenUseCaseTest.kt index faf1072cd4c..9acf4a84562 100644 --- a/login/src/commonTest/kotlin/org/dhis2/mobile/login/pin/domain/usecase/GetInitialScreenUseCaseTest.kt +++ b/login/src/commonTest/kotlin/org/dhis2/mobile/login/pin/domain/usecase/GetInitialScreenUseCaseTest.kt @@ -6,12 +6,12 @@ import org.dhis2.mobile.login.accounts.domain.model.AccountModel import org.dhis2.mobile.login.main.domain.model.LoginScreenState import org.dhis2.mobile.login.main.domain.usecase.GetInitialScreen import org.dhis2.mobile.login.pin.data.SessionRepository -import org.junit.Assert.assertEquals -import org.junit.Before import org.mockito.kotlin.doReturn import org.mockito.kotlin.mock import org.mockito.kotlin.whenever +import kotlin.test.BeforeTest import kotlin.test.Test +import kotlin.test.assertEquals import kotlin.test.assertIs import kotlin.test.assertTrue @@ -20,7 +20,7 @@ class GetInitialScreenUseCaseTest { private val accountRepository: AccountRepository = mock() private val sessionRepository: SessionRepository = mock() - @Before + @BeforeTest fun setUp() { useCase = GetInitialScreen(accountRepository, sessionRepository) } diff --git a/login/src/commonTest/kotlin/org/dhis2/mobile/login/pin/domain/usecase/SavePinUseCaseTest.kt b/login/src/commonTest/kotlin/org/dhis2/mobile/login/pin/domain/usecase/SavePinUseCaseTest.kt index ac82cc1f900..4fff47af996 100644 --- a/login/src/commonTest/kotlin/org/dhis2/mobile/login/pin/domain/usecase/SavePinUseCaseTest.kt +++ b/login/src/commonTest/kotlin/org/dhis2/mobile/login/pin/domain/usecase/SavePinUseCaseTest.kt @@ -2,10 +2,10 @@ package org.dhis2.mobile.login.pin.domain.usecase import kotlinx.coroutines.test.runTest import org.dhis2.mobile.login.pin.data.SessionRepository -import org.junit.Before import org.mockito.kotlin.mock import org.mockito.kotlin.verify import org.mockito.kotlin.whenever +import kotlin.test.BeforeTest import kotlin.test.Test import kotlin.test.assertTrue @@ -13,7 +13,7 @@ class SavePinUseCaseTest { private lateinit var useCase: SavePinUseCase private val repository: SessionRepository = mock() - @Before + @BeforeTest fun setUp() { useCase = SavePinUseCase(repository) } diff --git a/login/src/commonTest/kotlin/org/dhis2/mobile/login/pin/domain/usecase/ValidatePinUseCaseTest.kt b/login/src/commonTest/kotlin/org/dhis2/mobile/login/pin/domain/usecase/ValidatePinUseCaseTest.kt index d2cdf525284..e140b293109 100644 --- a/login/src/commonTest/kotlin/org/dhis2/mobile/login/pin/domain/usecase/ValidatePinUseCaseTest.kt +++ b/login/src/commonTest/kotlin/org/dhis2/mobile/login/pin/domain/usecase/ValidatePinUseCaseTest.kt @@ -4,9 +4,9 @@ import kotlinx.coroutines.test.runTest import org.dhis2.mobile.login.pin.data.SessionRepository import org.dhis2.mobile.login.pin.domain.model.PinError import org.dhis2.mobile.login.pin.domain.model.ValidatePinInput -import org.junit.Before import org.mockito.kotlin.mock import org.mockito.kotlin.whenever +import kotlin.test.BeforeTest import kotlin.test.Test import kotlin.test.assertEquals import kotlin.test.assertTrue @@ -15,7 +15,7 @@ class ValidatePinUseCaseTest { private lateinit var useCase: ValidatePinUseCase private val repository: SessionRepository = mock() - @Before + @BeforeTest fun setUp() { useCase = ValidatePinUseCase(repository) } diff --git a/login/src/commonTest/kotlin/org/dhis2/mobile/login/pin/ui/viewmodel/PinViewModelTest.kt b/login/src/commonTest/kotlin/org/dhis2/mobile/login/pin/ui/viewmodel/PinViewModelTest.kt index ec708e71a05..bd68b60dfaa 100644 --- a/login/src/commonTest/kotlin/org/dhis2/mobile/login/pin/ui/viewmodel/PinViewModelTest.kt +++ b/login/src/commonTest/kotlin/org/dhis2/mobile/login/pin/ui/viewmodel/PinViewModelTest.kt @@ -5,6 +5,7 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.test.StandardTestDispatcher import kotlinx.coroutines.test.advanceUntilIdle +import kotlinx.coroutines.test.resetMain import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.setMain import org.dhis2.mobile.login.pin.domain.model.PinError @@ -15,9 +16,10 @@ import org.dhis2.mobile.login.pin.domain.usecase.SavePinUseCase import org.dhis2.mobile.login.pin.domain.usecase.ValidatePinUseCase import org.dhis2.mobile.login.pin.ui.components.PinMode import org.dhis2.mobile.login.pin.ui.provider.PinResourceProvider -import org.junit.Before import org.mockito.kotlin.mock import org.mockito.kotlin.whenever +import kotlin.test.AfterTest +import kotlin.test.BeforeTest import kotlin.test.Test import kotlin.test.assertEquals import kotlin.test.assertTrue @@ -31,11 +33,16 @@ class PinViewModelTest { private val resourceProvider: PinResourceProvider = mock() private val testDispatcher = StandardTestDispatcher() - @Before + @BeforeTest fun setUp() { Dispatchers.setMain(testDispatcher) } + @AfterTest + fun tearDown() { + Dispatchers.resetMain() + } + @Test fun `initial state is Idle`() = runTest { From 24b20d95c330787a3e3c56673ed022d51a269961 Mon Sep 17 00:00:00 2001 From: Pablo Date: Wed, 18 Feb 2026 09:22:50 +0100 Subject: [PATCH 054/114] feat: [ANDROAPP-7459][1/6] Added new worker to update sync settings [skip size] (#4638) --- commonskmm/build.gradle.kts | 1 + .../notifications/WorkerNotificationInfo.kt | 7 + .../notifications/NotificationManager.kt | 47 ++ .../notifications/NotificationModel.kt | 3 + .../commons/providers/PreferenceConstants.kt | 3 + .../commons/providers/PreferenceProvider.kt | 5 + gradle/libs.versions.toml | 2 + gradle/verification-metadata.xml | 796 +++++++++++++----- scripts/check_pr_size.sh | 11 +- sync/build.gradle.kts | 3 +- .../data/AndroidSyncBackgroundJobAction.kt | 65 ++ .../mobile/sync/data/AndroidSyncRepository.kt | 159 ++++ .../sync/data/SdkSyncPeriodToSyncPeriod.kt | 25 + .../mobile/sync/data/SyncSettingsWorker.kt | 56 ++ .../mobile/sync/di/SyncModule.android.kt | 28 + .../composeResources/values/strings.xml | 3 + .../sync/data/SyncBackgroundJobAction.kt | 20 + .../dhis2/mobile/sync/data/SyncRepository.kt | 23 + .../org/dhis2/mobile/sync/di/SyncModule.kt | 5 + .../dhis2/mobile/sync/domain/SyncSettings.kt | 34 + .../dhis2/mobile/sync/model/SyncJobStatus.kt | 21 + .../org/dhis2/mobile/sync/model/SyncPeriod.kt | 48 ++ .../mobile/sync/di/SyncModule.desktop.kt | 9 + sync/src/main/res/drawable/ic_sync.xml | 10 + 24 files changed, 1167 insertions(+), 217 deletions(-) create mode 100644 commonskmm/src/androidMain/kotlin/org/dhis2/mobile/commons/notifications/WorkerNotificationInfo.kt create mode 100644 commonskmm/src/commonMain/kotlin/org/dhis2/mobile/commons/notifications/NotificationManager.kt create mode 100644 commonskmm/src/commonMain/kotlin/org/dhis2/mobile/commons/notifications/NotificationModel.kt create mode 100644 sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/AndroidSyncBackgroundJobAction.kt create mode 100644 sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/AndroidSyncRepository.kt create mode 100644 sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/SdkSyncPeriodToSyncPeriod.kt create mode 100644 sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/SyncSettingsWorker.kt create mode 100644 sync/src/androidMain/kotlin/org/dhis2/mobile/sync/di/SyncModule.android.kt create mode 100644 sync/src/commonMain/kotlin/org/dhis2/mobile/sync/data/SyncBackgroundJobAction.kt create mode 100644 sync/src/commonMain/kotlin/org/dhis2/mobile/sync/data/SyncRepository.kt create mode 100644 sync/src/commonMain/kotlin/org/dhis2/mobile/sync/di/SyncModule.kt create mode 100644 sync/src/commonMain/kotlin/org/dhis2/mobile/sync/domain/SyncSettings.kt create mode 100644 sync/src/commonMain/kotlin/org/dhis2/mobile/sync/model/SyncJobStatus.kt create mode 100644 sync/src/commonMain/kotlin/org/dhis2/mobile/sync/model/SyncPeriod.kt create mode 100644 sync/src/desktopMain/kotlin/org/dhis2/mobile/sync/di/SyncModule.desktop.kt create mode 100644 sync/src/main/res/drawable/ic_sync.xml diff --git a/commonskmm/build.gradle.kts b/commonskmm/build.gradle.kts index 1d9c1cc2f75..909d0454f74 100644 --- a/commonskmm/build.gradle.kts +++ b/commonskmm/build.gradle.kts @@ -77,6 +77,7 @@ kotlin { implementation(libs.androidx.browser) // Sentry api(libs.analytics.sentry) + implementation(libs.androidx.work) } androidUnitTest.dependencies { diff --git a/commonskmm/src/androidMain/kotlin/org/dhis2/mobile/commons/notifications/WorkerNotificationInfo.kt b/commonskmm/src/androidMain/kotlin/org/dhis2/mobile/commons/notifications/WorkerNotificationInfo.kt new file mode 100644 index 00000000000..e3e00856e49 --- /dev/null +++ b/commonskmm/src/androidMain/kotlin/org/dhis2/mobile/commons/notifications/WorkerNotificationInfo.kt @@ -0,0 +1,7 @@ +package org.dhis2.mobile.commons.notifications + +import androidx.work.ForegroundInfo + +data class WorkerNotificationInfo( + val foregroundInfo: ForegroundInfo, +) : NotificationModel diff --git a/commonskmm/src/commonMain/kotlin/org/dhis2/mobile/commons/notifications/NotificationManager.kt b/commonskmm/src/commonMain/kotlin/org/dhis2/mobile/commons/notifications/NotificationManager.kt new file mode 100644 index 00000000000..178ecef144d --- /dev/null +++ b/commonskmm/src/commonMain/kotlin/org/dhis2/mobile/commons/notifications/NotificationManager.kt @@ -0,0 +1,47 @@ +package org.dhis2.mobile.commons.notifications + +interface NotificationManager { + fun getDataSyncNotification( + smallIcon: Int, + contentTitle: String, + contentText: String, + progress: Int, + ): NotificationModel + + fun displayDataSyncNotification( + smallIcon: Int, + contentTitle: String, + contentText: String, + progress: Int, + ) + + fun getMetadataSyncNotification( + smallIcon: Int, + contentTitle: String, + contentText: String, + progress: Int, + ): NotificationModel + + fun displayMetadataSyncNotification( + smallIcon: Int, + contentTitle: String, + contentText: String, + progress: Int, + ) + + fun getSyncSettingsNotificationModel( + smallIcon: Int, + contentTitle: String, + contentText: String, + ): NotificationModel + + fun displaySyncSettingsNotification( + smallIcon: Int, + contentTitle: String, + contentText: String, + ) + + fun cancelMetadataSyncNotification() + + fun cancelSyncSettingsNotification() +} diff --git a/commonskmm/src/commonMain/kotlin/org/dhis2/mobile/commons/notifications/NotificationModel.kt b/commonskmm/src/commonMain/kotlin/org/dhis2/mobile/commons/notifications/NotificationModel.kt new file mode 100644 index 00000000000..831c2446f68 --- /dev/null +++ b/commonskmm/src/commonMain/kotlin/org/dhis2/mobile/commons/notifications/NotificationModel.kt @@ -0,0 +1,3 @@ +package org.dhis2.mobile.commons.notifications + +interface NotificationModel diff --git a/commonskmm/src/commonMain/kotlin/org/dhis2/mobile/commons/providers/PreferenceConstants.kt b/commonskmm/src/commonMain/kotlin/org/dhis2/mobile/commons/providers/PreferenceConstants.kt index 03a9fd3f090..297a5a768c9 100644 --- a/commonskmm/src/commonMain/kotlin/org/dhis2/mobile/commons/providers/PreferenceConstants.kt +++ b/commonskmm/src/commonMain/kotlin/org/dhis2/mobile/commons/providers/PreferenceConstants.kt @@ -6,5 +6,8 @@ const val SECURE_USER_NAME = "SECURE_USER_NAME" const val SECURE_PASS = "SECURE_PASS" const val SHARE_PREFS = "org.dhis2" const val LAST_META_SYNC = "last_meta_sync" +const val TIME_META = "timeMeta" +const val LAST_META_SYNC_STATUS = "last_meta_sync_status" const val LAST_DATA_SYNC = "last_data_sync" +const val TIME_DATA = "timeData" const val BIOMETRIC_CREDENTIALS = "biometric_credentials" diff --git a/commonskmm/src/commonMain/kotlin/org/dhis2/mobile/commons/providers/PreferenceProvider.kt b/commonskmm/src/commonMain/kotlin/org/dhis2/mobile/commons/providers/PreferenceProvider.kt index 3c5d1d07892..5fb3b0eebb9 100644 --- a/commonskmm/src/commonMain/kotlin/org/dhis2/mobile/commons/providers/PreferenceProvider.kt +++ b/commonskmm/src/commonMain/kotlin/org/dhis2/mobile/commons/providers/PreferenceProvider.kt @@ -1,6 +1,7 @@ package org.dhis2.mobile.commons.providers import org.dhis2.mobile.commons.biometrics.CiphertextWrapper +import kotlin.time.Duration.Companion.days interface PreferenceProvider { fun saveUserCredentials( @@ -91,4 +92,8 @@ interface PreferenceProvider { ): List fun updateLoginServers(serverUrl: String) + + fun getMetadataSyncPeriod(): Int = getInt(TIME_META, 7.days.inWholeSeconds.toInt()) + + fun getDataSyncPeriod(): Int = getInt(TIME_DATA, 1.days.inWholeSeconds.toInt()) } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 10c1780dfe7..371c9294cbd 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -97,6 +97,7 @@ browser = "1.9.0" biometric = "1.1.0" coil = "3.3.0" cyclonedx = "2.1.0" +workRuntimeKtx = "2.11.1" [libraries] gradlePlugin = { group = "com.android.tools.build", name = "gradle", version.ref = "gradle" } @@ -220,6 +221,7 @@ ktxml = { module = "org.kobjects.ktxml:core", version.ref = "ktxml" } commons-text = { module = "org.apache.commons:commons-text", version.ref = "commonsText" } coil = { module = "io.coil-kt.coil3:coil-compose", version.ref = "coil"} coil-network = { module = "io.coil-kt.coil3:coil-network-okhttp", version.ref = "coil"} +androidx-work-runtime-ktx = { group = "androidx.work", name = "work-runtime-ktx", version.ref = "workRuntimeKtx" } [plugins] kotlin-compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index ffb15d35b03..039ec11a49a 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -2591,6 +2591,10 @@ + + + @@ -2662,6 +2666,12 @@ + + + + + @@ -3183,6 +3193,12 @@ + + + + + @@ -3391,6 +3407,12 @@ + + + + + @@ -3857,6 +3879,12 @@ + + + + + @@ -4704,14 +4732,16 @@ - - - - - - - - + + + + + + + + @@ -7668,6 +7698,26 @@ + + + + + + + + + + + + + + + + @@ -7676,22 +7726,26 @@ - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + @@ -7715,6 +7769,16 @@ + + + + + + + + @@ -7745,14 +7809,16 @@ - - - - - - - - + + + + + + + + @@ -8475,14 +8541,16 @@ - - - - - - - - + + + + + + + + @@ -8498,6 +8566,16 @@ + + + + + + + + @@ -8522,6 +8600,16 @@ + + + + + + + + @@ -8555,6 +8643,16 @@ + + + + + + + + @@ -8578,6 +8676,16 @@ + + + + + + + + @@ -8595,12 +8703,14 @@ - - - - - - + + + + + + @@ -8619,12 +8729,14 @@ - - - - - - + + + + + + @@ -8650,6 +8762,16 @@ + + + + + + + + @@ -8667,14 +8789,16 @@ - - - - - - - - + + + + + + + + @@ -8690,6 +8814,16 @@ + + + + + + + + @@ -8715,30 +8849,36 @@ - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + @@ -8762,6 +8902,16 @@ + + + + + + + + @@ -8787,6 +8937,16 @@ + + + + + + + + @@ -8802,6 +8962,32 @@ + + + + + + + + + + + + + + + + + + + + + @@ -8840,14 +9026,16 @@ - - - - - - - - + + + + + + + + @@ -8864,14 +9052,16 @@ - - - - - - - - + + + + + + + + @@ -8896,6 +9086,16 @@ + + + + + + + + @@ -8912,12 +9112,14 @@ - - - - - - + + + + + + @@ -8935,6 +9137,16 @@ + + + + + + + + @@ -8960,30 +9172,36 @@ - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + @@ -9008,6 +9226,16 @@ + + + + + + + + @@ -9024,14 +9252,16 @@ - - - - - - - - + + + + + + + + @@ -9047,6 +9277,16 @@ + + + + + + + + @@ -9072,14 +9312,16 @@ - - - - - - - - + + + + + + + + @@ -9096,14 +9338,16 @@ - - - - - - - - + + + + + + + + @@ -9127,6 +9371,16 @@ + + + + + + + + @@ -12518,6 +12772,20 @@ + + + + + + + + + + + @@ -12606,6 +12874,12 @@ + + + + + @@ -13363,53 +13637,64 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -13443,6 +13728,16 @@ + + + + + + + + @@ -13482,14 +13777,17 @@ - - - - - - - - + + + + + + + + @@ -13529,6 +13827,16 @@ + + + + + + + + @@ -13571,6 +13879,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -14278,6 +14633,16 @@ + + + + + + + + @@ -14301,6 +14666,12 @@ + + + + + @@ -14326,9 +14697,10 @@ - - - + + + diff --git a/scripts/check_pr_size.sh b/scripts/check_pr_size.sh index d5a9f161367..f0b15e54fee 100644 --- a/scripts/check_pr_size.sh +++ b/scripts/check_pr_size.sh @@ -40,12 +40,15 @@ fi echo "Merge base: $MERGE_BASE" +# Define the files to exclude +EXCLUDE_PATTERN="**/verification-metadata.xml" + # Print the diff statistics from merge base to HEAD (only your changes) -echo "Diff statistics from merge base to HEAD (PR changes only):" -git diff --stat "$MERGE_BASE"..HEAD +echo "Diff statistics from merge base to HEAD (PR changes only), excluding $EXCLUDE_PATTERN:" +git diff --stat "$MERGE_BASE"..HEAD -- . ":(exclude)$EXCLUDE_PATTERN" # Get the total number of lines changed in the PR from the merge base -CHANGED_LINES=$(git diff --stat "$MERGE_BASE"..HEAD | tail -n1 | awk '{print $4 + $6}') +CHANGED_LINES=$(git diff --numstat "$MERGE_BASE"..HEAD -- . ":(exclude)$EXCLUDE_PATTERN" | awk '{s+=$1; s+=$2} END {print s}') # Handle cases where no changes are detected if [[ -z "$CHANGED_LINES" ]]; then @@ -59,4 +62,4 @@ if [[ "$CHANGED_LINES" -gt "$MAX_LINES" ]]; then fi echo "PR size is acceptable: $CHANGED_LINES lines changed." -exit 0 \ No newline at end of file +exit 0 diff --git a/sync/build.gradle.kts b/sync/build.gradle.kts index e5b4a06bdd8..d8f6f2db064 100644 --- a/sync/build.gradle.kts +++ b/sync/build.gradle.kts @@ -36,6 +36,7 @@ kotlin { resources.srcDirs("src/commonMain/composeResources") dependencies { + implementation(project(":commonskmm")) implementation(compose.runtime) implementation(compose.foundation) @@ -62,7 +63,7 @@ kotlin { androidMain.dependencies { implementation(libs.dhis2.android.sdk) api(libs.analytics.timber) - + implementation(libs.androidx.work) } androidUnitTest.dependencies { diff --git a/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/AndroidSyncBackgroundJobAction.kt b/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/AndroidSyncBackgroundJobAction.kt new file mode 100644 index 00000000000..159461d8dbf --- /dev/null +++ b/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/AndroidSyncBackgroundJobAction.kt @@ -0,0 +1,65 @@ +package org.dhis2.mobile.sync.data + +import androidx.work.ExistingPeriodicWorkPolicy +import androidx.work.PeriodicWorkRequest +import androidx.work.WorkManager +import androidx.work.await +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.emptyFlow +import org.dhis2.mobile.sync.model.SyncJobStatus +import java.util.concurrent.TimeUnit +import kotlin.time.Duration.Companion.days + +private const val METADATA_SYNC = "METADATA_SYNC" +private const val METADATA_SYNC_NOW = "METADATA_SYNC_NOW" +private const val DATA_SYNC = "DATA_SYNC" +private const val DATA_SYNC_NOW = "DATA_SYNC_NOW" +private const val SYNC_SETTINGS = "SYNC_SETTINGS" + +internal class AndroidSyncBackgroundJobAction( + private val workManager: WorkManager, +) : SyncBackgroundJobAction { + override fun launchMetadataSync(syncingPeriod: Long) { + // implement later + } + + override fun launchDataSync(syncingPeriod: Long) { + // implement later + } + + override fun launchSyncSettings() { + val request = + PeriodicWorkRequest + .Builder( + workerClass = SyncSettingsWorker::class.java, + repeatInterval = 1.days.inWholeSeconds, + repeatIntervalTimeUnit = TimeUnit.SECONDS, + ).setInitialDelay(1, TimeUnit.MINUTES) + .addTag( + SYNC_SETTINGS, + ).build() + + workManager.enqueueUniquePeriodicWork( + SYNC_SETTINGS, + ExistingPeriodicWorkPolicy.CANCEL_AND_REENQUEUE, + request, + ) + } + + override fun observeMetadataJob(): Flow> { + // implement later + return emptyFlow() + } + + override suspend fun cancelSyncSettings() { + workManager.cancelUniqueWork(SYNC_SETTINGS).await() + } + + override suspend fun cancelMetadataSync() { + workManager.cancelUniqueWork(METADATA_SYNC).await() + } + + override suspend fun cancelDataSync() { + workManager.cancelUniqueWork(DATA_SYNC).await() + } +} diff --git a/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/AndroidSyncRepository.kt b/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/AndroidSyncRepository.kt new file mode 100644 index 00000000000..eafab16e4e6 --- /dev/null +++ b/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/AndroidSyncRepository.kt @@ -0,0 +1,159 @@ +package org.dhis2.mobile.sync.data + +import kotlinx.coroutines.withContext +import kotlinx.datetime.TimeZone +import kotlinx.datetime.format +import kotlinx.datetime.toLocalDateTime +import org.dhis2.mobile.commons.coroutine.Dispatcher +import org.dhis2.mobile.commons.dates.dateTimeFormat +import org.dhis2.mobile.commons.error.DomainErrorMapper +import org.dhis2.mobile.commons.providers.LAST_META_SYNC +import org.dhis2.mobile.commons.providers.LAST_META_SYNC_STATUS +import org.dhis2.mobile.commons.providers.PreferenceProvider +import org.dhis2.mobile.commons.reporting.AnalyticActions +import org.dhis2.mobile.sync.model.toSyncPeriod +import org.hisp.dhis.android.core.D2 +import org.hisp.dhis.android.core.fileresource.FileResourceDomainType +import org.hisp.dhis.android.core.maintenance.D2Error +import kotlin.math.ceil +import kotlin.time.Clock +import kotlin.time.ExperimentalTime + +class AndroidSyncRepository( + private val d2: D2, + private val preferences: PreferenceProvider, + private val analyticsHelper: AnalyticActions, + private val domainErrorMapper: DomainErrorMapper, + private val dispatcher: Dispatcher, +) : SyncRepository { + private suspend fun execute(block: suspend () -> Result): Result = + withContext(dispatcher.io) { + try { + block() + } catch (d2Error: D2Error) { + Result.failure(domainErrorMapper.mapToDomainError(d2Error)) + } + } + + override suspend fun currentMetadataSyncPeriod() = + withContext(dispatcher.io) { + d2 + .settingModule() + .synchronizationSettings() + .blockingGet() + ?.metadataSync() + ?.toSyncPeriod() + ?: preferences + .getMetadataSyncPeriod() + .toLong() + .toSyncPeriod() + } + + override suspend fun currentDataSyncPeriod() = + withContext(dispatcher.io) { + d2 + .settingModule() + .synchronizationSettings() + .blockingGet() + ?.dataSync() + ?.toSyncPeriod() + ?: preferences + .getDataSyncPeriod() + .toLong() + .toSyncPeriod() + } + + override suspend fun downloadFileResources(): Result = + execute { + d2 + .fileResourceModule() + .fileResourceDownloader() + .byDomainType() + .eq(FileResourceDomainType.ICON) + .blockingDownload() + Result.success(Unit) + } + + @OptIn(ExperimentalTime::class) + override suspend fun saveMetadataSyncState(isSuccess: Boolean) { + preferences.setValue( + LAST_META_SYNC, + Clock.System + .now() + .toLocalDateTime(TimeZone.currentSystemDefault()) + .format(dateTimeFormat), + ) + preferences.setValue(LAST_META_SYNC_STATUS, isSuccess) + } + + override suspend fun downloadMapMetadata(): Result = + execute { + d2 + .mapsModule() + .mapLayersDownloader() + .downloadMetadata() + .blockingAwait() + Result.success(Unit) + } + + override suspend fun refreshSyncSettings() = + execute { + d2.settingModule().synchronizationSettings().blockingDownload() + Result.success(Unit) + } + + override suspend fun syncMetadata(onProgressUpdate: (Int) -> Unit) = + execute { + d2.metadataModule().download().blockingForEach { progress -> + onProgressUpdate(ceil(progress.percentage() ?: 0.0).toInt()) + } + Result.success(Unit) + } + + override suspend fun updateProjectAnalytics(): Result = + execute { + d2.settingModule().generalSetting().blockingGet()?.let { globalSettings -> + if (globalSettings.matomoID() != null && globalSettings.matomoURL() != null) { + analyticsHelper.updateMatomoSecondaryTracker( + globalSettings.matomoURL()!!, + globalSettings.matomoID()!!, + "secondaryTracker", + ) + } + } ?: analyticsHelper.clearMatomoSecondaryTracker() + Result.success(Unit) + } + + override suspend fun setUpSMS(): Result = + execute { + d2.settingModule().generalSetting().blockingGet()?.let { globalSettings -> + globalSettings + .smsGateway() + ?.let { + d2 + .smsModule() + .configCase() + .setGatewayNumber(it) + .blockingAwait() + } + globalSettings.smsResultSender()?.let { + d2 + .smsModule() + .configCase() + .setConfirmationSenderNumber(it) + .blockingAwait() + } + d2 + .smsModule() + .configCase() + .setModuleEnabled(true) + .blockingAwait() + d2 + .smsModule() + .configCase() + .refreshMetadataIds() + .blockingAwait() + } + Result.success(Unit) + } +} diff --git a/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/SdkSyncPeriodToSyncPeriod.kt b/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/SdkSyncPeriodToSyncPeriod.kt new file mode 100644 index 00000000000..318b956f0c9 --- /dev/null +++ b/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/SdkSyncPeriodToSyncPeriod.kt @@ -0,0 +1,25 @@ +package org.dhis2.mobile.sync.data + +import org.dhis2.mobile.sync.model.SyncPeriod +import org.hisp.dhis.android.core.settings.DataSyncPeriod +import org.hisp.dhis.android.core.settings.MetadataSyncPeriod + +internal fun MetadataSyncPeriod.toSyncPeriod() = + when (this) { + MetadataSyncPeriod.EVERY_HOUR -> SyncPeriod.EveryHour + MetadataSyncPeriod.EVERY_6_HOURS -> SyncPeriod.Every6Hour + MetadataSyncPeriod.EVERY_12_HOURS -> SyncPeriod.Every12Hour + MetadataSyncPeriod.EVERY_24_HOURS -> SyncPeriod.Every24Hour + MetadataSyncPeriod.EVERY_7_DAYS -> SyncPeriod.Every7Days + MetadataSyncPeriod.MANUAL -> SyncPeriod.Manual + } + +internal fun DataSyncPeriod.toSyncPeriod() = + when (this) { + DataSyncPeriod.EVERY_30_MIN -> SyncPeriod.Every30Min + DataSyncPeriod.EVERY_HOUR -> SyncPeriod.EveryHour + DataSyncPeriod.EVERY_6_HOURS -> SyncPeriod.Every6Hour + DataSyncPeriod.EVERY_12_HOURS -> SyncPeriod.Every12Hour + DataSyncPeriod.EVERY_24_HOURS -> SyncPeriod.Every24Hour + DataSyncPeriod.MANUAL -> SyncPeriod.Manual + } diff --git a/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/SyncSettingsWorker.kt b/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/SyncSettingsWorker.kt new file mode 100644 index 00000000000..bb0b9c33c93 --- /dev/null +++ b/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/SyncSettingsWorker.kt @@ -0,0 +1,56 @@ +package org.dhis2.mobile.sync.data + +import android.content.Context +import androidx.work.CoroutineWorker +import androidx.work.ForegroundInfo +import androidx.work.WorkerParameters +import org.dhis2.mobile.commons.domain.invoke +import org.dhis2.mobile.commons.notifications.NotificationManager +import org.dhis2.mobile.commons.notifications.WorkerNotificationInfo +import org.dhis2.mobile.sync.R +import org.dhis2.mobile.sync.domain.SyncSettings +import org.dhis2.mobile.sync.resources.Res +import org.dhis2.mobile.sync.resources.app_name +import org.dhis2.mobile.sync.resources.syncing_settings +import org.jetbrains.compose.resources.getString +import org.koin.core.component.KoinComponent +import org.koin.core.component.inject + +class SyncSettingsWorker( + private val context: Context, + workerParams: WorkerParameters, +) : CoroutineWorker(context, workerParams), + KoinComponent { + private val syncSettings: SyncSettings by inject() + private val notificationManager: NotificationManager by inject() + + override suspend fun doWork(): Result { + setForegroundAsync(getForegroundInfo()) + notificationManager.displaySyncSettingsNotification( + smallIcon = R.drawable.ic_sync, + contentTitle = getString(Res.string.app_name), + contentText = getString(Res.string.syncing_settings), + ) + val result = syncSettings() + notificationManager.cancelSyncSettingsNotification() + return when { + result.isSuccess -> Result.success() + else -> Result.failure() + } + } + + override suspend fun getForegroundInfo(): ForegroundInfo { + val notificationModel = + notificationManager.getSyncSettingsNotificationModel( + smallIcon = R.drawable.ic_sync, + contentTitle = getString(Res.string.app_name), + contentText = getString(Res.string.syncing_settings), + ) + val notificationInfo = + notificationModel as? WorkerNotificationInfo + ?: throw IllegalStateException( + "Expected WorkerNotificationInfo but got ${notificationModel::class.qualifiedName}", + ) + return notificationInfo.foregroundInfo + } +} diff --git a/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/di/SyncModule.android.kt b/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/di/SyncModule.android.kt new file mode 100644 index 00000000000..17b950dbad1 --- /dev/null +++ b/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/di/SyncModule.android.kt @@ -0,0 +1,28 @@ +package org.dhis2.mobile.sync.di + +import androidx.work.WorkManager +import org.dhis2.mobile.sync.data.AndroidSyncBackgroundJobAction +import org.dhis2.mobile.sync.data.AndroidSyncRepository +import org.dhis2.mobile.sync.data.SyncBackgroundJobAction +import org.dhis2.mobile.sync.data.SyncRepository +import org.dhis2.mobile.sync.domain.SyncSettings +import org.koin.core.module.dsl.factoryOf +import org.koin.dsl.module + +actual val syncModule = + module { + factory { + WorkManager.getInstance(get()) + } + factory { + AndroidSyncBackgroundJobAction( + workManager = get(), + ) + } + + factory { + AndroidSyncRepository(get(), get(), get(), get(), get()) + } + + factoryOf(::SyncSettings) + } diff --git a/sync/src/commonMain/composeResources/values/strings.xml b/sync/src/commonMain/composeResources/values/strings.xml index 4c1c46011bd..7fee4c96904 100644 --- a/sync/src/commonMain/composeResources/values/strings.xml +++ b/sync/src/commonMain/composeResources/values/strings.xml @@ -1,5 +1,8 @@ + Dhis2 + Checking web settings + Syncing your configuration diff --git a/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/data/SyncBackgroundJobAction.kt b/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/data/SyncBackgroundJobAction.kt new file mode 100644 index 00000000000..a429afecf1e --- /dev/null +++ b/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/data/SyncBackgroundJobAction.kt @@ -0,0 +1,20 @@ +package org.dhis2.mobile.sync.data + +import kotlinx.coroutines.flow.Flow +import org.dhis2.mobile.sync.model.SyncJobStatus + +interface SyncBackgroundJobAction { + fun launchMetadataSync(syncingPeriod: Long) + + fun launchDataSync(syncingPeriod: Long) + + fun launchSyncSettings() + + fun observeMetadataJob(): Flow> + + suspend fun cancelSyncSettings() + + suspend fun cancelMetadataSync() + + suspend fun cancelDataSync() +} diff --git a/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/data/SyncRepository.kt b/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/data/SyncRepository.kt new file mode 100644 index 00000000000..1f8f7db3bc9 --- /dev/null +++ b/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/data/SyncRepository.kt @@ -0,0 +1,23 @@ +package org.dhis2.mobile.sync.data + +import org.dhis2.mobile.sync.model.SyncPeriod + +interface SyncRepository { + suspend fun refreshSyncSettings(): Result + + suspend fun currentMetadataSyncPeriod(): SyncPeriod + + suspend fun currentDataSyncPeriod(): SyncPeriod + + suspend fun syncMetadata(onProgressUpdate: (Int) -> Unit): Result + + suspend fun updateProjectAnalytics(): Result + + suspend fun setUpSMS(): Result + + suspend fun downloadMapMetadata(): Result + + suspend fun downloadFileResources(): Result + + suspend fun saveMetadataSyncState(isSuccess: Boolean) +} diff --git a/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/di/SyncModule.kt b/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/di/SyncModule.kt new file mode 100644 index 00000000000..9beaff8c03b --- /dev/null +++ b/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/di/SyncModule.kt @@ -0,0 +1,5 @@ +package org.dhis2.mobile.sync.di + +import org.koin.core.module.Module + +expect val syncModule: Module diff --git a/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/domain/SyncSettings.kt b/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/domain/SyncSettings.kt new file mode 100644 index 00000000000..dd97e76bb4d --- /dev/null +++ b/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/domain/SyncSettings.kt @@ -0,0 +1,34 @@ +package org.dhis2.mobile.sync.domain + +import org.dhis2.mobile.commons.domain.UseCase +import org.dhis2.mobile.commons.error.DomainError +import org.dhis2.mobile.sync.data.SyncBackgroundJobAction +import org.dhis2.mobile.sync.data.SyncRepository +import org.dhis2.mobile.sync.model.SyncPeriod + +class SyncSettings( + private val repository: SyncRepository, + private val syncBackgroundJobAction: SyncBackgroundJobAction, +) : UseCase { + override suspend fun invoke(input: Unit): Result = + try { + val previousMetadataSyncPeriod = repository.currentMetadataSyncPeriod() + val result = repository.refreshSyncSettings() + if (result.isSuccess) { + val currentMetadataSyncPeriod = repository.currentMetadataSyncPeriod() + + val metadataPeriodChangedFromManual = + previousMetadataSyncPeriod is SyncPeriod.Manual && + currentMetadataSyncPeriod !is SyncPeriod.Manual + + if (metadataPeriodChangedFromManual) { + syncBackgroundJobAction.launchMetadataSync(currentMetadataSyncPeriod.toSeconds()) + syncBackgroundJobAction.cancelSyncSettings() + } + } + + result + } catch (e: DomainError) { + Result.failure(e) + } +} diff --git a/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/model/SyncJobStatus.kt b/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/model/SyncJobStatus.kt new file mode 100644 index 00000000000..71f6f4dea61 --- /dev/null +++ b/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/model/SyncJobStatus.kt @@ -0,0 +1,21 @@ +package org.dhis2.mobile.sync.model + +data class SyncJobStatus( + val tags: List, + val status: SyncStatus, + val message: String?, +) + +sealed interface SyncStatus { + data object Enqueue : SyncStatus + + data object Running : SyncStatus + + data object Succeed : SyncStatus + + data object Failed : SyncStatus + + data object Blocked : SyncStatus + + data object Cancelled : SyncStatus +} diff --git a/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/model/SyncPeriod.kt b/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/model/SyncPeriod.kt new file mode 100644 index 00000000000..437fe882394 --- /dev/null +++ b/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/model/SyncPeriod.kt @@ -0,0 +1,48 @@ +package org.dhis2.mobile.sync.model + +import kotlin.time.Duration.Companion.days +import kotlin.time.Duration.Companion.hours +import kotlin.time.Duration.Companion.minutes + +sealed interface SyncPeriod { + object Every15Min : SyncPeriod + + object Every30Min : SyncPeriod + + object EveryHour : SyncPeriod + + object Every6Hour : SyncPeriod + + object Every12Hour : SyncPeriod + + object Every24Hour : SyncPeriod + + object Every7Days : SyncPeriod + + object Manual : SyncPeriod + + fun toSeconds() = + when (this) { + Every12Hour -> 12.hours.inWholeSeconds + Every15Min -> 15.minutes.inWholeSeconds + Every24Hour -> 1.days.inWholeSeconds + Every30Min -> 30.minutes.inWholeSeconds + Every6Hour -> 6.hours.inWholeSeconds + Every7Days -> 7.days.inWholeSeconds + EveryHour -> 1.hours.inWholeSeconds + Manual -> 0 + } +} + +fun Long.toSyncPeriod() = + when { + this == 0.toLong() -> SyncPeriod.Manual + this == 15.minutes.inWholeSeconds -> SyncPeriod.Every15Min + this == 30.minutes.inWholeSeconds -> SyncPeriod.Every30Min + this == 1.hours.inWholeSeconds -> SyncPeriod.EveryHour + this == 6.hours.inWholeSeconds -> SyncPeriod.Every6Hour + this == 12.hours.inWholeSeconds -> SyncPeriod.Every12Hour + this == 1.days.inWholeSeconds -> SyncPeriod.Every24Hour + this == 7.days.inWholeSeconds -> SyncPeriod.Every7Days + else -> throw IllegalArgumentException("Invalid sync period") + } diff --git a/sync/src/desktopMain/kotlin/org/dhis2/mobile/sync/di/SyncModule.desktop.kt b/sync/src/desktopMain/kotlin/org/dhis2/mobile/sync/di/SyncModule.desktop.kt new file mode 100644 index 00000000000..a4d7b8e2cb7 --- /dev/null +++ b/sync/src/desktopMain/kotlin/org/dhis2/mobile/sync/di/SyncModule.desktop.kt @@ -0,0 +1,9 @@ +package org.dhis2.mobile.sync.di + +import org.koin.core.module.Module +import org.koin.dsl.module + +actual val syncModule: Module + get() = + module { + } diff --git a/sync/src/main/res/drawable/ic_sync.xml b/sync/src/main/res/drawable/ic_sync.xml new file mode 100644 index 00000000000..26c0b192b0f --- /dev/null +++ b/sync/src/main/res/drawable/ic_sync.xml @@ -0,0 +1,10 @@ + + + From ff251692baf7c0edfbeea177501ca25cd647c0a3 Mon Sep 17 00:00:00 2001 From: Pablo Date: Thu, 19 Feb 2026 14:45:11 +0100 Subject: [PATCH 055/114] test: refactor how dataset waits to table (#4655) * refactor how dataset waits to table * refactor create note robot --- Jenkinsfile | 11 +++++++ .../usescases/datasets/DataSetInitialRobot.kt | 12 ++++---- .../usescases/datasets/DataSetTableRobot.kt | 6 ++-- .../dhis2/usescases/datasets/DataSetTest.kt | 15 ---------- .../usescases/teidashboard/robot/NoteRobot.kt | 29 +++++++++++++------ 5 files changed, 39 insertions(+), 34 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index c32f74a3656..ca2ad64efda 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -66,6 +66,11 @@ pipeline { } } stage('Unit tests') { + when { + expression { + return !isSkipUnitTest() + } + } environment { ANDROID_HOME = '/opt/android-sdk' } @@ -202,3 +207,9 @@ def isSkipSizeCheck() { def prDescription = env.CHANGE_DESCRIPTION ?: "" return (prTitle.contains("[skip size]") || prDescription.contains("[skip size]")) } + +def isSkipUnitTest() { + def prTitle = env.CHANGE_TITLE ?: "" + def prDescription = env.CHANGE_DESCRIPTION ?: "" + return (prTitle.contains("[skip unitTest]") || prDescription.contains("[skip unitTest]")) +} diff --git a/app/src/androidTest/java/org/dhis2/usescases/datasets/DataSetInitialRobot.kt b/app/src/androidTest/java/org/dhis2/usescases/datasets/DataSetInitialRobot.kt index 6f8df0645b7..85a98e6a34b 100644 --- a/app/src/androidTest/java/org/dhis2/usescases/datasets/DataSetInitialRobot.kt +++ b/app/src/androidTest/java/org/dhis2/usescases/datasets/DataSetInitialRobot.kt @@ -7,7 +7,6 @@ import androidx.compose.ui.test.onNodeWithTag import androidx.compose.ui.test.onNodeWithText import androidx.compose.ui.test.performClick import androidx.compose.ui.test.performTextReplacement -import androidx.test.espresso.Espresso.onView import androidx.test.espresso.action.ViewActions.click import androidx.test.espresso.assertion.ViewAssertions.matches import androidx.test.espresso.matcher.ViewMatchers.isDisplayed @@ -30,23 +29,23 @@ internal class DataSetInitialRobot( ) : BaseRobot() { fun clickOnInputOrgUnit() { - onView(withId(R.id.dataSetOrgUnitInputLayout)).perform(click()) + waitForView(withId(R.id.dataSetOrgUnitInputLayout)).perform(click()) } fun clickOnInputPeriod() { - onView(withId(R.id.dataSetPeriodInputLayout)).perform(click()) + waitForView(withId(R.id.dataSetPeriodInputLayout)).perform(click()) } fun clickOnActionButton() { - onView(withId(R.id.actionButton)).perform(click()) + waitForView(withId(R.id.actionButton)).perform(click()) } fun clickOnInputCatCombo() { - onView(withId(R.id.input_layout)).perform(click()) + waitForView(withId(R.id.input_layout)).perform(click()) } fun selectCatCombo(catCombo: String) { - onView(withText(catCombo)).perform(click()) + waitForView(withText(catCombo)).perform(click()) } fun chooseDate(date: String) { @@ -59,6 +58,7 @@ internal class DataSetInitialRobot( ).performClick() composeTestRule.onNodeWithContentDescription("Date", substring = true).performTextReplacement(date) composeTestRule.onNodeWithText("Accept", true).performClick() + composeTestRule.waitForIdle() } fun checkActionInputIsNotDisplayed() { diff --git a/app/src/androidTest/java/org/dhis2/usescases/datasets/DataSetTableRobot.kt b/app/src/androidTest/java/org/dhis2/usescases/datasets/DataSetTableRobot.kt index 45df85f6752..dac099e47cc 100644 --- a/app/src/androidTest/java/org/dhis2/usescases/datasets/DataSetTableRobot.kt +++ b/app/src/androidTest/java/org/dhis2/usescases/datasets/DataSetTableRobot.kt @@ -2,7 +2,6 @@ package org.dhis2.usescases.datasets -import androidx.compose.ui.graphics.Color import androidx.compose.ui.semantics.SemanticsProperties.TestTag import androidx.compose.ui.test.ExperimentalTestApi import androidx.compose.ui.test.SemanticsMatcher @@ -31,7 +30,6 @@ import androidx.compose.ui.test.performTextReplacement import androidx.compose.ui.test.performTouchInput import androidx.compose.ui.test.printToLog import androidx.compose.ui.test.swipeRight -import androidx.core.graphics.toColorInt import org.dhis2.common.BaseRobot import org.dhis2.composetable.ui.semantics.CELL_TEST_TAG import org.dhis2.composetable.ui.semantics.MANDATORY_ICON_TEST_TAG @@ -255,7 +253,7 @@ internal class DataSetTableRobot( fun assertTableIsDisplayed() { composeTestRule.waitUntilExactlyOneExists( hasTestTag("TABLE_SCROLLABLE_COLUMN"), - timeoutMillis = 3000 + timeoutMillis = 10000 ) } @@ -413,7 +411,7 @@ internal class DataSetTableRobot( assertTableIsDisplayed() composeTestRule.waitUntilAtLeastOneExists( hasText(text, substring = true), - timeoutMillis = 5000 + timeoutMillis = 10000 ) composeTestRule.onNodeWithText(text, substring = true, useUnmergedTree = true) .assertIsDisplayed() diff --git a/app/src/androidTest/java/org/dhis2/usescases/datasets/DataSetTest.kt b/app/src/androidTest/java/org/dhis2/usescases/datasets/DataSetTest.kt index 5d1e1025397..893f582a233 100644 --- a/app/src/androidTest/java/org/dhis2/usescases/datasets/DataSetTest.kt +++ b/app/src/androidTest/java/org/dhis2/usescases/datasets/DataSetTest.kt @@ -5,7 +5,6 @@ import androidx.compose.ui.test.assertIsDisplayed import androidx.compose.ui.test.assertIsNotDisplayed import androidx.compose.ui.test.assertTextEquals import androidx.compose.ui.test.hasTestTag -import androidx.compose.ui.test.hasText import androidx.compose.ui.test.isDisplayed import androidx.compose.ui.test.junit4.createComposeRule import androidx.compose.ui.test.onNodeWithTag @@ -326,11 +325,6 @@ class DataSetTest : BaseTest() { orgUnit = orgUnit, catCombo = catCombo ) - // Wait for table to be ready after creating the second dataset instance - composeTestRule.waitUntilExactlyOneExists( - hasTestTag("TABLE_SCROLLABLE_COLUMN"), - timeoutMillis = 10000 - ) tableIsVisible() enterDataStep( tableId = tableId, @@ -347,15 +341,6 @@ class DataSetTest : BaseTest() { dataSetDetailRobot(composeTestRule){ clickOnDataSetAtPosition(0) } - composeTestRule.waitUntilExactlyOneExists( - hasTestTag("TABLE_SCROLLABLE_COLUMN"), - timeoutMillis = 15000 - ) - // Wait for completion state to be reflected in the UI - composeTestRule.waitUntilAtLeastOneExists( - hasText("Re-open form to edit"), - timeoutMillis = 10000 - ) tableIsVisible() dataSetTableRobot(composeTestRule) { checkItemWithTextIsDisplayed("Re-open form to edit") diff --git a/app/src/androidTest/java/org/dhis2/usescases/teidashboard/robot/NoteRobot.kt b/app/src/androidTest/java/org/dhis2/usescases/teidashboard/robot/NoteRobot.kt index 97cf54d2117..d77699f8755 100644 --- a/app/src/androidTest/java/org/dhis2/usescases/teidashboard/robot/NoteRobot.kt +++ b/app/src/androidTest/java/org/dhis2/usescases/teidashboard/robot/NoteRobot.kt @@ -1,12 +1,11 @@ package org.dhis2.usescases.teidashboard.robot -import androidx.test.espresso.Espresso.onView import androidx.test.espresso.action.TypeTextAction import androidx.test.espresso.action.ViewActions.click import androidx.test.espresso.assertion.ViewAssertions.matches -import androidx.test.espresso.matcher.RootMatchers.isDialog import androidx.test.espresso.intent.Intents import androidx.test.espresso.intent.matcher.IntentMatchers.hasComponent +import androidx.test.espresso.matcher.RootMatchers.isDialog import androidx.test.espresso.matcher.ViewMatchers.Visibility import androidx.test.espresso.matcher.ViewMatchers.hasDescendant import androidx.test.espresso.matcher.ViewMatchers.isDisplayed @@ -32,7 +31,7 @@ fun noteRobot(noteRobot: NoteRobot.() -> Unit) { class NoteRobot : BaseRobot() { fun clickOnFabAddNewNote() { - onView(withId(R.id.addNoteButton)).check(matches(isDisplayed())).perform(click()) + waitForView(withId(R.id.addNoteButton)).check(matches(isDisplayed())).perform(click()) } fun verifyNoteDetailActivityIsLaunched() { @@ -40,21 +39,21 @@ class NoteRobot : BaseRobot() { } fun typeNote(text: String) { - onView(withId(R.id.noteText)).perform(TypeTextAction(text)) + waitForView(withId(R.id.noteText)).perform(TypeTextAction(text)) closeKeyboard() } fun clickOnSaveButton() { - waitForView(withText(R.string.save)) + waitForView(allOf(withId(R.id.saveButton), withText(R.string.save))) .check(matches(allOf(isDisplayed(), isEnabled()))) .perform(click()) } fun clickYesOnAlertDialog() { - onView(isRoot()) + waitForView(isRoot()) .inRoot(isDialog()) .perform(searchFor(withId(android.R.id.button1))) - onView(withId(android.R.id.button1)) + waitForView(withId(android.R.id.button1)) .inRoot(isDialog()) .check(matches(isDisplayed())) .perform(click()) @@ -92,9 +91,21 @@ class NoteRobot : BaseRobot() { fun checkNoteDetails(user: String, noteText: String) { waitForView(withId(R.id.notes_recycler)).check(matches(isDisplayed())) - waitForView(allOf(withId(R.id.storeBy), withEffectiveVisibility(Visibility.VISIBLE), withText(user))) + waitForView( + allOf( + withId(R.id.storeBy), + withEffectiveVisibility(Visibility.VISIBLE), + withText(user) + ) + ) .check(matches(withEffectiveVisibility(Visibility.VISIBLE))) - waitForView(allOf(withId(R.id.note_text), withEffectiveVisibility(Visibility.VISIBLE), withText(noteText))) + waitForView( + allOf( + withId(R.id.note_text), + withEffectiveVisibility(Visibility.VISIBLE), + withText(noteText) + ) + ) .check(matches(withEffectiveVisibility(Visibility.VISIBLE))) } } From 58a37a22fa8f37782930ecaa675b765073c1e124 Mon Sep 17 00:00:00 2001 From: Xavier Molloy Date: Thu, 19 Feb 2026 20:54:16 +0100 Subject: [PATCH 056/114] chore: [ANDROAPP-7470] File relocation and fetchOptionSets usecase (I) [skip size] (#4667) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: [ANDROAPP-7470] file relocation * feat: [ANDROAPP-7470] FetchOptionSetOptions usecase (#4668) * feat: [ANDROAPP-7470] Address sonar code smell * refactor: Replace suspend operator by returning a cold flow (#4671) --------- Co-authored-by: Andrés Miguel Rubio --- .../SearchRepositoryImplKt.kt | 2 +- .../searchTrackEntity/SearchRepositoryKt.kt | 2 +- .../searchTrackEntity/SearchTEIViewModel.kt | 6 +- .../SearchParametersScreen.kt | 8 +- .../mapper/ParameterInputModelMapper.kt | 12 +- .../SearchTEIViewModelTest.kt | 2 +- .../mapper/ParameterInputModelMapperTest.kt | 2 +- ...omainToSDKTrackedEntitySearchItemMapper.kt | 2 +- .../data/OptionSetRepository.android.kt | 71 +++++ .../data/TrackedEntitySearchItemMapper.kt | 2 +- .../{ui => }/input/model/TrackerInputType.kt | 2 +- .../ui}/action/TrackerInputAction.kt | 2 +- .../ui/action}/TrackerInputUiEvent.kt | 2 +- .../ui}/provider/TrackerAgeInputProvider.kt | 10 +- .../provider/TrackerCheckboxInputProvider.kt | 10 +- .../ui}/provider/TrackerDateTimeProvider.kt | 12 +- .../ui}/provider/TrackerInputProvider.kt | 271 +++++++----------- .../TrackerRadioButtonInputProvider.kt | 10 +- .../ui/state/TrackerInputUIState.kt} | 9 +- .../state}/TrackerOptionSetConfiguration.kt | 2 +- .../search/data/OptionSetRepository.kt | 26 ++ .../tracker/search/di/TrackerSearchModule.kt | 4 + .../search/domain/FetchOptionSetOptions.kt | 35 +++ .../model/TrackedEntitySearchItemResult.kt | 2 +- .../provider/ParameterSelectorItemProvider.kt | 10 +- .../data/OptionSetRepository.desktop.kt | 22 ++ 26 files changed, 320 insertions(+), 218 deletions(-) create mode 100644 tracker/src/androidMain/kotlin/org/dhis2/tracker/search/data/OptionSetRepository.android.kt rename tracker/src/commonMain/kotlin/org/dhis2/tracker/{ui => }/input/model/TrackerInputType.kt (92%) rename tracker/src/commonMain/kotlin/org/dhis2/tracker/{ui/input => input/ui}/action/TrackerInputAction.kt (87%) rename tracker/src/commonMain/kotlin/org/dhis2/tracker/{ui/input/model => input/ui/action}/TrackerInputUiEvent.kt (93%) rename tracker/src/commonMain/kotlin/org/dhis2/tracker/{ui/input => input/ui}/provider/TrackerAgeInputProvider.kt (95%) rename tracker/src/commonMain/kotlin/org/dhis2/tracker/{ui/input => input/ui}/provider/TrackerCheckboxInputProvider.kt (87%) rename tracker/src/commonMain/kotlin/org/dhis2/tracker/{ui/input => input/ui}/provider/TrackerDateTimeProvider.kt (92%) rename tracker/src/commonMain/kotlin/org/dhis2/tracker/{ui/input => input/ui}/provider/TrackerInputProvider.kt (77%) rename tracker/src/commonMain/kotlin/org/dhis2/tracker/{ui/input => input/ui}/provider/TrackerRadioButtonInputProvider.kt (87%) rename tracker/src/commonMain/kotlin/org/dhis2/tracker/{ui/input/model/TrackerInputModel.kt => input/ui/state/TrackerInputUIState.kt} (85%) rename tracker/src/commonMain/kotlin/org/dhis2/tracker/{ui/input/model => input/ui/state}/TrackerOptionSetConfiguration.kt (90%) create mode 100644 tracker/src/commonMain/kotlin/org/dhis2/tracker/search/data/OptionSetRepository.kt create mode 100644 tracker/src/commonMain/kotlin/org/dhis2/tracker/search/domain/FetchOptionSetOptions.kt create mode 100644 tracker/src/desktopMain/kotlin/org/dhis2/tracker/search/data/OptionSetRepository.desktop.kt diff --git a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryImplKt.kt b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryImplKt.kt index 2b58b3492b2..822fbbeb51b 100644 --- a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryImplKt.kt +++ b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryImplKt.kt @@ -22,7 +22,7 @@ import org.dhis2.mobile.commons.customintents.CustomIntentRepository import org.dhis2.mobile.commons.extensions.toColor import org.dhis2.mobile.commons.model.CustomIntentActionTypeModel import org.dhis2.mobile.commons.model.CustomIntentModel -import org.dhis2.tracker.ui.input.action.FieldUid +import org.dhis2.tracker.input.ui.action.FieldUid import org.dhis2.usescases.events.EventInfoProvider import org.dhis2.usescases.tracker.TrackedEntityInstanceInfoProvider import org.hisp.dhis.android.core.D2 diff --git a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryKt.kt b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryKt.kt index a69fd6198b0..43bde52a6f7 100644 --- a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryKt.kt +++ b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryKt.kt @@ -4,7 +4,7 @@ import org.dhis2.data.search.SearchParametersModel import org.dhis2.form.model.FieldUiModel import org.dhis2.maps.model.MapItemModel import org.dhis2.mobile.commons.model.CustomIntentModel -import org.dhis2.tracker.ui.input.action.FieldUid +import org.dhis2.tracker.input.ui.action.FieldUid import org.hisp.dhis.android.core.program.Program interface SearchRepositoryKt { diff --git a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEIViewModel.kt b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEIViewModel.kt index 213c805f2d7..0388f89c9ac 100644 --- a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEIViewModel.kt +++ b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEIViewModel.kt @@ -54,12 +54,12 @@ import org.dhis2.maps.managers.MapManager import org.dhis2.maps.usecases.MapStyleConfiguration import org.dhis2.mobile.commons.coroutine.CoroutineTracker import org.dhis2.tracker.NavigationBarUIState +import org.dhis2.tracker.input.ui.action.CustomIntentUid +import org.dhis2.tracker.input.ui.action.FieldUid +import org.dhis2.tracker.input.ui.action.TrackerInputAction import org.dhis2.tracker.search.data.transformDomainTeiToSDKTei import org.dhis2.tracker.search.domain.SearchTrackedEntities import org.dhis2.tracker.search.model.SearchTrackedEntitiesInput -import org.dhis2.tracker.ui.input.action.CustomIntentUid -import org.dhis2.tracker.ui.input.action.FieldUid -import org.dhis2.tracker.ui.input.action.TrackerInputAction import org.dhis2.usescases.searchTrackEntity.listView.SearchResult import org.dhis2.usescases.searchTrackEntity.searchparameters.model.SearchParametersUiState import org.dhis2.usescases.searchTrackEntity.ui.UnableToSearchOutsideData diff --git a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/searchparameters/SearchParametersScreen.kt b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/searchparameters/SearchParametersScreen.kt index bd2ab645350..013f70a01ea 100644 --- a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/searchparameters/SearchParametersScreen.kt +++ b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/searchparameters/SearchParametersScreen.kt @@ -54,11 +54,11 @@ import org.dhis2.form.ui.event.RecyclerViewUiEvents import org.dhis2.form.ui.intent.FormIntent import org.dhis2.mobile.commons.extensions.ObserveAsEvents import org.dhis2.mobile.commons.orgunit.OrgUnitSelectorScope +import org.dhis2.tracker.input.ui.action.CustomIntentUid +import org.dhis2.tracker.input.ui.action.FieldUid +import org.dhis2.tracker.input.ui.action.TrackerInputAction +import org.dhis2.tracker.input.ui.action.TrackerInputUiEvent import org.dhis2.tracker.search.ui.provider.provideParameterSelectorItem -import org.dhis2.tracker.ui.input.action.CustomIntentUid -import org.dhis2.tracker.ui.input.action.FieldUid -import org.dhis2.tracker.ui.input.action.TrackerInputAction -import org.dhis2.tracker.ui.input.model.TrackerInputUiEvent import org.dhis2.usescases.searchTrackEntity.SearchTEIViewModel import org.dhis2.usescases.searchTrackEntity.searchparameters.mapper.toParameterInputModel import org.dhis2.usescases.searchTrackEntity.searchparameters.model.SearchParametersUiState diff --git a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/searchparameters/mapper/ParameterInputModelMapper.kt b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/searchparameters/mapper/ParameterInputModelMapper.kt index e98369d5546..e49883292b3 100644 --- a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/searchparameters/mapper/ParameterInputModelMapper.kt +++ b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/searchparameters/mapper/ParameterInputModelMapper.kt @@ -11,10 +11,10 @@ import org.dhis2.commons.resources.ResourceManager import org.dhis2.form.R import org.dhis2.form.model.FieldUiModel import org.dhis2.form.model.UiRenderType -import org.dhis2.tracker.ui.input.model.TrackerInputModel -import org.dhis2.tracker.ui.input.model.TrackerInputType -import org.dhis2.tracker.ui.input.model.TrackerOptionItem -import org.dhis2.tracker.ui.input.model.TrackerOptionSetConfiguration +import org.dhis2.tracker.input.model.TrackerInputType +import org.dhis2.tracker.input.ui.state.TrackerInputUIState +import org.dhis2.tracker.input.ui.state.TrackerOptionItem +import org.dhis2.tracker.input.ui.state.TrackerOptionSetConfiguration import org.hisp.dhis.android.core.common.ValueType import org.hisp.dhis.mobile.ui.designsystem.component.LegendData import org.hisp.dhis.mobile.ui.designsystem.component.Orientation @@ -23,7 +23,7 @@ import org.hisp.dhis.mobile.ui.designsystem.component.Orientation fun FieldUiModel.toParameterInputModel( fetchOptions: () -> Unit, resourceManager: ResourceManager, -): TrackerInputModel { +): TrackerInputUIState { val trackerInputType = when { optionSet != null && valueType != ValueType.MULTI_TEXT -> { @@ -41,7 +41,7 @@ fun FieldUiModel.toParameterInputModel( else -> getInputTypeByValueType(valueType, renderingType) } - return TrackerInputModel( + return TrackerInputUIState( uid = uid, label = label, value = value, diff --git a/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchTEIViewModelTest.kt b/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchTEIViewModelTest.kt index 45e88671f9f..4ac2925f6d0 100644 --- a/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchTEIViewModelTest.kt +++ b/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchTEIViewModelTest.kt @@ -31,9 +31,9 @@ import org.dhis2.form.ui.provider.DisplayNameProvider import org.dhis2.maps.geometry.mapper.EventsByProgramStage import org.dhis2.maps.usecases.MapStyleConfiguration import org.dhis2.mobile.commons.model.CustomIntentModel +import org.dhis2.tracker.input.ui.action.TrackerInputAction import org.dhis2.tracker.search.domain.SearchTrackedEntities import org.dhis2.tracker.search.model.SearchTrackedEntitiesInput -import org.dhis2.tracker.ui.input.action.TrackerInputAction import org.dhis2.usescases.searchTrackEntity.listView.SearchResult.SearchResultType import org.dhis2.utils.customviews.navigationbar.NavigationPage import org.hisp.dhis.android.core.common.ObjectWithUid diff --git a/app/src/test/java/org/dhis2/usescases/searchTrackEntity/searchparameters/mapper/ParameterInputModelMapperTest.kt b/app/src/test/java/org/dhis2/usescases/searchTrackEntity/searchparameters/mapper/ParameterInputModelMapperTest.kt index 401655d54b2..7196a8f808d 100644 --- a/app/src/test/java/org/dhis2/usescases/searchTrackEntity/searchparameters/mapper/ParameterInputModelMapperTest.kt +++ b/app/src/test/java/org/dhis2/usescases/searchTrackEntity/searchparameters/mapper/ParameterInputModelMapperTest.kt @@ -3,7 +3,7 @@ package org.dhis2.usescases.searchTrackEntity.searchparameters.mapper import org.dhis2.commons.resources.ResourceManager import org.dhis2.form.R import org.dhis2.form.model.UiRenderType -import org.dhis2.tracker.ui.input.model.TrackerInputType +import org.dhis2.tracker.input.model.TrackerInputType import org.hisp.dhis.android.core.common.ValueType import org.hisp.dhis.mobile.ui.designsystem.component.Orientation import org.junit.Assert.assertEquals diff --git a/tracker/src/androidMain/kotlin/org/dhis2/tracker/search/data/DomainToSDKTrackedEntitySearchItemMapper.kt b/tracker/src/androidMain/kotlin/org/dhis2/tracker/search/data/DomainToSDKTrackedEntitySearchItemMapper.kt index 08b8664494e..a37b00a6968 100644 --- a/tracker/src/androidMain/kotlin/org/dhis2/tracker/search/data/DomainToSDKTrackedEntitySearchItemMapper.kt +++ b/tracker/src/androidMain/kotlin/org/dhis2/tracker/search/data/DomainToSDKTrackedEntitySearchItemMapper.kt @@ -1,12 +1,12 @@ package org.dhis2.tracker.search.data +import org.dhis2.tracker.input.model.TrackerInputType import org.dhis2.tracker.search.model.GeometryFeatureType import org.dhis2.tracker.search.model.SyncState import org.dhis2.tracker.search.model.TrackedEntityGeometry import org.dhis2.tracker.search.model.TrackedEntitySearchItemAttributeDomain import org.dhis2.tracker.search.model.TrackedEntitySearchItemResult import org.dhis2.tracker.search.model.TrackedEntityTypeDomain -import org.dhis2.tracker.ui.input.model.TrackerInputType import org.hisp.dhis.android.core.common.FeatureType import org.hisp.dhis.android.core.common.Geometry import org.hisp.dhis.android.core.common.State diff --git a/tracker/src/androidMain/kotlin/org/dhis2/tracker/search/data/OptionSetRepository.android.kt b/tracker/src/androidMain/kotlin/org/dhis2/tracker/search/data/OptionSetRepository.android.kt new file mode 100644 index 00000000000..e561b26c5ed --- /dev/null +++ b/tracker/src/androidMain/kotlin/org/dhis2/tracker/search/data/OptionSetRepository.android.kt @@ -0,0 +1,71 @@ +package org.dhis2.tracker.search.data + +import androidx.paging.PagingData +import androidx.paging.map +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.emitAll +import kotlinx.coroutines.flow.flow +import kotlinx.coroutines.flow.map +import org.dhis2.mobile.commons.error.DomainError +import org.dhis2.mobile.commons.error.DomainErrorMapper +import org.dhis2.tracker.input.ui.state.TrackerOptionItem +import org.hisp.dhis.android.core.D2 +import org.hisp.dhis.android.core.arch.repositories.scope.RepositoryScope +import org.hisp.dhis.android.core.maintenance.D2Error + +/** + * Android implementation of OptionSetRepository using DHIS2 Android SDK. + */ +@Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING") +actual class OptionSetRepository( + private val d2: D2, + private val domainErrorMapper: DomainErrorMapper, +) { + /** + * Fetches paginated options for a given option set. + * @param optionSetUid The unique identifier of the option set + * @param pageSize Number of items per page + * @param searchQuery Optional search query to filter options + * @return Flow of paginated option items. The `flow { }` builder creates a cold (lazy) flow that + * will be executed when collected. The code inside runs in the collector's coroutine context. + */ + actual fun getOptions( + optionSetUid: String, + pageSize: Int, + searchQuery: String?, + ): Flow> = + flow { + try { + var query = + d2 + .optionModule() + .options() + .byOptionSetUid() + .eq(optionSetUid) + .orderBySortOrder(RepositoryScope.OrderByDirection.ASC) + + // Apply search filter if provided + searchQuery?.takeIf { it.isNotBlank() }?.let { search -> + query = query.byDisplayName().like("%$search%") + } + + val pagingFlow = + query + .getPagingData(pageSize) + .map { pagingData -> + pagingData.map { option -> + TrackerOptionItem( + code = option.code() ?: "", + displayName = option.displayName() ?: "", + ) + } + } + + emitAll(pagingFlow) + } catch (d2Error: D2Error) { + throw domainErrorMapper.mapToDomainError(d2Error) + } catch (e: Exception) { + throw DomainError.UnexpectedError(e.message ?: "Unknown error fetching options") + } + } +} diff --git a/tracker/src/androidMain/kotlin/org/dhis2/tracker/search/data/TrackedEntitySearchItemMapper.kt b/tracker/src/androidMain/kotlin/org/dhis2/tracker/search/data/TrackedEntitySearchItemMapper.kt index 2b62b721425..eb05207c5b2 100644 --- a/tracker/src/androidMain/kotlin/org/dhis2/tracker/search/data/TrackedEntitySearchItemMapper.kt +++ b/tracker/src/androidMain/kotlin/org/dhis2/tracker/search/data/TrackedEntitySearchItemMapper.kt @@ -1,5 +1,6 @@ package org.dhis2.tracker.search.data +import org.dhis2.tracker.input.model.TrackerInputType import org.dhis2.tracker.search.model.GeometryFeatureType import org.dhis2.tracker.search.model.SyncState import org.dhis2.tracker.search.model.TrackedEntityGeometry @@ -8,7 +9,6 @@ import org.dhis2.tracker.search.model.TrackedEntitySearchItemProgramOwnerDomain import org.dhis2.tracker.search.model.TrackedEntitySearchItemResult import org.dhis2.tracker.search.model.TrackedEntityTypeAttributeDomain import org.dhis2.tracker.search.model.TrackedEntityTypeDomain -import org.dhis2.tracker.ui.input.model.TrackerInputType import org.hisp.dhis.android.core.common.FeatureType import org.hisp.dhis.android.core.common.Geometry import org.hisp.dhis.android.core.common.State diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/model/TrackerInputType.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/model/TrackerInputType.kt similarity index 92% rename from tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/model/TrackerInputType.kt rename to tracker/src/commonMain/kotlin/org/dhis2/tracker/input/model/TrackerInputType.kt index f93a0af77f6..02b819fb954 100644 --- a/tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/model/TrackerInputType.kt +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/model/TrackerInputType.kt @@ -1,4 +1,4 @@ -package org.dhis2.tracker.ui.input.model +package org.dhis2.tracker.input.model enum class TrackerInputType { TEXT, diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/action/TrackerInputAction.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/action/TrackerInputAction.kt similarity index 87% rename from tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/action/TrackerInputAction.kt rename to tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/action/TrackerInputAction.kt index 1aea9c9c270..2a024512262 100644 --- a/tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/action/TrackerInputAction.kt +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/action/TrackerInputAction.kt @@ -1,4 +1,4 @@ -package org.dhis2.tracker.ui.input.action +package org.dhis2.tracker.input.ui.action import org.dhis2.mobile.commons.model.CustomIntentModel diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/model/TrackerInputUiEvent.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/action/TrackerInputUiEvent.kt similarity index 93% rename from tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/model/TrackerInputUiEvent.kt rename to tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/action/TrackerInputUiEvent.kt index 73beffde51f..ec534567ff9 100644 --- a/tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/model/TrackerInputUiEvent.kt +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/action/TrackerInputUiEvent.kt @@ -1,4 +1,4 @@ -package org.dhis2.tracker.ui.input.model +package org.dhis2.tracker.input.ui.action sealed interface TrackerInputUiEvent { data class OnScanButtonClicked( diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/provider/TrackerAgeInputProvider.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/provider/TrackerAgeInputProvider.kt similarity index 95% rename from tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/provider/TrackerAgeInputProvider.kt rename to tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/provider/TrackerAgeInputProvider.kt index a4d43c9bec6..a22ad53a1d8 100644 --- a/tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/provider/TrackerAgeInputProvider.kt +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/provider/TrackerAgeInputProvider.kt @@ -1,4 +1,4 @@ -package org.dhis2.tracker.ui.input.provider +package org.dhis2.tracker.input.ui.provider import androidx.compose.runtime.Composable import androidx.compose.runtime.DisposableEffect @@ -17,9 +17,9 @@ import org.dhis2.mobile.commons.resources.age_or import org.dhis2.mobile.commons.resources.cancel import org.dhis2.mobile.commons.resources.date_of_birth import org.dhis2.mobile.commons.resources.ok -import org.dhis2.tracker.ui.input.model.TrackerInputModel -import org.dhis2.tracker.ui.input.model.inputState -import org.dhis2.tracker.ui.input.model.supportingText +import org.dhis2.tracker.input.ui.state.TrackerInputUIState +import org.dhis2.tracker.input.ui.state.inputState +import org.dhis2.tracker.input.ui.state.supportingText import org.hisp.dhis.mobile.ui.designsystem.component.AgeInputType import org.hisp.dhis.mobile.ui.designsystem.component.InputAge import org.hisp.dhis.mobile.ui.designsystem.component.InputStyle @@ -29,7 +29,7 @@ import org.jetbrains.compose.resources.stringResource @Composable fun ProvideTrackerAgeInput( - model: TrackerInputModel, + model: TrackerInputUIState, inputStyle: InputStyle, onNextClicked: () -> Unit, modifier: Modifier, diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/provider/TrackerCheckboxInputProvider.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/provider/TrackerCheckboxInputProvider.kt similarity index 87% rename from tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/provider/TrackerCheckboxInputProvider.kt rename to tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/provider/TrackerCheckboxInputProvider.kt index ea648570e1b..5be95d7b1a9 100644 --- a/tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/provider/TrackerCheckboxInputProvider.kt +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/provider/TrackerCheckboxInputProvider.kt @@ -1,17 +1,17 @@ -package org.dhis2.tracker.ui.input.provider +package org.dhis2.tracker.input.ui.provider import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import org.dhis2.tracker.ui.input.model.TrackerInputModel -import org.dhis2.tracker.ui.input.model.inputState -import org.dhis2.tracker.ui.input.model.supportingText +import org.dhis2.tracker.input.ui.state.TrackerInputUIState +import org.dhis2.tracker.input.ui.state.inputState +import org.dhis2.tracker.input.ui.state.supportingText import org.hisp.dhis.mobile.ui.designsystem.component.CheckBoxData import org.hisp.dhis.mobile.ui.designsystem.component.InputCheckBox import org.hisp.dhis.mobile.ui.designsystem.component.InputStyle @Composable fun TrackerCheckboxInputProvider( - model: TrackerInputModel, + model: TrackerInputUIState, inputStyle: InputStyle, modifier: Modifier, onValueChange: (String?) -> Unit, diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/provider/TrackerDateTimeProvider.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/provider/TrackerDateTimeProvider.kt similarity index 92% rename from tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/provider/TrackerDateTimeProvider.kt rename to tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/provider/TrackerDateTimeProvider.kt index 51e7da8dba2..469b469cc28 100644 --- a/tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/provider/TrackerDateTimeProvider.kt +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/provider/TrackerDateTimeProvider.kt @@ -1,4 +1,4 @@ -package org.dhis2.tracker.ui.input.provider +package org.dhis2.tracker.input.ui.provider import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue @@ -10,10 +10,10 @@ import androidx.compose.ui.semantics.contentDescription import androidx.compose.ui.semantics.semantics import androidx.compose.ui.text.TextRange import androidx.compose.ui.text.input.TextFieldValue -import org.dhis2.tracker.ui.input.model.TrackerInputModel -import org.dhis2.tracker.ui.input.model.TrackerInputType -import org.dhis2.tracker.ui.input.model.inputState -import org.dhis2.tracker.ui.input.model.supportingText +import org.dhis2.tracker.input.model.TrackerInputType +import org.dhis2.tracker.input.ui.state.TrackerInputUIState +import org.dhis2.tracker.input.ui.state.inputState +import org.dhis2.tracker.input.ui.state.supportingText import org.hisp.dhis.mobile.ui.designsystem.component.DateTimeActionType import org.hisp.dhis.mobile.ui.designsystem.component.InputDateTime import org.hisp.dhis.mobile.ui.designsystem.component.InputStyle @@ -26,7 +26,7 @@ import org.hisp.dhis.mobile.ui.designsystem.component.state.rememberInputDateTim @Composable fun ProvideTrackerDateTimeInput( - model: TrackerInputModel, + model: TrackerInputUIState, inputStyle: InputStyle, onNextClicked: () -> Unit, modifier: Modifier, diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/provider/TrackerInputProvider.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/provider/TrackerInputProvider.kt similarity index 77% rename from tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/provider/TrackerInputProvider.kt rename to tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/provider/TrackerInputProvider.kt index 467a5b004b2..df64a705398 100644 --- a/tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/provider/TrackerInputProvider.kt +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/provider/TrackerInputProvider.kt @@ -1,4 +1,4 @@ -package org.dhis2.tracker.ui.input.provider +package org.dhis2.tracker.input.ui.provider import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.runtime.Composable @@ -16,11 +16,11 @@ import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.text.input.TextFieldValue import org.dhis2.mobile.tracker.resources.Res import org.dhis2.mobile.tracker.resources.custom_intent_launch -import org.dhis2.tracker.ui.input.model.TrackerInputModel -import org.dhis2.tracker.ui.input.model.TrackerInputType -import org.dhis2.tracker.ui.input.model.TrackerInputUiEvent -import org.dhis2.tracker.ui.input.model.inputState -import org.dhis2.tracker.ui.input.model.supportingText +import org.dhis2.tracker.input.model.TrackerInputType +import org.dhis2.tracker.input.ui.action.TrackerInputUiEvent +import org.dhis2.tracker.input.ui.state.TrackerInputUIState +import org.dhis2.tracker.input.ui.state.inputState +import org.dhis2.tracker.input.ui.state.supportingText import org.hisp.dhis.mobile.ui.designsystem.component.CheckBoxData import org.hisp.dhis.mobile.ui.designsystem.component.CustomIntentState import org.hisp.dhis.mobile.ui.designsystem.component.DropdownItem @@ -52,7 +52,7 @@ import org.jetbrains.compose.resources.stringResource @Composable fun TrackerInputProvider( modifier: Modifier = Modifier, - inputModel: TrackerInputModel, + inputModel: TrackerInputUIState, inputStyle: InputStyle, onNextClicked: () -> Unit, onUiEvent: (TrackerInputUiEvent) -> Unit, @@ -93,16 +93,11 @@ fun TrackerInputProvider( inputStyle = inputStyle, inputTextFieldValue = textValue, onValueChanged = { newValue -> - newValue?.let { - if (it.text != inputModel.value) { - onUiEvent( - TrackerInputUiEvent.OnValueChange( - uid = inputModel.uid, - value = it.text.takeIf { text -> text.isNotEmpty() }, - ), - ) - } - } + manageOnValueChange( + newValue = newValue?.text, + inputModel = inputModel, + onUiEvent = onUiEvent, + ) }, imeAction = ImeAction.Next, onImeActionClick = onImeActionClick, @@ -120,16 +115,11 @@ fun TrackerInputProvider( inputStyle = inputStyle, inputTextFieldValue = textValue, onValueChanged = { newValue -> - newValue?.let { - if (it.text != inputModel.value) { - onUiEvent( - TrackerInputUiEvent.OnValueChange( - uid = inputModel.uid, - value = it.text.takeIf { text -> text.isNotEmpty() }, - ), - ) - } - } + manageOnValueChange( + newValue = newValue?.text, + inputModel = inputModel, + onUiEvent = onUiEvent, + ) }, imeAction = ImeAction.Next, onImeActionClick = onImeActionClick, @@ -147,16 +137,11 @@ fun TrackerInputProvider( inputStyle = inputStyle, inputTextFieldValue = textValue, onValueChanged = { newValue -> - newValue?.let { - if (it.text != inputModel.value) { - onUiEvent( - TrackerInputUiEvent.OnValueChange( - uid = inputModel.uid, - value = it.text.takeIf { text -> text.isNotEmpty() }, - ), - ) - } - } + manageOnValueChange( + newValue = newValue?.text, + inputModel = inputModel, + onUiEvent = onUiEvent, + ) }, imeAction = ImeAction.Next, onImeActionClick = onImeActionClick, @@ -175,16 +160,11 @@ fun TrackerInputProvider( inputTextFieldValue = textValue, onEmailActionCLicked = {}, onValueChanged = { newValue -> - newValue?.let { - if (it.text != inputModel.value) { - onUiEvent( - TrackerInputUiEvent.OnValueChange( - uid = inputModel.uid, - value = it.text.takeIf { text -> text.isNotEmpty() }, - ), - ) - } - } + manageOnValueChange( + newValue = newValue?.text, + inputModel = inputModel, + onUiEvent = onUiEvent, + ) }, imeAction = ImeAction.Next, onImeActionClick = onImeActionClick, @@ -203,16 +183,11 @@ fun TrackerInputProvider( inputTextFieldValue = textValue, onCallActionClicked = {}, onValueChanged = { newValue -> - newValue?.let { - if (it.text != inputModel.value) { - onUiEvent( - TrackerInputUiEvent.OnValueChange( - uid = inputModel.uid, - value = it.text.takeIf { text -> text.isNotEmpty() }, - ), - ) - } - } + manageOnValueChange( + newValue = newValue?.text, + inputModel = inputModel, + onUiEvent = onUiEvent, + ) }, imeAction = ImeAction.Next, onImeActionClick = onImeActionClick, @@ -231,16 +206,11 @@ fun TrackerInputProvider( inputTextFieldValue = textValue, onLinkActionCLicked = {}, onValueChanged = { newValue -> - newValue?.let { - if (it.text != inputModel.value) { - onUiEvent( - TrackerInputUiEvent.OnValueChange( - uid = inputModel.uid, - value = it.text.takeIf { text -> text.isNotEmpty() }, - ), - ) - } - } + manageOnValueChange( + newValue = newValue?.text, + inputModel = inputModel, + onUiEvent = onUiEvent, + ) }, imeAction = ImeAction.Next, onImeActionClick = onImeActionClick, @@ -258,16 +228,11 @@ fun TrackerInputProvider( inputStyle = inputStyle, inputTextFieldValue = textValue, onValueChanged = { newValue -> - newValue?.let { - if (it.text != inputModel.value) { - onUiEvent( - TrackerInputUiEvent.OnValueChange( - uid = inputModel.uid, - value = it.text.takeIf { text -> text.isNotEmpty() }, - ), - ) - } - } + manageOnValueChange( + newValue = newValue?.text, + inputModel = inputModel, + onUiEvent = onUiEvent, + ) }, imeAction = ImeAction.Next, onImeActionClick = onImeActionClick, @@ -285,16 +250,11 @@ fun TrackerInputProvider( inputStyle = inputStyle, inputTextFieldValue = textValue, onValueChanged = { newValue -> - newValue?.let { - if (it.text != inputModel.value) { - onUiEvent( - TrackerInputUiEvent.OnValueChange( - uid = inputModel.uid, - value = it.text.takeIf { text -> text.isNotEmpty() }, - ), - ) - } - } + manageOnValueChange( + newValue = newValue?.text, + inputModel = inputModel, + onUiEvent = onUiEvent, + ) }, imeAction = ImeAction.Next, onImeActionClick = onImeActionClick, @@ -312,16 +272,11 @@ fun TrackerInputProvider( inputStyle = inputStyle, inputTextFieldValue = textValue, onValueChanged = { newValue -> - newValue?.let { - if (it.text != inputModel.value) { - onUiEvent( - TrackerInputUiEvent.OnValueChange( - uid = inputModel.uid, - value = it.text.takeIf { text -> text.isNotEmpty() }, - ), - ) - } - } + manageOnValueChange( + newValue = newValue?.text, + inputModel = inputModel, + onUiEvent = onUiEvent, + ) }, imeAction = ImeAction.Next, onImeActionClick = onImeActionClick, @@ -339,16 +294,11 @@ fun TrackerInputProvider( inputStyle = inputStyle, inputTextFieldValue = textValue, onValueChanged = { newValue -> - newValue?.let { - if (it.text != inputModel.value) { - onUiEvent( - TrackerInputUiEvent.OnValueChange( - uid = inputModel.uid, - value = it.text.takeIf { text -> text.isNotEmpty() }, - ), - ) - } - } + manageOnValueChange( + newValue = newValue?.text, + inputModel = inputModel, + onUiEvent = onUiEvent, + ) }, imeAction = ImeAction.Next, onImeActionClick = onImeActionClick, @@ -366,16 +316,11 @@ fun TrackerInputProvider( inputStyle = inputStyle, inputTextFieldValue = textValue, onValueChanged = { newValue -> - newValue?.let { - if (it.text != inputModel.value) { - onUiEvent( - TrackerInputUiEvent.OnValueChange( - uid = inputModel.uid, - value = it.text.takeIf { text -> text.isNotEmpty() }, - ), - ) - } - } + manageOnValueChange( + newValue = newValue?.text, + inputModel = inputModel, + onUiEvent = onUiEvent, + ) }, imeAction = ImeAction.Next, onImeActionClick = onImeActionClick, @@ -393,16 +338,11 @@ fun TrackerInputProvider( inputStyle = inputStyle, inputTextFieldValue = textValue, onValueChanged = { newValue -> - newValue?.let { - if (it.text != inputModel.value) { - onUiEvent( - TrackerInputUiEvent.OnValueChange( - uid = inputModel.uid, - value = it.text.takeIf { text -> text.isNotEmpty() }, - ), - ) - } - } + manageOnValueChange( + newValue = newValue?.text, + inputModel = inputModel, + onUiEvent = onUiEvent, + ) }, imeAction = ImeAction.Next, onImeActionClick = onImeActionClick, @@ -420,16 +360,11 @@ fun TrackerInputProvider( inputStyle = inputStyle, inputTextFieldValue = textValue, onValueChanged = { newValue -> - newValue?.let { - if (it.text != inputModel.value) { - onUiEvent( - TrackerInputUiEvent.OnValueChange( - uid = inputModel.uid, - value = it.text.takeIf { text -> text.isNotEmpty() }, - ), - ) - } - } + manageOnValueChange( + newValue = newValue?.text, + inputModel = inputModel, + onUiEvent = onUiEvent, + ) }, imeAction = ImeAction.Next, onImeActionClick = onImeActionClick, @@ -443,11 +378,10 @@ fun TrackerInputProvider( onNextClicked = onNextClicked, modifier = modifierWithFocus, onValueChange = { newValue -> - onUiEvent( - TrackerInputUiEvent.OnValueChange( - uid = inputModel.uid, - value = newValue, - ), + manageOnValueChange( + newValue = newValue, + inputModel = inputModel, + onUiEvent = onUiEvent, ) }, ) @@ -568,16 +502,11 @@ fun TrackerInputProvider( ) }, onValueChanged = { newValue -> - newValue?.let { - if (it.text != inputModel.value) { - onUiEvent( - TrackerInputUiEvent.OnValueChange( - uid = inputModel.uid, - value = it.text.takeIf { text -> text.isNotEmpty() }, - ), - ) - } - } + manageOnValueChange( + newValue = newValue?.text, + inputModel = inputModel, + onUiEvent = onUiEvent, + ) }, imeAction = ImeAction.Next, onImeActionClick = onImeActionClick, @@ -602,16 +531,11 @@ fun TrackerInputProvider( ) }, onValueChanged = { newValue -> - newValue?.let { - if (it.text != inputModel.value) { - onUiEvent( - TrackerInputUiEvent.OnValueChange( - uid = inputModel.uid, - value = it.text.takeIf { text -> text.isNotEmpty() }, - ), - ) - } - } + manageOnValueChange( + newValue = newValue?.text, + inputModel = inputModel, + onUiEvent = onUiEvent, + ) }, imeAction = ImeAction.Next, onImeActionClick = onImeActionClick, @@ -664,7 +588,7 @@ fun TrackerInputProvider( onUiEvent( TrackerInputUiEvent.OnValueChange( uid = inputModel.uid, - value = if (isChecked) "true" else null, + value = getYesOnlyValue(isChecked), ), ) }, @@ -690,7 +614,7 @@ fun TrackerInputProvider( onUiEvent( TrackerInputUiEvent.OnValueChange( uid = inputModel.uid, - value = if (isChecked) "true" else null, + value = getYesOnlyValue(isChecked), ), ) }, @@ -823,3 +747,22 @@ fun TrackerInputProvider( } } } + +fun manageOnValueChange( + newValue: String?, + inputModel: TrackerInputUIState, + onUiEvent: (TrackerInputUiEvent) -> Unit, +) { + newValue?.let { + if (it != inputModel.value) { + onUiEvent( + TrackerInputUiEvent.OnValueChange( + uid = inputModel.uid, + value = it.takeIf { text -> text.isNotEmpty() }, + ), + ) + } + } +} + +private fun getYesOnlyValue(checked: Boolean): String? = if (checked) "true" else null diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/provider/TrackerRadioButtonInputProvider.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/provider/TrackerRadioButtonInputProvider.kt similarity index 87% rename from tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/provider/TrackerRadioButtonInputProvider.kt rename to tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/provider/TrackerRadioButtonInputProvider.kt index 7cfcc3fc004..b018a70a60b 100644 --- a/tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/provider/TrackerRadioButtonInputProvider.kt +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/provider/TrackerRadioButtonInputProvider.kt @@ -1,17 +1,17 @@ -package org.dhis2.tracker.ui.input.provider +package org.dhis2.tracker.input.ui.provider import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import org.dhis2.tracker.ui.input.model.TrackerInputModel -import org.dhis2.tracker.ui.input.model.inputState -import org.dhis2.tracker.ui.input.model.supportingText +import org.dhis2.tracker.input.ui.state.TrackerInputUIState +import org.dhis2.tracker.input.ui.state.inputState +import org.dhis2.tracker.input.ui.state.supportingText import org.hisp.dhis.mobile.ui.designsystem.component.InputRadioButton import org.hisp.dhis.mobile.ui.designsystem.component.InputStyle import org.hisp.dhis.mobile.ui.designsystem.component.RadioButtonData @Composable fun TrackerRadioButtonInputProvider( - model: TrackerInputModel, + model: TrackerInputUIState, inputStyle: InputStyle, modifier: Modifier, onValueChange: (String?) -> Unit, diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/model/TrackerInputModel.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/state/TrackerInputUIState.kt similarity index 85% rename from tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/model/TrackerInputModel.kt rename to tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/state/TrackerInputUIState.kt index b27887922d6..7f8c3053412 100644 --- a/tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/model/TrackerInputModel.kt +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/state/TrackerInputUIState.kt @@ -1,12 +1,13 @@ -package org.dhis2.tracker.ui.input.model +package org.dhis2.tracker.input.ui.state +import org.dhis2.tracker.input.model.TrackerInputType import org.hisp.dhis.mobile.ui.designsystem.component.InputShellState import org.hisp.dhis.mobile.ui.designsystem.component.LegendData import org.hisp.dhis.mobile.ui.designsystem.component.Orientation import org.hisp.dhis.mobile.ui.designsystem.component.SupportingTextData import org.hisp.dhis.mobile.ui.designsystem.component.SupportingTextState -data class TrackerInputModel( +data class TrackerInputUIState( val uid: String, val label: String, val value: String?, @@ -25,7 +26,7 @@ data class TrackerInputModel( val displayName: String?, ) -fun TrackerInputModel.supportingText(): List? = +fun TrackerInputUIState.supportingText(): List? = listOfNotNull( error?.let { SupportingTextData( @@ -47,7 +48,7 @@ fun TrackerInputModel.supportingText(): List? = }, ).ifEmpty { null } -fun TrackerInputModel.inputState(): InputShellState = +fun TrackerInputUIState.inputState(): InputShellState = when { !editable -> InputShellState.DISABLED error != null -> InputShellState.ERROR diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/model/TrackerOptionSetConfiguration.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/state/TrackerOptionSetConfiguration.kt similarity index 90% rename from tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/model/TrackerOptionSetConfiguration.kt rename to tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/state/TrackerOptionSetConfiguration.kt index 9e47a4864b6..7f2a2917c6a 100644 --- a/tracker/src/commonMain/kotlin/org/dhis2/tracker/ui/input/model/TrackerOptionSetConfiguration.kt +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/state/TrackerOptionSetConfiguration.kt @@ -1,4 +1,4 @@ -package org.dhis2.tracker.ui.input.model +package org.dhis2.tracker.input.ui.state /** * Configuration for option set fields in tracker inputs. diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/data/OptionSetRepository.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/data/OptionSetRepository.kt new file mode 100644 index 00000000000..c2da3315782 --- /dev/null +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/data/OptionSetRepository.kt @@ -0,0 +1,26 @@ +package org.dhis2.tracker.search.data + +import androidx.paging.PagingData +import kotlinx.coroutines.flow.Flow +import org.dhis2.tracker.input.ui.state.TrackerOptionItem + +/** + * Repository for fetching option set data. + * Handles pagination and search of options for dropdown/selection inputs. + */ +@Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING") +expect class OptionSetRepository { + /** + * Fetches paginated options for a given option set. + * + * @param optionSetUid The unique identifier of the option set + * @param pageSize Number of items per page + * @param searchQuery Optional search query to filter options + * @return Flow of paginated option items + */ + fun getOptions( + optionSetUid: String, + pageSize: Int = 10, + searchQuery: String? = null, + ): Flow> +} diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/di/TrackerSearchModule.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/di/TrackerSearchModule.kt index 8ad69ed4c6e..1ae532b442d 100644 --- a/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/di/TrackerSearchModule.kt +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/di/TrackerSearchModule.kt @@ -1,7 +1,9 @@ package org.dhis2.tracker.search.di +import org.dhis2.tracker.search.domain.FetchOptionSetOptions import org.dhis2.tracker.search.domain.SearchTrackedEntities import org.koin.core.module.Module +import org.koin.core.module.dsl.factoryOf import org.koin.dsl.module /** @@ -26,4 +28,6 @@ val trackerSearchModule = teType = params.get(), ) } + // FetchOptionSetOptions use case + factoryOf(::FetchOptionSetOptions) } diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/domain/FetchOptionSetOptions.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/domain/FetchOptionSetOptions.kt new file mode 100644 index 00000000000..bdc123bf1fc --- /dev/null +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/domain/FetchOptionSetOptions.kt @@ -0,0 +1,35 @@ +package org.dhis2.tracker.search.domain + +import androidx.paging.PagingData +import kotlinx.coroutines.flow.Flow +import org.dhis2.mobile.commons.domain.UseCase +import org.dhis2.mobile.commons.error.DomainError +import org.dhis2.tracker.input.ui.state.TrackerOptionItem +import org.dhis2.tracker.search.data.OptionSetRepository + +/** + * Use case for fetching option set options with pagination. + * Coordinates between repository and UI layer. + */ +class FetchOptionSetOptions( + private val optionSetRepository: OptionSetRepository, +) : UseCase>> { + override suspend fun invoke(input: Params): Result>> = + try { + val flow = + optionSetRepository.getOptions( + optionSetUid = input.optionSetUid, + pageSize = input.pageSize, + searchQuery = input.searchQuery, + ) + Result.success(flow) + } catch (e: DomainError) { + Result.failure(e) + } + + data class Params( + val optionSetUid: String, + val pageSize: Int = 10, + val searchQuery: String? = null, + ) +} diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/model/TrackedEntitySearchItemResult.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/model/TrackedEntitySearchItemResult.kt index 3bc4f9bd79b..4daeecc39b6 100644 --- a/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/model/TrackedEntitySearchItemResult.kt +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/model/TrackedEntitySearchItemResult.kt @@ -1,6 +1,6 @@ package org.dhis2.tracker.search.model -import org.dhis2.tracker.ui.input.model.TrackerInputType +import org.dhis2.tracker.input.model.TrackerInputType import java.util.Date data class TrackedEntitySearchItemResult( diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/ui/provider/ParameterSelectorItemProvider.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/ui/provider/ParameterSelectorItemProvider.kt index 20637114a78..a64ed31ac54 100644 --- a/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/ui/provider/ParameterSelectorItemProvider.kt +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/ui/provider/ParameterSelectorItemProvider.kt @@ -6,10 +6,10 @@ import androidx.compose.material.icons.outlined.QrCode2 import androidx.compose.material3.Icon import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import org.dhis2.tracker.ui.input.model.TrackerInputModel -import org.dhis2.tracker.ui.input.model.TrackerInputType -import org.dhis2.tracker.ui.input.model.TrackerInputUiEvent -import org.dhis2.tracker.ui.input.provider.TrackerInputProvider +import org.dhis2.tracker.input.model.TrackerInputType +import org.dhis2.tracker.input.ui.action.TrackerInputUiEvent +import org.dhis2.tracker.input.ui.provider.TrackerInputProvider +import org.dhis2.tracker.input.ui.state.TrackerInputUIState import org.hisp.dhis.mobile.ui.designsystem.component.InputStyle import org.hisp.dhis.mobile.ui.designsystem.component.parameter.model.ParameterSelectorItemModel import org.hisp.dhis.mobile.ui.designsystem.resource.provideDHIS2Icon @@ -17,7 +17,7 @@ import org.hisp.dhis.mobile.ui.designsystem.theme.SurfaceColor @Composable fun provideParameterSelectorItem( - inputModel: TrackerInputModel, + inputModel: TrackerInputUIState, helperText: String, onNextClicked: () -> Unit, onUiEvent: (TrackerInputUiEvent) -> Unit, diff --git a/tracker/src/desktopMain/kotlin/org/dhis2/tracker/search/data/OptionSetRepository.desktop.kt b/tracker/src/desktopMain/kotlin/org/dhis2/tracker/search/data/OptionSetRepository.desktop.kt new file mode 100644 index 00000000000..ae87059733e --- /dev/null +++ b/tracker/src/desktopMain/kotlin/org/dhis2/tracker/search/data/OptionSetRepository.desktop.kt @@ -0,0 +1,22 @@ +package org.dhis2.tracker.search.data + +import androidx.paging.PagingData +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.flowOf +import org.dhis2.tracker.input.ui.state.TrackerOptionItem + +/** + * Desktop stub implementation of OptionSetRepository. + * TODO: Implement when desktop support is added + */ +@Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING") +actual class OptionSetRepository { + actual fun getOptions( + optionSetUid: String, + pageSize: Int, + searchQuery: String?, + ): Flow> { + // Return empty flow for desktop + return flowOf(PagingData.empty()) + } +} From 8372fc82c0c230bcf9f8f11cdb173e4bbd46e4c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Miguel=20Rubio?= Date: Fri, 20 Feb 2026 10:03:48 +0100 Subject: [PATCH 057/114] test: Replaced all awaitIdle() calls with waitForIdle() (#4673) --- .../dhis2/usescases/datasets/DataSetTest.kt | 36 +++++++++---------- 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/app/src/androidTest/java/org/dhis2/usescases/datasets/DataSetTest.kt b/app/src/androidTest/java/org/dhis2/usescases/datasets/DataSetTest.kt index 893f582a233..f9f5e33e751 100644 --- a/app/src/androidTest/java/org/dhis2/usescases/datasets/DataSetTest.kt +++ b/app/src/androidTest/java/org/dhis2/usescases/datasets/DataSetTest.kt @@ -367,15 +367,15 @@ class DataSetTest : BaseTest() { } } - private suspend fun waitForTableToBeVisible() { - composeTestRule.awaitIdle() + private fun waitForTableToBeVisible() { + composeTestRule.waitForIdle() dataSetRobot { clickOnDataSetAtPosition(0) } tableIsVisible() } - private suspend fun checkTableIsNotEditable() { + private fun checkTableIsNotEditable() { tableIsVisible() composeTestRule.onNodeWithTag("TABLE_SCROLLABLE_COLUMN").printToLog("TABLE_LOG") dataSetTableRobot(composeTestRule) { @@ -385,7 +385,7 @@ class DataSetTest : BaseTest() { } } - private suspend fun checkContentBoxesAreDisplayed() { + private fun checkContentBoxesAreDisplayed() { tableIsVisible() // Check top and bottom content is displayed in initial section dataSetDetailRobot(composeTestRule) { @@ -443,7 +443,7 @@ class DataSetTest : BaseTest() { } } - private suspend fun checkCategoryIsMovedToRow() { + private fun checkCategoryIsMovedToRow() { val cellIdSection8 = "PGRlPlAzakpINVR1NVZDLCA8Y28+RmJMWlMzdWVXYlE6PGNvPg==" val cellId2Section8 = "PGRlPkZRMm84VUJsY3JTLCA8Y28+RmJMWlMzdWVXYlE6PGNvPg==" val cellIdSection16 = "PGRlPkFyUzdWeXVMOTVmLCA8Y28+RmJMWlMzdWVXYlE6PGNvPg==" @@ -554,7 +554,7 @@ class DataSetTest : BaseTest() { } } - private suspend fun checkAutomaticGroupingDisabled() { + private fun checkAutomaticGroupingDisabled() { val table19 = "t3aNCvHsoSn_0" val table219 = "aN8uN5b15YG_1" val table20 = "ck7mRNwGDjP_1" @@ -631,7 +631,7 @@ class DataSetTest : BaseTest() { } } - private suspend fun checkPivotOptions() { + private fun checkPivotOptions() { val table5 = "aN8uN5b15YG" val table23 = "aN8uN5b15YG_1" val cellIdSection5 = "PGNvYz5ET0M3ZW1MenlSaTo8ZGU+TFNKNW1LcHlFdjE=" @@ -700,29 +700,29 @@ class DataSetTest : BaseTest() { } } - private suspend fun tableIsVisible() { - composeTestRule.awaitIdle() + private fun tableIsVisible() { + composeTestRule.waitForIdle() dataSetTableRobot(composeTestRule) { assertTableIsDisplayed() } } - private suspend fun checkImmunizationTableIsDisplayed() { - composeTestRule.awaitIdle() + private fun checkImmunizationTableIsDisplayed() { + composeTestRule.waitForIdle() dataSetTableRobot(composeTestRule) { assertImmunizationTableIsDisplayed() } } - private suspend fun syncButtonIsAvailableStep() { - composeTestRule.awaitIdle() + private fun syncButtonIsAvailableStep() { + composeTestRule.waitForIdle() dataSetTableRobot(composeTestRule) { syncIsAvailable() } } - private suspend fun checkTotals() { - composeTestRule.awaitIdle() + private fun checkTotals() { + composeTestRule.waitForIdle() dataSetTableRobot(composeTestRule) { totalsAreDisplayed( tableId = "dzjKKQq0cSO", @@ -787,14 +787,14 @@ class DataSetTest : BaseTest() { } } - private suspend fun checkIndicatorsStep() { - composeTestRule.awaitIdle() + private fun checkIndicatorsStep() { + composeTestRule.waitForIdle() dataSetTableRobot(composeTestRule) { indicatorTableIsDisplayed() } } - private suspend fun reenterDataSetToCheckValueSavedStep() { + private fun reenterDataSetToCheckValueSavedStep() { val cell00Id = "PGRlPnM0Nm01TVMwaHh1Ojxjb2M+UHJsdDBDMVJGMHM=" dataSetTableRobot(composeTestRule) { From 387070c5359e2facecd9652f8366b8401b78b7f8 Mon Sep 17 00:00:00 2001 From: Xavier Molloy Date: Fri, 20 Feb 2026 11:41:04 +0100 Subject: [PATCH 058/114] feat: [ANDROAPP-7470] - II - Fetch parameters use case [skip size] (#4669) * feat: [ANDROAPP-7470] Fetch Search parameters use case * feat: [ANDROAPP-7470] small adaptation * feat: [ANDROAPP-7470] Adapt to new enum values in input type * feat: [ANDROAPP-7470] code review comments * feat: [ANDROAPP-7470] code review comments * feat: [ANDROAPP-7470] Remove todo, make methods internal in Fetch Search parameters usecase * feat: [ANDROAPP-7470] Add tests for fetch parameters usecase (#4670) * feat: [ANDROAPP-7470] Fetch Search parameters use case * feat: [ANDROAPP-7470] small adaptation * feat: [ANDROAPP-7470] Adapt to new enum values in input type * feat: [ANDROAPP-7470] code review comments * feat: [ANDROAPP-7470] code review comments * feat: [ANDROAPP-7470] Remove todo, make methods internal in Fetch Search parameters usecase * feat: [ANDROAPP-7470] Add tests for fetch parameters usecase --- .../mapper/ParameterInputModelMapper.kt | 20 +- .../mapper/ParameterInputModelMapperTest.kt | 14 +- ...omainToSDKTrackedEntitySearchItemMapper.kt | 6 +- .../data/SearchParametersRepositoryImpl.kt | 297 ++++++++++++++++ .../data/TrackedEntitySearchItemMapper.kt | 2 +- .../tracker/input/model/TrackerInputType.kt | 6 +- .../input/ui/provider/TrackerInputProvider.kt | 4 +- .../search/data/SearchParametersRepository.kt | 9 + .../search/domain/FetchSearchParameters.kt | 42 +++ .../search/model/FetchSearchParametersData.kt | 6 + .../tracker/search/model/SearchOperator.kt | 8 + .../search/model/SearchParameterModel.kt | 14 + .../domain/FetchSearchParametersTest.kt | 335 ++++++++++++++++++ 13 files changed, 738 insertions(+), 25 deletions(-) create mode 100644 tracker/src/androidMain/kotlin/org/dhis2/tracker/search/data/SearchParametersRepositoryImpl.kt create mode 100644 tracker/src/commonMain/kotlin/org/dhis2/tracker/search/data/SearchParametersRepository.kt create mode 100644 tracker/src/commonMain/kotlin/org/dhis2/tracker/search/domain/FetchSearchParameters.kt create mode 100644 tracker/src/commonMain/kotlin/org/dhis2/tracker/search/model/FetchSearchParametersData.kt create mode 100644 tracker/src/commonMain/kotlin/org/dhis2/tracker/search/model/SearchOperator.kt create mode 100644 tracker/src/commonMain/kotlin/org/dhis2/tracker/search/model/SearchParameterModel.kt create mode 100644 tracker/src/commonTest/kotlin/org/dhis2/tracker/search/domain/FetchSearchParametersTest.kt diff --git a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/searchparameters/mapper/ParameterInputModelMapper.kt b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/searchparameters/mapper/ParameterInputModelMapper.kt index e49883292b3..c72fa49130a 100644 --- a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/searchparameters/mapper/ParameterInputModelMapper.kt +++ b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/searchparameters/mapper/ParameterInputModelMapper.kt @@ -103,13 +103,10 @@ private fun org.dhis2.form.model.OptionSetConfiguration.toTrackerOptionSetConfig internal fun getInputTypeForOptionSetByRenderingType(renderingType: UiRenderType?): TrackerInputType = when (renderingType) { - UiRenderType.HORIZONTAL_RADIOBUTTONS, - UiRenderType.VERTICAL_RADIOBUTTONS, - -> TrackerInputType.RADIO_BUTTON - - UiRenderType.HORIZONTAL_CHECKBOXES, - UiRenderType.VERTICAL_CHECKBOXES, - -> TrackerInputType.CHECKBOX + UiRenderType.HORIZONTAL_CHECKBOXES -> TrackerInputType.HORIZONTAL_CHECKBOXES + UiRenderType.VERTICAL_CHECKBOXES -> TrackerInputType.VERTICAL_CHECKBOXES + UiRenderType.HORIZONTAL_RADIOBUTTONS -> TrackerInputType.HORIZONTAL_RADIOBUTTONS + UiRenderType.VERTICAL_RADIOBUTTONS -> TrackerInputType.VERTICAL_RADIOBUTTONS UiRenderType.MATRIX -> TrackerInputType.MATRIX @@ -142,11 +139,12 @@ internal fun getInputTypeByValueType( ValueType.EMAIL -> TrackerInputType.EMAIL ValueType.BOOLEAN -> { when (renderingType) { - UiRenderType.HORIZONTAL_CHECKBOXES, - UiRenderType.VERTICAL_CHECKBOXES, - -> TrackerInputType.CHECKBOX + UiRenderType.HORIZONTAL_CHECKBOXES -> TrackerInputType.HORIZONTAL_CHECKBOXES + UiRenderType.VERTICAL_CHECKBOXES -> TrackerInputType.VERTICAL_CHECKBOXES + UiRenderType.HORIZONTAL_RADIOBUTTONS -> TrackerInputType.HORIZONTAL_RADIOBUTTONS + UiRenderType.VERTICAL_RADIOBUTTONS -> TrackerInputType.VERTICAL_RADIOBUTTONS - else -> TrackerInputType.RADIO_BUTTON + else -> TrackerInputType.VERTICAL_RADIOBUTTONS } } diff --git a/app/src/test/java/org/dhis2/usescases/searchTrackEntity/searchparameters/mapper/ParameterInputModelMapperTest.kt b/app/src/test/java/org/dhis2/usescases/searchTrackEntity/searchparameters/mapper/ParameterInputModelMapperTest.kt index 7196a8f808d..e19f109a773 100644 --- a/app/src/test/java/org/dhis2/usescases/searchTrackEntity/searchparameters/mapper/ParameterInputModelMapperTest.kt +++ b/app/src/test/java/org/dhis2/usescases/searchTrackEntity/searchparameters/mapper/ParameterInputModelMapperTest.kt @@ -26,25 +26,25 @@ class ParameterInputModelMapperTest { @Test fun `should return RADIO_BUTTON for horizontal radio buttons rendering type`() { val result = getInputTypeForOptionSetByRenderingType(UiRenderType.HORIZONTAL_RADIOBUTTONS) - assertEquals(TrackerInputType.RADIO_BUTTON, result) + assertEquals(TrackerInputType.HORIZONTAL_RADIOBUTTONS, result) } @Test fun `should return RADIO_BUTTON for vertical radio buttons rendering type`() { val result = getInputTypeForOptionSetByRenderingType(UiRenderType.VERTICAL_RADIOBUTTONS) - assertEquals(TrackerInputType.RADIO_BUTTON, result) + assertEquals(TrackerInputType.VERTICAL_RADIOBUTTONS, result) } @Test fun `should return CHECKBOX for horizontal checkboxes rendering type`() { val result = getInputTypeForOptionSetByRenderingType(UiRenderType.HORIZONTAL_CHECKBOXES) - assertEquals(TrackerInputType.CHECKBOX, result) + assertEquals(TrackerInputType.HORIZONTAL_CHECKBOXES, result) } @Test fun `should return CHECKBOX for vertical checkboxes rendering type`() { val result = getInputTypeForOptionSetByRenderingType(UiRenderType.VERTICAL_CHECKBOXES) - assertEquals(TrackerInputType.CHECKBOX, result) + assertEquals(TrackerInputType.VERTICAL_CHECKBOXES, result) } @Test @@ -156,19 +156,19 @@ class ParameterInputModelMapperTest { @Test fun `should return RADIO_BUTTON for BOOLEAN value type with default rendering`() { val result = getInputTypeByValueType(ValueType.BOOLEAN, null) - assertEquals(TrackerInputType.RADIO_BUTTON, result) + assertEquals(TrackerInputType.VERTICAL_RADIOBUTTONS, result) } @Test fun `should return CHECKBOX for BOOLEAN value type with horizontal checkboxes rendering`() { val result = getInputTypeByValueType(ValueType.BOOLEAN, UiRenderType.HORIZONTAL_CHECKBOXES) - assertEquals(TrackerInputType.CHECKBOX, result) + assertEquals(TrackerInputType.HORIZONTAL_CHECKBOXES, result) } @Test fun `should return CHECKBOX for BOOLEAN value type with vertical checkboxes rendering`() { val result = getInputTypeByValueType(ValueType.BOOLEAN, UiRenderType.VERTICAL_CHECKBOXES) - assertEquals(TrackerInputType.CHECKBOX, result) + assertEquals(TrackerInputType.VERTICAL_CHECKBOXES, result) } // Test getInputTypeByValueType for TRUE_ONLY diff --git a/tracker/src/androidMain/kotlin/org/dhis2/tracker/search/data/DomainToSDKTrackedEntitySearchItemMapper.kt b/tracker/src/androidMain/kotlin/org/dhis2/tracker/search/data/DomainToSDKTrackedEntitySearchItemMapper.kt index a37b00a6968..fbeb41ddb5e 100644 --- a/tracker/src/androidMain/kotlin/org/dhis2/tracker/search/data/DomainToSDKTrackedEntitySearchItemMapper.kt +++ b/tracker/src/androidMain/kotlin/org/dhis2/tracker/search/data/DomainToSDKTrackedEntitySearchItemMapper.kt @@ -105,8 +105,10 @@ private fun TrackerInputType.toSDKValueType(): ValueType = TrackerInputType.DATE_TIME -> ValueType.DATETIME TrackerInputType.DATE -> ValueType.DATE TrackerInputType.TIME -> ValueType.TIME - TrackerInputType.CHECKBOX, - TrackerInputType.RADIO_BUTTON, + TrackerInputType.HORIZONTAL_CHECKBOXES, + TrackerInputType.VERTICAL_CHECKBOXES, + TrackerInputType.HORIZONTAL_RADIOBUTTONS, + TrackerInputType.VERTICAL_RADIOBUTTONS, -> ValueType.BOOLEAN TrackerInputType.YES_ONLY_SWITCH, TrackerInputType.YES_ONLY_CHECKBOX, diff --git a/tracker/src/androidMain/kotlin/org/dhis2/tracker/search/data/SearchParametersRepositoryImpl.kt b/tracker/src/androidMain/kotlin/org/dhis2/tracker/search/data/SearchParametersRepositoryImpl.kt new file mode 100644 index 00000000000..f09c06d7074 --- /dev/null +++ b/tracker/src/androidMain/kotlin/org/dhis2/tracker/search/data/SearchParametersRepositoryImpl.kt @@ -0,0 +1,297 @@ +package org.dhis2.tracker.search.data + +import org.dhis2.mobile.commons.customintents.CustomIntentRepository +import org.dhis2.mobile.commons.error.DomainErrorMapper +import org.dhis2.mobile.commons.model.CustomIntentActionTypeModel +import org.dhis2.tracker.input.model.TrackerInputType +import org.dhis2.tracker.search.model.SearchOperator +import org.dhis2.tracker.search.model.SearchParameterModel +import org.hisp.dhis.android.core.D2 +import org.hisp.dhis.android.core.arch.repositories.scope.RepositoryScope +import org.hisp.dhis.android.core.arch.repositories.scope.internal.TrackerSearchOperator +import org.hisp.dhis.android.core.common.ValueType +import org.hisp.dhis.android.core.common.ValueTypeRenderingType +import org.hisp.dhis.android.core.maintenance.D2Error +import org.hisp.dhis.android.core.program.ProgramTrackedEntityAttribute +import org.hisp.dhis.android.core.trackedentity.TrackedEntityAttribute +import org.hisp.dhis.android.core.trackedentity.TrackedEntityTypeAttribute + +class SearchParametersRepositoryImpl( + val d2: D2, + val customIntentRepository: CustomIntentRepository, + val domainErrorMapper: DomainErrorMapper, +) : SearchParametersRepository { + override suspend fun getSearchParametersByProgram(programUid: String): List = + try { + // this is the attribute and its properties related to a specific program + val programTrackedEntityAttributes = + getSearchableProgramTrackedEntityAttributes(programUid) + programTrackedEntityAttributes.mapNotNull { programTrackedEntityAttribute -> + + // Now, we get the TrackedEntityAttribute with all the info + val trackedEntityAttribute = + getTrackedEntityAttributeByProgram(programTrackedEntityAttribute) + trackedEntityAttribute?.let { attribute -> + val renderingType = programTrackedEntityAttribute.renderType()?.mobile()?.type() + val customIntent = + customIntentRepository.getCustomIntent( + attribute.uid(), + orgUnitUid = null, + actionType = CustomIntentActionTypeModel.SEARCH, + ) + + SearchParameterModel( + uid = attribute.uid(), + label = attribute.displayFormName() ?: "", + inputType = + getInputType( + attribute = attribute, + isCustomIntent = customIntent != null, + valueTypeRenderingType = renderingType, + ), + optionSet = attribute.optionSet()?.uid(), + customIntentUid = customIntent?.uid, + minCharactersToSearch = attribute.minCharactersToSearch(), + searchOperator = getSearchOperator(attribute), + isUnique = attribute.unique() ?: false, + ) + } + } + } catch (d2Error: D2Error) { + throw domainErrorMapper.mapToDomainError(d2Error) + } + + override suspend fun getSearchParametersByTrackedEntityType(trackedEntityTypeUid: String): List = + try { + val trackedEntityAttributes = + getTrackedEntityAttributesByTrackedEntityType(trackedEntityTypeUid) + trackedEntityAttributes.mapNotNull { trackedEntityTypeAttribute -> + // Now, we get the TrackedEntityAttribute with all the info + val trackedEntityAttribute = + getTrackedEntityAttributeByTrackedEntityType(trackedEntityTypeAttribute) + trackedEntityAttribute?.let { attribute -> + SearchParameterModel( + uid = attribute.uid(), + label = attribute.displayFormName() ?: "", + inputType = + getInputType( + attribute = attribute, + isCustomIntent = false, + valueTypeRenderingType = null, + ), + optionSet = attribute.optionSet()?.uid(), + customIntentUid = null, + minCharactersToSearch = attribute.minCharactersToSearch(), + searchOperator = getSearchOperator(attribute), + isUnique = attribute.unique() ?: false, + ) + } + } + } catch (d2Error: D2Error) { + throw domainErrorMapper.mapToDomainError(d2Error) + } + + private fun getTrackedEntityAttributeByTrackedEntityType( + trackedEntityTypeAttribute: TrackedEntityTypeAttribute, + ): TrackedEntityAttribute? = + trackedEntityTypeAttribute.trackedEntityAttribute()?.uid()?.let { uid -> + d2 + .trackedEntityModule() + .trackedEntityAttributes() + .uid(uid) + .blockingGet() + } + + private fun getTrackedEntityAttributesByTrackedEntityType(trackedEntityTypeUid: String): List = + d2 + .trackedEntityModule() + .trackedEntityTypeAttributes() + .byTrackedEntityTypeUid() + .eq(trackedEntityTypeUid) + .bySearchable() + .isTrue + .blockingGet() + + private fun getTrackedEntityAttributeByProgram(programTrackedEntityAttribute: ProgramTrackedEntityAttribute): TrackedEntityAttribute? = + programTrackedEntityAttribute.trackedEntityAttribute()?.uid()?.let { uid -> + d2 + .trackedEntityModule() + .trackedEntityAttributes() + .uid(uid) + .blockingGet() + } + + private fun getSearchableProgramTrackedEntityAttributes(programUid: String): List = + d2 + .programModule() + .programTrackedEntityAttributes() + .withRenderType() + .byProgram() + .eq(programUid) + .orderBySortOrder(RepositoryScope.OrderByDirection.ASC) + .blockingGet() + .filter { programAttribute -> + val isSearchable = programAttribute.searchable()!! + val isUnique = + d2 + .trackedEntityModule() + .trackedEntityAttributes() + .uid(programAttribute.trackedEntityAttribute()!!.uid()) + .blockingGet() + ?.unique() == true + isSearchable || isUnique + } + + private fun getInputType( + attribute: TrackedEntityAttribute, + isCustomIntent: Boolean, + valueTypeRenderingType: ValueTypeRenderingType?, + ): TrackerInputType = + when { + attribute.optionSet()?.uid() != null && attribute.valueType() != ValueType.MULTI_TEXT + -> getInputTypeForOptionSetByRenderingType(valueTypeRenderingType) + + isCustomIntent -> TrackerInputType.CUSTOM_INTENT + + else -> getInputTypeByValueType(attribute.valueType(), valueTypeRenderingType) + } + + private fun getInputTypeByValueType( + valueType: ValueType?, + valueTypeRenderingType: ValueTypeRenderingType?, + ): TrackerInputType = + when (valueType) { + ValueType.TEXT -> { + when (valueTypeRenderingType) { + ValueTypeRenderingType.QR_CODE, ValueTypeRenderingType.GS1_DATAMATRIX -> TrackerInputType.QR_CODE + ValueTypeRenderingType.BAR_CODE -> TrackerInputType.BAR_CODE + else -> TrackerInputType.TEXT + } + } + + ValueType.INTEGER_POSITIVE -> TrackerInputType.INTEGER_POSITIVE + ValueType.INTEGER_ZERO_OR_POSITIVE -> TrackerInputType.INTEGER_ZERO_OR_POSITIVE + ValueType.PERCENTAGE -> TrackerInputType.PERCENTAGE + ValueType.NUMBER -> TrackerInputType.NUMBER + ValueType.INTEGER_NEGATIVE -> TrackerInputType.INTEGER_NEGATIVE + ValueType.LONG_TEXT -> TrackerInputType.LONG_TEXT + ValueType.INTEGER -> TrackerInputType.INTEGER + ValueType.ORGANISATION_UNIT -> TrackerInputType.ORGANISATION_UNIT + ValueType.EMAIL -> TrackerInputType.EMAIL + ValueType.BOOLEAN -> { + when (valueTypeRenderingType) { + ValueTypeRenderingType.HORIZONTAL_CHECKBOXES -> TrackerInputType.HORIZONTAL_CHECKBOXES + ValueTypeRenderingType.VERTICAL_CHECKBOXES -> TrackerInputType.VERTICAL_CHECKBOXES + ValueTypeRenderingType.HORIZONTAL_RADIOBUTTONS -> TrackerInputType.HORIZONTAL_RADIOBUTTONS + else -> TrackerInputType.VERTICAL_RADIOBUTTONS + } + } + + ValueType.TRUE_ONLY -> { + when (valueTypeRenderingType) { + ValueTypeRenderingType.TOGGLE -> TrackerInputType.YES_ONLY_SWITCH + else -> TrackerInputType.YES_ONLY_CHECKBOX + } + } + + ValueType.PHONE_NUMBER -> TrackerInputType.PHONE_NUMBER + ValueType.DATE -> TrackerInputType.DATE + ValueType.DATETIME -> TrackerInputType.DATE_TIME + ValueType.TIME -> TrackerInputType.TIME + + ValueType.AGE -> TrackerInputType.AGE + ValueType.MULTI_TEXT -> TrackerInputType.MULTI_SELECTION + + ValueType.USERNAME, + ValueType.LETTER, + ValueType.UNIT_INTERVAL, + ValueType.TRACKER_ASSOCIATE, + ValueType.REFERENCE, + ValueType.COORDINATE, + ValueType.IMAGE, + ValueType.FILE_RESOURCE, + ValueType.GEOJSON, + ValueType.URL, + null, + -> TrackerInputType.NOT_SUPPORTED + } + + private fun getInputTypeForOptionSetByRenderingType(valueTypeRenderingType: ValueTypeRenderingType?): TrackerInputType = + when (valueTypeRenderingType) { + ValueTypeRenderingType.HORIZONTAL_RADIOBUTTONS -> TrackerInputType.HORIZONTAL_RADIOBUTTONS + ValueTypeRenderingType.VERTICAL_RADIOBUTTONS -> TrackerInputType.VERTICAL_RADIOBUTTONS + ValueTypeRenderingType.HORIZONTAL_CHECKBOXES -> TrackerInputType.HORIZONTAL_CHECKBOXES + ValueTypeRenderingType.VERTICAL_CHECKBOXES -> TrackerInputType.VERTICAL_CHECKBOXES + else -> TrackerInputType.DROPDOWN + } + + private fun getSearchOperator(attribute: TrackedEntityAttribute): SearchOperator? { + val mainOperators = listOf(SearchOperator.LIKE, SearchOperator.SW, SearchOperator.EQ) + val blockedOperators = + attribute + .blockedSearchOperators() + ?.mapNotNull { sdkOperator -> + sdkOperator.toSearchOperator() + } ?: emptyList() + val preferredOperator: SearchOperator? = + attribute.preferredSearchOperator()?.toSearchOperator() + val valueType = attribute.valueType() + val hasOptionSet = attribute.optionSet() != null + val isUnique = attribute.unique() == true + + val alwaysEqValueTypes = + listOf( + ValueType.BOOLEAN, + ValueType.TRUE_ONLY, + ValueType.AGE, + ValueType.ORGANISATION_UNIT, + ) + + val preferredOperatorValueTypes = + listOf( + ValueType.NUMBER, + ValueType.INTEGER, + ValueType.INTEGER_POSITIVE, + ValueType.INTEGER_NEGATIVE, + ValueType.INTEGER_ZERO_OR_POSITIVE, + ValueType.DATE, + ValueType.DATETIME, + ValueType.TIME, + ValueType.TEXT, + ValueType.LONG_TEXT, + ValueType.EMAIL, + ValueType.PHONE_NUMBER, + ValueType.PERCENTAGE, + ) + + return when { + isUnique || + (hasOptionSet && valueType != ValueType.MULTI_TEXT) || + valueType in alwaysEqValueTypes -> { + SearchOperator.EQ + } + + valueType == ValueType.MULTI_TEXT -> { + mainOperators.firstOrNull { it !in blockedOperators } + } + + valueType in preferredOperatorValueTypes -> { + if (preferredOperator != null && preferredOperator !in blockedOperators) { + preferredOperator + } else { + mainOperators.firstOrNull { it !in blockedOperators } + } + } + + else -> null + } + } + + private fun TrackerSearchOperator.toSearchOperator() = + when (this) { + TrackerSearchOperator.LIKE -> SearchOperator.LIKE + TrackerSearchOperator.SW -> SearchOperator.SW + TrackerSearchOperator.EW -> SearchOperator.EW + TrackerSearchOperator.EQ -> SearchOperator.EQ + } +} diff --git a/tracker/src/androidMain/kotlin/org/dhis2/tracker/search/data/TrackedEntitySearchItemMapper.kt b/tracker/src/androidMain/kotlin/org/dhis2/tracker/search/data/TrackedEntitySearchItemMapper.kt index eb05207c5b2..6f61deeb5b7 100644 --- a/tracker/src/androidMain/kotlin/org/dhis2/tracker/search/data/TrackedEntitySearchItemMapper.kt +++ b/tracker/src/androidMain/kotlin/org/dhis2/tracker/search/data/TrackedEntitySearchItemMapper.kt @@ -108,7 +108,7 @@ private fun ValueType.toTrackerInputType(): TrackerInputType = ValueType.INTEGER_POSITIVE -> TrackerInputType.INTEGER_POSITIVE ValueType.INTEGER_NEGATIVE -> TrackerInputType.INTEGER_NEGATIVE ValueType.INTEGER_ZERO_OR_POSITIVE -> TrackerInputType.INTEGER_ZERO_OR_POSITIVE - ValueType.BOOLEAN -> TrackerInputType.CHECKBOX + ValueType.BOOLEAN -> TrackerInputType.HORIZONTAL_RADIOBUTTONS ValueType.TRUE_ONLY -> TrackerInputType.YES_ONLY_CHECKBOX ValueType.DATE -> TrackerInputType.DATE ValueType.DATETIME -> TrackerInputType.DATE_TIME diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/model/TrackerInputType.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/model/TrackerInputType.kt index 02b819fb954..a8debd148c1 100644 --- a/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/model/TrackerInputType.kt +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/model/TrackerInputType.kt @@ -19,8 +19,10 @@ enum class TrackerInputType { MULTI_SELECTION, QR_CODE, BAR_CODE, - CHECKBOX, - RADIO_BUTTON, + HORIZONTAL_CHECKBOXES, + VERTICAL_CHECKBOXES, + HORIZONTAL_RADIOBUTTONS, + VERTICAL_RADIOBUTTONS, YES_ONLY_SWITCH, YES_ONLY_CHECKBOX, DATE_TIME, diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/provider/TrackerInputProvider.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/provider/TrackerInputProvider.kt index df64a705398..ed1d1fad925 100644 --- a/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/provider/TrackerInputProvider.kt +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/provider/TrackerInputProvider.kt @@ -542,7 +542,7 @@ fun TrackerInputProvider( ) } - TrackerInputType.CHECKBOX -> { + TrackerInputType.HORIZONTAL_CHECKBOXES, TrackerInputType.VERTICAL_CHECKBOXES -> { TrackerCheckboxInputProvider( model = inputModel, inputStyle = inputStyle, @@ -558,7 +558,7 @@ fun TrackerInputProvider( ) } - TrackerInputType.RADIO_BUTTON -> { + TrackerInputType.HORIZONTAL_RADIOBUTTONS, TrackerInputType.VERTICAL_RADIOBUTTONS -> { TrackerRadioButtonInputProvider( model = inputModel, inputStyle = inputStyle, diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/data/SearchParametersRepository.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/data/SearchParametersRepository.kt new file mode 100644 index 00000000000..5b13e398794 --- /dev/null +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/data/SearchParametersRepository.kt @@ -0,0 +1,9 @@ +package org.dhis2.tracker.search.data + +import org.dhis2.tracker.search.model.SearchParameterModel + +interface SearchParametersRepository { + suspend fun getSearchParametersByProgram(programUid: String): List + + suspend fun getSearchParametersByTrackedEntityType(trackedEntityTypeUid: String): List +} diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/domain/FetchSearchParameters.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/domain/FetchSearchParameters.kt new file mode 100644 index 00000000000..15995134fca --- /dev/null +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/domain/FetchSearchParameters.kt @@ -0,0 +1,42 @@ +package org.dhis2.tracker.search.domain + +import kotlinx.coroutines.withContext +import org.dhis2.mobile.commons.coroutine.Dispatcher +import org.dhis2.mobile.commons.domain.UseCase +import org.dhis2.mobile.commons.error.DomainError +import org.dhis2.tracker.input.model.TrackerInputType +import org.dhis2.tracker.search.data.SearchParametersRepository +import org.dhis2.tracker.search.model.FetchSearchParametersData +import org.dhis2.tracker.search.model.SearchParameterModel + +class FetchSearchParameters( + val dispatcher: Dispatcher, + val repository: SearchParametersRepository, +) : UseCase> { + override suspend fun invoke(input: FetchSearchParametersData): Result> = + withContext(dispatcher.io) { + try { + val searchParameters = + input.programUid?.let { + repository.getSearchParametersByProgram(it) + } ?: repository.getSearchParametersByTrackedEntityType(input.teiTypeUid) + + Result.success(sortSearchParameters(searchParameters)) + } catch (e: DomainError) { + Result.failure(e) + } + } + + // Sort parameters to list first QR or BarCode uniques, then QR or BarCode and then remaining uniques + internal fun sortSearchParameters(parameters: List): List = + parameters.sortedWith( + compareByDescending { + isQrCodeOrBarCode(it.inputType) && it.isUnique + }.thenByDescending { + isQrCodeOrBarCode(it.inputType) + }.thenByDescending { it.isUnique }, + ) + + internal fun isQrCodeOrBarCode(inputType: TrackerInputType?): Boolean = + inputType == TrackerInputType.QR_CODE || inputType == TrackerInputType.BAR_CODE +} diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/model/FetchSearchParametersData.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/model/FetchSearchParametersData.kt new file mode 100644 index 00000000000..7e09670f911 --- /dev/null +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/model/FetchSearchParametersData.kt @@ -0,0 +1,6 @@ +package org.dhis2.tracker.search.model + +data class FetchSearchParametersData( + val teiTypeUid: String, + val programUid: String? = null, +) diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/model/SearchOperator.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/model/SearchOperator.kt new file mode 100644 index 00000000000..7f886bd1054 --- /dev/null +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/model/SearchOperator.kt @@ -0,0 +1,8 @@ +package org.dhis2.tracker.search.model + +enum class SearchOperator { + LIKE, + SW, + EW, + EQ, +} diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/model/SearchParameterModel.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/model/SearchParameterModel.kt new file mode 100644 index 00000000000..83f5a98dfba --- /dev/null +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/model/SearchParameterModel.kt @@ -0,0 +1,14 @@ +package org.dhis2.tracker.search.model + +import org.dhis2.tracker.input.model.TrackerInputType + +data class SearchParameterModel( + val uid: String, + val label: String, + val inputType: TrackerInputType, + val optionSet: String?, + val customIntentUid: String? = null, + val minCharactersToSearch: Int?, + val searchOperator: SearchOperator?, + val isUnique: Boolean, +) diff --git a/tracker/src/commonTest/kotlin/org/dhis2/tracker/search/domain/FetchSearchParametersTest.kt b/tracker/src/commonTest/kotlin/org/dhis2/tracker/search/domain/FetchSearchParametersTest.kt new file mode 100644 index 00000000000..e0fdab3c52a --- /dev/null +++ b/tracker/src/commonTest/kotlin/org/dhis2/tracker/search/domain/FetchSearchParametersTest.kt @@ -0,0 +1,335 @@ +package org.dhis2.tracker.search.domain + +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.test.UnconfinedTestDispatcher +import kotlinx.coroutines.test.runTest +import org.dhis2.mobile.commons.coroutine.Dispatcher +import org.dhis2.mobile.commons.error.DomainError +import org.dhis2.tracker.input.model.TrackerInputType +import org.dhis2.tracker.search.data.SearchParametersRepository +import org.dhis2.tracker.search.model.FetchSearchParametersData +import org.dhis2.tracker.search.model.SearchOperator +import org.dhis2.tracker.search.model.SearchParameterModel +import org.junit.Assert.assertEquals +import org.junit.Assert.assertFalse +import org.junit.Assert.assertTrue +import org.junit.Before +import org.junit.Test +import org.mockito.kotlin.doReturn +import org.mockito.kotlin.mock +import org.mockito.kotlin.verify +import org.mockito.kotlin.whenever + +class FetchSearchParametersTest { + private lateinit var useCase: FetchSearchParameters + + private val repository: SearchParametersRepository = mock() + + @OptIn(ExperimentalCoroutinesApi::class) + private val testDispatcher = UnconfinedTestDispatcher() + private val dispatcher = + Dispatcher( + io = testDispatcher, + main = Dispatchers.Unconfined, + default = Dispatchers.Unconfined, + ) + + @Before + fun setup() { + useCase = + FetchSearchParameters( + dispatcher = dispatcher, + repository = repository, + ) + } + + @Test + fun `invoke should return sorted parameters for program`() = + runTest { + // Given + val programUid = "programUid123" + val teiTypeUid = "teiTypeUid123" + val input = FetchSearchParametersData(teiTypeUid = teiTypeUid, programUid = programUid) + + val parameters = + listOf( + createSearchParameter("param1", TrackerInputType.TEXT, isUnique = false), + createSearchParameter("param2", TrackerInputType.QR_CODE, isUnique = true), + createSearchParameter("param3", TrackerInputType.BAR_CODE, isUnique = false), + ) + + whenever(repository.getSearchParametersByProgram(programUid)) doReturn parameters + + // When + val result = useCase.invoke(input) + + // Then + assertTrue(result.isSuccess) + verify(repository).getSearchParametersByProgram(programUid) + + val sortedParameters = result.getOrNull() + assertEquals(3, sortedParameters?.size) + // QR_CODE unique should be first + assertEquals("param2", sortedParameters?.get(0)?.uid) + assertEquals(TrackerInputType.QR_CODE, sortedParameters?.get(0)?.inputType) + assertTrue(sortedParameters?.get(0)?.isUnique == true) + } + + @Test + fun `invoke should return sorted parameters for tracked entity type when no program`() = + runTest { + // Given + val teiTypeUid = "teiTypeUid123" + val input = FetchSearchParametersData(teiTypeUid = teiTypeUid, programUid = null) + + val parameters = + listOf( + createSearchParameter("param1", TrackerInputType.TEXT, isUnique = true), + createSearchParameter("param2", TrackerInputType.EMAIL, isUnique = false), + ) + + whenever(repository.getSearchParametersByTrackedEntityType(teiTypeUid)) doReturn parameters + + // When + val result = useCase.invoke(input) + + // Then + assertTrue(result.isSuccess) + verify(repository).getSearchParametersByTrackedEntityType(teiTypeUid) + + val sortedParameters = result.getOrNull() + assertEquals(2, sortedParameters?.size) + } + + @Test + fun `invoke should return failure when repository throws DomainError`() = + runTest { + // Given + val teiTypeUid = "teiTypeUid123" + val input = FetchSearchParametersData(teiTypeUid = teiTypeUid, programUid = null) + val domainError = DomainError.UnexpectedError("Test error") + + whenever(repository.getSearchParametersByTrackedEntityType(teiTypeUid)).thenAnswer { throw domainError } + + val result = useCase.invoke(input) + + // Then + assertTrue(result.isFailure) + assertEquals(domainError, result.exceptionOrNull()) + } + + @Test + fun `sortSearchParameters should prioritize QR and BarCode unique parameters`() { + // Given + val parameters = + listOf( + createSearchParameter("text1", TrackerInputType.TEXT, isUnique = false), + createSearchParameter("qr1", TrackerInputType.QR_CODE, isUnique = true), + createSearchParameter("text2", TrackerInputType.TEXT, isUnique = true), + createSearchParameter("bar1", TrackerInputType.BAR_CODE, isUnique = true), + createSearchParameter("qr2", TrackerInputType.QR_CODE, isUnique = false), + ) + + // When + val sorted = useCase.sortSearchParameters(parameters) + + // Then + assertEquals(5, sorted.size) + // First two should be QR_CODE or BAR_CODE with unique + assertTrue(useCase.isQrCodeOrBarCode(sorted[0].inputType) && sorted[0].isUnique) + assertTrue(useCase.isQrCodeOrBarCode(sorted[1].inputType) && sorted[1].isUnique) + // Third should be QR_CODE without unique + assertTrue(useCase.isQrCodeOrBarCode(sorted[2].inputType)) + // Fourth should be text with unique + assertEquals(TrackerInputType.TEXT, sorted[3].inputType) + assertTrue(sorted[3].isUnique) + // Last should be text without unique + assertEquals(TrackerInputType.TEXT, sorted[4].inputType) + assertFalse(sorted[4].isUnique) + } + + @Test + fun `sortSearchParameters should handle empty list`() { + // Given + val parameters = emptyList() + + // When + val sorted = useCase.sortSearchParameters(parameters) + + // Then + assertTrue(sorted.isEmpty()) + } + + @Test + fun `sortSearchParameters should handle list with only non-QR-BarCode parameters`() { + // Given + val parameters = + listOf( + createSearchParameter("text1", TrackerInputType.TEXT, isUnique = false), + createSearchParameter("email1", TrackerInputType.EMAIL, isUnique = true), + createSearchParameter("number1", TrackerInputType.NUMBER, isUnique = false), + ) + + // When + val sorted = useCase.sortSearchParameters(parameters) + + // Then + assertEquals(3, sorted.size) + // Unique should come before non-unique + assertTrue(sorted[0].isUnique) + assertEquals("email1", sorted[0].uid) + assertFalse(sorted[1].isUnique) + assertFalse(sorted[2].isUnique) + } + + @Test + fun `sortSearchParameters should handle list with only QR and BarCode parameters`() { + // Given + val parameters = + listOf( + createSearchParameter("qr1", TrackerInputType.QR_CODE, isUnique = false), + createSearchParameter("bar1", TrackerInputType.BAR_CODE, isUnique = true), + createSearchParameter("qr2", TrackerInputType.QR_CODE, isUnique = true), + createSearchParameter("bar2", TrackerInputType.BAR_CODE, isUnique = false), + ) + + // When + val sorted = useCase.sortSearchParameters(parameters) + + // Then + assertEquals(4, sorted.size) + // First two should be unique QR or BarCode + assertTrue(sorted[0].isUnique) + assertTrue(sorted[1].isUnique) + // Last two should be non-unique QR or BarCode + assertFalse(sorted[2].isUnique) + assertFalse(sorted[3].isUnique) + } + + @Test + fun `isQrCodeOrBarCode should return true for QR_CODE`() { + // When + val result = useCase.isQrCodeOrBarCode(TrackerInputType.QR_CODE) + + // Then + assertTrue(result) + } + + @Test + fun `isQrCodeOrBarCode should return true for BAR_CODE`() { + // When + val result = useCase.isQrCodeOrBarCode(TrackerInputType.BAR_CODE) + + // Then + assertTrue(result) + } + + @Test + fun `isQrCodeOrBarCode should return false for TEXT`() { + // When + val result = useCase.isQrCodeOrBarCode(TrackerInputType.TEXT) + + // Then + assertFalse(result) + } + + @Test + fun `isQrCodeOrBarCode should return false for null`() { + // When + val result = useCase.isQrCodeOrBarCode(null) + + // Then + assertFalse(result) + } + + @Test + fun `isQrCodeOrBarCode should return false for other input types`() { + // Test various other input types + assertFalse(useCase.isQrCodeOrBarCode(TrackerInputType.EMAIL)) + assertFalse(useCase.isQrCodeOrBarCode(TrackerInputType.NUMBER)) + assertFalse(useCase.isQrCodeOrBarCode(TrackerInputType.DATE)) + assertFalse(useCase.isQrCodeOrBarCode(TrackerInputType.DATE_TIME)) + assertFalse(useCase.isQrCodeOrBarCode(TrackerInputType.PHONE_NUMBER)) + assertFalse(useCase.isQrCodeOrBarCode(TrackerInputType.ORGANISATION_UNIT)) + } + + @Test + fun `sortSearchParameters should maintain stable order for equal priority items`() { + // Given - multiple items with same priority + val parameters = + listOf( + createSearchParameter("text1", TrackerInputType.TEXT, isUnique = false), + createSearchParameter("text2", TrackerInputType.TEXT, isUnique = false), + createSearchParameter("text3", TrackerInputType.TEXT, isUnique = false), + ) + + // When + val sorted = useCase.sortSearchParameters(parameters) + + // Then - order should be maintained + assertEquals(3, sorted.size) + assertEquals("text1", sorted[0].uid) + assertEquals("text2", sorted[1].uid) + assertEquals("text3", sorted[2].uid) + } + + @Test + fun `sortSearchParameters should handle complex mixed scenario`() { + // Given - a complex realistic scenario + val parameters = + listOf( + createSearchParameter("firstName", TrackerInputType.TEXT, isUnique = false), + createSearchParameter("nationalId", TrackerInputType.TEXT, isUnique = true), + createSearchParameter("qrCode", TrackerInputType.QR_CODE, isUnique = true), + createSearchParameter("email", TrackerInputType.EMAIL, isUnique = false), + createSearchParameter("barCode", TrackerInputType.BAR_CODE, isUnique = false), + createSearchParameter("uniqueCode", TrackerInputType.TEXT, isUnique = true), + createSearchParameter("scanQr", TrackerInputType.QR_CODE, isUnique = false), + ) + + // When + val sorted = useCase.sortSearchParameters(parameters) + + // Then - verify correct sorting priority + assertEquals(7, sorted.size) + + // Position 0: QR_CODE unique + assertEquals("qrCode", sorted[0].uid) + assertTrue(sorted[0].isUnique) + assertEquals(TrackerInputType.QR_CODE, sorted[0].inputType) + + // Position 1-2: BAR_CODE or QR_CODE non-unique + assertTrue(useCase.isQrCodeOrBarCode(sorted[1].inputType)) + assertTrue(useCase.isQrCodeOrBarCode(sorted[2].inputType)) + + // Position 3-4: Other unique parameters + assertTrue(sorted[3].isUnique) + assertTrue(sorted[4].isUnique) + assertFalse(useCase.isQrCodeOrBarCode(sorted[3].inputType)) + assertFalse(useCase.isQrCodeOrBarCode(sorted[4].inputType)) + + // Position 5-6: Non-unique, non-QR/BarCode + assertFalse(sorted[5].isUnique) + assertFalse(sorted[6].isUnique) + assertFalse(useCase.isQrCodeOrBarCode(sorted[5].inputType)) + assertFalse(useCase.isQrCodeOrBarCode(sorted[6].inputType)) + } + + // Helper function to create SearchParameterModel for testing + private fun createSearchParameter( + uid: String, + inputType: TrackerInputType, + isUnique: Boolean, + ): SearchParameterModel = + SearchParameterModel( + uid = uid, + label = "Label for $uid", + inputType = inputType, + optionSet = null, + customIntentUid = null, + minCharactersToSearch = null, + searchOperator = SearchOperator.LIKE, + isUnique = isUnique, + ) +} From bf7b8e254d51aafcecad6f6b71efa7b3cc4b2e55 Mon Sep 17 00:00:00 2001 From: Xavier Molloy Date: Fri, 20 Feb 2026 13:17:50 +0100 Subject: [PATCH 059/114] feat: [ANDROAPP-7470] - III - Injection of new use cases and final prep steps (#4674) * feat: [ANDROAPP-7470] Injection of new usecases and final prep steps * feat: [ANDROAPP-7470] Remove actual desktop class --- .../searchTrackEntity/SearchTEIViewModel.kt | 4 + .../searchTrackEntity/SearchTEModule.java | 94 ++++++++++++++++++- .../SearchTeiViewModelFactory.kt | 6 ++ .../di/SearchTEKoinModule.kt | 4 + .../SearchParametersScreen.kt | 3 + .../mapper/ParameterInputModelMapper.kt | 6 +- .../SearchTEIViewModelTest.kt | 10 ++ ....android.kt => OptionSetRepositoryImpl.kt} | 7 +- .../search/di/TrackerSearchModule.android.kt | 21 +++++ .../composeResources/values/strings.xml | 6 ++ .../input/ui/action/TrackerInputAction.kt | 12 +++ .../ui/mapper/TrackerInputUiStateMapper.kt | 35 +++++++ .../ui/provider/TrackerAgeInputProvider.kt | 4 +- .../provider/TrackerCheckboxInputProvider.kt | 4 +- .../ui/provider/TrackerDateTimeProvider.kt | 4 +- .../input/ui/provider/TrackerInputProvider.kt | 6 +- .../TrackerRadioButtonInputProvider.kt | 4 +- ...InputUIState.kt => TrackerInputUiState.kt} | 6 +- .../search/data/OptionSetRepository.kt | 3 +- .../search/ui/action/SearchScreenUiEvent.kt | 9 ++ .../provider/ParameterSelectorItemProvider.kt | 4 +- .../data/OptionSetRepository.desktop.kt | 22 ----- 22 files changed, 225 insertions(+), 49 deletions(-) rename tracker/src/androidMain/kotlin/org/dhis2/tracker/search/data/{OptionSetRepository.android.kt => OptionSetRepositoryImpl.kt} (95%) create mode 100644 tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/mapper/TrackerInputUiStateMapper.kt rename tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/state/{TrackerInputUIState.kt => TrackerInputUiState.kt} (91%) create mode 100644 tracker/src/commonMain/kotlin/org/dhis2/tracker/search/ui/action/SearchScreenUiEvent.kt delete mode 100644 tracker/src/desktopMain/kotlin/org/dhis2/tracker/search/data/OptionSetRepository.desktop.kt diff --git a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEIViewModel.kt b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEIViewModel.kt index 0388f89c9ac..3dd0c002743 100644 --- a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEIViewModel.kt +++ b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEIViewModel.kt @@ -58,6 +58,8 @@ import org.dhis2.tracker.input.ui.action.CustomIntentUid import org.dhis2.tracker.input.ui.action.FieldUid import org.dhis2.tracker.input.ui.action.TrackerInputAction import org.dhis2.tracker.search.data.transformDomainTeiToSDKTei +import org.dhis2.tracker.search.domain.FetchOptionSetOptions +import org.dhis2.tracker.search.domain.FetchSearchParameters import org.dhis2.tracker.search.domain.SearchTrackedEntities import org.dhis2.tracker.search.model.SearchTrackedEntitiesInput import org.dhis2.usescases.searchTrackEntity.listView.SearchResult @@ -88,6 +90,8 @@ class SearchTEIViewModel( private val displayNameProvider: DisplayNameProvider, private val filterManager: FilterManager, private val searchTrackedEntities: SearchTrackedEntities, + private val fetchSearchParameters: FetchSearchParameters, + private val fetchOptionSetOptions: FetchOptionSetOptions, ) : ViewModel() { private var layersVisibility: Map = emptyMap() diff --git a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEModule.java b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEModule.java index 372f433cfa4..1d55b4a17b7 100644 --- a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEModule.java +++ b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEModule.java @@ -59,12 +59,24 @@ import org.dhis2.maps.model.MapScope; import org.dhis2.maps.usecases.MapStyleConfiguration; import org.dhis2.maps.utils.DhisMapUtils; +import org.dhis2.mobile.commons.coroutine.Dispatcher; import org.dhis2.mobile.commons.customintents.CustomIntentRepository; import org.dhis2.mobile.commons.customintents.CustomIntentRepositoryImpl; +import org.dhis2.mobile.commons.error.DomainErrorMapper; +import org.dhis2.mobile.commons.network.NetworkStatusProvider; +import org.dhis2.mobile.commons.network.NetworkStatusProviderImpl; import org.dhis2.mobile.commons.reporting.CrashReportController; +import org.dhis2.mobile.commons.resources.D2ErrorMessageProvider; +import org.dhis2.mobile.commons.resources.D2ErrorMessageProviderImpl; import org.dhis2.tracker.data.ProfilePictureProvider; +import org.dhis2.tracker.search.data.OptionSetRepository; +import org.dhis2.tracker.search.data.OptionSetRepositoryImpl; +import org.dhis2.tracker.search.data.SearchParametersRepository; +import org.dhis2.tracker.search.data.SearchParametersRepositoryImpl; import org.dhis2.tracker.search.data.SearchTrackedEntityRepository; import org.dhis2.tracker.search.data.SearchTrackedEntityRepositoryImpl; +import org.dhis2.tracker.search.domain.FetchOptionSetOptions; +import org.dhis2.tracker.search.domain.FetchSearchParameters; import org.dhis2.tracker.search.domain.SearchTrackedEntities; import org.dhis2.ui.ThemeManager; import org.dhis2.usescases.events.EventInfoProvider; @@ -330,7 +342,9 @@ SearchTeiViewModelFactory providesViewModelFactory( DisplayNameProvider displayNameProvider, FilterManager filterManager, ProgramConfigurationRepository programConfigurationRepository, - SearchTrackedEntities searchTrackedEntities + SearchTrackedEntities searchTrackedEntities, + FetchSearchParameters fetchSearchParameters, + FetchOptionSetOptions fetchOptionSetOptions ) { return new SearchTeiViewModelFactory( searchRepository, @@ -350,10 +364,61 @@ SearchTeiViewModelFactory providesViewModelFactory( resourceManager, displayNameProvider, filterManager, - searchTrackedEntities + searchTrackedEntities, + fetchSearchParameters, + fetchOptionSetOptions ); } + @Provides + @PerActivity + FetchSearchParameters provideFetchSearchParametersUseCase( + SearchParametersRepository searchParametersRepository + ) { + return new FetchSearchParameters( + new Dispatcher(), + searchParametersRepository + ); + } + + @Provides + @PerActivity + FetchOptionSetOptions provideFetchOptionSetOptionsUseCase( + OptionSetRepository optionSetRepository + ) { + return new FetchOptionSetOptions( + optionSetRepository + ); + } + + @Provides + @PerActivity + SearchParametersRepository provideSearchParametersRepository( + D2 d2, + CustomIntentRepository customIntentRepository, + DomainErrorMapper domainErrorMapper + ) { + return new SearchParametersRepositoryImpl( + d2, + customIntentRepository, + domainErrorMapper + ); + } + + @Provides + @PerActivity + OptionSetRepository provideOptionSetRepository( + D2 d2, + DomainErrorMapper domainErrorMapper + ) { + return new OptionSetRepositoryImpl( + d2, + domainErrorMapper + ); + } + + + @Provides @PerActivity SearchTrackedEntities provideLoadSearchResultsUseCase( @@ -447,4 +512,29 @@ WorkingListViewModelFactory provideWorkingListViewModelFactory( ) { return new WorkingListViewModelFactory(initialProgram, filterRepository); } + + @Provides + @PerActivity + DomainErrorMapper provideDomainErrorMapper( + D2ErrorMessageProvider d2ErrorMessageProvider, + NetworkStatusProvider networkStatusProvider + ) { + return new DomainErrorMapper( + d2ErrorMessageProvider, + networkStatusProvider + ); + } + + @Provides + @PerActivity + D2ErrorMessageProvider provideD2ErrorMessageProvider() { + return new D2ErrorMessageProviderImpl(); + } + + @Provides + @PerActivity + NetworkStatusProvider provideNetworkStatusProvider() { + + return new NetworkStatusProviderImpl(moduleContext); + } } diff --git a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTeiViewModelFactory.kt b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTeiViewModelFactory.kt index 6358f8bebea..6244a20203b 100644 --- a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTeiViewModelFactory.kt +++ b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTeiViewModelFactory.kt @@ -8,6 +8,8 @@ import org.dhis2.commons.resources.ResourceManager import org.dhis2.commons.viewmodel.DispatcherProvider import org.dhis2.form.ui.provider.DisplayNameProvider import org.dhis2.maps.usecases.MapStyleConfiguration +import org.dhis2.tracker.search.domain.FetchOptionSetOptions +import org.dhis2.tracker.search.domain.FetchSearchParameters import org.dhis2.tracker.search.domain.SearchTrackedEntities class SearchTeiViewModelFactory( @@ -24,6 +26,8 @@ class SearchTeiViewModelFactory( private val displayNameProvider: DisplayNameProvider, private val filterManager: FilterManager, private val searchTrackedEntities: SearchTrackedEntities, + private val fetchSearchParameters: FetchSearchParameters, + private val fetchOptionSetOptions: FetchOptionSetOptions, ) : ViewModelProvider.Factory { override fun create(modelClass: Class): T = SearchTEIViewModel( @@ -40,5 +44,7 @@ class SearchTeiViewModelFactory( displayNameProvider, filterManager, searchTrackedEntities, + fetchSearchParameters, + fetchOptionSetOptions, ) as T } diff --git a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/di/SearchTEKoinModule.kt b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/di/SearchTEKoinModule.kt index c87e8f1a9a5..710d7a9d45e 100644 --- a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/di/SearchTEKoinModule.kt +++ b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/di/SearchTEKoinModule.kt @@ -39,6 +39,8 @@ val searchTEKoinModule = displayNameProvider = get(), filterManager = get(), searchTrackedEntities = get { parametersOf(teType) }, + fetchSearchParameters = get(), + fetchOptionSetOptions = get(), ) } @@ -67,6 +69,8 @@ val searchTEKoinModule = displayNameProvider = get(), filterManager = get(), searchTrackedEntities = get { parametersOf(teType) }, + fetchSearchParameters = get(), + fetchOptionSetOptions = get(), ) } } diff --git a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/searchparameters/SearchParametersScreen.kt b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/searchparameters/SearchParametersScreen.kt index 013f70a01ea..0103bee77e7 100644 --- a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/searchparameters/SearchParametersScreen.kt +++ b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/searchparameters/SearchParametersScreen.kt @@ -471,6 +471,9 @@ fun initSearchScreen( }, ) } + + is TrackerInputAction.Scan -> {} // TODO to be implemented + is TrackerInputAction.ValueChanged -> {} // TODO to be implemented } } diff --git a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/searchparameters/mapper/ParameterInputModelMapper.kt b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/searchparameters/mapper/ParameterInputModelMapper.kt index c72fa49130a..a6ba90db778 100644 --- a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/searchparameters/mapper/ParameterInputModelMapper.kt +++ b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/searchparameters/mapper/ParameterInputModelMapper.kt @@ -12,7 +12,7 @@ import org.dhis2.form.R import org.dhis2.form.model.FieldUiModel import org.dhis2.form.model.UiRenderType import org.dhis2.tracker.input.model.TrackerInputType -import org.dhis2.tracker.input.ui.state.TrackerInputUIState +import org.dhis2.tracker.input.ui.state.TrackerInputUiState import org.dhis2.tracker.input.ui.state.TrackerOptionItem import org.dhis2.tracker.input.ui.state.TrackerOptionSetConfiguration import org.hisp.dhis.android.core.common.ValueType @@ -23,7 +23,7 @@ import org.hisp.dhis.mobile.ui.designsystem.component.Orientation fun FieldUiModel.toParameterInputModel( fetchOptions: () -> Unit, resourceManager: ResourceManager, -): TrackerInputUIState { +): TrackerInputUiState { val trackerInputType = when { optionSet != null && valueType != ValueType.MULTI_TEXT -> { @@ -41,7 +41,7 @@ fun FieldUiModel.toParameterInputModel( else -> getInputTypeByValueType(valueType, renderingType) } - return TrackerInputUIState( + return TrackerInputUiState( uid = uid, label = label, value = value, diff --git a/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchTEIViewModelTest.kt b/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchTEIViewModelTest.kt index 4ac2925f6d0..9b3f5d7d9f6 100644 --- a/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchTEIViewModelTest.kt +++ b/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchTEIViewModelTest.kt @@ -32,6 +32,8 @@ import org.dhis2.maps.geometry.mapper.EventsByProgramStage import org.dhis2.maps.usecases.MapStyleConfiguration import org.dhis2.mobile.commons.model.CustomIntentModel import org.dhis2.tracker.input.ui.action.TrackerInputAction +import org.dhis2.tracker.search.domain.FetchOptionSetOptions +import org.dhis2.tracker.search.domain.FetchSearchParameters import org.dhis2.tracker.search.domain.SearchTrackedEntities import org.dhis2.tracker.search.model.SearchTrackedEntitiesInput import org.dhis2.usescases.searchTrackEntity.listView.SearchResult.SearchResultType @@ -76,6 +78,8 @@ class SearchTEIViewModelTest { mock { onBlocking { invoke(any()) } doReturn Result.success(flowOf(PagingData.empty())) } + private val fetchSearchParameters: FetchSearchParameters = mock() + private val fetchOptionSetOptions: FetchOptionSetOptions = mock() @ExperimentalCoroutinesApi private val testingDispatcher = StandardTestDispatcher() @@ -112,6 +116,8 @@ class SearchTEIViewModelTest { displayNameProvider = displayNameProvider, filterManager = filterManager, searchTrackedEntities = searchTrackedEntities, + fetchSearchParameters = fetchSearchParameters, + fetchOptionSetOptions = fetchOptionSetOptions, ) testingDispatcher.scheduler.advanceUntilIdle() } @@ -796,6 +802,8 @@ class SearchTEIViewModelTest { displayNameProvider = displayNameProvider, filterManager = filterManager, searchTrackedEntities = searchTrackedEntities, + fetchSearchParameters = fetchSearchParameters, + fetchOptionSetOptions = fetchOptionSetOptions, ) testingDispatcher.scheduler.advanceUntilIdle() @@ -843,6 +851,8 @@ class SearchTEIViewModelTest { displayNameProvider = displayNameProvider, filterManager = filterManager, searchTrackedEntities = searchTrackedEntities, + fetchSearchParameters = fetchSearchParameters, + fetchOptionSetOptions = fetchOptionSetOptions, ) testingDispatcher.scheduler.advanceUntilIdle() diff --git a/tracker/src/androidMain/kotlin/org/dhis2/tracker/search/data/OptionSetRepository.android.kt b/tracker/src/androidMain/kotlin/org/dhis2/tracker/search/data/OptionSetRepositoryImpl.kt similarity index 95% rename from tracker/src/androidMain/kotlin/org/dhis2/tracker/search/data/OptionSetRepository.android.kt rename to tracker/src/androidMain/kotlin/org/dhis2/tracker/search/data/OptionSetRepositoryImpl.kt index e561b26c5ed..c07bfb58cdf 100644 --- a/tracker/src/androidMain/kotlin/org/dhis2/tracker/search/data/OptionSetRepository.android.kt +++ b/tracker/src/androidMain/kotlin/org/dhis2/tracker/search/data/OptionSetRepositoryImpl.kt @@ -16,11 +16,10 @@ import org.hisp.dhis.android.core.maintenance.D2Error /** * Android implementation of OptionSetRepository using DHIS2 Android SDK. */ -@Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING") -actual class OptionSetRepository( +class OptionSetRepositoryImpl( private val d2: D2, private val domainErrorMapper: DomainErrorMapper, -) { +) : OptionSetRepository { /** * Fetches paginated options for a given option set. * @param optionSetUid The unique identifier of the option set @@ -29,7 +28,7 @@ actual class OptionSetRepository( * @return Flow of paginated option items. The `flow { }` builder creates a cold (lazy) flow that * will be executed when collected. The code inside runs in the collector's coroutine context. */ - actual fun getOptions( + override fun getOptions( optionSetUid: String, pageSize: Int, searchQuery: String?, diff --git a/tracker/src/androidMain/kotlin/org/dhis2/tracker/search/di/TrackerSearchModule.android.kt b/tracker/src/androidMain/kotlin/org/dhis2/tracker/search/di/TrackerSearchModule.android.kt index fa86fafc999..eb5df5f70ff 100644 --- a/tracker/src/androidMain/kotlin/org/dhis2/tracker/search/di/TrackerSearchModule.android.kt +++ b/tracker/src/androidMain/kotlin/org/dhis2/tracker/search/di/TrackerSearchModule.android.kt @@ -1,5 +1,9 @@ package org.dhis2.tracker.search.di +import org.dhis2.tracker.search.data.OptionSetRepository +import org.dhis2.tracker.search.data.OptionSetRepositoryImpl +import org.dhis2.tracker.search.data.SearchParametersRepository +import org.dhis2.tracker.search.data.SearchParametersRepositoryImpl import org.dhis2.tracker.search.data.SearchTrackedEntityRepository import org.dhis2.tracker.search.data.SearchTrackedEntityRepositoryImpl import org.koin.core.module.Module @@ -17,4 +21,21 @@ internal actual val trackerSearchRepositoryModule: Module = filterPresenter = get(), ) } + + // SearchParametersRepository - interface implementation + single { + SearchParametersRepositoryImpl( + d2 = get(), + customIntentRepository = get(), + domainErrorMapper = get(), + ) + } + + // OptionSetRepository - interface implementation + single { + OptionSetRepositoryImpl( + d2 = get(), + domainErrorMapper = get(), + ) + } } diff --git a/tracker/src/commonMain/composeResources/values/strings.xml b/tracker/src/commonMain/composeResources/values/strings.xml index 3cbc1bb369b..e47fae5fd7b 100644 --- a/tracker/src/commonMain/composeResources/values/strings.xml +++ b/tracker/src/commonMain/composeResources/values/strings.xml @@ -19,5 +19,11 @@ Search Optional Launch + Exact matches only + Matches any part of the value + Must match the start of the value + Must match the end of the value + yes + no \ No newline at end of file diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/action/TrackerInputAction.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/action/TrackerInputAction.kt index 2a024512262..d368c574868 100644 --- a/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/action/TrackerInputAction.kt +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/action/TrackerInputAction.kt @@ -1,6 +1,7 @@ package org.dhis2.tracker.input.ui.action import org.dhis2.mobile.commons.model.CustomIntentModel +import org.dhis2.tracker.input.model.TrackerInputType typealias CustomIntentUid = String typealias FieldUid = String @@ -10,4 +11,15 @@ sealed interface TrackerInputAction { val fieldUid: FieldUid, val customIntentModel: CustomIntentModel, ) : TrackerInputAction + + data class Scan( + val fieldUid: FieldUid, + val optionSet: String?, + val renderType: TrackerInputType, + ) : TrackerInputAction + + data class ValueChanged( + val fieldUid: FieldUid, + val value: String?, + ) : TrackerInputAction } diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/mapper/TrackerInputUiStateMapper.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/mapper/TrackerInputUiStateMapper.kt new file mode 100644 index 00000000000..ccc444b6463 --- /dev/null +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/mapper/TrackerInputUiStateMapper.kt @@ -0,0 +1,35 @@ +package org.dhis2.tracker.input.ui.mapper + +import org.dhis2.tracker.input.model.TrackerInputType +import org.dhis2.tracker.input.ui.state.TrackerInputUiState +import org.dhis2.tracker.search.model.SearchParameterModel +import org.hisp.dhis.mobile.ui.designsystem.component.Orientation + +fun SearchParameterModel.toTrackerInputUiState() = + TrackerInputUiState( + uid = uid, + label = label, + value = null, + focused = false, + valueType = inputType, + optionSet = optionSet, + error = null, + warning = null, + description = null, + mandatory = false, + editable = true, + legend = null, + orientation = inputType.getOrientation(), + optionSetConfiguration = null, + customIntentUid = customIntentUid, + displayName = null, + ) + +private fun TrackerInputType.getOrientation(): Orientation = + when (this) { + TrackerInputType.HORIZONTAL_CHECKBOXES, + TrackerInputType.HORIZONTAL_RADIOBUTTONS, + -> Orientation.HORIZONTAL + + else -> Orientation.VERTICAL + } diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/provider/TrackerAgeInputProvider.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/provider/TrackerAgeInputProvider.kt index a22ad53a1d8..edd05b75d9d 100644 --- a/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/provider/TrackerAgeInputProvider.kt +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/provider/TrackerAgeInputProvider.kt @@ -17,7 +17,7 @@ import org.dhis2.mobile.commons.resources.age_or import org.dhis2.mobile.commons.resources.cancel import org.dhis2.mobile.commons.resources.date_of_birth import org.dhis2.mobile.commons.resources.ok -import org.dhis2.tracker.input.ui.state.TrackerInputUIState +import org.dhis2.tracker.input.ui.state.TrackerInputUiState import org.dhis2.tracker.input.ui.state.inputState import org.dhis2.tracker.input.ui.state.supportingText import org.hisp.dhis.mobile.ui.designsystem.component.AgeInputType @@ -29,7 +29,7 @@ import org.jetbrains.compose.resources.stringResource @Composable fun ProvideTrackerAgeInput( - model: TrackerInputUIState, + model: TrackerInputUiState, inputStyle: InputStyle, onNextClicked: () -> Unit, modifier: Modifier, diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/provider/TrackerCheckboxInputProvider.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/provider/TrackerCheckboxInputProvider.kt index 5be95d7b1a9..58001abd402 100644 --- a/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/provider/TrackerCheckboxInputProvider.kt +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/provider/TrackerCheckboxInputProvider.kt @@ -2,7 +2,7 @@ package org.dhis2.tracker.input.ui.provider import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import org.dhis2.tracker.input.ui.state.TrackerInputUIState +import org.dhis2.tracker.input.ui.state.TrackerInputUiState import org.dhis2.tracker.input.ui.state.inputState import org.dhis2.tracker.input.ui.state.supportingText import org.hisp.dhis.mobile.ui.designsystem.component.CheckBoxData @@ -11,7 +11,7 @@ import org.hisp.dhis.mobile.ui.designsystem.component.InputStyle @Composable fun TrackerCheckboxInputProvider( - model: TrackerInputUIState, + model: TrackerInputUiState, inputStyle: InputStyle, modifier: Modifier, onValueChange: (String?) -> Unit, diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/provider/TrackerDateTimeProvider.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/provider/TrackerDateTimeProvider.kt index 469b469cc28..d1025c92fc7 100644 --- a/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/provider/TrackerDateTimeProvider.kt +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/provider/TrackerDateTimeProvider.kt @@ -11,7 +11,7 @@ import androidx.compose.ui.semantics.semantics import androidx.compose.ui.text.TextRange import androidx.compose.ui.text.input.TextFieldValue import org.dhis2.tracker.input.model.TrackerInputType -import org.dhis2.tracker.input.ui.state.TrackerInputUIState +import org.dhis2.tracker.input.ui.state.TrackerInputUiState import org.dhis2.tracker.input.ui.state.inputState import org.dhis2.tracker.input.ui.state.supportingText import org.hisp.dhis.mobile.ui.designsystem.component.DateTimeActionType @@ -26,7 +26,7 @@ import org.hisp.dhis.mobile.ui.designsystem.component.state.rememberInputDateTim @Composable fun ProvideTrackerDateTimeInput( - model: TrackerInputUIState, + model: TrackerInputUiState, inputStyle: InputStyle, onNextClicked: () -> Unit, modifier: Modifier, diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/provider/TrackerInputProvider.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/provider/TrackerInputProvider.kt index ed1d1fad925..0fc4fba9c20 100644 --- a/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/provider/TrackerInputProvider.kt +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/provider/TrackerInputProvider.kt @@ -18,7 +18,7 @@ import org.dhis2.mobile.tracker.resources.Res import org.dhis2.mobile.tracker.resources.custom_intent_launch import org.dhis2.tracker.input.model.TrackerInputType import org.dhis2.tracker.input.ui.action.TrackerInputUiEvent -import org.dhis2.tracker.input.ui.state.TrackerInputUIState +import org.dhis2.tracker.input.ui.state.TrackerInputUiState import org.dhis2.tracker.input.ui.state.inputState import org.dhis2.tracker.input.ui.state.supportingText import org.hisp.dhis.mobile.ui.designsystem.component.CheckBoxData @@ -52,7 +52,7 @@ import org.jetbrains.compose.resources.stringResource @Composable fun TrackerInputProvider( modifier: Modifier = Modifier, - inputModel: TrackerInputUIState, + inputModel: TrackerInputUiState, inputStyle: InputStyle, onNextClicked: () -> Unit, onUiEvent: (TrackerInputUiEvent) -> Unit, @@ -750,7 +750,7 @@ fun TrackerInputProvider( fun manageOnValueChange( newValue: String?, - inputModel: TrackerInputUIState, + inputModel: TrackerInputUiState, onUiEvent: (TrackerInputUiEvent) -> Unit, ) { newValue?.let { diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/provider/TrackerRadioButtonInputProvider.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/provider/TrackerRadioButtonInputProvider.kt index b018a70a60b..63656617658 100644 --- a/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/provider/TrackerRadioButtonInputProvider.kt +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/provider/TrackerRadioButtonInputProvider.kt @@ -2,7 +2,7 @@ package org.dhis2.tracker.input.ui.provider import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import org.dhis2.tracker.input.ui.state.TrackerInputUIState +import org.dhis2.tracker.input.ui.state.TrackerInputUiState import org.dhis2.tracker.input.ui.state.inputState import org.dhis2.tracker.input.ui.state.supportingText import org.hisp.dhis.mobile.ui.designsystem.component.InputRadioButton @@ -11,7 +11,7 @@ import org.hisp.dhis.mobile.ui.designsystem.component.RadioButtonData @Composable fun TrackerRadioButtonInputProvider( - model: TrackerInputUIState, + model: TrackerInputUiState, inputStyle: InputStyle, modifier: Modifier, onValueChange: (String?) -> Unit, diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/state/TrackerInputUIState.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/state/TrackerInputUiState.kt similarity index 91% rename from tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/state/TrackerInputUIState.kt rename to tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/state/TrackerInputUiState.kt index 7f8c3053412..6fbef970209 100644 --- a/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/state/TrackerInputUIState.kt +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/state/TrackerInputUiState.kt @@ -7,7 +7,7 @@ import org.hisp.dhis.mobile.ui.designsystem.component.Orientation import org.hisp.dhis.mobile.ui.designsystem.component.SupportingTextData import org.hisp.dhis.mobile.ui.designsystem.component.SupportingTextState -data class TrackerInputUIState( +data class TrackerInputUiState( val uid: String, val label: String, val value: String?, @@ -26,7 +26,7 @@ data class TrackerInputUIState( val displayName: String?, ) -fun TrackerInputUIState.supportingText(): List? = +fun TrackerInputUiState.supportingText(): List? = listOfNotNull( error?.let { SupportingTextData( @@ -48,7 +48,7 @@ fun TrackerInputUIState.supportingText(): List? = }, ).ifEmpty { null } -fun TrackerInputUIState.inputState(): InputShellState = +fun TrackerInputUiState.inputState(): InputShellState = when { !editable -> InputShellState.DISABLED error != null -> InputShellState.ERROR diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/data/OptionSetRepository.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/data/OptionSetRepository.kt index c2da3315782..03075e6c880 100644 --- a/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/data/OptionSetRepository.kt +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/data/OptionSetRepository.kt @@ -8,8 +8,7 @@ import org.dhis2.tracker.input.ui.state.TrackerOptionItem * Repository for fetching option set data. * Handles pagination and search of options for dropdown/selection inputs. */ -@Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING") -expect class OptionSetRepository { +interface OptionSetRepository { /** * Fetches paginated options for a given option set. * diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/ui/action/SearchScreenUiEvent.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/ui/action/SearchScreenUiEvent.kt new file mode 100644 index 00000000000..22b8e1c5010 --- /dev/null +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/ui/action/SearchScreenUiEvent.kt @@ -0,0 +1,9 @@ +package org.dhis2.tracker.search.ui.action + +sealed interface SearchScreenUiEvent { + data object OnSearchButtonClicked : SearchScreenUiEvent + + data object OnClearSearchButtonClicked : SearchScreenUiEvent + + data object OnCloseClicked : SearchScreenUiEvent +} diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/ui/provider/ParameterSelectorItemProvider.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/ui/provider/ParameterSelectorItemProvider.kt index a64ed31ac54..519d2e211c3 100644 --- a/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/ui/provider/ParameterSelectorItemProvider.kt +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/ui/provider/ParameterSelectorItemProvider.kt @@ -9,7 +9,7 @@ import androidx.compose.ui.Modifier import org.dhis2.tracker.input.model.TrackerInputType import org.dhis2.tracker.input.ui.action.TrackerInputUiEvent import org.dhis2.tracker.input.ui.provider.TrackerInputProvider -import org.dhis2.tracker.input.ui.state.TrackerInputUIState +import org.dhis2.tracker.input.ui.state.TrackerInputUiState import org.hisp.dhis.mobile.ui.designsystem.component.InputStyle import org.hisp.dhis.mobile.ui.designsystem.component.parameter.model.ParameterSelectorItemModel import org.hisp.dhis.mobile.ui.designsystem.resource.provideDHIS2Icon @@ -17,7 +17,7 @@ import org.hisp.dhis.mobile.ui.designsystem.theme.SurfaceColor @Composable fun provideParameterSelectorItem( - inputModel: TrackerInputUIState, + inputModel: TrackerInputUiState, helperText: String, onNextClicked: () -> Unit, onUiEvent: (TrackerInputUiEvent) -> Unit, diff --git a/tracker/src/desktopMain/kotlin/org/dhis2/tracker/search/data/OptionSetRepository.desktop.kt b/tracker/src/desktopMain/kotlin/org/dhis2/tracker/search/data/OptionSetRepository.desktop.kt deleted file mode 100644 index ae87059733e..00000000000 --- a/tracker/src/desktopMain/kotlin/org/dhis2/tracker/search/data/OptionSetRepository.desktop.kt +++ /dev/null @@ -1,22 +0,0 @@ -package org.dhis2.tracker.search.data - -import androidx.paging.PagingData -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.flowOf -import org.dhis2.tracker.input.ui.state.TrackerOptionItem - -/** - * Desktop stub implementation of OptionSetRepository. - * TODO: Implement when desktop support is added - */ -@Suppress("EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING") -actual class OptionSetRepository { - actual fun getOptions( - optionSetUid: String, - pageSize: Int, - searchQuery: String?, - ): Flow> { - // Return empty flow for desktop - return flowOf(PagingData.empty()) - } -} From f8af65f2f14d340007611f0017dbf34443c98b06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Tar=C3=AD?= Date: Fri, 20 Feb 2026 14:43:08 +0100 Subject: [PATCH 060/114] chore: [ANDROAPP-7498 ] handle new period types [skip size] (#4664) * chore: [ANDROAPP-7498] Update latest sdk snapshot * chore: [ANDROAPP-7498] Add new period types to enums and labels * chore: [ANDROAPP-7498] Extend test with new period types * chore: [ANDROAPP-7498] Fix tests --- .../data/dhislogic/DhisPeriodUtilsTest.kt | 100 +++ .../org/dhis2/commons/date/DateExtensions.kt | 8 +- .../periods/data/FilterPeriodsRepository.kt | 8 + .../periods/data/PeriodTypeLabelProvider.kt | 4 + .../filters/periods/model/FilterPeriodType.kt | 4 + .../periods/data/PeriodLabelProvider.kt | 10 + .../commons/resources/DhisPeriodUtils.kt | 5 + commons/src/main/res/values/strings.xml | 4 + .../charts/bindings/AnalyticsBindings.kt | 8 +- .../charts/bindings/DateToPosition.kt | 8 +- .../dhis2/org/analytics/charts/data/Graph.kt | 16 +- .../charts/mappers/GraphToBarData.kt | 8 +- .../providers/PeriodStepProviderImpl.kt | 9 + .../charts/bindings/DateToPositionTest.kt | 8 +- gradle/libs.versions.toml | 2 +- gradle/verification-metadata.xml | 811 +++++------------- 16 files changed, 422 insertions(+), 591 deletions(-) diff --git a/app/src/test/java/org/dhis2/data/dhislogic/DhisPeriodUtilsTest.kt b/app/src/test/java/org/dhis2/data/dhislogic/DhisPeriodUtilsTest.kt index 423bc8ad1ae..7e32ff6d492 100644 --- a/app/src/test/java/org/dhis2/data/dhislogic/DhisPeriodUtilsTest.kt +++ b/app/src/test/java/org/dhis2/data/dhislogic/DhisPeriodUtilsTest.kt @@ -154,6 +154,31 @@ class DhisPeriodUtilsTest { ) } + @Test + fun `WeeklyFriday period should return expected result`() { + whenever( + periodHelper.blockingGetPeriodForPeriodTypeAndDate( + PeriodType.WeeklyFriday, + testDate, + ), + ) doReturn + Period + .builder() + .periodId("2019ThuW2") + .startDate(GregorianCalendar(2019, 0, 11).time) + .endDate(GregorianCalendar(2019, 0, 17).time) + .build() + + Assert.assertEquals( + "Week 0 2019-01-11 To 2019-01-17", + periodUtils.getPeriodUIString( + PeriodType.WeeklyFriday, + testDate, + Locale.ENGLISH, + ), + ) + } + @Test fun `WeeklySaturday period should return expected result`() { whenever( @@ -430,6 +455,31 @@ class DhisPeriodUtilsTest { ) } + @Test + fun `FinancialFeb period should return expected result`() { + whenever( + periodHelper.blockingGetPeriodForPeriodTypeAndDate( + PeriodType.FinancialFeb, + testDate, + ), + ) doReturn + Period + .builder() + .periodId("periodId") + .startDate(GregorianCalendar(2018, 1, 1).time) + .endDate(GregorianCalendar(2019, 0, 31).time) + .build() + + Assert.assertEquals( + "Feb 2018 - Jan 2019", + periodUtils.getPeriodUIString( + PeriodType.FinancialFeb, + testDate, + Locale.ENGLISH, + ), + ) + } + @Test fun `FinancialApril period should return expected result`() { whenever( @@ -480,6 +530,56 @@ class DhisPeriodUtilsTest { ) } + @Test + fun `FinancialAug period should return expected result`() { + whenever( + periodHelper.blockingGetPeriodForPeriodTypeAndDate( + PeriodType.FinancialAug, + testDate, + ), + ) doReturn + Period + .builder() + .periodId("periodId") + .startDate(GregorianCalendar(2018, 7, 1).time) + .endDate(GregorianCalendar(2019, 6, 31).time) + .build() + + Assert.assertEquals( + "Aug 2018 - Jul 2019", + periodUtils.getPeriodUIString( + PeriodType.FinancialAug, + testDate, + Locale.ENGLISH, + ), + ) + } + + @Test + fun `FinancialSep period should return expected result`() { + whenever( + periodHelper.blockingGetPeriodForPeriodTypeAndDate( + PeriodType.FinancialSep, + testDate, + ), + ) doReturn + Period + .builder() + .periodId("periodId") + .startDate(GregorianCalendar(2018, 8, 1).time) + .endDate(GregorianCalendar(2019, 7, 31).time) + .build() + + Assert.assertEquals( + "Sep 2018 - Aug 2019", + periodUtils.getPeriodUIString( + PeriodType.FinancialSep, + testDate, + Locale.ENGLISH, + ), + ) + } + @Test fun `FinancialOct period should return expected result`() { whenever( diff --git a/commons/src/main/java/org/dhis2/commons/date/DateExtensions.kt b/commons/src/main/java/org/dhis2/commons/date/DateExtensions.kt index 478779db2ab..938b3241953 100644 --- a/commons/src/main/java/org/dhis2/commons/date/DateExtensions.kt +++ b/commons/src/main/java/org/dhis2/commons/date/DateExtensions.kt @@ -186,10 +186,11 @@ fun Date?.toUi(): String? = this?.let { DateUtils.uiDateFormat().format(this) } fun Dhis2PeriodType.toUiStringResource() = when (this) { Dhis2PeriodType.Weekly, + Dhis2PeriodType.WeeklyWednesday, + Dhis2PeriodType.WeeklyThursday, + Dhis2PeriodType.WeeklyFriday, Dhis2PeriodType.WeeklySaturday, Dhis2PeriodType.WeeklySunday, - Dhis2PeriodType.WeeklyThursday, - Dhis2PeriodType.WeeklyWednesday, -> R.string.period_weekly_title Dhis2PeriodType.BiWeekly -> R.string.period_biweekly_title @@ -205,8 +206,11 @@ fun Dhis2PeriodType.toUiStringResource() = -> R.string.period_six_monthly_title Dhis2PeriodType.Yearly -> R.string.period_yearly_title + Dhis2PeriodType.FinancialFeb, Dhis2PeriodType.FinancialApril, Dhis2PeriodType.FinancialJuly, + Dhis2PeriodType.FinancialAug, + Dhis2PeriodType.FinancialSep, Dhis2PeriodType.FinancialOct, Dhis2PeriodType.FinancialNov, -> R.string.period_financial_year_title diff --git a/commons/src/main/java/org/dhis2/commons/filters/periods/data/FilterPeriodsRepository.kt b/commons/src/main/java/org/dhis2/commons/filters/periods/data/FilterPeriodsRepository.kt index 3470bfd0eea..7aa86a2c200 100644 --- a/commons/src/main/java/org/dhis2/commons/filters/periods/data/FilterPeriodsRepository.kt +++ b/commons/src/main/java/org/dhis2/commons/filters/periods/data/FilterPeriodsRepository.kt @@ -25,6 +25,7 @@ class FilterPeriodsRepository( FilterPeriodType.WEEKLY, FilterPeriodType.WEEKLY_WEDNESDAY, FilterPeriodType.WEEKLY_THURSDAY, + FilterPeriodType.WEEKLY_FRIDAY, FilterPeriodType.WEEKLY_SATURDAY, FilterPeriodType.WEEKLY_SUNDAY, FilterPeriodType.BI_WEEKLY, @@ -36,8 +37,11 @@ class FilterPeriodsRepository( FilterPeriodType.SIX_MONTHLY_APRIL, FilterPeriodType.SIX_MONTHLY_NOV, FilterPeriodType.YEARLY, + FilterPeriodType.FINANCIAL_FEB, FilterPeriodType.FINANCIAL_APRIL, FilterPeriodType.FINANCIAL_JULY, + FilterPeriodType.FINANCIAL_AUG, + FilterPeriodType.FINANCIAL_SEP, FilterPeriodType.FINANCIAL_OCT, FilterPeriodType.FINANCIAL_NOV, ) @@ -48,6 +52,7 @@ class FilterPeriodsRepository( FilterPeriodType.WEEKLY -> PeriodType.Weekly FilterPeriodType.WEEKLY_WEDNESDAY -> PeriodType.WeeklyWednesday FilterPeriodType.WEEKLY_THURSDAY -> PeriodType.WeeklyThursday + FilterPeriodType.WEEKLY_FRIDAY -> PeriodType.WeeklyFriday FilterPeriodType.WEEKLY_SATURDAY -> PeriodType.WeeklySaturday FilterPeriodType.WEEKLY_SUNDAY -> PeriodType.WeeklySunday FilterPeriodType.BI_WEEKLY -> PeriodType.BiWeekly @@ -59,8 +64,11 @@ class FilterPeriodsRepository( FilterPeriodType.SIX_MONTHLY_APRIL -> PeriodType.SixMonthlyApril FilterPeriodType.SIX_MONTHLY_NOV -> PeriodType.SixMonthlyNov FilterPeriodType.YEARLY -> PeriodType.Yearly + FilterPeriodType.FINANCIAL_FEB -> PeriodType.FinancialFeb FilterPeriodType.FINANCIAL_APRIL -> PeriodType.FinancialApril FilterPeriodType.FINANCIAL_JULY -> PeriodType.FinancialJuly + FilterPeriodType.FINANCIAL_AUG -> PeriodType.FinancialAug + FilterPeriodType.FINANCIAL_SEP -> PeriodType.FinancialSep FilterPeriodType.FINANCIAL_OCT -> PeriodType.FinancialOct FilterPeriodType.FINANCIAL_NOV -> PeriodType.FinancialNov FilterPeriodType.NONE -> PeriodType.Daily diff --git a/commons/src/main/java/org/dhis2/commons/filters/periods/data/PeriodTypeLabelProvider.kt b/commons/src/main/java/org/dhis2/commons/filters/periods/data/PeriodTypeLabelProvider.kt index 6f8730da45a..677f4750651 100644 --- a/commons/src/main/java/org/dhis2/commons/filters/periods/data/PeriodTypeLabelProvider.kt +++ b/commons/src/main/java/org/dhis2/commons/filters/periods/data/PeriodTypeLabelProvider.kt @@ -11,6 +11,7 @@ class PeriodTypeLabelProvider { FilterPeriodType.WEEKLY -> R.string.weekly FilterPeriodType.WEEKLY_WEDNESDAY -> R.string.weekly_start_wednesday FilterPeriodType.WEEKLY_THURSDAY -> R.string.weekly_start_thursday + FilterPeriodType.WEEKLY_FRIDAY -> R.string.weekly_start_friday FilterPeriodType.WEEKLY_SATURDAY -> R.string.weekly_start_saturday FilterPeriodType.WEEKLY_SUNDAY -> R.string.weekly_start_sunday FilterPeriodType.BI_WEEKLY -> R.string.bi_weekly @@ -22,8 +23,11 @@ class PeriodTypeLabelProvider { FilterPeriodType.SIX_MONTHLY_APRIL -> R.string.six_monthly_april FilterPeriodType.SIX_MONTHLY_NOV -> R.string.six_monthly_nov FilterPeriodType.YEARLY -> R.string.YEARLY + FilterPeriodType.FINANCIAL_FEB -> R.string.financial_year_february FilterPeriodType.FINANCIAL_APRIL -> R.string.financial_year_april FilterPeriodType.FINANCIAL_JULY -> R.string.financial_year_july + FilterPeriodType.FINANCIAL_AUG -> R.string.financial_year_august + FilterPeriodType.FINANCIAL_SEP -> R.string.financial_year_september FilterPeriodType.FINANCIAL_OCT -> R.string.financial_year_october FilterPeriodType.FINANCIAL_NOV -> R.string.financial_year_november } diff --git a/commons/src/main/java/org/dhis2/commons/filters/periods/model/FilterPeriodType.kt b/commons/src/main/java/org/dhis2/commons/filters/periods/model/FilterPeriodType.kt index e7af37e9a96..4d0fea03ad1 100644 --- a/commons/src/main/java/org/dhis2/commons/filters/periods/model/FilterPeriodType.kt +++ b/commons/src/main/java/org/dhis2/commons/filters/periods/model/FilterPeriodType.kt @@ -6,6 +6,7 @@ enum class FilterPeriodType { WEEKLY, WEEKLY_WEDNESDAY, WEEKLY_THURSDAY, + WEEKLY_FRIDAY, WEEKLY_SATURDAY, WEEKLY_SUNDAY, BI_WEEKLY, @@ -17,8 +18,11 @@ enum class FilterPeriodType { SIX_MONTHLY_APRIL, SIX_MONTHLY_NOV, YEARLY, + FINANCIAL_FEB, FINANCIAL_APRIL, FINANCIAL_JULY, + FINANCIAL_AUG, + FINANCIAL_SEP, FINANCIAL_OCT, FINANCIAL_NOV, } diff --git a/commons/src/main/java/org/dhis2/commons/periods/data/PeriodLabelProvider.kt b/commons/src/main/java/org/dhis2/commons/periods/data/PeriodLabelProvider.kt index cecd1dde871..a3b6aa7db02 100644 --- a/commons/src/main/java/org/dhis2/commons/periods/data/PeriodLabelProvider.kt +++ b/commons/src/main/java/org/dhis2/commons/periods/data/PeriodLabelProvider.kt @@ -57,6 +57,7 @@ class PeriodLabelProvider( PeriodType.Weekly, PeriodType.WeeklyWednesday, PeriodType.WeeklyThursday, + PeriodType.WeeklyFriday, PeriodType.WeeklySaturday, PeriodType.WeeklySunday, PeriodType.BiWeekly, @@ -80,9 +81,13 @@ class PeriodLabelProvider( PeriodType.BiMonthly, PeriodType.SixMonthly, PeriodType.SixMonthlyApril, PeriodType.Quarterly, PeriodType.QuarterlyNov, + PeriodType.FinancialFeb, PeriodType.FinancialApril, PeriodType.FinancialJuly, + PeriodType.FinancialAug, + PeriodType.FinancialSep, PeriodType.FinancialOct, + PeriodType.FinancialNov, -> if (periodBetweenYears) { FROM_TO_LABEL.format( @@ -116,6 +121,7 @@ class PeriodLabelProvider( PeriodType.Weekly, PeriodType.WeeklyWednesday, PeriodType.WeeklyThursday, + PeriodType.WeeklyFriday, PeriodType.WeeklySaturday, PeriodType.WeeklySunday, -> { @@ -181,9 +187,13 @@ class PeriodLabelProvider( ) } + PeriodType.FinancialFeb, PeriodType.FinancialApril, PeriodType.FinancialJuly, + PeriodType.FinancialAug, + PeriodType.FinancialSep, PeriodType.FinancialOct, + PeriodType.FinancialNov, -> FROM_TO_LABEL.format( SimpleDateFormat(MONTH_YEAR_FULL_FORMAT, locale).format(periodStartDate), diff --git a/commons/src/main/java/org/dhis2/commons/resources/DhisPeriodUtils.kt b/commons/src/main/java/org/dhis2/commons/resources/DhisPeriodUtils.kt index 834db2aa3f1..b8a90f020c3 100644 --- a/commons/src/main/java/org/dhis2/commons/resources/DhisPeriodUtils.kt +++ b/commons/src/main/java/org/dhis2/commons/resources/DhisPeriodUtils.kt @@ -34,6 +34,7 @@ class DhisPeriodUtils( PeriodType.Weekly, PeriodType.WeeklyWednesday, PeriodType.WeeklyThursday, + PeriodType.WeeklyFriday, PeriodType.WeeklySaturday, PeriodType.WeeklySunday, -> { @@ -73,9 +74,13 @@ class DhisPeriodUtils( PeriodType.QuarterlyNov, PeriodType.SixMonthly, PeriodType.SixMonthlyApril, + PeriodType.FinancialFeb, PeriodType.FinancialApril, PeriodType.FinancialJuly, + PeriodType.FinancialAug, + PeriodType.FinancialSep, PeriodType.FinancialOct, + PeriodType.FinancialNov, -> formattedDate = periodString.format( diff --git a/commons/src/main/res/values/strings.xml b/commons/src/main/res/values/strings.xml index fa7ec938076..86841ba4fb0 100644 --- a/commons/src/main/res/values/strings.xml +++ b/commons/src/main/res/values/strings.xml @@ -51,6 +51,7 @@ Bi-weekly Weekly starting Wednesday Weekly starting Thursday + Weekly starting Friday Weekly starting Saturday Weekly starting Sunday Monthly @@ -62,8 +63,11 @@ Six-monthly starting July Six-monthly starting November Yearly + Financial year starting February Financial year starting April Financial year starting July + Financial year starting August + Financial year starting September Financial year starting October Financial year starting November diff --git a/dhis_android_analytics/src/main/java/dhis2/org/analytics/charts/bindings/AnalyticsBindings.kt b/dhis_android_analytics/src/main/java/dhis2/org/analytics/charts/bindings/AnalyticsBindings.kt index 60bece0c4b5..d2616d6f567 100644 --- a/dhis_android_analytics/src/main/java/dhis2/org/analytics/charts/bindings/AnalyticsBindings.kt +++ b/dhis_android_analytics/src/main/java/dhis2/org/analytics/charts/bindings/AnalyticsBindings.kt @@ -35,10 +35,11 @@ fun PeriodType.datePattern(): String = when (this) { PeriodType.Daily, PeriodType.Weekly, + PeriodType.WeeklyWednesday, + PeriodType.WeeklyThursday, + PeriodType.WeeklyFriday, PeriodType.WeeklySaturday, PeriodType.WeeklySunday, - PeriodType.WeeklyThursday, - PeriodType.WeeklyWednesday, PeriodType.BiWeekly, PeriodType.Monthly, PeriodType.BiMonthly, @@ -52,8 +53,11 @@ fun PeriodType.datePattern(): String = } PeriodType.Yearly, + PeriodType.FinancialFeb, PeriodType.FinancialApril, PeriodType.FinancialJuly, + PeriodType.FinancialAug, + PeriodType.FinancialSep, PeriodType.FinancialOct, PeriodType.FinancialNov, -> { diff --git a/dhis_android_analytics/src/main/java/dhis2/org/analytics/charts/bindings/DateToPosition.kt b/dhis_android_analytics/src/main/java/dhis2/org/analytics/charts/bindings/DateToPosition.kt index 60f5089c8f5..301a3c84bcc 100644 --- a/dhis_android_analytics/src/main/java/dhis2/org/analytics/charts/bindings/DateToPosition.kt +++ b/dhis_android_analytics/src/main/java/dhis2/org/analytics/charts/bindings/DateToPosition.kt @@ -26,10 +26,11 @@ class DateToPosition { when (eventPeriodType) { PeriodType.Daily, PeriodType.Weekly, + PeriodType.WeeklyWednesday, + PeriodType.WeeklyThursday, + PeriodType.WeeklyFriday, PeriodType.WeeklySaturday, PeriodType.WeeklySunday, - PeriodType.WeeklyThursday, - PeriodType.WeeklyWednesday, PeriodType.BiWeekly, PeriodType.Monthly, PeriodType.BiMonthly, @@ -48,8 +49,11 @@ class DateToPosition { monthDiff.toFloat() + (dayInMonth.toFloat() - 1f) / daysInMonth.toFloat() } PeriodType.Yearly, + PeriodType.FinancialFeb, PeriodType.FinancialApril, PeriodType.FinancialJuly, + PeriodType.FinancialAug, + PeriodType.FinancialSep, PeriodType.FinancialOct, PeriodType.FinancialNov, -> { diff --git a/dhis_android_analytics/src/main/java/dhis2/org/analytics/charts/data/Graph.kt b/dhis_android_analytics/src/main/java/dhis2/org/analytics/charts/data/Graph.kt index cfa972b8430..3ba229b4c4c 100644 --- a/dhis_android_analytics/src/main/java/dhis2/org/analytics/charts/data/Graph.kt +++ b/dhis_android_analytics/src/main/java/dhis2/org/analytics/charts/data/Graph.kt @@ -48,10 +48,11 @@ data class Graph( return when (eventPeriodType) { PeriodType.Daily, PeriodType.Weekly, + PeriodType.WeeklyWednesday, + PeriodType.WeeklyThursday, + PeriodType.WeeklyFriday, PeriodType.WeeklySaturday, PeriodType.WeeklySunday, - PeriodType.WeeklyThursday, - PeriodType.WeeklyWednesday, PeriodType.BiWeekly, PeriodType.Monthly, PeriodType.BiMonthly, @@ -65,8 +66,11 @@ data class Graph( } PeriodType.Yearly, + PeriodType.FinancialFeb, PeriodType.FinancialApril, PeriodType.FinancialJuly, + PeriodType.FinancialAug, + PeriodType.FinancialSep, PeriodType.FinancialOct, PeriodType.FinancialNov, -> { @@ -126,10 +130,11 @@ data class Graph( when (eventPeriodType) { PeriodType.Daily, PeriodType.Weekly, + PeriodType.WeeklyWednesday, + PeriodType.WeeklyThursday, + PeriodType.WeeklyFriday, PeriodType.WeeklySaturday, PeriodType.WeeklySunday, - PeriodType.WeeklyThursday, - PeriodType.WeeklyWednesday, PeriodType.BiWeekly, PeriodType.Monthly, PeriodType.BiMonthly, @@ -144,8 +149,11 @@ data class Graph( } PeriodType.Yearly, + PeriodType.FinancialFeb, PeriodType.FinancialApril, PeriodType.FinancialJuly, + PeriodType.FinancialAug, + PeriodType.FinancialSep, PeriodType.FinancialOct, PeriodType.FinancialNov, -> { diff --git a/dhis_android_analytics/src/main/java/dhis2/org/analytics/charts/mappers/GraphToBarData.kt b/dhis_android_analytics/src/main/java/dhis2/org/analytics/charts/mappers/GraphToBarData.kt index 60cedf8f36e..2c49a231409 100644 --- a/dhis_android_analytics/src/main/java/dhis2/org/analytics/charts/mappers/GraphToBarData.kt +++ b/dhis_android_analytics/src/main/java/dhis2/org/analytics/charts/mappers/GraphToBarData.kt @@ -57,10 +57,11 @@ class GraphToBarData { PeriodType.Daily -> DAILY_BAR_WIDTH PeriodType.Weekly, + PeriodType.WeeklyWednesday, + PeriodType.WeeklyThursday, + PeriodType.WeeklyFriday, PeriodType.WeeklySaturday, PeriodType.WeeklySunday, - PeriodType.WeeklyThursday, - PeriodType.WeeklyWednesday, -> WEEKLY_BAR_WIDTH PeriodType.BiWeekly, @@ -77,8 +78,11 @@ class GraphToBarData { SIX_MONTHLY_BAR_WIDTH } PeriodType.Yearly, + PeriodType.FinancialFeb, PeriodType.FinancialApril, PeriodType.FinancialJuly, + PeriodType.FinancialAug, + PeriodType.FinancialSep, PeriodType.FinancialOct, PeriodType.FinancialNov, -> { diff --git a/dhis_android_analytics/src/main/java/dhis2/org/analytics/charts/providers/PeriodStepProviderImpl.kt b/dhis_android_analytics/src/main/java/dhis2/org/analytics/charts/providers/PeriodStepProviderImpl.kt index a67a8637eb3..8a603334dd4 100644 --- a/dhis_android_analytics/src/main/java/dhis2/org/analytics/charts/providers/PeriodStepProviderImpl.kt +++ b/dhis_android_analytics/src/main/java/dhis2/org/analytics/charts/providers/PeriodStepProviderImpl.kt @@ -77,6 +77,7 @@ class PeriodStepProviderImpl( PeriodType.Weekly, PeriodType.WeeklyWednesday, PeriodType.WeeklyThursday, + PeriodType.WeeklyFriday, PeriodType.WeeklySaturday, PeriodType.WeeklySunday, -> { @@ -111,9 +112,13 @@ class PeriodStepProviderImpl( PeriodType.QuarterlyNov, PeriodType.SixMonthly, PeriodType.SixMonthlyApril, + PeriodType.FinancialFeb, PeriodType.FinancialApril, PeriodType.FinancialJuly, + PeriodType.FinancialAug, + PeriodType.FinancialSep, PeriodType.FinancialOct, + PeriodType.FinancialNov, -> formattedDate = periodString.format( @@ -173,6 +178,7 @@ class PeriodStepProviderImpl( PeriodType.Weekly, PeriodType.WeeklyWednesday, PeriodType.WeeklyThursday, + PeriodType.WeeklyFriday, PeriodType.WeeklySaturday, PeriodType.WeeklySunday, -> @@ -223,8 +229,11 @@ class PeriodStepProviderImpl( ).months / 6 PeriodType.Yearly, + PeriodType.FinancialFeb, PeriodType.FinancialApril, PeriodType.FinancialJuly, + PeriodType.FinancialAug, + PeriodType.FinancialSep, PeriodType.FinancialOct, PeriodType.FinancialNov, -> diff --git a/dhis_android_analytics/src/test/java/dhis2/org/analytics/charts/bindings/DateToPositionTest.kt b/dhis_android_analytics/src/test/java/dhis2/org/analytics/charts/bindings/DateToPositionTest.kt index 3a7bc105ff8..05205d9a1ed 100644 --- a/dhis_android_analytics/src/test/java/dhis2/org/analytics/charts/bindings/DateToPositionTest.kt +++ b/dhis_android_analytics/src/test/java/dhis2/org/analytics/charts/bindings/DateToPositionTest.kt @@ -32,10 +32,11 @@ class DateToPositionTest { listOf( PeriodType.Daily, PeriodType.Weekly, + PeriodType.WeeklyWednesday, + PeriodType.WeeklyThursday, + PeriodType.WeeklyFriday, PeriodType.WeeklySaturday, PeriodType.WeeklySunday, - PeriodType.WeeklyThursday, - PeriodType.WeeklyWednesday, PeriodType.BiWeekly, PeriodType.Monthly, PeriodType.BiMonthly, @@ -86,8 +87,11 @@ class DateToPositionTest { listOf( PeriodType.Yearly, + PeriodType.FinancialFeb, PeriodType.FinancialApril, PeriodType.FinancialJuly, + PeriodType.FinancialAug, + PeriodType.FinancialSep, PeriodType.FinancialOct, PeriodType.FinancialNov, ).forEach { period -> diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 371c9294cbd..f6afab9a261 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -11,7 +11,7 @@ kotlin = '2.2.21' dagger = '2.57.2' jacoco = '0.8.14' designSystem = "0.7.0-SNAPSHOT" -dhis2sdk = "1.14.0-20260209.084921-13" +dhis2sdk = "1.14.0-20260216.141057-20" ruleEngine = "3.3.11" expressionParser = "1.2.2" appcompat = "1.7.1" diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index 039ec11a49a..a48a4721150 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -2591,10 +2591,9 @@ - - - + + + @@ -2667,10 +2666,9 @@ - - - + + + @@ -3194,10 +3192,9 @@ - - - + + + @@ -3408,10 +3405,9 @@ - - - + + + @@ -3880,10 +3876,9 @@ - - - + + + @@ -4732,16 +4727,14 @@ - - - - - - - - + + + + + + + + @@ -7698,26 +7691,6 @@ - - - - - - - - - - - - - - - - @@ -7726,26 +7699,22 @@ - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + @@ -7769,16 +7738,6 @@ - - - - - - - - @@ -7809,16 +7768,14 @@ - - - - - - - - + + + + + + + + @@ -8541,16 +8498,14 @@ - - - - - - - - + + + + + + + + @@ -8566,16 +8521,6 @@ - - - - - - - - @@ -8600,16 +8545,6 @@ - - - - - - - - @@ -8643,16 +8578,6 @@ - - - - - - - - @@ -8676,16 +8601,6 @@ - - - - - - - - @@ -8703,14 +8618,12 @@ - - - - - - + + + + + + @@ -8729,14 +8642,12 @@ - - - - - - + + + + + + @@ -8762,16 +8673,6 @@ - - - - - - - - @@ -8789,16 +8690,14 @@ - - - - - - - - + + + + + + + + @@ -8814,16 +8713,6 @@ - - - - - - - - @@ -8849,36 +8738,30 @@ - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + @@ -8902,16 +8785,6 @@ - - - - - - - - @@ -8937,16 +8810,6 @@ - - - - - - - - @@ -8962,32 +8825,6 @@ - - - - - - - - - - - - - - - - - - - - - @@ -9026,16 +8863,14 @@ - - - - - - - - + + + + + + + + @@ -9052,16 +8887,14 @@ - - - - - - - - + + + + + + + + @@ -9086,16 +8919,6 @@ - - - - - - - - @@ -9112,14 +8935,12 @@ - - - - - - + + + + + + @@ -9137,16 +8958,6 @@ - - - - - - - - @@ -9172,36 +8983,30 @@ - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + @@ -9226,16 +9031,6 @@ - - - - - - - - @@ -9252,16 +9047,14 @@ - - - - - - - - + + + + + + + + @@ -9277,16 +9070,6 @@ - - - - - - - - @@ -9312,16 +9095,14 @@ - - - - - - - - + + + + + + + + @@ -9338,16 +9119,14 @@ - - - - - - - - + + + + + + + + @@ -9371,16 +9150,6 @@ - - - - - - - - @@ -10854,6 +10623,14 @@ + + + + + + + + @@ -12772,20 +12549,6 @@ - - - - - - - - - - - @@ -12874,12 +12637,6 @@ - - - - - @@ -13637,64 +13394,53 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -13728,16 +13474,6 @@ - - - - - - - - @@ -13777,17 +13513,14 @@ - - - - - - - - + + + + + + + + @@ -13827,16 +13560,6 @@ - - - - - - - - @@ -13879,53 +13602,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -14633,16 +14309,6 @@ - - - - - - - - @@ -14666,12 +14332,6 @@ - - - - - @@ -14697,10 +14357,9 @@ - - - + + + From 6e30070fcd3df8056f33d36d8c745a8efa2ff7eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Tar=C3=AD?= Date: Fri, 20 Feb 2026 15:45:09 +0100 Subject: [PATCH 061/114] chore: [ANDROAPP-7517] Adapt to mandatory enrollment category combo on programs (#4672) * chore: [ANDROAPP-7498] Update latest sdk snapshot * chore: [ANDROAPP-7498] Add new period types to enums and labels * chore: [ANDROAPP-7498] Extend test with new period types * chore: [ANDROAPP-7498] Fix tests * chore: [ANDROAPP-7517] add mandatory enrollmentCategoryCombo to testing programs update SDK version * chore: [ANDROAPP-7517] format * chore: [ANDROAPP-7517] fix test * chore: [ANDROAPP-7498] Extend test with new period types * chore: [ANDROAPP-7498] Fix tests * chore: [ANDROAPP-7517] add mandatory enrollmentCategoryCombo to testing programs update SDK version * chore: [ANDROAPP-7517] format * chore: [ANDROAPP-7517] fix test --- .../test/java/org/dhis2/bindings/TEICardExtensionsTest.kt | 1 + .../org/dhis2/data/dhislogic/EnrollmentEventGeneratorTest.kt | 1 + .../test/java/org/dhis2/data/filter/FilterRepositoryTest.kt | 5 +++++ .../org/dhis2/data/sorting/SearchSortingValueSetterTest.kt | 2 ++ .../usescases/enrollment/EnrollmentFormRepositoryTest.kt | 1 + .../usescases/enrollment/EnrollmentPresenterImplTest.kt | 4 ++++ .../eventInitial/EventInitialPresenterTest.kt | 1 + .../eventInitial/EventInitialRepositoryImplTest.kt | 1 + .../usescases/main/program/ProgramRepositoryImplTest.kt | 2 ++ .../java/org/dhis2/usescases/notes/NotesRepositoryTest.kt | 1 + .../programEventDetail/ProgramEventDetailPresenterTest.kt | 1 + .../usescases/programEventDetail/ProgramEventMapperTest.kt | 1 + .../usescases/searchTrackEntity/SearchRepositoryTest.kt | 4 ++++ .../usescases/searchTrackEntity/SearchTEIViewModelTest.kt | 1 + .../usescases/searchTrackEntity/SearchTEPresenterTest.kt | 4 ++++ .../searchTrackEntity/ui/mapper/TEICardMapperTest.kt | 2 ++ .../usescases/teiDashboard/TeiAttributesProviderTest.kt | 1 + .../usescases/teiDashboard/TeiDashboardPresenterTest.kt | 2 ++ .../teiProgramList/TeiProgramListRepositoryImplTest.kt | 2 ++ .../usescases/teiDashboard/ui/mapper/InfoBarMapperTest.kt | 2 ++ .../usescases/teiDashboard/ui/mapper/TEIDetailMapperTest.kt | 2 ++ .../tracker/TrackedEntityInstanceInfoProviderTests.kt | 1 + gradle/libs.versions.toml | 2 +- 23 files changed, 43 insertions(+), 1 deletion(-) diff --git a/app/src/test/java/org/dhis2/bindings/TEICardExtensionsTest.kt b/app/src/test/java/org/dhis2/bindings/TEICardExtensionsTest.kt index 36e20959173..dd5fb510726 100644 --- a/app/src/test/java/org/dhis2/bindings/TEICardExtensionsTest.kt +++ b/app/src/test/java/org/dhis2/bindings/TEICardExtensionsTest.kt @@ -130,5 +130,6 @@ class TEICardExtensionsTest { .icon("icon") .build(), ).categoryCombo(ObjectWithUid.create("categoryComboUid")) + .enrollmentCategoryCombo(ObjectWithUid.create("categoryComboUid")) .build() } diff --git a/app/src/test/java/org/dhis2/data/dhislogic/EnrollmentEventGeneratorTest.kt b/app/src/test/java/org/dhis2/data/dhislogic/EnrollmentEventGeneratorTest.kt index 5f1c85a5a64..10e238194b7 100644 --- a/app/src/test/java/org/dhis2/data/dhislogic/EnrollmentEventGeneratorTest.kt +++ b/app/src/test/java/org/dhis2/data/dhislogic/EnrollmentEventGeneratorTest.kt @@ -172,6 +172,7 @@ class EnrollmentEventGeneratorTest { .uid(PROGRAM_UID) .useFirstStageDuringRegistration(useFirstStage) .categoryCombo(ObjectWithUid.create("categoryComboUid")) + .enrollmentCategoryCombo(ObjectWithUid.create("categoryComboUid")) .build() private fun mockedAutogeneratedEvents( diff --git a/app/src/test/java/org/dhis2/data/filter/FilterRepositoryTest.kt b/app/src/test/java/org/dhis2/data/filter/FilterRepositoryTest.kt index ac6a58fa1b1..1fa1ddc8cb8 100644 --- a/app/src/test/java/org/dhis2/data/filter/FilterRepositoryTest.kt +++ b/app/src/test/java/org/dhis2/data/filter/FilterRepositoryTest.kt @@ -213,6 +213,7 @@ class FilterRepositoryTest { .builder() .uid("random") .categoryCombo(ObjectWithUid.create("categoryComboUid")) + .enrollmentCategoryCombo(ObjectWithUid.create("categoryComboUid")) .programType(org.hisp.dhis.android.core.program.ProgramType.WITH_REGISTRATION) .build() val catCombo = @@ -289,6 +290,7 @@ class FilterRepositoryTest { .builder() .uid("random") .categoryCombo(ObjectWithUid.create("categoryComboUid")) + .enrollmentCategoryCombo(ObjectWithUid.create("categoryComboUid")) .programType(org.hisp.dhis.android.core.program.ProgramType.WITH_REGISTRATION) .build() val catCombo = @@ -384,6 +386,7 @@ class FilterRepositoryTest { .builder() .uid("random") .categoryCombo(ObjectWithUid.create("categoryComboUid")) + .enrollmentCategoryCombo(ObjectWithUid.create("categoryComboUid")) .programType(org.hisp.dhis.android.core.program.ProgramType.WITH_REGISTRATION) .build() val catCombo = @@ -464,6 +467,7 @@ class FilterRepositoryTest { .builder() .uid("random") .categoryCombo(ObjectWithUid.create("categoryComboUid")) + .enrollmentCategoryCombo(ObjectWithUid.create("categoryComboUid")) .programType(org.hisp.dhis.android.core.program.ProgramType.WITH_REGISTRATION) .trackedEntityType( TrackedEntityType @@ -606,6 +610,7 @@ class FilterRepositoryTest { .builder() .uid("random") .categoryCombo(ObjectWithUid.create("categoryComboUid")) + .enrollmentCategoryCombo(ObjectWithUid.create("categoryComboUid")) .programType(org.hisp.dhis.android.core.program.ProgramType.WITH_REGISTRATION) .trackedEntityType( TrackedEntityType diff --git a/app/src/test/java/org/dhis2/data/sorting/SearchSortingValueSetterTest.kt b/app/src/test/java/org/dhis2/data/sorting/SearchSortingValueSetterTest.kt index 0c6a4a2aff4..089d9537808 100644 --- a/app/src/test/java/org/dhis2/data/sorting/SearchSortingValueSetterTest.kt +++ b/app/src/test/java/org/dhis2/data/sorting/SearchSortingValueSetterTest.kt @@ -449,6 +449,7 @@ class SearchSortingValueSetterTest { .builder() .uid("programUid") .categoryCombo(ObjectWithUid.create("categoryComboUid")) + .enrollmentCategoryCombo(ObjectWithUid.create("categoryComboUid")) .enrollmentDateLabel("programEnrollmentDateLabel") .build() @@ -484,6 +485,7 @@ class SearchSortingValueSetterTest { .builder() .uid("programUid") .categoryCombo(ObjectWithUid.create("categoryComboUid")) + .enrollmentCategoryCombo(ObjectWithUid.create("categoryComboUid")) .build() val result = diff --git a/app/src/test/java/org/dhis2/usescases/enrollment/EnrollmentFormRepositoryTest.kt b/app/src/test/java/org/dhis2/usescases/enrollment/EnrollmentFormRepositoryTest.kt index cdbfe200d15..0d5185fd534 100644 --- a/app/src/test/java/org/dhis2/usescases/enrollment/EnrollmentFormRepositoryTest.kt +++ b/app/src/test/java/org/dhis2/usescases/enrollment/EnrollmentFormRepositoryTest.kt @@ -37,6 +37,7 @@ class EnrollmentFormRepositoryTest { .uid("programUid") .displayName("programName") .categoryCombo(ObjectWithUid.create("categoryComboUid")) + .enrollmentCategoryCombo(ObjectWithUid.create("categoryComboUid")) .build() whenever(enrollmentRepository.blockingGet()) doReturn Enrollment diff --git a/app/src/test/java/org/dhis2/usescases/enrollment/EnrollmentPresenterImplTest.kt b/app/src/test/java/org/dhis2/usescases/enrollment/EnrollmentPresenterImplTest.kt index 6ba88a9741e..8471215a86f 100644 --- a/app/src/test/java/org/dhis2/usescases/enrollment/EnrollmentPresenterImplTest.kt +++ b/app/src/test/java/org/dhis2/usescases/enrollment/EnrollmentPresenterImplTest.kt @@ -75,6 +75,7 @@ class EnrollmentPresenterImplTest { .builder() .uid("") .categoryCombo(ObjectWithUid.create("categoryComboUid")) + .enrollmentCategoryCombo(ObjectWithUid.create("categoryComboUid")) .access( Access .builder() @@ -97,6 +98,7 @@ class EnrollmentPresenterImplTest { .builder() .uid("") .categoryCombo(ObjectWithUid.create("categoryComboUid")) + .enrollmentCategoryCombo(ObjectWithUid.create("categoryComboUid")) .access( Access .builder() @@ -169,6 +171,7 @@ class EnrollmentPresenterImplTest { .builder() .uid("tUID") .categoryCombo(ObjectWithUid.create("categoryComboUid")) + .enrollmentCategoryCombo(ObjectWithUid.create("categoryComboUid")) .build() whenever(teiRepository.blockingGet()) doReturn tei @@ -206,6 +209,7 @@ class EnrollmentPresenterImplTest { .builder() .uid("tUID") .categoryCombo(ObjectWithUid.create("categoryComboUid")) + .enrollmentCategoryCombo(ObjectWithUid.create("categoryComboUid")) .build() whenever(teiRepository.blockingGet()) doReturn tei diff --git a/app/src/test/java/org/dhis2/usescases/eventsWithoutRegistration/eventInitial/EventInitialPresenterTest.kt b/app/src/test/java/org/dhis2/usescases/eventsWithoutRegistration/eventInitial/EventInitialPresenterTest.kt index 6d1518444f3..af4c0c5a36e 100644 --- a/app/src/test/java/org/dhis2/usescases/eventsWithoutRegistration/eventInitial/EventInitialPresenterTest.kt +++ b/app/src/test/java/org/dhis2/usescases/eventsWithoutRegistration/eventInitial/EventInitialPresenterTest.kt @@ -370,6 +370,7 @@ class EventInitialPresenterTest { .builder() .uid(uid) .categoryCombo(ObjectWithUid.create("categoryComboUid")) + .enrollmentCategoryCombo(ObjectWithUid.create("categoryComboUid")) .build() val orgUnits = mutableListOf( diff --git a/app/src/test/java/org/dhis2/usescases/eventsWithoutRegistration/eventInitial/EventInitialRepositoryImplTest.kt b/app/src/test/java/org/dhis2/usescases/eventsWithoutRegistration/eventInitial/EventInitialRepositoryImplTest.kt index 6e28218ae7c..eeb1fec1baf 100644 --- a/app/src/test/java/org/dhis2/usescases/eventsWithoutRegistration/eventInitial/EventInitialRepositoryImplTest.kt +++ b/app/src/test/java/org/dhis2/usescases/eventsWithoutRegistration/eventInitial/EventInitialRepositoryImplTest.kt @@ -260,6 +260,7 @@ class EventInitialRepositoryImplTest { .builder() .uid("programUid") .categoryCombo(ObjectWithUid.create("categoryComboUid")) + .enrollmentCategoryCombo(ObjectWithUid.create("categoryComboUid")) .access(Access.create(true, true, DataAccess.create(true, hasAccess))) .build() } diff --git a/app/src/test/java/org/dhis2/usescases/main/program/ProgramRepositoryImplTest.kt b/app/src/test/java/org/dhis2/usescases/main/program/ProgramRepositoryImplTest.kt index bbbd457b33f..ec78a168082 100644 --- a/app/src/test/java/org/dhis2/usescases/main/program/ProgramRepositoryImplTest.kt +++ b/app/src/test/java/org/dhis2/usescases/main/program/ProgramRepositoryImplTest.kt @@ -277,6 +277,7 @@ class ProgramRepositoryImplTest { .programType(ProgramType.WITHOUT_REGISTRATION) .style(ObjectStyle.builder().build()) .categoryCombo(ObjectWithUid.create("categoryComboUid")) + .enrollmentCategoryCombo(ObjectWithUid.create("categoryComboUid")) .build(), Program .builder() @@ -285,6 +286,7 @@ class ProgramRepositoryImplTest { .programType(ProgramType.WITH_REGISTRATION) .style(ObjectStyle.builder().build()) .categoryCombo(ObjectWithUid.create("categoryComboUid")) + .enrollmentCategoryCombo(ObjectWithUid.create("categoryComboUid")) .trackedEntityType( TrackedEntityType .builder() diff --git a/app/src/test/java/org/dhis2/usescases/notes/NotesRepositoryTest.kt b/app/src/test/java/org/dhis2/usescases/notes/NotesRepositoryTest.kt index 1474e19945d..c51061d5fca 100644 --- a/app/src/test/java/org/dhis2/usescases/notes/NotesRepositoryTest.kt +++ b/app/src/test/java/org/dhis2/usescases/notes/NotesRepositoryTest.kt @@ -96,6 +96,7 @@ class NotesRepositoryTest { .builder() .uid(UUID.randomUUID().toString()) .categoryCombo(ObjectWithUid.create("categoryComboUid")) + .enrollmentCategoryCombo(ObjectWithUid.create("categoryComboUid")) .access( Access .builder() diff --git a/app/src/test/java/org/dhis2/usescases/programEventDetail/ProgramEventDetailPresenterTest.kt b/app/src/test/java/org/dhis2/usescases/programEventDetail/ProgramEventDetailPresenterTest.kt index a14db2e227f..bffb0e8e37f 100644 --- a/app/src/test/java/org/dhis2/usescases/programEventDetail/ProgramEventDetailPresenterTest.kt +++ b/app/src/test/java/org/dhis2/usescases/programEventDetail/ProgramEventDetailPresenterTest.kt @@ -75,6 +75,7 @@ class ProgramEventDetailPresenterTest { .builder() .uid("programUid") .categoryCombo(ObjectWithUid.create("categoryComboUid")) + .enrollmentCategoryCombo(ObjectWithUid.create("categoryComboUid")) .build() whenever(repository.getAccessDataWrite()) doReturn true diff --git a/app/src/test/java/org/dhis2/usescases/programEventDetail/ProgramEventMapperTest.kt b/app/src/test/java/org/dhis2/usescases/programEventDetail/ProgramEventMapperTest.kt index d43e86829d3..6ba25515874 100644 --- a/app/src/test/java/org/dhis2/usescases/programEventDetail/ProgramEventMapperTest.kt +++ b/app/src/test/java/org/dhis2/usescases/programEventDetail/ProgramEventMapperTest.kt @@ -228,6 +228,7 @@ class ProgramEventMapperTest { .completeEventsExpiryDays(0) .expiryDays(0) .categoryCombo(ObjectWithUid.create("categoryComboUid")) + .enrollmentCategoryCombo(ObjectWithUid.create("categoryComboUid")) .build() private fun dummyCategoryOptionCombo() = diff --git a/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryTest.kt b/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryTest.kt index d3c83ec6b23..8883452d181 100644 --- a/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryTest.kt +++ b/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryTest.kt @@ -173,6 +173,7 @@ class SearchRepositoryTest { .builder() .uid("programUid") .categoryCombo(ObjectWithUid.create("categoryComboUid")) + .enrollmentCategoryCombo(ObjectWithUid.create("categoryComboUid")) .build() val sorting = SortingItem.create(Filters.ENROLLMENT_DATE) val tei = TrackedEntitySearchItemHelper.toTrackedEntityInstance(searchItem) @@ -211,6 +212,7 @@ class SearchRepositoryTest { .builder() .uid("programUid") .categoryCombo(ObjectWithUid.create("categoryComboUid")) + .enrollmentCategoryCombo(ObjectWithUid.create("categoryComboUid")) .build() val sorting = SortingItem.create(Filters.ENROLLMENT_DATE) val tei = TrackedEntitySearchItemHelper.toTrackedEntityInstance(searchItem) @@ -248,6 +250,7 @@ class SearchRepositoryTest { .builder() .uid("programUid") .categoryCombo(ObjectWithUid.create("categoryComboUid")) + .enrollmentCategoryCombo(ObjectWithUid.create("categoryComboUid")) .build() val sorting = SortingItem.create(Filters.ENROLLMENT_DATE) val tei = TrackedEntitySearchItemHelper.toTrackedEntityInstance(searchItem) @@ -369,6 +372,7 @@ class SearchRepositoryTest { .uid(programUid) .displayFrontPageList(true) .categoryCombo(ObjectWithUid.create("categoryComboUid")) + .enrollmentCategoryCombo(ObjectWithUid.create("categoryComboUid")) .build() // Mock setOverdueEvents diff --git a/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchTEIViewModelTest.kt b/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchTEIViewModelTest.kt index 9b3f5d7d9f6..174af457148 100644 --- a/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchTEIViewModelTest.kt +++ b/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchTEIViewModelTest.kt @@ -1046,6 +1046,7 @@ class SearchTEIViewModelTest { .minAttributesRequiredToSearch(minAttributesToSearch) .trackedEntityType(TrackedEntityType.builder().uid("teTypeUid").build()) .categoryCombo(ObjectWithUid.create("categoryComboUid")) + .enrollmentCategoryCombo(ObjectWithUid.create("categoryComboUid")) .apply { maxTeiCountToReturn?.let { maxTeiCountToReturn(maxTeiCountToReturn) diff --git a/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchTEPresenterTest.kt b/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchTEPresenterTest.kt index 0de7cf852e4..65283d5003a 100644 --- a/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchTEPresenterTest.kt +++ b/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchTEPresenterTest.kt @@ -60,6 +60,7 @@ class SearchTEPresenterTest { .displayFrontPageList(true) .minAttributesRequiredToSearch(0) .categoryCombo(ObjectWithUid.create("categoryComboUid")) + .enrollmentCategoryCombo(ObjectWithUid.create("categoryComboUid")) .build() whenever( @@ -101,6 +102,7 @@ class SearchTEPresenterTest { .displayFrontPageList(true) .minAttributesRequiredToSearch(1) .categoryCombo(ObjectWithUid.create("categoryComboUid")) + .enrollmentCategoryCombo(ObjectWithUid.create("categoryComboUid")) .build() presenter.setProgramForTesting(program) @@ -119,6 +121,7 @@ class SearchTEPresenterTest { .displayFrontPageList(true) .minAttributesRequiredToSearch(1) .categoryCombo(ObjectWithUid.create("categoryComboUid")) + .enrollmentCategoryCombo(ObjectWithUid.create("categoryComboUid")) .build() val newSelectedProgram = @@ -128,6 +131,7 @@ class SearchTEPresenterTest { .displayFrontPageList(true) .minAttributesRequiredToSearch(1) .categoryCombo(ObjectWithUid.create("categoryComboUid")) + .enrollmentCategoryCombo(ObjectWithUid.create("categoryComboUid")) .build() whenever( diff --git a/app/src/test/java/org/dhis2/usescases/searchTrackEntity/ui/mapper/TEICardMapperTest.kt b/app/src/test/java/org/dhis2/usescases/searchTrackEntity/ui/mapper/TEICardMapperTest.kt index aff56c83073..54ab9118a00 100644 --- a/app/src/test/java/org/dhis2/usescases/searchTrackEntity/ui/mapper/TEICardMapperTest.kt +++ b/app/src/test/java/org/dhis2/usescases/searchTrackEntity/ui/mapper/TEICardMapperTest.kt @@ -145,6 +145,7 @@ class TEICardMapperTest { .uid("Program1Uid") .displayName("Program 1") .categoryCombo(ObjectWithUid.create("categoryComboUid")) + .enrollmentCategoryCombo(ObjectWithUid.create("categoryComboUid")) .build(), null, ) @@ -154,6 +155,7 @@ class TEICardMapperTest { .uid("Program2Uid") .displayName("Program 2") .categoryCombo(ObjectWithUid.create("categoryComboUid")) + .enrollmentCategoryCombo(ObjectWithUid.create("categoryComboUid")) .build(), null, ) diff --git a/app/src/test/java/org/dhis2/usescases/teiDashboard/TeiAttributesProviderTest.kt b/app/src/test/java/org/dhis2/usescases/teiDashboard/TeiAttributesProviderTest.kt index bd0d4f4b8bb..be022f1f663 100644 --- a/app/src/test/java/org/dhis2/usescases/teiDashboard/TeiAttributesProviderTest.kt +++ b/app/src/test/java/org/dhis2/usescases/teiDashboard/TeiAttributesProviderTest.kt @@ -272,6 +272,7 @@ class TeiAttributesProviderTest { .builder() .uid(program) .categoryCombo(ObjectWithUid.create("categoryComboUid")) + .enrollmentCategoryCombo(ObjectWithUid.create("categoryComboUid")) .build() whenever(d2.programModule().programTrackedEntityAttributes()) doReturn mock() diff --git a/app/src/test/java/org/dhis2/usescases/teiDashboard/TeiDashboardPresenterTest.kt b/app/src/test/java/org/dhis2/usescases/teiDashboard/TeiDashboardPresenterTest.kt index 692004883f3..fdc8041f68f 100644 --- a/app/src/test/java/org/dhis2/usescases/teiDashboard/TeiDashboardPresenterTest.kt +++ b/app/src/test/java/org/dhis2/usescases/teiDashboard/TeiDashboardPresenterTest.kt @@ -71,6 +71,7 @@ class TeiDashboardPresenterTest { .builder() .uid(programUid) .categoryCombo(ObjectWithUid.create("categoryComboUid")) + .enrollmentCategoryCombo(ObjectWithUid.create("categoryComboUid")) .build() val trackedEntityInstance = TrackedEntityInstance.builder().uid(teiUid).build() val enrollment = Enrollment.builder().uid("enrollmentUid").build() @@ -91,6 +92,7 @@ class TeiDashboardPresenterTest { .builder() .uid(programUid) .categoryCombo(ObjectWithUid.create("categoryComboUid")) + .enrollmentCategoryCombo(ObjectWithUid.create("categoryComboUid")) .build(), MetadataIconData.defaultIcon(), ), diff --git a/app/src/test/java/org/dhis2/usescases/teiDashboard/teiProgramList/TeiProgramListRepositoryImplTest.kt b/app/src/test/java/org/dhis2/usescases/teiDashboard/teiProgramList/TeiProgramListRepositoryImplTest.kt index d86bd361a7c..74d2256fe3b 100644 --- a/app/src/test/java/org/dhis2/usescases/teiDashboard/teiProgramList/TeiProgramListRepositoryImplTest.kt +++ b/app/src/test/java/org/dhis2/usescases/teiDashboard/teiProgramList/TeiProgramListRepositoryImplTest.kt @@ -63,6 +63,7 @@ class TeiProgramListRepositoryImplTest { .uid("programUid") .displayIncidentDate(true) .categoryCombo(ObjectWithUid.create("categoryComboUid")) + .enrollmentCategoryCombo(ObjectWithUid.create("categoryComboUid")) .build() whenever( @@ -128,6 +129,7 @@ class TeiProgramListRepositoryImplTest { .uid("programUid") .displayIncidentDate(false) .categoryCombo(ObjectWithUid.create("categoryComboUid")) + .enrollmentCategoryCombo(ObjectWithUid.create("categoryComboUid")) .build() whenever( diff --git a/app/src/test/java/org/dhis2/usescases/teiDashboard/ui/mapper/InfoBarMapperTest.kt b/app/src/test/java/org/dhis2/usescases/teiDashboard/ui/mapper/InfoBarMapperTest.kt index baddf218723..8a4ee17d24d 100644 --- a/app/src/test/java/org/dhis2/usescases/teiDashboard/ui/mapper/InfoBarMapperTest.kt +++ b/app/src/test/java/org/dhis2/usescases/teiDashboard/ui/mapper/InfoBarMapperTest.kt @@ -175,6 +175,7 @@ class InfoBarMapperTest { .uid("Program1Uid") .displayName("Program 1") .categoryCombo(ObjectWithUid.create("categoryComboUid")) + .enrollmentCategoryCombo(ObjectWithUid.create("categoryComboUid")) .build(), MetadataIconData.defaultIcon(), ), @@ -184,6 +185,7 @@ class InfoBarMapperTest { .uid("Program2Uid") .displayName("Program 2") .categoryCombo(ObjectWithUid.create("categoryComboUid")) + .enrollmentCategoryCombo(ObjectWithUid.create("categoryComboUid")) .build(), MetadataIconData.defaultIcon(), ), diff --git a/app/src/test/java/org/dhis2/usescases/teiDashboard/ui/mapper/TEIDetailMapperTest.kt b/app/src/test/java/org/dhis2/usescases/teiDashboard/ui/mapper/TEIDetailMapperTest.kt index d30cd759fa9..d3ec64daaa7 100644 --- a/app/src/test/java/org/dhis2/usescases/teiDashboard/ui/mapper/TEIDetailMapperTest.kt +++ b/app/src/test/java/org/dhis2/usescases/teiDashboard/ui/mapper/TEIDetailMapperTest.kt @@ -134,6 +134,7 @@ class TEIDetailMapperTest { .uid("Program1Uid") .displayName("Program 1") .categoryCombo(ObjectWithUid.create("categoryComboUid")) + .enrollmentCategoryCombo(ObjectWithUid.create("categoryComboUid")) .build(), MetadataIconData.defaultIcon(), ), @@ -143,6 +144,7 @@ class TEIDetailMapperTest { .uid("Program2Uid") .displayName("Program 2") .categoryCombo(ObjectWithUid.create("categoryComboUid")) + .enrollmentCategoryCombo(ObjectWithUid.create("categoryComboUid")) .build(), MetadataIconData.defaultIcon(), ), diff --git a/app/src/test/java/org/dhis2/usescases/tracker/TrackedEntityInstanceInfoProviderTests.kt b/app/src/test/java/org/dhis2/usescases/tracker/TrackedEntityInstanceInfoProviderTests.kt index d0e9ed58c99..5827f790ab7 100644 --- a/app/src/test/java/org/dhis2/usescases/tracker/TrackedEntityInstanceInfoProviderTests.kt +++ b/app/src/test/java/org/dhis2/usescases/tracker/TrackedEntityInstanceInfoProviderTests.kt @@ -222,6 +222,7 @@ class TrackedEntityInstanceInfoProviderTests { .builder() .uid("programUid") .categoryCombo(ObjectWithUid.create("categoryComboUid")) + .enrollmentCategoryCombo(ObjectWithUid.create("categoryComboUid")) if (hasStyle) { program.style( diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index f6afab9a261..f787f8925e8 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -11,7 +11,7 @@ kotlin = '2.2.21' dagger = '2.57.2' jacoco = '0.8.14' designSystem = "0.7.0-SNAPSHOT" -dhis2sdk = "1.14.0-20260216.141057-20" +dhis2sdk = "1.14.0-20260219.101444-21" ruleEngine = "3.3.11" expressionParser = "1.2.2" appcompat = "1.7.1" From 1ffd849d00d0e93835c1708f0f1e0fbdd08d4637 Mon Sep 17 00:00:00 2001 From: Xavier Molloy Date: Mon, 23 Feb 2026 10:22:05 +0100 Subject: [PATCH 062/114] feat: [ANDROAPP-7470] - IV - Move SearchParameters Screen to tracker module [skip size] (#4675) * feat: [ANDROAPP-7470] Injection of new usecases and final prep steps * feat: [ANDROAPP-7470] Remove actual desktop class * feat: [ANDROAPP-7470] Move SearchParameters Screen to tracker module, replace fieldUiModel with trackerInputModel * feat: [ANDROAPP-7470] ktlint * feat: [ANDROAPP-7470] Fix renderiing for option sets in boolean types * feat: [ANDROAPP-7470] Conflict resolution * feat: [ANDROAPP-7470] Conflict resolution and small fix * feat: [ANDROAPP-7470] ktlint * feat: [ANDROAPP-7470] sonar code smell * feat: [ANDROAPP-7470] test rebase feature branch * feat: [ANDROAPP-7470] test rebase feature branch * feat: [ANDROAPP-7470] test rebase feature branch * feat: [ANDROAPP-7470] copilot comment ktlint --- .../SearchRepositoryImplKt.kt | 298 +++-------- .../searchTrackEntity/SearchRepositoryKt.kt | 15 +- .../searchTrackEntity/SearchTEActivity.kt | 17 +- .../searchTrackEntity/SearchTEIViewModel.kt | 280 ++++++---- .../searchTrackEntity/SearchTEModule.java | 4 - .../SearchParametersScreen.kt | 495 ------------------ .../SearchParametersScreenProvider.kt | 175 +++++++ .../mapper/ParameterInputModelMapper.kt | 202 ------- .../searchTrackEntity/SearchRepositoryTest.kt | 64 ++- .../SearchTEIViewModelTest.kt | 305 +++++++---- .../mapper/ParameterInputModelMapperTest.kt | 334 ------------ .../search/data/OptionSetRepositoryImpl.kt | 3 + .../input/ui/action/TrackerInputUiEvent.kt | 6 + .../ui/mapper/TrackerInputUiStateMapper.kt | 3 + .../input/ui/provider/TrackerInputProvider.kt | 10 +- .../input/ui/state/TrackerInputUiState.kt | 131 ++++- .../provider/ParameterSelectorItemProvider.kt | 8 +- .../ui/screen/SearchParametersScreen.kt | 282 ++++++++++ .../ui/state}/SearchParametersUiState.kt | 6 +- 19 files changed, 1129 insertions(+), 1509 deletions(-) delete mode 100644 app/src/main/java/org/dhis2/usescases/searchTrackEntity/searchparameters/SearchParametersScreen.kt create mode 100644 app/src/main/java/org/dhis2/usescases/searchTrackEntity/searchparameters/SearchParametersScreenProvider.kt delete mode 100644 app/src/main/java/org/dhis2/usescases/searchTrackEntity/searchparameters/mapper/ParameterInputModelMapper.kt delete mode 100644 app/src/test/java/org/dhis2/usescases/searchTrackEntity/searchparameters/mapper/ParameterInputModelMapperTest.kt create mode 100644 tracker/src/commonMain/kotlin/org/dhis2/tracker/search/ui/screen/SearchParametersScreen.kt rename {app/src/main/java/org/dhis2/usescases/searchTrackEntity/searchparameters/model => tracker/src/commonMain/kotlin/org/dhis2/tracker/search/ui/state}/SearchParametersUiState.kt (86%) diff --git a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryImplKt.kt b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryImplKt.kt index 822fbbeb51b..3f699212450 100644 --- a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryImplKt.kt +++ b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryImplKt.kt @@ -2,53 +2,35 @@ package org.dhis2.usescases.searchTrackEntity -import androidx.paging.map import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.FlowPreview -import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.debounce -import kotlinx.coroutines.flow.flatMapLatest -import kotlinx.coroutines.flow.map import kotlinx.coroutines.withContext import org.dhis2.commons.filters.FilterManager -import org.dhis2.commons.resources.MetadataIconProvider import org.dhis2.commons.viewmodel.DispatcherProvider import org.dhis2.data.search.SearchParametersModel -import org.dhis2.form.model.FieldUiModel -import org.dhis2.form.model.OptionSetConfiguration -import org.dhis2.form.ui.FieldViewModelFactory import org.dhis2.maps.model.MapItemModel import org.dhis2.mobile.commons.customintents.CustomIntentRepository -import org.dhis2.mobile.commons.extensions.toColor import org.dhis2.mobile.commons.model.CustomIntentActionTypeModel -import org.dhis2.mobile.commons.model.CustomIntentModel +import org.dhis2.tracker.input.model.TrackerInputType import org.dhis2.tracker.input.ui.action.FieldUid import org.dhis2.usescases.events.EventInfoProvider import org.dhis2.usescases.tracker.TrackedEntityInstanceInfoProvider import org.hisp.dhis.android.core.D2 -import org.hisp.dhis.android.core.arch.repositories.scope.RepositoryScope -import org.hisp.dhis.android.core.common.ObjectStyle import org.hisp.dhis.android.core.common.State import org.hisp.dhis.android.core.common.ValueType import org.hisp.dhis.android.core.event.EventStatus import org.hisp.dhis.android.core.program.Program -import org.hisp.dhis.android.core.program.ProgramTrackedEntityAttribute -import org.hisp.dhis.android.core.program.SectionRenderingType import org.hisp.dhis.android.core.relationship.RelationshipItem import org.hisp.dhis.android.core.relationship.RelationshipItemTrackedEntityInstance -import org.hisp.dhis.android.core.trackedentity.TrackedEntityAttribute import org.hisp.dhis.android.core.trackedentity.search.TrackedEntitySearchCollectionRepository import org.hisp.dhis.android.core.trackedentity.search.TrackedEntitySearchItem import org.hisp.dhis.android.core.trackedentity.search.TrackedEntitySearchItemHelper.toTrackedEntityInstance -import org.hisp.dhis.mobile.ui.designsystem.theme.SurfaceColor import timber.log.Timber class SearchRepositoryImplKt( private val searchRepositoryJava: SearchRepository, private val d2: D2, private val dispatcher: DispatcherProvider, - private val fieldViewModelFactory: FieldViewModelFactory, - private val metadataIconProvider: MetadataIconProvider, private val trackedEntityInstanceInfoProvider: TrackedEntityInstanceInfoProvider, private val eventInfoProvider: EventInfoProvider, private val customIntentRepository: CustomIntentRepository, @@ -67,7 +49,10 @@ class SearchRepositoryImplKt( ): Boolean { if (!this::savedSearchParameters.isInitialized) { savedSearchParameters = - SearchParametersModel(queryData = queryData, selectedProgram = searchRepositoryJava.getProgram(programUid)) + SearchParametersModel( + queryData = queryData, + selectedProgram = searchRepositoryJava.getProgram(programUid), + ) } if (!this::savedFilters.isInitialized) { savedFilters = FilterManager.getInstance().copy() @@ -87,36 +72,6 @@ class SearchRepositoryImplKt( null } - override suspend fun searchParameters( - programUid: String?, - teiTypeUid: String, - ): List = - withContext(dispatcher.io()) { - val searchParameters = - programUid?.let { - programTrackedEntityAttributes(programUid) - } ?: trackedEntitySearchFields(teiTypeUid) - - sortSearchParameters(searchParameters) - } - - fun sortSearchParameters(parameters: List): List = - parameters.sortedWith( - compareByDescending { - it.renderingType?.isQROrBarcode() == true && isUnique(it.uid) - }.thenByDescending { - it.renderingType?.isQROrBarcode() == true - }.thenByDescending { isUnique(it.uid) }, - ) - - private fun isUnique(teaUid: String): Boolean = - d2 - .trackedEntityModule() - .trackedEntityAttributes() - .uid(teaUid) - .blockingGet() - ?.unique() ?: false - override fun searchTeiForMap( searchParametersModel: SearchParametersModel, isOnline: Boolean, @@ -209,6 +164,50 @@ class SearchRepositoryImplKt( ) } + override fun trackerValueTypeToSDKValueType(trackerInputType: TrackerInputType): ValueType? = + when (trackerInputType) { + TrackerInputType.TEXT -> ValueType.TEXT + TrackerInputType.LONG_TEXT -> ValueType.LONG_TEXT + TrackerInputType.LETTER -> ValueType.LETTER + TrackerInputType.PHONE_NUMBER -> ValueType.PHONE_NUMBER + TrackerInputType.EMAIL -> ValueType.EMAIL + TrackerInputType.URL -> ValueType.URL + TrackerInputType.NUMBER -> ValueType.NUMBER + TrackerInputType.INTEGER -> ValueType.INTEGER + TrackerInputType.INTEGER_POSITIVE -> ValueType.INTEGER_POSITIVE + TrackerInputType.INTEGER_NEGATIVE -> ValueType.INTEGER_NEGATIVE + TrackerInputType.INTEGER_ZERO_OR_POSITIVE -> ValueType.INTEGER_ZERO_OR_POSITIVE + TrackerInputType.PERCENTAGE -> ValueType.PERCENTAGE + TrackerInputType.UNIT_INTERVAL -> ValueType.UNIT_INTERVAL + TrackerInputType.AGE -> ValueType.AGE + TrackerInputType.ORGANISATION_UNIT -> ValueType.ORGANISATION_UNIT + TrackerInputType.DATE_TIME -> ValueType.DATETIME + TrackerInputType.DATE -> ValueType.DATE + TrackerInputType.TIME -> ValueType.TIME + TrackerInputType.HORIZONTAL_CHECKBOXES, + TrackerInputType.VERTICAL_CHECKBOXES, + TrackerInputType.HORIZONTAL_RADIOBUTTONS, + TrackerInputType.VERTICAL_RADIOBUTTONS, + -> ValueType.BOOLEAN + + TrackerInputType.YES_ONLY_SWITCH, + TrackerInputType.YES_ONLY_CHECKBOX, + -> ValueType.TRUE_ONLY + + TrackerInputType.QR_CODE, + TrackerInputType.BAR_CODE, + -> ValueType.TEXT + + TrackerInputType.MULTI_SELECTION -> ValueType.MULTI_TEXT + TrackerInputType.DROPDOWN, + TrackerInputType.PERIOD_SELECTOR, + TrackerInputType.MATRIX, + TrackerInputType.SEQUENTIAL, + TrackerInputType.NOT_SUPPORTED, + TrackerInputType.CUSTOM_INTENT, + -> ValueType.TEXT + } + override fun searchRelationshipsForMap( teis: List, selectedProgram: Program?, @@ -288,6 +287,32 @@ class SearchRepositoryImplKt( } } + override fun validateValue( + inputType: TrackerInputType, + value: String, + ): Any = + { + when (inputType) { + TrackerInputType.DATE -> { + ValueType.DATE.validator.validate(value) + } + TrackerInputType.DATE_TIME -> { + ValueType.DATETIME.validator.validate(value) + } + TrackerInputType.TIME -> { + ValueType.TIME.validator.validate(value) + } + + TrackerInputType.AGE -> { + ValueType.AGE.validator.validate(value) + } + + else -> { + false + } + } + } + override fun searchEventForMap( teiUids: List, selectedProgram: Program?, @@ -320,93 +345,6 @@ class SearchRepositoryImplKt( } } - private fun programTrackedEntityAttributes(programUid: String): List { - val searchableAttributes = - d2 - .programModule() - .programTrackedEntityAttributes() - .withRenderType() - .byProgram() - .eq(programUid) - .orderBySortOrder(RepositoryScope.OrderByDirection.ASC) - .blockingGet() - .filter { programAttribute -> - val isSearchable = programAttribute.searchable()!! - val isUnique = - d2 - .trackedEntityModule() - .trackedEntityAttributes() - .uid(programAttribute.trackedEntityAttribute()!!.uid()) - .blockingGet() - ?.unique() === java.lang.Boolean.TRUE - isSearchable || isUnique - } - - val program = - d2 - .programModule() - .programs() - .uid(programUid) - .blockingGet() - - return searchableAttributes - .mapNotNull { programAttribute -> - d2 - .trackedEntityModule() - .trackedEntityAttributes() - .uid(programAttribute.trackedEntityAttribute()!!.uid()) - .blockingGet() - ?.let { attribute -> - val searchFlow = MutableStateFlow("") - val optionSetConfiguration = - attribute.optionSet()?.let { - OptionSetConfiguration( - searchEmitter = searchFlow, - optionFlow = - searchFlow.debounce(300).flatMapLatest { - d2 - .optionModule() - .options() - .orderBySortOrder(RepositoryScope.OrderByDirection.ASC) - .byOptionSetUid() - .eq(attribute.optionSet()!!.uid()) - .getPagingData(10) - .map { pagingData -> - pagingData.map { option -> - OptionSetConfiguration.OptionData( - option, - metadataIconProvider( - option.style(), - program?.style()?.color()?.toColor() - ?: SurfaceColor.Primary, - ), - ) - } - } - }, - onSearch = { searchFlow.value = it }, - ) - } - val customIntentModel = - customIntentRepository.getCustomIntent( - triggerUid = attribute.uid(), - orgUnitUid = null, - actionType = CustomIntentActionTypeModel.SEARCH, - ) - createField( - trackedEntityAttribute = attribute, - programTrackedEntityAttribute = programAttribute, - optionSetConfiguration = optionSetConfiguration, - customIntent = customIntentModel, - ) - } - }.filter { parameter -> - parameter.valueType !== ValueType.IMAGE && - parameter.valueType !== ValueType.COORDINATE && - parameter.valueType !== ValueType.FILE_RESOURCE - } - } - override suspend fun getCustomIntent(fieldUid: FieldUid) = withContext(dispatcher.io()) { customIntentRepository.getCustomIntent( @@ -415,90 +353,4 @@ class SearchRepositoryImplKt( actionType = CustomIntentActionTypeModel.SEARCH, ) } - - private fun trackedEntitySearchFields(teiTypeUid: String): List { - val teTypeAttributes = - d2 - .trackedEntityModule() - .trackedEntityTypeAttributes() - .byTrackedEntityTypeUid() - .eq(teiTypeUid) - .bySearchable() - .isTrue - .blockingGet() - - return teTypeAttributes - .mapNotNull { typeAttribute -> - d2 - .trackedEntityModule() - .trackedEntityAttributes() - .uid(typeAttribute.trackedEntityAttribute()!!.uid()) - .blockingGet() - ?.let { attribute -> - val searchEmitter = MutableStateFlow("") - val optionSetConfiguration = - attribute.optionSet()?.let { - OptionSetConfiguration( - searchEmitter = searchEmitter, - optionFlow = - d2 - .optionModule() - .options() - .byOptionSetUid() - .eq(attribute.optionSet()!!.uid()) - .orderBySortOrder(RepositoryScope.OrderByDirection.ASC) - .getPagingData(10) - .map { pagingData -> - pagingData.map { option -> - OptionSetConfiguration.OptionData( - option, - metadataIconProvider( - option.style(), - SurfaceColor.Primary, - ), - ) - } - }, - onSearch = { searchEmitter.value = it }, - ) - } - - createField( - trackedEntityAttribute = attribute, - programTrackedEntityAttribute = null, - optionSetConfiguration = optionSetConfiguration, - ) - } - }.filter { parameter -> - parameter.valueType !== ValueType.IMAGE && - parameter.valueType !== ValueType.COORDINATE && - parameter.valueType !== ValueType.FILE_RESOURCE - } - } - - private fun createField( - trackedEntityAttribute: TrackedEntityAttribute, - programTrackedEntityAttribute: ProgramTrackedEntityAttribute?, - optionSetConfiguration: OptionSetConfiguration?, - customIntent: CustomIntentModel? = null, - ): FieldUiModel = - fieldViewModelFactory.create( - id = trackedEntityAttribute.uid(), - label = trackedEntityAttribute.displayFormName() ?: "", - valueType = trackedEntityAttribute.valueType()!!, - mandatory = false, - optionSet = trackedEntityAttribute.optionSet()?.uid(), - value = null, - programStageSection = null, - allowFutureDates = programTrackedEntityAttribute?.allowFutureDate() ?: true, - editable = true, - renderingType = SectionRenderingType.LISTING, - description = null, - fieldRendering = programTrackedEntityAttribute?.renderType()?.mobile(), - objectStyle = trackedEntityAttribute.style() ?: ObjectStyle.builder().build(), - fieldMask = trackedEntityAttribute.fieldMask(), - optionSetConfiguration = optionSetConfiguration, - featureType = null, - customIntentModel = customIntent, - ) } diff --git a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryKt.kt b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryKt.kt index 43bde52a6f7..17f56679dee 100644 --- a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryKt.kt +++ b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryKt.kt @@ -1,23 +1,24 @@ package org.dhis2.usescases.searchTrackEntity import org.dhis2.data.search.SearchParametersModel -import org.dhis2.form.model.FieldUiModel import org.dhis2.maps.model.MapItemModel import org.dhis2.mobile.commons.model.CustomIntentModel +import org.dhis2.tracker.input.model.TrackerInputType import org.dhis2.tracker.input.ui.action.FieldUid +import org.hisp.dhis.android.core.common.ValueType import org.hisp.dhis.android.core.program.Program interface SearchRepositoryKt { - suspend fun searchParameters( - programUid: String?, - teiTypeUid: String, - ): List - fun searchTeiForMap( searchParametersModel: SearchParametersModel, isOnline: Boolean, ): List + fun validateValue( + inputType: TrackerInputType, + value: String, + ): Any + fun searchEventForMap( teiUids: List, selectedProgram: Program?, @@ -36,4 +37,6 @@ interface SearchRepositoryKt { ): Boolean fun getExcludeValues(): HashSet? + + fun trackerValueTypeToSDKValueType(trackerInputType: TrackerInputType): ValueType? } diff --git a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEActivity.kt b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEActivity.kt index 87885c681dc..6c71aadcef9 100644 --- a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEActivity.kt +++ b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEActivity.kt @@ -54,7 +54,6 @@ import org.dhis2.commons.sync.SyncContext import org.dhis2.commons.sync.SyncContext.TrackerProgramTei import org.dhis2.data.forms.dataentry.ProgramAdapter import org.dhis2.databinding.ActivitySearchBinding -import org.dhis2.form.ui.intent.FormIntent.OnSave import org.dhis2.mobile.commons.orgunit.OrgUnitSelectorScope import org.dhis2.tracker.NavigationBarUIState import org.dhis2.ui.ThemeManager @@ -66,7 +65,7 @@ import org.dhis2.usescases.searchTrackEntity.LegacyInteraction.OnSyncIconClick import org.dhis2.usescases.searchTrackEntity.LegacyInteraction.OnTeiClick import org.dhis2.usescases.searchTrackEntity.listView.SearchTEList.Companion.get import org.dhis2.usescases.searchTrackEntity.mapView.SearchTEMap.Companion.get -import org.dhis2.usescases.searchTrackEntity.searchparameters.initSearchScreen +import org.dhis2.usescases.searchTrackEntity.searchparameters.provideSearchScreen import org.dhis2.usescases.searchTrackEntity.ui.SearchScreenConfigurator import org.dhis2.utils.customviews.BreakTheGlassBottomDialog import org.dhis2.utils.customviews.navigationbar.NavigationPage @@ -75,7 +74,6 @@ import org.dhis2.utils.granularsync.shouldLaunchSyncDialog import org.dhis2.utils.isLandscape import org.dhis2.utils.isPortrait import org.hisp.dhis.android.core.arch.call.D2Progress -import org.hisp.dhis.android.core.common.ValueType import org.hisp.dhis.android.core.organisationunit.OrganisationUnit import org.hisp.dhis.mobile.ui.designsystem.component.navigationBar.NavigationBar import org.hisp.dhis.mobile.ui.designsystem.theme.DHIS2Theme @@ -336,7 +334,7 @@ class SearchTEActivity : } private fun initSearchParameters() { - initSearchScreen( + provideSearchScreen( binding.searchContainer, viewModel, initialProgram, @@ -352,14 +350,9 @@ class SearchTEActivity : if (selectedOrgUnits.isNotEmpty()) { selectedOrgUnit = selectedOrgUnits[0].uid() } - viewModel.onParameterIntent( - OnSave( - uid, - selectedOrgUnit, - ValueType.ORGANISATION_UNIT, - null, - true, - ), + viewModel.onValueChange( + fieldUid = uid, + value = selectedOrgUnit, ) }.orgUnitScope(orgUnitScope) .build() diff --git a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEIViewModel.kt b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEIViewModel.kt index 3dd0c002743..c0076d8155a 100644 --- a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEIViewModel.kt +++ b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEIViewModel.kt @@ -23,6 +23,7 @@ import kotlinx.coroutines.async import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableSharedFlow +import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.emitAll import kotlinx.coroutines.flow.emptyFlow @@ -43,9 +44,7 @@ import org.dhis2.commons.filters.FilterManager import org.dhis2.commons.network.NetworkUtils import org.dhis2.commons.resources.ResourceManager import org.dhis2.commons.viewmodel.DispatcherProvider -import org.dhis2.form.model.FieldUiModelImpl import org.dhis2.form.ui.customintent.CustomIntentResult -import org.dhis2.form.ui.intent.FormIntent import org.dhis2.form.ui.provider.DisplayNameProvider import org.dhis2.maps.extensions.toStringProperty import org.dhis2.maps.layer.MapLayer @@ -54,21 +53,23 @@ import org.dhis2.maps.managers.MapManager import org.dhis2.maps.usecases.MapStyleConfiguration import org.dhis2.mobile.commons.coroutine.CoroutineTracker import org.dhis2.tracker.NavigationBarUIState +import org.dhis2.tracker.input.model.TrackerInputType import org.dhis2.tracker.input.ui.action.CustomIntentUid import org.dhis2.tracker.input.ui.action.FieldUid import org.dhis2.tracker.input.ui.action.TrackerInputAction +import org.dhis2.tracker.input.ui.mapper.toTrackerInputUiState +import org.dhis2.tracker.input.ui.state.TrackerOptionItem import org.dhis2.tracker.search.data.transformDomainTeiToSDKTei import org.dhis2.tracker.search.domain.FetchOptionSetOptions import org.dhis2.tracker.search.domain.FetchSearchParameters import org.dhis2.tracker.search.domain.SearchTrackedEntities +import org.dhis2.tracker.search.model.FetchSearchParametersData import org.dhis2.tracker.search.model.SearchTrackedEntitiesInput +import org.dhis2.tracker.search.ui.state.SearchParametersUiState import org.dhis2.usescases.searchTrackEntity.listView.SearchResult -import org.dhis2.usescases.searchTrackEntity.searchparameters.model.SearchParametersUiState import org.dhis2.usescases.searchTrackEntity.ui.UnableToSearchOutsideData import org.dhis2.utils.customviews.navigationbar.NavigationPage import org.dhis2.utils.customviews.navigationbar.NavigationPageConfigurator -import org.hisp.dhis.android.core.arch.helpers.Result -import org.hisp.dhis.android.core.common.ValueType import org.hisp.dhis.android.core.maintenance.D2ErrorCode import org.hisp.dhis.mobile.ui.designsystem.component.navigationBar.NavigationBarItem import org.maplibre.geojson.Feature @@ -95,6 +96,12 @@ class SearchTEIViewModel( ) : ViewModel() { private var layersVisibility: Map = emptyMap() + // Store option set flows per field UID + private val optionSetFlows = mutableMapOf>>() + + // Store search query states for option sets + private val optionSetSearchQueries = mutableMapOf>() + private val pageConfiguration = MutableLiveData() private val _navigationBarUIState = @@ -188,6 +195,52 @@ class SearchTEIViewModel( } } + /** + * Get or create option set flow for a given field. + */ + fun getOptionSetFlow( + fieldUid: String, + optionSetUid: String, + ): Flow> = + optionSetFlows.getOrPut(fieldUid) { + flow { + val searchQuery = + optionSetSearchQueries.getOrPut(fieldUid) { + MutableStateFlow(null) + } + + searchQuery.collect { query -> + val result = + fetchOptionSetOptions( + FetchOptionSetOptions.Params( + optionSetUid = optionSetUid, + pageSize = 10, + searchQuery = query, + ), + ) + + result.fold( + onSuccess = { optionsFlow -> + emitAll(optionsFlow) + }, + onFailure = { + emit(PagingData.empty()) + }, + ) + } + }.cachedIn(viewModelScope) + } + + /** + * Handle search in option sets. + */ + fun onOptionSetSearch( + fieldUid: String, + query: String, + ) { + optionSetSearchQueries[fieldUid]?.value = query.takeIf { it.isNotBlank() } + } + private fun loadNavigationBarItems() { CoroutineTracker.increment() val pageConfigurator = searchNavPageConfigurator.initVariables() @@ -412,14 +465,14 @@ class SearchTEIViewModel( val updatedItems = searchParametersUiState.items.map { if (it.uid == uid) { - (it as FieldUiModelImpl).copy( + it.copy( value = values?.joinToString(","), displayName = displayNameProvider.provideDisplayName( - valueType = it.valueType, + valueType = searchRepositoryKt.trackerValueTypeToSDKValueType(it.valueType), value = values?.joinToString(","), optionSet = it.optionSet, - periodType = it.periodSelector?.type, + periodType = null, ), error = errorMessage, ) @@ -440,7 +493,7 @@ class SearchTEIViewModel( private fun clearSearchParameters() { val updatedItems = searchParametersUiState.items.map { - (it as FieldUiModelImpl).copy(value = null, displayName = null) + it.copy(value = null, displayName = null) } searchParametersUiState = searchParametersUiState.copy( @@ -474,7 +527,11 @@ class SearchTEIViewModel( val isOnline = searching && networkUtils.isOnline() val selectedProgram = searchRepository.getProgram(initialProgramUid) - val allowCache = searchRepositoryKt.saveSearchValuesAndGetAllowCache(queryData, selectedProgram?.uid()) + val allowCache = + searchRepositoryKt.saveSearchValuesAndGetAllowCache( + queryData, + selectedProgram?.uid(), + ) val newTrackerSearchModel = SearchTrackedEntitiesInput( selectedProgram = selectedProgram?.uid(), @@ -513,7 +570,11 @@ class SearchTEIViewModel( val excludeValues = searchRepositoryKt.getExcludeValues() val selectedProgram = searchRepository.getProgram(initialProgramUid) - val allowCache = searchRepositoryKt.saveSearchValuesAndGetAllowCache(queryData, selectedProgram?.uid()) + val allowCache = + searchRepositoryKt.saveSearchValuesAndGetAllowCache( + queryData, + selectedProgram?.uid(), + ) val newTrackerSearchModel = SearchTrackedEntitiesInput( selectedProgram = selectedProgram?.uid(), @@ -553,7 +614,11 @@ class SearchTEIViewModel( val isOnline = searching && networkUtils.isOnline() val selectedProgram = searchRepository.getProgram(initialProgramUid) - val allowCache = searchRepositoryKt.saveSearchValuesAndGetAllowCache(queryData, selectedProgram?.uid()) + val allowCache = + searchRepositoryKt.saveSearchValuesAndGetAllowCache( + queryData, + selectedProgram?.uid(), + ) val newTrackerSearchModel = SearchTrackedEntitiesInput( selectedProgram = null, @@ -1004,82 +1069,38 @@ class SearchTEIViewModel( fetchJob?.cancel() fetchJob = viewModelScope.launch { - val fieldUiModels = - searchRepositoryKt.searchParameters(programUid, teiTypeUid) - searchParametersUiState = searchParametersUiState.copy(items = fieldUiModels) + fetchSearchParameters + .invoke( + input = + FetchSearchParametersData( + teiTypeUid = teiTypeUid, + programUid = programUid, + ), + ).fold( + onSuccess = { searchParameters -> + searchParametersUiState = + searchParametersUiState.copy( + items = + searchParameters.map { searchParameter -> + searchParameter.toTrackerInputUiState() + }, + ) + }, + onFailure = { + // TODO(Implement error) + }, + ) } } - fun onParameterIntent(formIntent: FormIntent) = - when (formIntent) { - is FormIntent.OnTextChange -> { - updateQuery( - formIntent.uid, - formIntent.value?.split(","), - ) - } - - is FormIntent.OnSave -> { - updateQuery( - formIntent.uid, - formIntent.value?.split(","), - ) - } - - is FormIntent.OnQrCodeScanned -> { - onQrCodeScanned(formIntent) - } - - is FormIntent.OnFocus -> { - val updatedItems = - searchParametersUiState.items.map { field -> - if (field.focused && field.uid != formIntent.uid) { - val validation = - field.value - ?.takeIf { - field.valueType in - listOf( - ValueType.DATE, - ValueType.DATETIME, - ValueType.AGE, - ValueType.TIME, - ) - }?.let { value -> field.valueType?.validator?.validate(value) } - - (field as FieldUiModelImpl).copy( - focused = false, - error = - when (validation) { - is Result.Failure -> resourceManager.getString(R.string.formatting_error) - else -> null - }, - ) - } else if (field.uid == formIntent.uid) { - (field as FieldUiModelImpl).copy(focused = true) - } else { - field - } - } - searchParametersUiState = searchParametersUiState.copy(items = updatedItems) - } - - is FormIntent.ClearValue -> { - updateQuery( - formIntent.uid, - null, - ) - } - - else -> { - // no-op - } - } - - private fun onQrCodeScanned(formIntent: FormIntent.OnQrCodeScanned) { + private fun onQrCodeScanned( + uid: String, + value: String?, + ) { viewModelScope.launch { updateQuery( - formIntent.uid, - formIntent.value?.let { listOf(it) }, + uid, + value?.let { listOf(it) }, ) searching = queryData.isNotEmpty() @@ -1148,7 +1169,7 @@ class SearchTEIViewModel( val updatedItems = searchParametersUiState.items.map { if (it.focused) { - (it as FieldUiModelImpl).copy(focused = false) + it.copy(focused = false) } else { it } @@ -1163,35 +1184,37 @@ class SearchTEIViewModel( .forEach { item -> when (item.valueType) { - ValueType.ORGANISATION_UNIT, ValueType.MULTI_TEXT -> { + TrackerInputType.ORGANISATION_UNIT, TrackerInputType.MULTI_SELECTION -> { map[item.uid] = (item.displayName ?: "") } - ValueType.DATE, ValueType.AGE -> { + TrackerInputType.DATE, TrackerInputType.AGE -> { item.value?.let { map[item.uid] = it.toFriendlyDate() } } - ValueType.DATETIME -> { + TrackerInputType.DATE_TIME -> { item.value?.let { map[item.uid] = it.toFriendlyDateTime() } } - ValueType.BOOLEAN -> { - map[item.uid] = "${item.label}: ${item.value}" - } - - ValueType.TRUE_ONLY -> { + TrackerInputType.YES_ONLY_SWITCH, + TrackerInputType.YES_ONLY_CHECKBOX, + TrackerInputType.HORIZONTAL_RADIOBUTTONS, + TrackerInputType.VERTICAL_RADIOBUTTONS, + TrackerInputType.HORIZONTAL_CHECKBOXES, + TrackerInputType.VERTICAL_CHECKBOXES, + -> { item.value?.let { - if (it == "true") { - map[item.uid] = item.label + if (it == "true" || it == "false") { + map[item.uid] = "${item.label}: $it" } } } - ValueType.PERCENTAGE -> { + TrackerInputType.PERCENTAGE -> { item.value?.let { map[item.uid] = it.toPercentage() } @@ -1218,7 +1241,7 @@ class SearchTEIViewModel( fetchMapResults() } - fun onLaunchCustomIntent( + fun launchCustomIntent( fieldUid: FieldUid, customIntentUid: CustomIntentUid, ) { @@ -1234,6 +1257,55 @@ class SearchTEIViewModel( } } + fun launchScan( + fieldUid: String, + optionSet: String?, + renderType: TrackerInputType, + ) { + val scanType = + if (renderType == TrackerInputType.QR_CODE) { + TrackerInputType.QR_CODE + } else { + TrackerInputType.BAR_CODE + } + + viewModelScope.launch { + _searchActions.send( + TrackerInputAction.Scan( + fieldUid = fieldUid, + optionSet = optionSet, + renderType = scanType, + ), + ) + } + } + + fun onValueChange( + fieldUid: String, + value: String?, + ) { + updateQuery( + fieldUid, + value?.split(","), + ) + } + + fun onItemClick(fieldUid: FieldUid) { + searchParametersUiState + .copy( + items = + searchParametersUiState.items.map { + if (it.uid == fieldUid) { + it.copy(focused = true) + } else { + it.copy(focused = false) + } + }, + ).let { + searchParametersUiState = it + } + } + fun handleCustomIntentResult(customIntentResult: CustomIntentResult) { when (customIntentResult) { is CustomIntentResult.Error -> { @@ -1252,4 +1324,20 @@ class SearchTEIViewModel( } } } + + fun handleScanResult( + fieldUid: String, + value: String?, + ) { + onQrCodeScanned( + uid = fieldUid, + value = value, + ) + value?.let { + updateSearchParameters( + uid = fieldUid, + values = listOf(value), + ) + } + } } diff --git a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEModule.java b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEModule.java index 1d55b4a17b7..7f7dc950b7c 100644 --- a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEModule.java +++ b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEModule.java @@ -165,7 +165,6 @@ SearchRepository searchRepository(@NonNull D2 d2, FilterPresenter filterPresenter, ResourceManager resources, SearchSortingValueSetter searchSortingValueSetter, - DhisPeriodUtils periodUtils, Charts charts, CrashReportController crashReportController, NetworkUtils networkUtils, @@ -198,7 +197,6 @@ SearchRepositoryKt searchRepositoryKt( SearchRepository searchRepository, D2 d2, DispatcherProvider dispatcherProvider, - FieldViewModelFactory fieldViewModelFactory, MetadataIconProvider metadataIconProvider, ColorUtils colorUtils, DateUtils dateUtils, @@ -212,8 +210,6 @@ SearchRepositoryKt searchRepositoryKt( searchRepository, d2, dispatcherProvider, - fieldViewModelFactory, - metadataIconProvider, new TrackedEntityInstanceInfoProvider( d2, profilePictureProvider, diff --git a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/searchparameters/SearchParametersScreen.kt b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/searchparameters/SearchParametersScreen.kt deleted file mode 100644 index 0103bee77e7..00000000000 --- a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/searchparameters/SearchParametersScreen.kt +++ /dev/null @@ -1,495 +0,0 @@ -package org.dhis2.usescases.searchTrackEntity.searchparameters - -import android.content.res.Configuration -import androidx.activity.compose.rememberLauncherForActivityResult -import androidx.compose.foundation.background -import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.calculateEndPadding -import androidx.compose.foundation.layout.calculateStartPadding -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.lazy.LazyColumn -import androidx.compose.foundation.lazy.itemsIndexed -import androidx.compose.foundation.shape.CornerSize -import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.outlined.Cancel -import androidx.compose.material.icons.outlined.ErrorOutline -import androidx.compose.material3.Icon -import androidx.compose.material3.Scaffold -import androidx.compose.material3.SnackbarDuration -import androidx.compose.material3.SnackbarHost -import androidx.compose.material3.SnackbarHostState -import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.remember -import androidx.compose.runtime.rememberCoroutineScope -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.platform.ComposeView -import androidx.compose.ui.platform.LocalConfiguration -import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.platform.LocalFocusManager -import androidx.compose.ui.platform.LocalLayoutDirection -import androidx.compose.ui.platform.testTag -import androidx.compose.ui.res.painterResource -import androidx.compose.ui.tooling.preview.Preview -import androidx.compose.ui.unit.dp -import com.journeyapps.barcodescanner.ScanOptions -import kotlinx.coroutines.flow.collectLatest -import kotlinx.coroutines.launch -import org.dhis2.R -import org.dhis2.commons.Constants -import org.dhis2.commons.resources.ColorUtils -import org.dhis2.commons.resources.ResourceManager -import org.dhis2.form.data.scan.ScanContract -import org.dhis2.form.model.FieldUiModel -import org.dhis2.form.model.FieldUiModelImpl -import org.dhis2.form.ui.customintent.CustomIntentActivityResultContract -import org.dhis2.form.ui.customintent.CustomIntentInput -import org.dhis2.form.ui.event.RecyclerViewUiEvents -import org.dhis2.form.ui.intent.FormIntent -import org.dhis2.mobile.commons.extensions.ObserveAsEvents -import org.dhis2.mobile.commons.orgunit.OrgUnitSelectorScope -import org.dhis2.tracker.input.ui.action.CustomIntentUid -import org.dhis2.tracker.input.ui.action.FieldUid -import org.dhis2.tracker.input.ui.action.TrackerInputAction -import org.dhis2.tracker.input.ui.action.TrackerInputUiEvent -import org.dhis2.tracker.search.ui.provider.provideParameterSelectorItem -import org.dhis2.usescases.searchTrackEntity.SearchTEIViewModel -import org.dhis2.usescases.searchTrackEntity.searchparameters.mapper.toParameterInputModel -import org.dhis2.usescases.searchTrackEntity.searchparameters.model.SearchParametersUiState -import org.hisp.dhis.android.core.common.ValueType -import org.hisp.dhis.mobile.ui.designsystem.component.AdditionalInfoItemColor -import org.hisp.dhis.mobile.ui.designsystem.component.Button -import org.hisp.dhis.mobile.ui.designsystem.component.ButtonStyle -import org.hisp.dhis.mobile.ui.designsystem.component.InfoBar -import org.hisp.dhis.mobile.ui.designsystem.component.parameter.ParameterSelectorItem -import org.hisp.dhis.mobile.ui.designsystem.theme.Radius -import org.hisp.dhis.mobile.ui.designsystem.theme.Shape -import org.hisp.dhis.mobile.ui.designsystem.theme.SurfaceColor -import org.hisp.dhis.mobile.ui.designsystem.theme.TextColor - -@Composable -fun SearchParametersScreen( - resourceManager: ResourceManager, - uiState: SearchParametersUiState, - intentHandler: (FormIntent) -> Unit, - onShowOrgUnit: ( - uid: String, - preselectedOrgUnits: List, - orgUnitScope: OrgUnitSelectorScope, - label: String, - ) -> Unit, - onSearch: () -> Unit, - onClear: () -> Unit, - onClose: () -> Unit, - onLaunchCustomIntent: (FieldUid, CustomIntentUid) -> Unit, -) { - val snackBarHostState = remember { SnackbarHostState() } - val coroutineScope = rememberCoroutineScope() - val focusManager = LocalFocusManager.current - val configuration = LocalConfiguration.current - - val scanContract = remember { ScanContract() } - val qrScanLauncher = - rememberLauncherForActivityResult( - contract = scanContract, - ) { result -> - result.contents?.let { qrData -> - val intent = - FormIntent.OnQrCodeScanned( - uid = result.originalIntent.getStringExtra(Constants.UID)!!, - value = qrData, - valueType = ValueType.TEXT, - ) - intentHandler(intent) - } - } - - val callback = - remember { - object : FieldUiModel.Callback { - override fun intent(intent: FormIntent) { - intentHandler.invoke(intent) - } - - override fun recyclerViewUiEvents(uiEvent: RecyclerViewUiEvents) { - // no - op - } - } - } - - uiState.minAttributesMessage?.let { message -> - coroutineScope.launch { - uiState.shouldShowMinAttributeWarning.collectLatest { - if (it) { - snackBarHostState.showSnackbar( - message = message, - duration = SnackbarDuration.Short, - ) - uiState.updateMinAttributeWarning(false) - } - } - } - } - - LaunchedEffect(uiState.isOnBackPressed) { - uiState.isOnBackPressed.collectLatest { - if (it) { - focusManager.clearFocus() - onClose() - } - } - } - - val backgroundShape = - when (configuration.orientation) { - Configuration.ORIENTATION_LANDSCAPE -> - RoundedCornerShape( - topStart = CornerSize(Radius.L), - topEnd = CornerSize(Radius.NoRounding), - bottomEnd = CornerSize(Radius.NoRounding), - bottomStart = CornerSize(Radius.NoRounding), - ) - - else -> Shape.LargeTop - } - - Scaffold( - containerColor = Color.Transparent, - snackbarHost = { - SnackbarHost( - hostState = snackBarHostState, - modifier = - Modifier.padding( - start = 8.dp, - top = 8.dp, - end = 8.dp, - bottom = 48.dp, - ), - ) - }, - ) { paddingValues -> - val layoutDirection = LocalLayoutDirection.current - Column( - modifier = - Modifier - .fillMaxSize() - .background(color = Color.White, shape = backgroundShape) - .padding( - top = 0.dp, - bottom = paddingValues.calculateBottomPadding(), - start = paddingValues.calculateStartPadding(layoutDirection), - end = paddingValues.calculateEndPadding(layoutDirection), - ), - ) { - LazyColumn( - modifier = - Modifier - .weight(1F), - ) { - if (uiState.items.isEmpty()) { - item { - Box( - modifier = - Modifier - .fillMaxWidth() - .padding(16.dp), - contentAlignment = Alignment.Center, - ) { - InfoBar( - modifier = Modifier.testTag("EMPTY_SEARCH_ATTRIBUTES_TEXT_TAG"), - text = resourceManager.getString(R.string.empty_search_attributes_message), - icon = { - Icon( - imageVector = Icons.Outlined.ErrorOutline, - contentDescription = "warning", - tint = AdditionalInfoItemColor.WARNING.color, - ) - }, - textColor = AdditionalInfoItemColor.WARNING.color, - backgroundColor = AdditionalInfoItemColor.WARNING.color.copy(alpha = 0.1f), - ) - } - } - } else { - itemsIndexed( - items = uiState.items, - key = { _, fieldUiModel -> - fieldUiModel.uid - }, - ) { index, fieldUiModel -> - fieldUiModel.setCallback(callback) - ParameterSelectorItem( - modifier = - Modifier - .testTag("SEARCH_PARAM_ITEM"), - model = - provideParameterSelectorItem( - inputModel = - fieldUiModel.toParameterInputModel( - fetchOptions = { - fieldUiModel.optionSet?.let { optionSetUid -> - intentHandler( - FormIntent.FetchOptions( - uid = fieldUiModel.uid, - optionSetUid = optionSetUid, - value = fieldUiModel.value, - ), - ) - } - }, - resourceManager = resourceManager, - ), - // TODO is this always the same string?, check if it is optional somewhere - helperText = resourceManager.getString(R.string.optional), - onNextClicked = { - val nextIndex = index + 1 - if (nextIndex < uiState.items.size) { - uiState.items[nextIndex].onItemClick() - } - }, - onUiEvent = { uiEvent -> - when (uiEvent) { - is TrackerInputUiEvent.OnScanButtonClicked -> { - qrScanLauncher.launch( - ScanOptions().apply { - setDesiredBarcodeFormats() - setPrompt("") - setBeepEnabled(true) - setBarcodeImageEnabled(false) - addExtra(Constants.UID, uiEvent.uid) - fieldUiModel.optionSet?.let { - addExtra( - Constants.OPTION_SET, - it, - ) - } - addExtra( - Constants.SCAN_RENDERING_TYPE, - fieldUiModel.renderingType, - ) - }, - ) - } - - is TrackerInputUiEvent.OnOrgUnitButtonClicked -> { - onShowOrgUnit( - uiEvent.uid, - uiEvent.value?.let { listOf(it) } - ?: emptyList(), - fieldUiModel.orgUnitSelectorScope - ?: OrgUnitSelectorScope.UserSearchScope(), - uiEvent.label, - ) - } - - is TrackerInputUiEvent.OnLaunchCustomIntent -> { - onLaunchCustomIntent( - uiEvent.uid, - uiEvent.customIntentUid, - ) - } - - is TrackerInputUiEvent.OnItemClick -> { - fieldUiModel.onItemClick() - } - - is TrackerInputUiEvent.OnValueChange -> { - fieldUiModel.onSave(uiEvent.value) - } - } - }, - ), - ) - } - } - - if (uiState.clearSearchEnabled) { - item { - Box( - modifier = Modifier.fillMaxWidth(), - contentAlignment = Alignment.Center, - ) { - Button( - modifier = Modifier.padding(16.dp, 24.dp, 16.dp, 8.dp), - style = ButtonStyle.TEXT, - text = resourceManager.getString(R.string.clear_search), - icon = { - Icon( - imageVector = Icons.Outlined.Cancel, - contentDescription = resourceManager.getString(R.string.clear_search), - tint = SurfaceColor.Primary, - ) - }, - ) { - focusManager.clearFocus() - onClear() - } - } - } - } - } - - Button( - enabled = uiState.searchEnabled, - modifier = - Modifier - .fillMaxWidth() - .padding(16.dp, 8.dp, 16.dp, 8.dp) - .testTag("SEARCH_BUTTON"), - style = ButtonStyle.FILLED, - text = resourceManager.getString(R.string.search), - icon = { - val iconTint = - if (uiState.searchEnabled) { - TextColor.OnPrimary - } else { - TextColor.OnDisabledSurface - } - - Icon( - painter = painterResource(id = R.drawable.ic_search), - contentDescription = null, - tint = iconTint, - ) - }, - ) { - focusManager.clearFocus() - onSearch() - } - } - } -} - -@Preview(showBackground = true) -@Composable -fun SearchFormPreview() { - SearchParametersScreen( - resourceManager = ResourceManager(LocalContext.current, ColorUtils()), - uiState = - SearchParametersUiState( - items = - buildList { - repeat(times = 20) { index -> - add( - FieldUiModelImpl( - uid = "uid$index", - label = "Label $index", - autocompleteList = emptyList(), - optionSetConfiguration = null, - valueType = ValueType.TEXT, - ), - ) - } - }, - ), - intentHandler = {}, - onShowOrgUnit = { _, _, _, _ -> }, - onSearch = {}, - onClear = {}, - onClose = {}, - onLaunchCustomIntent = { _, _ -> }, - ) -} - -@Preview(showBackground = true) -@Composable -fun SearchFormPreviewWithClear() { - SearchParametersScreen( - resourceManager = ResourceManager(LocalContext.current, ColorUtils()), - uiState = - SearchParametersUiState( - items = - buildList { - repeat(times = 20) { index -> - add( - FieldUiModelImpl( - uid = "uid$index", - label = "Label $index", - value = "test value", - autocompleteList = emptyList(), - optionSetConfiguration = null, - valueType = ValueType.TEXT, - ), - ) - } - }, - ), - intentHandler = {}, - onShowOrgUnit = { _, _, _, _ -> }, - onSearch = {}, - onClear = {}, - onClose = {}, - onLaunchCustomIntent = { _, _ -> }, - ) -} - -fun initSearchScreen( - composeView: ComposeView, - viewModel: SearchTEIViewModel, - program: String?, - teiType: String, - resources: ResourceManager, - onShowOrgUnit: ( - uid: String, - preselectedOrgUnits: List, - orgUnitScope: OrgUnitSelectorScope, - label: String, - ) -> Unit, - onClear: () -> Unit, -) { - viewModel.fetchSearchParameters( - programUid = program, - teiTypeUid = teiType, - ) - composeView.setContent { - val launcher = - rememberLauncherForActivityResult( - contract = CustomIntentActivityResultContract(), - onResult = viewModel::handleCustomIntentResult, - ) - - ObserveAsEvents( - flow = viewModel.searchActions, - ) { action -> - when (action) { - is TrackerInputAction.LaunchCustomIntent -> { - launcher.launch( - with(action) { - CustomIntentInput( - fieldUid = fieldUid, - customIntent = customIntentModel, - defaultTitle = - customIntentModel.name - ?: resources.getString(org.dhis2.form.R.string.select_app_intent), - ) - }, - ) - } - - is TrackerInputAction.Scan -> {} // TODO to be implemented - is TrackerInputAction.ValueChanged -> {} // TODO to be implemented - } - } - - SearchParametersScreen( - resourceManager = resources, - uiState = viewModel.searchParametersUiState, - onSearch = viewModel::onSearch, - intentHandler = viewModel::onParameterIntent, - onShowOrgUnit = onShowOrgUnit, - onClear = { - onClear() - viewModel.clearQueryData() - viewModel.clearFocus() - }, - onClose = { viewModel.clearFocus() }, - onLaunchCustomIntent = viewModel::onLaunchCustomIntent, - ) - } -} diff --git a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/searchparameters/SearchParametersScreenProvider.kt b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/searchparameters/SearchParametersScreenProvider.kt new file mode 100644 index 00000000000..f75a1882e43 --- /dev/null +++ b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/searchparameters/SearchParametersScreenProvider.kt @@ -0,0 +1,175 @@ +package org.dhis2.usescases.searchTrackEntity.searchparameters + +import android.content.res.Configuration +import androidx.activity.compose.rememberLauncherForActivityResult +import androidx.compose.runtime.remember +import androidx.compose.ui.platform.ComposeView +import androidx.compose.ui.platform.LocalConfiguration +import com.journeyapps.barcodescanner.ScanOptions +import org.dhis2.commons.Constants +import org.dhis2.commons.resources.ResourceManager +import org.dhis2.form.R +import org.dhis2.form.data.scan.ScanContract +import org.dhis2.form.ui.customintent.CustomIntentActivityResultContract +import org.dhis2.form.ui.customintent.CustomIntentInput +import org.dhis2.mobile.commons.extensions.ObserveAsEvents +import org.dhis2.mobile.commons.orgunit.OrgUnitSelectorScope +import org.dhis2.tracker.input.ui.action.TrackerInputAction +import org.dhis2.tracker.input.ui.action.TrackerInputUiEvent +import org.dhis2.tracker.search.ui.action.SearchScreenUiEvent +import org.dhis2.tracker.search.ui.screen.SearchParametersScreen +import org.dhis2.usescases.searchTrackEntity.SearchTEIViewModel + +fun provideSearchScreen( + composeView: ComposeView, + viewModel: SearchTEIViewModel, + program: String?, + teiType: String, + resources: ResourceManager, + onShowOrgUnit: ( + uid: String, + preselectedOrgUnits: List, + orgUnitScope: OrgUnitSelectorScope, + label: String, + ) -> Unit, + onClear: () -> Unit, +) { + viewModel.fetchSearchParameters( + programUid = program, + teiTypeUid = teiType, + ) + composeView.setContent { + val customIntentlauncher = + rememberLauncherForActivityResult( + contract = CustomIntentActivityResultContract(), + onResult = viewModel::handleCustomIntentResult, + ) + + val scanContract = remember { ScanContract() } + + val qrScanLauncher = + rememberLauncherForActivityResult( + contract = scanContract, + ) { result -> + result.contents?.let { qrData -> + viewModel.handleScanResult( + fieldUid = result.originalIntent.getStringExtra(Constants.UID)!!, + value = qrData, + ) + } + } + + ObserveAsEvents( + flow = viewModel.searchActions, + ) { action -> + when (action) { + is TrackerInputAction.LaunchCustomIntent -> { + customIntentlauncher.launch( + with(action) { + CustomIntentInput( + fieldUid = fieldUid, + customIntent = customIntentModel, + defaultTitle = + customIntentModel.name + ?: resources.getString(R.string.select_app_intent), + ) + }, + ) + } + + is TrackerInputAction.Scan -> { + with(action) { + qrScanLauncher.launch( + ScanOptions().apply { + setDesiredBarcodeFormats() + setPrompt("") + setBeepEnabled(true) + setBarcodeImageEnabled(false) + addExtra(Constants.UID, fieldUid) + optionSet?.let { + addExtra( + Constants.OPTION_SET, + it, + ) + } + addExtra( + Constants.SCAN_RENDERING_TYPE, + renderType, + ) + }, + ) + } + } + + is TrackerInputAction.ValueChanged -> { + viewModel.onValueChange( + fieldUid = action.fieldUid, + value = action.value, + ) + } + } + } + + val configuration = LocalConfiguration.current + + val isLandscape = configuration.orientation == Configuration.ORIENTATION_LANDSCAPE + SearchParametersScreen( + uiState = viewModel.searchParametersUiState, + onSearchScreenUiEvent = { + when (it) { + is SearchScreenUiEvent.OnSearchButtonClicked -> + viewModel.onSearch() + + is SearchScreenUiEvent.OnClearSearchButtonClicked -> { + onClear() + viewModel.clearQueryData() + viewModel.clearFocus() + } + + is SearchScreenUiEvent.OnCloseClicked -> viewModel.clearFocus() + } + }, + isLandscape = isLandscape, + onTrackerInputUiEvent = { + when (it) { + is TrackerInputUiEvent.OnScanButtonClicked -> + viewModel.launchScan( + it.uid, + it.optionSet, + it.renderType, + ) + + is TrackerInputUiEvent.OnOrgUnitButtonClicked -> + onShowOrgUnit( + it.uid, + it.value?.let { listOf(it) } + ?: emptyList(), + it.orgUnitSelectorScope + ?: OrgUnitSelectorScope.UserSearchScope(), + it.label, + ) + + is TrackerInputUiEvent.OnLaunchCustomIntent -> + viewModel.launchCustomIntent( + it.uid, + it.customIntentUid, + ) + + is TrackerInputUiEvent.OnItemClick -> viewModel.onItemClick(it.uid) + + is TrackerInputUiEvent.OnValueChange -> + viewModel.onValueChange( + fieldUid = it.uid, + value = it.value, + ) + } + }, + getOptionSetFlow = { fieldUid, optionSetUid -> + viewModel.getOptionSetFlow(fieldUid, optionSetUid) + }, + onOptionSetSearch = { fieldUid, query -> + viewModel.onOptionSetSearch(fieldUid, query) + }, + ) + } +} diff --git a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/searchparameters/mapper/ParameterInputModelMapper.kt b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/searchparameters/mapper/ParameterInputModelMapper.kt deleted file mode 100644 index a6ba90db778..00000000000 --- a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/searchparameters/mapper/ParameterInputModelMapper.kt +++ /dev/null @@ -1,202 +0,0 @@ -package org.dhis2.usescases.searchTrackEntity.searchparameters.mapper - -import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.derivedStateOf -import androidx.compose.runtime.getValue -import androidx.compose.runtime.remember -import androidx.compose.ui.graphics.Color -import androidx.paging.compose.collectAsLazyPagingItems -import org.dhis2.commons.resources.ResourceManager -import org.dhis2.form.R -import org.dhis2.form.model.FieldUiModel -import org.dhis2.form.model.UiRenderType -import org.dhis2.tracker.input.model.TrackerInputType -import org.dhis2.tracker.input.ui.state.TrackerInputUiState -import org.dhis2.tracker.input.ui.state.TrackerOptionItem -import org.dhis2.tracker.input.ui.state.TrackerOptionSetConfiguration -import org.hisp.dhis.android.core.common.ValueType -import org.hisp.dhis.mobile.ui.designsystem.component.LegendData -import org.hisp.dhis.mobile.ui.designsystem.component.Orientation - -@Composable -fun FieldUiModel.toParameterInputModel( - fetchOptions: () -> Unit, - resourceManager: ResourceManager, -): TrackerInputUiState { - val trackerInputType = - when { - optionSet != null && valueType != ValueType.MULTI_TEXT -> { - getInputTypeForOptionSetByRenderingType(renderingType) - } - - customIntent != null -> { - TrackerInputType.CUSTOM_INTENT - } - - eventCategories != null -> { - TrackerInputType.NOT_SUPPORTED - } - - else -> getInputTypeByValueType(valueType, renderingType) - } - - return TrackerInputUiState( - uid = uid, - label = label, - value = value, - focused = focused, - valueType = trackerInputType, - optionSet = optionSet, - error = error, - warning = warning, - description = description, - mandatory = mandatory, - editable = editable, - legend = - legend?.let { - LegendData( - color = Color(it.color), - title = it.label ?: "", - popUpLegendDescriptionData = it.legendsInfo, - ) - }, - orientation = renderingType.getOrientation(), - optionSetConfiguration = - when (valueType) { - ValueType.BOOLEAN -> getBooleanOptionConfiguration(resourceManager) - else -> optionSetConfiguration?.toTrackerOptionSetConfiguration(fetchOptions) - }, - customIntentUid = customIntent?.uid, - displayName = displayName, - ) -} - -@Composable -private fun org.dhis2.form.model.OptionSetConfiguration.toTrackerOptionSetConfiguration( - fetchOptions: () -> Unit, -): TrackerOptionSetConfiguration { - val optionsData = - optionFlow - .collectAsLazyPagingItems() - .also { LaunchedEffect(this) { it.refresh() } } - - val options by remember { - derivedStateOf { - (0 until (optionsData.itemCount)).mapNotNull { index -> - optionsData[index]?.let { optionData -> - TrackerOptionItem( - code = optionData.option.code() ?: "", - displayName = optionData.option.displayName() ?: "", - ) - } - } - } - } - - return TrackerOptionSetConfiguration( - options = options, - onSearch = onSearch, - onLoadOptions = fetchOptions, - ) -} - -internal fun getInputTypeForOptionSetByRenderingType(renderingType: UiRenderType?): TrackerInputType = - when (renderingType) { - UiRenderType.HORIZONTAL_CHECKBOXES -> TrackerInputType.HORIZONTAL_CHECKBOXES - UiRenderType.VERTICAL_CHECKBOXES -> TrackerInputType.VERTICAL_CHECKBOXES - UiRenderType.HORIZONTAL_RADIOBUTTONS -> TrackerInputType.HORIZONTAL_RADIOBUTTONS - UiRenderType.VERTICAL_RADIOBUTTONS -> TrackerInputType.VERTICAL_RADIOBUTTONS - - UiRenderType.MATRIX -> TrackerInputType.MATRIX - - UiRenderType.SEQUENCIAL -> TrackerInputType.SEQUENTIAL - - else -> TrackerInputType.DROPDOWN - } - -internal fun getInputTypeByValueType( - valueType: ValueType?, - renderingType: UiRenderType?, -): TrackerInputType = - when (valueType) { - ValueType.TEXT -> { - when (renderingType) { - UiRenderType.QR_CODE, UiRenderType.GS1_DATAMATRIX -> TrackerInputType.QR_CODE - UiRenderType.BAR_CODE -> TrackerInputType.BAR_CODE - else -> TrackerInputType.TEXT - } - } - - ValueType.INTEGER_POSITIVE -> TrackerInputType.INTEGER_POSITIVE - ValueType.INTEGER_ZERO_OR_POSITIVE -> TrackerInputType.INTEGER_ZERO_OR_POSITIVE - ValueType.PERCENTAGE -> TrackerInputType.PERCENTAGE - ValueType.NUMBER -> TrackerInputType.NUMBER - ValueType.INTEGER_NEGATIVE -> TrackerInputType.INTEGER_NEGATIVE - ValueType.LONG_TEXT -> TrackerInputType.LONG_TEXT - ValueType.INTEGER -> TrackerInputType.INTEGER - ValueType.ORGANISATION_UNIT -> TrackerInputType.ORGANISATION_UNIT - ValueType.EMAIL -> TrackerInputType.EMAIL - ValueType.BOOLEAN -> { - when (renderingType) { - UiRenderType.HORIZONTAL_CHECKBOXES -> TrackerInputType.HORIZONTAL_CHECKBOXES - UiRenderType.VERTICAL_CHECKBOXES -> TrackerInputType.VERTICAL_CHECKBOXES - UiRenderType.HORIZONTAL_RADIOBUTTONS -> TrackerInputType.HORIZONTAL_RADIOBUTTONS - UiRenderType.VERTICAL_RADIOBUTTONS -> TrackerInputType.VERTICAL_RADIOBUTTONS - - else -> TrackerInputType.VERTICAL_RADIOBUTTONS - } - } - - ValueType.TRUE_ONLY -> { - when (renderingType) { - UiRenderType.TOGGLE -> TrackerInputType.YES_ONLY_SWITCH - else -> TrackerInputType.YES_ONLY_CHECKBOX - } - } - - ValueType.PHONE_NUMBER -> TrackerInputType.PHONE_NUMBER - ValueType.DATE -> TrackerInputType.DATE - ValueType.DATETIME -> TrackerInputType.DATE_TIME - ValueType.TIME -> TrackerInputType.TIME - - ValueType.AGE -> TrackerInputType.AGE - ValueType.MULTI_TEXT -> TrackerInputType.MULTI_SELECTION - - ValueType.USERNAME, - ValueType.LETTER, - ValueType.UNIT_INTERVAL, - ValueType.TRACKER_ASSOCIATE, - ValueType.REFERENCE, - ValueType.COORDINATE, - ValueType.IMAGE, - ValueType.FILE_RESOURCE, - ValueType.GEOJSON, - ValueType.URL, - null, - -> TrackerInputType.NOT_SUPPORTED - } - -internal fun UiRenderType?.getOrientation(): Orientation = - when (this) { - UiRenderType.HORIZONTAL_CHECKBOXES, - UiRenderType.HORIZONTAL_RADIOBUTTONS, - -> Orientation.HORIZONTAL - - else -> Orientation.VERTICAL - } - -internal fun getBooleanOptionConfiguration(resourceManager: ResourceManager) = - TrackerOptionSetConfiguration( - options = - listOf( - TrackerOptionItem( - true.toString(), - resourceManager.getString(R.string.yes), - ), - TrackerOptionItem( - false.toString(), - resourceManager.getString(R.string.no), - ), - ), - ) diff --git a/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryTest.kt b/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryTest.kt index 8883452d181..248187774ea 100644 --- a/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryTest.kt +++ b/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryTest.kt @@ -15,7 +15,6 @@ import org.dhis2.data.sorting.SearchSortingValueSetter import org.dhis2.form.model.FieldUiModel import org.dhis2.form.model.FieldUiModelImpl import org.dhis2.form.model.UiRenderType -import org.dhis2.form.ui.FieldViewModelFactory import org.dhis2.mobile.commons.customintents.CustomIntentRepository import org.dhis2.mobile.commons.reporting.CrashReportController import org.dhis2.tracker.data.ProfilePictureProvider @@ -46,7 +45,6 @@ import org.hisp.dhis.android.core.trackedentity.TrackedEntityType import org.hisp.dhis.android.core.trackedentity.search.TrackedEntitySearchItem import org.hisp.dhis.android.core.trackedentity.search.TrackedEntitySearchItemAttribute import org.hisp.dhis.android.core.trackedentity.search.TrackedEntitySearchItemHelper -import org.junit.Assert.assertEquals import org.junit.Assert.assertFalse import org.junit.Assert.assertTrue import org.junit.Before @@ -62,7 +60,6 @@ import java.util.Date class SearchRepositoryTest { private val d2: D2 = Mockito.mock(D2::class.java, Mockito.RETURNS_DEEP_STUBS) - private val fieldViewModelFactory: FieldViewModelFactory = mock() private val metadataIconProvider: MetadataIconProvider = mock() private val dispatchers: DispatcherProvider = mock { @@ -75,18 +72,23 @@ class SearchRepositoryTest { private val trackedEntitySearchItemHelper: TrackedEntitySearchItemHelper = mock() private val enrollmentCollectionRepository: EnrollmentCollectionRepository = mock() - private val stringFilterConnector: StringFilterConnector = mock() - private val booleanFilterConnector: BooleanFilterConnector = mock() + private val stringFilterConnector: StringFilterConnector = + mock() + private val booleanFilterConnector: BooleanFilterConnector = + mock() private val programCollectionRepository: ProgramCollectionRepository = mock() - private val programReadOnlyOneObjectRepository: ReadOnlyOneObjectRepositoryFinalImpl = mock() + private val programReadOnlyOneObjectRepository: ReadOnlyOneObjectRepositoryFinalImpl = + mock() private val eventCollectionRepository: EventCollectionRepository = mock() private val eventStatusFilterConnector: EventStatusFilterConnector = mock() - private val stringEventFilterConnector: StringFilterConnector = mock() + private val stringEventFilterConnector: StringFilterConnector = + mock() private val orgUnitCollectionRepository: OrganisationUnitCollectionRepository = mock() - private val readOnlyOneObjectRepository: ReadOnlyOneObjectRepositoryFinalImpl = mock() + private val readOnlyOneObjectRepository: ReadOnlyOneObjectRepositoryFinalImpl = + mock() private val filterPresenter: FilterPresenter = mock() private val resourceManager: ResourceManager = mock() @@ -110,7 +112,9 @@ class SearchRepositoryTest { ) val trackedEntityAttributeCollection = mock() - whenever(d2.trackedEntityModule().trackedEntityAttributes()).thenReturn(trackedEntityAttributeCollection) + whenever(d2.trackedEntityModule().trackedEntityAttributes()).thenReturn( + trackedEntityAttributeCollection, + ) whenever(trackedEntityAttributeCollection.uid(anyString())).thenAnswer { invocation -> val uid = invocation.arguments[0] as String trackedEntityAttributes[uid] ?: createTrackedEntityAttributeRepository(uid, false) @@ -121,8 +125,6 @@ class SearchRepositoryTest { searchRepositoryJava = mock(), d2 = d2, dispatcher = dispatchers, - fieldViewModelFactory = fieldViewModelFactory, - metadataIconProvider = metadataIconProvider, trackedEntityInstanceInfoProvider = mock(), eventInfoProvider = mock(), customIntentRepository = customIntentRepository, @@ -148,23 +150,6 @@ class SearchRepositoryTest { ) } - @Test - fun shouldSortSearchParametersCorrectly() { - val mockData = createMockData() - val sortedData = searchRepository.sortSearchParameters(mockData) - - assertEquals("unique-code", sortedData[0].uid) - assertEquals("bp-number", sortedData[1].uid) - assertEquals("qr-code", sortedData[2].uid) - assertEquals("bar-code", sortedData[3].uid) - assertEquals("unique-id", sortedData[4].uid) - assertEquals("national-id", sortedData[5].uid) - assertEquals("first-name", sortedData[6].uid) - assertEquals("last-name", sortedData[7].uid) - assertEquals("phone-number", sortedData[8].uid) - assertEquals("state", sortedData[9].uid) - } - @Test fun shouldTransformToSearchTeiModelWithOverdueEvents() { val searchItem = getTrackedEntitySearchItem("header") @@ -359,7 +344,8 @@ class SearchRepositoryTest { enrollmentCollectionRepository.blockingGet(), ) doReturn enrollmentsForInfoToReturn - val programUid = if (enrollmentsForInfoToReturn.isNotEmpty()) enrollmentsForInfoToReturn[0].program() else "programUid" + val programUid = + if (enrollmentsForInfoToReturn.isNotEmpty()) enrollmentsForInfoToReturn[0].program() else "programUid" whenever(d2.programModule().programs()) doReturn programCollectionRepository whenever( programCollectionRepository.uid(any()), @@ -407,13 +393,23 @@ class SearchRepositoryTest { whenever( eventCollectionRepository.blockingGet(), ) doReturn eventsToReturn.filter { it.status() == EventStatus.OVERDUE } - whenever(eventStatusFilterConnector.eq(EventStatus.SCHEDULE)).thenReturn(eventCollectionRepository) - whenever(eventCollectionRepository.byStatus().eq(EventStatus.SCHEDULE)).thenReturn(eventCollectionRepository) - whenever(eventCollectionRepository.byProgramUid().eq(any())).thenReturn(eventCollectionRepository) - whenever(eventCollectionRepository.orderByDueDate(RepositoryScope.OrderByDirection.DESC)).thenReturn(eventCollectionRepository) + whenever(eventStatusFilterConnector.eq(EventStatus.SCHEDULE)).thenReturn( + eventCollectionRepository, + ) + whenever(eventCollectionRepository.byStatus().eq(EventStatus.SCHEDULE)).thenReturn( + eventCollectionRepository, + ) + whenever(eventCollectionRepository.byProgramUid().eq(any())).thenReturn( + eventCollectionRepository, + ) + whenever(eventCollectionRepository.orderByDueDate(RepositoryScope.OrderByDirection.DESC)).thenReturn( + eventCollectionRepository, + ) whenever(eventCollectionRepository.blockingGet()).thenReturn(eventsToReturn.filter { it.status() == EventStatus.SCHEDULE }) // mock orgUnitName(orgUnitUid) - whenever(d2.organisationUnitModule().organisationUnits()) doReturn orgUnitCollectionRepository + whenever( + d2.organisationUnitModule().organisationUnits(), + ) doReturn orgUnitCollectionRepository whenever( orgUnitCollectionRepository.uid(any()), ) doReturn readOnlyOneObjectRepository diff --git a/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchTEIViewModelTest.kt b/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchTEIViewModelTest.kt index 174af457148..15c0e38e256 100644 --- a/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchTEIViewModelTest.kt +++ b/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchTEIViewModelTest.kt @@ -23,15 +23,14 @@ import org.dhis2.commons.filters.FilterManager import org.dhis2.commons.network.NetworkUtils import org.dhis2.commons.resources.ResourceManager import org.dhis2.commons.viewmodel.DispatcherProvider -import org.dhis2.form.model.FieldUiModel -import org.dhis2.form.model.FieldUiModelImpl import org.dhis2.form.ui.customintent.CustomIntentResult -import org.dhis2.form.ui.intent.FormIntent import org.dhis2.form.ui.provider.DisplayNameProvider import org.dhis2.maps.geometry.mapper.EventsByProgramStage import org.dhis2.maps.usecases.MapStyleConfiguration import org.dhis2.mobile.commons.model.CustomIntentModel +import org.dhis2.tracker.input.model.TrackerInputType import org.dhis2.tracker.input.ui.action.TrackerInputAction +import org.dhis2.tracker.input.ui.state.TrackerInputUiState import org.dhis2.tracker.search.domain.FetchOptionSetOptions import org.dhis2.tracker.search.domain.FetchSearchParameters import org.dhis2.tracker.search.domain.SearchTrackedEntities @@ -39,9 +38,9 @@ import org.dhis2.tracker.search.model.SearchTrackedEntitiesInput import org.dhis2.usescases.searchTrackEntity.listView.SearchResult.SearchResultType import org.dhis2.utils.customviews.navigationbar.NavigationPage import org.hisp.dhis.android.core.common.ObjectWithUid -import org.hisp.dhis.android.core.common.ValueType import org.hisp.dhis.android.core.program.Program import org.hisp.dhis.android.core.trackedentity.TrackedEntityType +import org.hisp.dhis.mobile.ui.designsystem.component.Orientation import org.hisp.dhis.mobile.ui.designsystem.component.navigationBar.NavigationBarItem import org.junit.After import org.junit.Assert.assertTrue @@ -78,6 +77,7 @@ class SearchTEIViewModelTest { mock { onBlocking { invoke(any()) } doReturn Result.success(flowOf(PagingData.empty())) } + private val fetchSearchParameters: FetchSearchParameters = mock() private val fetchOptionSetOptions: FetchOptionSetOptions = mock() @@ -209,12 +209,9 @@ class SearchTEIViewModelTest { @Test fun `Should update query data`() { - viewModel.onParameterIntent( - FormIntent.OnSave( - uid = "testingUid", - value = "testingValue", - valueType = ValueType.TEXT, - ), + viewModel.onValueChange( + fieldUid = "testingUid", + value = "testingValue", ) val queryData = viewModel.queryData @@ -227,12 +224,9 @@ class SearchTEIViewModelTest { @Test fun `Should update query data when list of values is passed`() { - viewModel.onParameterIntent( - FormIntent.OnSave( - uid = "testingUid", - value = "testingValue,testingValue2", - valueType = ValueType.TEXT, - ), + viewModel.onValueChange( + fieldUid = "testingUid", + value = "testingValue,testingValue2", ) val queryData = viewModel.queryData @@ -247,20 +241,13 @@ class SearchTEIViewModelTest { @Test fun `Should update query data when various list of values are passed`() { - viewModel.onParameterIntent( - FormIntent.OnSave( - uid = "testingUid", - value = "testingValue,testingValue2", - valueType = ValueType.TEXT, - ), + viewModel.onValueChange( + fieldUid = "testingUid", + value = "testingValue,testingValue2", ) - - viewModel.onParameterIntent( - FormIntent.OnSave( - uid = "testingUid2", - value = "testingValue,testingValue2", - valueType = ValueType.TEXT, - ), + viewModel.onValueChange( + fieldUid = "testingUid2", + value = "testingValue,testingValue2", ) val queryData = viewModel.queryData @@ -367,13 +354,11 @@ class SearchTEIViewModelTest { setCurrentProgram(testingProgram()) viewModel.setListScreen() viewModel.setSearchScreen() - viewModel.onParameterIntent( - FormIntent.OnSave( - uid = "testingUid", - value = "testingValue", - valueType = ValueType.TEXT, - ), + viewModel.onValueChange( + fieldUid = "testingUid", + value = "testingValue", ) + viewModel.onSearch() assertTrue(viewModel.refreshData.value != null) @@ -403,13 +388,11 @@ class SearchTEIViewModelTest { setCurrentProgram(testingProgram()) viewModel.setMapScreen() viewModel.setSearchScreen() - viewModel.onParameterIntent( - FormIntent.OnSave( - uid = "testingUid", - value = "testingValue", - valueType = ValueType.TEXT, - ), + viewModel.onValueChange( + fieldUid = "testingUid", + value = "testingValue", ) + viewModel.onSearch() testingDispatcher.scheduler.advanceUntilIdle() @@ -724,7 +707,7 @@ class SearchTEIViewModelTest { @Test fun `should return user-friendly names on search parameters fields`() { viewModel.searchParametersUiState = - viewModel.searchParametersUiState.copy(items = getFieldUIModels()) + viewModel.searchParametersUiState.copy(items = getTrackerInputModels()) val expectedMap = mapOf( "uid1" to "Friendly OrgUnit Name", @@ -732,7 +715,7 @@ class SearchTEIViewModelTest { "uid3" to "21/02/2024", "uid4" to "21/02/2024 - 01:00", "uid5" to "Boolean: false", - "uid6" to "Yes Only", + "uid6" to "Yes Only: true", "uid7" to "Text value", "uid9" to "18%", ) @@ -745,7 +728,7 @@ class SearchTEIViewModelTest { @Test fun `should clear uiState when clearing data`() { viewModel.searchParametersUiState = - viewModel.searchParametersUiState.copy(items = getFieldUIModels()) + viewModel.searchParametersUiState.copy(items = getTrackerInputModels()) performSearch() viewModel.clearQueryData() assert(viewModel.queryData.isEmpty()) @@ -884,7 +867,7 @@ class SearchTEIViewModelTest { val customIntentModel: CustomIntentModel = mock() whenever(repositoryKt.getCustomIntent(any())) doReturn customIntentModel viewModel.searchActions.test { - viewModel.onLaunchCustomIntent("fieldUid", "customIntentUid") + viewModel.launchCustomIntent("fieldUid", "customIntentUid") assertTrue(awaitItem() is TrackerInputAction.LaunchCustomIntent) } } @@ -926,111 +909,244 @@ class SearchTEIViewModelTest { private fun customIntentFieldUIModels() = listOf( - FieldUiModelImpl( + TrackerInputUiState( uid = "fieldUid", label = "CustomIntent", value = null, - autocompleteList = emptyList(), + focused = false, + valueType = TrackerInputType.ORGANISATION_UNIT, + description = null, + mandatory = false, + editable = true, + legend = null, + orientation = Orientation.HORIZONTAL, optionSetConfiguration = null, - customIntent = - CustomIntentModel( - uid = "customIntentUid", - name = "test", - packageName = "test.test.test", - customIntentRequest = listOf(), - customIntentResponse = listOf(), - ), - valueType = ValueType.TEXT, + customIntentUid = "customIntentUid", + displayName = "Friendly OrgUnit Name", + orgUnitSelectorScope = null, + searchOperator = null, + minCharactersToSearch = null, + optionSet = null, + error = null, + warning = null, ), ) - private fun getMalformedDateFieldUIModels(): List = + private fun getMalformedDateFieldUIModels(): List = listOf( - FieldUiModelImpl( + TrackerInputUiState( uid = "uid1", label = "Date", value = "04", - autocompleteList = emptyList(), + focused = false, + valueType = TrackerInputType.DATE, + description = null, + mandatory = false, + editable = true, + legend = null, + orientation = Orientation.HORIZONTAL, optionSetConfiguration = null, - valueType = ValueType.DATE, + customIntentUid = null, + displayName = "Friendly OrgUnit Name", + orgUnitSelectorScope = null, + searchOperator = null, + minCharactersToSearch = null, + optionSet = null, + error = null, + warning = null, ), ) - private fun getFieldUIModels(): List = + private fun getTrackerInputModels(): List = listOf( - FieldUiModelImpl( + TrackerInputUiState( uid = "uid1", label = "Org Unit", value = "orgUnitUid", - displayName = "Friendly OrgUnit Name", - autocompleteList = emptyList(), + focused = false, + valueType = TrackerInputType.ORGANISATION_UNIT, + description = null, + mandatory = false, + editable = true, + legend = null, + orientation = Orientation.HORIZONTAL, optionSetConfiguration = null, - valueType = ValueType.ORGANISATION_UNIT, + customIntentUid = null, + displayName = "Friendly OrgUnit Name", + orgUnitSelectorScope = null, + searchOperator = null, + minCharactersToSearch = null, + optionSet = null, + error = null, + warning = null, ), - FieldUiModelImpl( + TrackerInputUiState( uid = "uid2", label = "Gender", value = "M", - displayName = "Male", - autocompleteList = emptyList(), + focused = false, + valueType = TrackerInputType.MULTI_SELECTION, + description = null, + mandatory = false, + editable = true, + legend = null, + orientation = Orientation.HORIZONTAL, optionSetConfiguration = null, - valueType = ValueType.MULTI_TEXT, + customIntentUid = null, + displayName = "Male", + orgUnitSelectorScope = null, + searchOperator = null, + minCharactersToSearch = null, + optionSet = null, + error = null, + warning = null, ), - FieldUiModelImpl( + TrackerInputUiState( uid = "uid3", label = "Date", value = "2024-02-21", - autocompleteList = emptyList(), + focused = false, + valueType = TrackerInputType.DATE, + description = null, + mandatory = false, + editable = true, + legend = null, + orientation = Orientation.HORIZONTAL, optionSetConfiguration = null, - valueType = ValueType.DATE, + customIntentUid = null, + displayName = "21/02/2024", + orgUnitSelectorScope = null, + searchOperator = null, + minCharactersToSearch = null, + optionSet = null, + error = null, + warning = null, ), - FieldUiModelImpl( + TrackerInputUiState( uid = "uid4", label = "Date and Time", value = "2024-02-21T01:00", - autocompleteList = emptyList(), + focused = false, + valueType = TrackerInputType.DATE_TIME, + description = null, + mandatory = false, + editable = true, + legend = null, + orientation = Orientation.HORIZONTAL, optionSetConfiguration = null, - valueType = ValueType.DATETIME, + customIntentUid = null, + displayName = "21/02/2024 - 01:00", + orgUnitSelectorScope = null, + searchOperator = null, + minCharactersToSearch = null, + optionSet = null, + error = null, + warning = null, ), - FieldUiModelImpl( + TrackerInputUiState( uid = "uid5", label = "Boolean", value = "false", - autocompleteList = emptyList(), + focused = false, + valueType = TrackerInputType.HORIZONTAL_CHECKBOXES, + description = null, + mandatory = false, + editable = true, + legend = null, + orientation = Orientation.HORIZONTAL, optionSetConfiguration = null, - valueType = ValueType.BOOLEAN, + customIntentUid = null, + displayName = "Boolean: false", + orgUnitSelectorScope = null, + searchOperator = null, + minCharactersToSearch = null, + optionSet = null, + error = null, + warning = null, ), - FieldUiModelImpl( + TrackerInputUiState( uid = "uid6", label = "Yes Only", value = "true", - autocompleteList = emptyList(), + focused = false, + valueType = TrackerInputType.YES_ONLY_SWITCH, + description = null, + mandatory = false, + editable = true, + legend = null, + orientation = Orientation.HORIZONTAL, optionSetConfiguration = null, - valueType = ValueType.TRUE_ONLY, + customIntentUid = null, + displayName = "Yes Only; true", + orgUnitSelectorScope = null, + searchOperator = null, + minCharactersToSearch = null, + optionSet = null, + error = null, + warning = null, ), - FieldUiModelImpl( + TrackerInputUiState( uid = "uid7", label = "Text", value = "Text value", - autocompleteList = emptyList(), + focused = false, + valueType = TrackerInputType.TEXT, + description = null, + mandatory = false, + editable = true, + legend = null, + orientation = Orientation.HORIZONTAL, optionSetConfiguration = null, - valueType = ValueType.TEXT, + customIntentUid = null, + displayName = "Text value", + orgUnitSelectorScope = null, + searchOperator = null, + minCharactersToSearch = null, + optionSet = null, + error = null, + warning = null, ), - FieldUiModelImpl( + TrackerInputUiState( uid = "uid8", label = "Other field", value = null, - autocompleteList = emptyList(), + focused = false, + valueType = TrackerInputType.TEXT, + description = null, + mandatory = false, + editable = true, + legend = null, + orientation = Orientation.HORIZONTAL, optionSetConfiguration = null, - valueType = ValueType.TEXT, + customIntentUid = null, + displayName = "Male", + orgUnitSelectorScope = null, + searchOperator = null, + minCharactersToSearch = null, + optionSet = null, + error = null, + warning = null, ), - FieldUiModelImpl( + TrackerInputUiState( uid = "uid9", label = "Percentage", value = "18", - autocompleteList = emptyList(), + focused = false, + valueType = TrackerInputType.PERCENTAGE, + description = null, + mandatory = false, + editable = true, + legend = null, + orientation = Orientation.HORIZONTAL, optionSetConfiguration = null, - valueType = ValueType.PERCENTAGE, + customIntentUid = null, + displayName = "18%", + orgUnitSelectorScope = null, + searchOperator = null, + minCharactersToSearch = null, + optionSet = null, + error = null, + warning = null, ), ) @@ -1062,12 +1178,9 @@ class SearchTEIViewModelTest { @ExperimentalCoroutinesApi private fun performSearch() { - viewModel.onParameterIntent( - FormIntent.OnSave( - uid = "testingUid", - value = "testingValue", - valueType = ValueType.TEXT, - ), + viewModel.onValueChange( + fieldUid = "testingUid", + value = "testingValue", ) viewModel.setListScreen() viewModel.setSearchScreen() diff --git a/app/src/test/java/org/dhis2/usescases/searchTrackEntity/searchparameters/mapper/ParameterInputModelMapperTest.kt b/app/src/test/java/org/dhis2/usescases/searchTrackEntity/searchparameters/mapper/ParameterInputModelMapperTest.kt deleted file mode 100644 index e19f109a773..00000000000 --- a/app/src/test/java/org/dhis2/usescases/searchTrackEntity/searchparameters/mapper/ParameterInputModelMapperTest.kt +++ /dev/null @@ -1,334 +0,0 @@ -package org.dhis2.usescases.searchTrackEntity.searchparameters.mapper - -import org.dhis2.commons.resources.ResourceManager -import org.dhis2.form.R -import org.dhis2.form.model.UiRenderType -import org.dhis2.tracker.input.model.TrackerInputType -import org.hisp.dhis.android.core.common.ValueType -import org.hisp.dhis.mobile.ui.designsystem.component.Orientation -import org.junit.Assert.assertEquals -import org.junit.Before -import org.junit.Test -import org.mockito.kotlin.doReturn -import org.mockito.kotlin.mock -import org.mockito.kotlin.whenever - -class ParameterInputModelMapperTest { - private val resourceManager: ResourceManager = mock() - - @Before - fun setUp() { - whenever(resourceManager.getString(R.string.yes)) doReturn "Yes" - whenever(resourceManager.getString(R.string.no)) doReturn "No" - } - - // Test getInputTypeForOptionSetByRenderingType - @Test - fun `should return RADIO_BUTTON for horizontal radio buttons rendering type`() { - val result = getInputTypeForOptionSetByRenderingType(UiRenderType.HORIZONTAL_RADIOBUTTONS) - assertEquals(TrackerInputType.HORIZONTAL_RADIOBUTTONS, result) - } - - @Test - fun `should return RADIO_BUTTON for vertical radio buttons rendering type`() { - val result = getInputTypeForOptionSetByRenderingType(UiRenderType.VERTICAL_RADIOBUTTONS) - assertEquals(TrackerInputType.VERTICAL_RADIOBUTTONS, result) - } - - @Test - fun `should return CHECKBOX for horizontal checkboxes rendering type`() { - val result = getInputTypeForOptionSetByRenderingType(UiRenderType.HORIZONTAL_CHECKBOXES) - assertEquals(TrackerInputType.HORIZONTAL_CHECKBOXES, result) - } - - @Test - fun `should return CHECKBOX for vertical checkboxes rendering type`() { - val result = getInputTypeForOptionSetByRenderingType(UiRenderType.VERTICAL_CHECKBOXES) - assertEquals(TrackerInputType.VERTICAL_CHECKBOXES, result) - } - - @Test - fun `should return MATRIX for matrix rendering type`() { - val result = getInputTypeForOptionSetByRenderingType(UiRenderType.MATRIX) - assertEquals(TrackerInputType.MATRIX, result) - } - - @Test - fun `should return SEQUENTIAL for sequential rendering type`() { - val result = getInputTypeForOptionSetByRenderingType(UiRenderType.SEQUENCIAL) - assertEquals(TrackerInputType.SEQUENTIAL, result) - } - - @Test - fun `should return DROPDOWN for null rendering type`() { - val result = getInputTypeForOptionSetByRenderingType(null) - assertEquals(TrackerInputType.DROPDOWN, result) - } - - @Test - fun `should return DROPDOWN for default rendering type`() { - val result = getInputTypeForOptionSetByRenderingType(UiRenderType.DEFAULT) - assertEquals(TrackerInputType.DROPDOWN, result) - } - - // Test getInputTypeByValueType for TEXT - @Test - fun `should return TEXT for TEXT value type with default rendering`() { - val result = getInputTypeByValueType(ValueType.TEXT, null) - assertEquals(TrackerInputType.TEXT, result) - } - - @Test - fun `should return QR_CODE for TEXT value type with QR_CODE rendering`() { - val result = getInputTypeByValueType(ValueType.TEXT, UiRenderType.QR_CODE) - assertEquals(TrackerInputType.QR_CODE, result) - } - - @Test - fun `should return QR_CODE for TEXT value type with GS1_DATAMATRIX rendering`() { - val result = getInputTypeByValueType(ValueType.TEXT, UiRenderType.GS1_DATAMATRIX) - assertEquals(TrackerInputType.QR_CODE, result) - } - - @Test - fun `should return BAR_CODE for TEXT value type with BAR_CODE rendering`() { - val result = getInputTypeByValueType(ValueType.TEXT, UiRenderType.BAR_CODE) - assertEquals(TrackerInputType.BAR_CODE, result) - } - - // Test getInputTypeByValueType for numeric types - @Test - fun `should return INTEGER_POSITIVE for INTEGER_POSITIVE value type`() { - val result = getInputTypeByValueType(ValueType.INTEGER_POSITIVE, null) - assertEquals(TrackerInputType.INTEGER_POSITIVE, result) - } - - @Test - fun `should return INTEGER_ZERO_OR_POSITIVE for INTEGER_ZERO_OR_POSITIVE value type`() { - val result = getInputTypeByValueType(ValueType.INTEGER_ZERO_OR_POSITIVE, null) - assertEquals(TrackerInputType.INTEGER_ZERO_OR_POSITIVE, result) - } - - @Test - fun `should return PERCENTAGE for PERCENTAGE value type`() { - val result = getInputTypeByValueType(ValueType.PERCENTAGE, null) - assertEquals(TrackerInputType.PERCENTAGE, result) - } - - @Test - fun `should return NUMBER for NUMBER value type`() { - val result = getInputTypeByValueType(ValueType.NUMBER, null) - assertEquals(TrackerInputType.NUMBER, result) - } - - @Test - fun `should return INTEGER_NEGATIVE for INTEGER_NEGATIVE value type`() { - val result = getInputTypeByValueType(ValueType.INTEGER_NEGATIVE, null) - assertEquals(TrackerInputType.INTEGER_NEGATIVE, result) - } - - @Test - fun `should return INTEGER for INTEGER value type`() { - val result = getInputTypeByValueType(ValueType.INTEGER, null) - assertEquals(TrackerInputType.INTEGER, result) - } - - // Test getInputTypeByValueType for text types - @Test - fun `should return LONG_TEXT for LONG_TEXT value type`() { - val result = getInputTypeByValueType(ValueType.LONG_TEXT, null) - assertEquals(TrackerInputType.LONG_TEXT, result) - } - - @Test - fun `should return EMAIL for EMAIL value type`() { - val result = getInputTypeByValueType(ValueType.EMAIL, null) - assertEquals(TrackerInputType.EMAIL, result) - } - - @Test - fun `should return PHONE_NUMBER for PHONE_NUMBER value type`() { - val result = getInputTypeByValueType(ValueType.PHONE_NUMBER, null) - assertEquals(TrackerInputType.PHONE_NUMBER, result) - } - - // Test getInputTypeByValueType for BOOLEAN - @Test - fun `should return RADIO_BUTTON for BOOLEAN value type with default rendering`() { - val result = getInputTypeByValueType(ValueType.BOOLEAN, null) - assertEquals(TrackerInputType.VERTICAL_RADIOBUTTONS, result) - } - - @Test - fun `should return CHECKBOX for BOOLEAN value type with horizontal checkboxes rendering`() { - val result = getInputTypeByValueType(ValueType.BOOLEAN, UiRenderType.HORIZONTAL_CHECKBOXES) - assertEquals(TrackerInputType.HORIZONTAL_CHECKBOXES, result) - } - - @Test - fun `should return CHECKBOX for BOOLEAN value type with vertical checkboxes rendering`() { - val result = getInputTypeByValueType(ValueType.BOOLEAN, UiRenderType.VERTICAL_CHECKBOXES) - assertEquals(TrackerInputType.VERTICAL_CHECKBOXES, result) - } - - // Test getInputTypeByValueType for TRUE_ONLY - @Test - fun `should return YES_ONLY_CHECKBOX for TRUE_ONLY value type with default rendering`() { - val result = getInputTypeByValueType(ValueType.TRUE_ONLY, null) - assertEquals(TrackerInputType.YES_ONLY_CHECKBOX, result) - } - - @Test - fun `should return YES_ONLY_SWITCH for TRUE_ONLY value type with toggle rendering`() { - val result = getInputTypeByValueType(ValueType.TRUE_ONLY, UiRenderType.TOGGLE) - assertEquals(TrackerInputType.YES_ONLY_SWITCH, result) - } - - // Test getInputTypeByValueType for date/time types - @Test - fun `should return DATE for DATE value type`() { - val result = getInputTypeByValueType(ValueType.DATE, null) - assertEquals(TrackerInputType.DATE, result) - } - - @Test - fun `should return DATE_TIME for DATETIME value type`() { - val result = getInputTypeByValueType(ValueType.DATETIME, null) - assertEquals(TrackerInputType.DATE_TIME, result) - } - - @Test - fun `should return TIME for TIME value type`() { - val result = getInputTypeByValueType(ValueType.TIME, null) - assertEquals(TrackerInputType.TIME, result) - } - - @Test - fun `should return AGE for AGE value type`() { - val result = getInputTypeByValueType(ValueType.AGE, null) - assertEquals(TrackerInputType.AGE, result) - } - - // Test getInputTypeByValueType for other supported types - @Test - fun `should return ORGANISATION_UNIT for ORGANISATION_UNIT value type`() { - val result = getInputTypeByValueType(ValueType.ORGANISATION_UNIT, null) - assertEquals(TrackerInputType.ORGANISATION_UNIT, result) - } - - @Test - fun `should return MULTI_SELECTION for MULTI_TEXT value type`() { - val result = getInputTypeByValueType(ValueType.MULTI_TEXT, null) - assertEquals(TrackerInputType.MULTI_SELECTION, result) - } - - // Test getInputTypeByValueType for NOT_SUPPORTED types - @Test - fun `should return NOT_SUPPORTED for USERNAME value type`() { - val result = getInputTypeByValueType(ValueType.USERNAME, null) - assertEquals(TrackerInputType.NOT_SUPPORTED, result) - } - - @Test - fun `should return NOT_SUPPORTED for LETTER value type`() { - val result = getInputTypeByValueType(ValueType.LETTER, null) - assertEquals(TrackerInputType.NOT_SUPPORTED, result) - } - - @Test - fun `should return NOT_SUPPORTED for UNIT_INTERVAL value type`() { - val result = getInputTypeByValueType(ValueType.UNIT_INTERVAL, null) - assertEquals(TrackerInputType.NOT_SUPPORTED, result) - } - - @Test - fun `should return NOT_SUPPORTED for TRACKER_ASSOCIATE value type`() { - val result = getInputTypeByValueType(ValueType.TRACKER_ASSOCIATE, null) - assertEquals(TrackerInputType.NOT_SUPPORTED, result) - } - - @Test - fun `should return NOT_SUPPORTED for REFERENCE value type`() { - val result = getInputTypeByValueType(ValueType.REFERENCE, null) - assertEquals(TrackerInputType.NOT_SUPPORTED, result) - } - - @Test - fun `should return NOT_SUPPORTED for COORDINATE value type`() { - val result = getInputTypeByValueType(ValueType.COORDINATE, null) - assertEquals(TrackerInputType.NOT_SUPPORTED, result) - } - - @Test - fun `should return NOT_SUPPORTED for IMAGE value type`() { - val result = getInputTypeByValueType(ValueType.IMAGE, null) - assertEquals(TrackerInputType.NOT_SUPPORTED, result) - } - - @Test - fun `should return NOT_SUPPORTED for FILE_RESOURCE value type`() { - val result = getInputTypeByValueType(ValueType.FILE_RESOURCE, null) - assertEquals(TrackerInputType.NOT_SUPPORTED, result) - } - - @Test - fun `should return NOT_SUPPORTED for GEOJSON value type`() { - val result = getInputTypeByValueType(ValueType.GEOJSON, null) - assertEquals(TrackerInputType.NOT_SUPPORTED, result) - } - - @Test - fun `should return NOT_SUPPORTED for URL value type`() { - val result = getInputTypeByValueType(ValueType.URL, null) - assertEquals(TrackerInputType.NOT_SUPPORTED, result) - } - - @Test - fun `should return NOT_SUPPORTED for null value type`() { - val result = getInputTypeByValueType(null, null) - assertEquals(TrackerInputType.NOT_SUPPORTED, result) - } - - // Test getOrientation - @Test - fun `should return HORIZONTAL for horizontal checkboxes rendering type`() { - val result = UiRenderType.HORIZONTAL_CHECKBOXES.getOrientation() - assertEquals(Orientation.HORIZONTAL, result) - } - - @Test - fun `should return HORIZONTAL for horizontal radio buttons rendering type`() { - val result = UiRenderType.HORIZONTAL_RADIOBUTTONS.getOrientation() - assertEquals(Orientation.HORIZONTAL, result) - } - - @Test - fun `should return VERTICAL for vertical checkboxes rendering type`() { - val result = UiRenderType.VERTICAL_CHECKBOXES.getOrientation() - assertEquals(Orientation.VERTICAL, result) - } - - @Test - fun `should return VERTICAL for null rendering type`() { - val result = (null as UiRenderType?).getOrientation() - assertEquals(Orientation.VERTICAL, result) - } - - @Test - fun `should return VERTICAL for default rendering type`() { - val result = UiRenderType.DEFAULT.getOrientation() - assertEquals(Orientation.VERTICAL, result) - } - - // Test getBooleanOptionConfiguration - @Test - fun `should return correct boolean option configuration`() { - val result = getBooleanOptionConfiguration(resourceManager) - - assertEquals(2, result.options.size) - assertEquals("true", result.options[0].code) - assertEquals("Yes", result.options[0].displayName) - assertEquals("false", result.options[1].code) - assertEquals("No", result.options[1].displayName) - } -} diff --git a/tracker/src/androidMain/kotlin/org/dhis2/tracker/search/data/OptionSetRepositoryImpl.kt b/tracker/src/androidMain/kotlin/org/dhis2/tracker/search/data/OptionSetRepositoryImpl.kt index c07bfb58cdf..533b3056919 100644 --- a/tracker/src/androidMain/kotlin/org/dhis2/tracker/search/data/OptionSetRepositoryImpl.kt +++ b/tracker/src/androidMain/kotlin/org/dhis2/tracker/search/data/OptionSetRepositoryImpl.kt @@ -2,6 +2,7 @@ package org.dhis2.tracker.search.data import androidx.paging.PagingData import androidx.paging.map +import kotlinx.coroutines.CancellationException import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.emitAll import kotlinx.coroutines.flow.flow @@ -61,6 +62,8 @@ class OptionSetRepositoryImpl( } emitAll(pagingFlow) + } catch (e: CancellationException) { + // Rethrow CancellationException to properly cancel the coroutine } catch (d2Error: D2Error) { throw domainErrorMapper.mapToDomainError(d2Error) } catch (e: Exception) { diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/action/TrackerInputUiEvent.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/action/TrackerInputUiEvent.kt index ec534567ff9..afcb2632da3 100644 --- a/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/action/TrackerInputUiEvent.kt +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/action/TrackerInputUiEvent.kt @@ -1,14 +1,20 @@ package org.dhis2.tracker.input.ui.action +import org.dhis2.mobile.commons.orgunit.OrgUnitSelectorScope +import org.dhis2.tracker.input.model.TrackerInputType + sealed interface TrackerInputUiEvent { data class OnScanButtonClicked( val uid: String, + val optionSet: String?, + val renderType: TrackerInputType, ) : TrackerInputUiEvent data class OnOrgUnitButtonClicked( val uid: String, val label: String, val value: String?, + val orgUnitSelectorScope: OrgUnitSelectorScope?, ) : TrackerInputUiEvent data class OnLaunchCustomIntent( diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/mapper/TrackerInputUiStateMapper.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/mapper/TrackerInputUiStateMapper.kt index ccc444b6463..ed9ea3431b0 100644 --- a/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/mapper/TrackerInputUiStateMapper.kt +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/mapper/TrackerInputUiStateMapper.kt @@ -23,6 +23,9 @@ fun SearchParameterModel.toTrackerInputUiState() = optionSetConfiguration = null, customIntentUid = customIntentUid, displayName = null, + orgUnitSelectorScope = null, + searchOperator = searchOperator, + minCharactersToSearch = minCharactersToSearch, ) private fun TrackerInputType.getOrientation(): Orientation = diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/provider/TrackerInputProvider.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/provider/TrackerInputProvider.kt index 0fc4fba9c20..2f81fb85c54 100644 --- a/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/provider/TrackerInputProvider.kt +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/provider/TrackerInputProvider.kt @@ -14,6 +14,7 @@ import androidx.compose.ui.focus.focusRequester import androidx.compose.ui.text.TextRange import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.text.input.TextFieldValue +import org.dhis2.mobile.commons.orgunit.OrgUnitSelectorScope import org.dhis2.mobile.tracker.resources.Res import org.dhis2.mobile.tracker.resources.custom_intent_launch import org.dhis2.tracker.input.model.TrackerInputType @@ -428,6 +429,9 @@ fun TrackerInputProvider( uid = inputModel.uid, label = inputModel.label, value = inputModel.value, + orgUnitSelectorScope = + inputModel.orgUnitSelectorScope + ?: OrgUnitSelectorScope.UserSearchScope(), ), ) }, @@ -498,6 +502,8 @@ fun TrackerInputProvider( onUiEvent( TrackerInputUiEvent.OnScanButtonClicked( uid = inputModel.uid, + optionSet = inputModel.optionSet, + renderType = inputModel.valueType, ), ) }, @@ -527,6 +533,8 @@ fun TrackerInputProvider( onUiEvent( TrackerInputUiEvent.OnScanButtonClicked( uid = inputModel.uid, + optionSet = inputModel.optionSet, + renderType = inputModel.valueType, ), ) }, @@ -765,4 +773,4 @@ fun manageOnValueChange( } } -private fun getYesOnlyValue(checked: Boolean): String? = if (checked) "true" else null +private fun getYesOnlyValue(checked: Boolean): String? = if (!checked) "true" else null diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/state/TrackerInputUiState.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/state/TrackerInputUiState.kt index 6fbef970209..85f029905fc 100644 --- a/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/state/TrackerInputUiState.kt +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/state/TrackerInputUiState.kt @@ -1,11 +1,28 @@ package org.dhis2.tracker.input.ui.state +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.derivedStateOf +import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember +import androidx.paging.PagingData +import androidx.paging.compose.collectAsLazyPagingItems +import kotlinx.coroutines.flow.Flow +import org.dhis2.mobile.commons.orgunit.OrgUnitSelectorScope +import org.dhis2.mobile.tracker.resources.Res +import org.dhis2.mobile.tracker.resources.end_with_search_operator +import org.dhis2.mobile.tracker.resources.equal_search_operator +import org.dhis2.mobile.tracker.resources.no +import org.dhis2.mobile.tracker.resources.starts_with_search_operator +import org.dhis2.mobile.tracker.resources.yes import org.dhis2.tracker.input.model.TrackerInputType +import org.dhis2.tracker.search.model.SearchOperator import org.hisp.dhis.mobile.ui.designsystem.component.InputShellState import org.hisp.dhis.mobile.ui.designsystem.component.LegendData import org.hisp.dhis.mobile.ui.designsystem.component.Orientation import org.hisp.dhis.mobile.ui.designsystem.component.SupportingTextData import org.hisp.dhis.mobile.ui.designsystem.component.SupportingTextState +import org.jetbrains.compose.resources.stringResource data class TrackerInputUiState( val uid: String, @@ -21,11 +38,15 @@ data class TrackerInputUiState( val editable: Boolean, val legend: LegendData?, val orientation: Orientation, - val optionSetConfiguration: TrackerOptionSetConfiguration? = null, - val customIntentUid: String? = null, + val optionSetConfiguration: TrackerOptionSetConfiguration?, + val customIntentUid: String?, val displayName: String?, + val orgUnitSelectorScope: OrgUnitSelectorScope?, + val searchOperator: SearchOperator?, + val minCharactersToSearch: Int?, ) +@Composable fun TrackerInputUiState.supportingText(): List? = listOfNotNull( error?.let { @@ -40,6 +61,14 @@ fun TrackerInputUiState.supportingText(): List? = SupportingTextState.WARNING, ) }, + searchOperator?.let { operator -> + operator.supportingTextString()?.let { text -> + SupportingTextData( + text, + SupportingTextState.DEFAULT, + ) + } + }, description?.let { SupportingTextData( it, @@ -55,3 +84,101 @@ fun TrackerInputUiState.inputState(): InputShellState = focused -> InputShellState.FOCUSED else -> InputShellState.UNFOCUSED } + +@Composable +private fun SearchOperator.supportingTextString() = + when (this) { + SearchOperator.EQ -> + stringResource(Res.string.equal_search_operator) + SearchOperator.SW -> + stringResource(Res.string.starts_with_search_operator) + SearchOperator.EW -> + stringResource(Res.string.end_with_search_operator) + else -> null + } + +@Composable +fun TrackerInputUiState.loadOptionSetConfiguration( + getOptionSetFlow: (fieldUid: String, optionSetUid: String) -> Flow>?, + onOptionSetSearch: (fieldUid: String, query: String) -> Unit, +): TrackerInputUiState = + when { + valueType == TrackerInputType.YES_ONLY_CHECKBOX || + valueType == TrackerInputType.YES_ONLY_SWITCH || ( + optionSet == null && ( + valueType == TrackerInputType.HORIZONTAL_CHECKBOXES || + valueType == TrackerInputType.HORIZONTAL_RADIOBUTTONS || + valueType == TrackerInputType.VERTICAL_CHECKBOXES || + valueType == TrackerInputType.VERTICAL_RADIOBUTTONS + ) + ) + -> + this.getBooleanOptionConfiguration() + + optionSet != null -> { + val optionSetFlow = + getOptionSetFlow( + uid, + optionSet, + ) + this.loadWithOptionSetFlow( + optionSetFlow = optionSetFlow, + onSearch = { query -> + onOptionSetSearch(uid, query) + }, + ) + } + + else -> this + } + +@Composable +private fun TrackerInputUiState.getBooleanOptionConfiguration(): TrackerInputUiState { + val booleanConfiguration = + TrackerOptionSetConfiguration( + options = + listOf( + TrackerOptionItem( + code = true.toString(), + displayName = stringResource(Res.string.yes), + ), + TrackerOptionItem( + code = false.toString(), + displayName = stringResource(Res.string.no), + ), + ), + ) + + return copy(optionSetConfiguration = booleanConfiguration) +} + +@Composable +private fun TrackerInputUiState.loadWithOptionSetFlow( + optionSetFlow: Flow>?, + onSearch: ((String) -> Unit)?, +): TrackerInputUiState { + if (optionSetFlow == null) return this + + val optionsData = optionSetFlow.collectAsLazyPagingItems() + + LaunchedEffect(Unit) { + optionsData.refresh() + } + + val options by remember { + derivedStateOf { + (0 until optionsData.itemCount).mapNotNull { index -> + optionsData[index] + } + } + } + + return copy( + optionSetConfiguration = + TrackerOptionSetConfiguration( + options = options, + onSearch = onSearch, + onLoadOptions = { optionsData.refresh() }, + ), + ) +} diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/ui/provider/ParameterSelectorItemProvider.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/ui/provider/ParameterSelectorItemProvider.kt index 519d2e211c3..f7aa6f5a9ab 100644 --- a/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/ui/provider/ParameterSelectorItemProvider.kt +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/ui/provider/ParameterSelectorItemProvider.kt @@ -51,7 +51,13 @@ fun provideParameterSelectorItem( TrackerInputType.QR_CODE, TrackerInputType.BAR_CODE, -> - onUiEvent(TrackerInputUiEvent.OnScanButtonClicked(inputModel.uid)) + onUiEvent( + TrackerInputUiEvent.OnScanButtonClicked( + inputModel.uid, + inputModel.optionSet, + inputModel.valueType, + ), + ) else -> { // no-op diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/ui/screen/SearchParametersScreen.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/ui/screen/SearchParametersScreen.kt new file mode 100644 index 00000000000..368e69323d0 --- /dev/null +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/ui/screen/SearchParametersScreen.kt @@ -0,0 +1,282 @@ +package org.dhis2.tracker.search.ui.screen + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.calculateEndPadding +import androidx.compose.foundation.layout.calculateStartPadding +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.itemsIndexed +import androidx.compose.foundation.shape.CornerSize +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Cancel +import androidx.compose.material.icons.outlined.ErrorOutline +import androidx.compose.material.icons.outlined.Search +import androidx.compose.material3.Icon +import androidx.compose.material3.Scaffold +import androidx.compose.material3.SnackbarDuration +import androidx.compose.material3.SnackbarHost +import androidx.compose.material3.SnackbarHostState +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.focus.FocusManager +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.platform.LocalFocusManager +import androidx.compose.ui.platform.LocalLayoutDirection +import androidx.compose.ui.platform.testTag +import androidx.compose.ui.unit.dp +import androidx.paging.PagingData +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.collectLatest +import kotlinx.coroutines.launch +import org.dhis2.mobile.tracker.resources.Res +import org.dhis2.mobile.tracker.resources.clear_search +import org.dhis2.mobile.tracker.resources.empty_search_attributes_message +import org.dhis2.mobile.tracker.resources.optional +import org.dhis2.mobile.tracker.resources.search +import org.dhis2.tracker.input.ui.action.TrackerInputUiEvent +import org.dhis2.tracker.input.ui.state.TrackerInputUiState +import org.dhis2.tracker.input.ui.state.TrackerOptionItem +import org.dhis2.tracker.input.ui.state.loadOptionSetConfiguration +import org.dhis2.tracker.search.ui.action.SearchScreenUiEvent +import org.dhis2.tracker.search.ui.provider.provideParameterSelectorItem +import org.dhis2.tracker.search.ui.state.SearchParametersUiState +import org.hisp.dhis.mobile.ui.designsystem.component.AdditionalInfoItemColor +import org.hisp.dhis.mobile.ui.designsystem.component.Button +import org.hisp.dhis.mobile.ui.designsystem.component.ButtonStyle +import org.hisp.dhis.mobile.ui.designsystem.component.InfoBar +import org.hisp.dhis.mobile.ui.designsystem.component.parameter.ParameterSelectorItem +import org.hisp.dhis.mobile.ui.designsystem.theme.Radius +import org.hisp.dhis.mobile.ui.designsystem.theme.Shape +import org.hisp.dhis.mobile.ui.designsystem.theme.SurfaceColor +import org.hisp.dhis.mobile.ui.designsystem.theme.TextColor +import org.jetbrains.compose.resources.stringResource + +@Composable +fun SearchParametersScreen( + uiState: SearchParametersUiState, + onSearchScreenUiEvent: (SearchScreenUiEvent) -> Unit, + onTrackerInputUiEvent: (TrackerInputUiEvent) -> Unit, + isLandscape: Boolean, + getOptionSetFlow: (fieldUid: String, optionSetUid: String) -> Flow>?, + onOptionSetSearch: (fieldUid: String, query: String) -> Unit, +) { + val snackBarHostState = remember { SnackbarHostState() } + val coroutineScope = rememberCoroutineScope() + val focusManager = LocalFocusManager.current + + uiState.minAttributesMessage?.let { message -> + coroutineScope.launch { + uiState.shouldShowMinAttributeWarning.collectLatest { + if (it) { + snackBarHostState.showSnackbar( + message = message, + duration = SnackbarDuration.Short, + ) + uiState.updateMinAttributeWarning(false) + } + } + } + } + + LaunchedEffect(uiState.isOnBackPressed) { + uiState.isOnBackPressed.collectLatest { + manageOnBackPressed(it, focusManager, onSearchScreenUiEvent) + } + } + + val backgroundShape = getBackgroundShape(isLandscape) + + Scaffold( + containerColor = Color.Transparent, + snackbarHost = { + SnackbarHost( + hostState = snackBarHostState, + modifier = + Modifier.padding( + start = 8.dp, + top = 8.dp, + end = 8.dp, + bottom = 48.dp, + ), + ) + }, + ) { paddingValues -> + val layoutDirection = LocalLayoutDirection.current + Column( + modifier = + Modifier + .fillMaxSize() + .background(color = Color.White, shape = backgroundShape) + .padding( + top = 0.dp, + bottom = paddingValues.calculateBottomPadding(), + start = paddingValues.calculateStartPadding(layoutDirection), + end = paddingValues.calculateEndPadding(layoutDirection), + ), + ) { + LazyColumn( + modifier = + Modifier + .weight(1F), + ) { + if (uiState.items.isEmpty()) { + item { + Box( + modifier = + Modifier + .fillMaxWidth() + .padding(16.dp), + contentAlignment = Alignment.Center, + ) { + InfoBar( + modifier = Modifier.testTag("EMPTY_SEARCH_ATTRIBUTES_TEXT_TAG"), + text = stringResource(Res.string.empty_search_attributes_message), + icon = { + Icon( + imageVector = Icons.Outlined.ErrorOutline, + contentDescription = "warning", + tint = AdditionalInfoItemColor.WARNING.color, + ) + }, + textColor = AdditionalInfoItemColor.WARNING.color, + backgroundColor = AdditionalInfoItemColor.WARNING.color.copy(alpha = 0.1f), + ) + } + } + } else { + itemsIndexed( + items = uiState.items, + key = { _, fieldUiModel -> + fieldUiModel.uid + }, + ) { index, trackerInputModel -> + ParameterSelectorItem( + modifier = + Modifier + .testTag("SEARCH_PARAM_ITEM"), + model = + provideParameterSelectorItem( + inputModel = + trackerInputModel.loadOptionSetConfiguration( + getOptionSetFlow = getOptionSetFlow, + onOptionSetSearch = onOptionSetSearch, + ), + helperText = stringResource(Res.string.optional), + onNextClicked = { + manageOnNextClick( + index, + uiState.items, + onTrackerInputUiEvent, + ) + }, + onUiEvent = onTrackerInputUiEvent, + ), + ) + } + } + + if (uiState.clearSearchEnabled) { + item { + Box( + modifier = Modifier.fillMaxWidth(), + contentAlignment = Alignment.Center, + ) { + Button( + modifier = Modifier.padding(16.dp, 24.dp, 16.dp, 8.dp), + style = ButtonStyle.TEXT, + text = stringResource(Res.string.clear_search), + icon = { + Icon( + imageVector = Icons.Outlined.Cancel, + contentDescription = "clear search", + tint = SurfaceColor.Primary, + ) + }, + ) { + focusManager.clearFocus() + onSearchScreenUiEvent(SearchScreenUiEvent.OnClearSearchButtonClicked) + } + } + } + } + } + + Button( + enabled = uiState.searchEnabled, + modifier = + Modifier + .fillMaxWidth() + .padding(16.dp, 8.dp, 16.dp, 8.dp) + .testTag("SEARCH_BUTTON"), + style = ButtonStyle.FILLED, + text = stringResource(Res.string.search), + icon = { + val iconTint = getButtonColour(uiState.searchEnabled) + Icon( + imageVector = Icons.Outlined.Search, + contentDescription = "search", + tint = iconTint, + ) + }, + ) { + focusManager.clearFocus() + onSearchScreenUiEvent(SearchScreenUiEvent.OnSearchButtonClicked) + } + } + } +} + +private fun manageOnBackPressed( + it: Boolean, + focusManager: FocusManager, + onSearchScreenUiEvent: (SearchScreenUiEvent) -> Unit, +) { + if (it) { + focusManager.clearFocus() + onSearchScreenUiEvent(SearchScreenUiEvent.OnCloseClicked) + } +} + +private fun manageOnNextClick( + index: Int, + items: List, + onTrackerInputUiEvent: (TrackerInputUiEvent) -> Unit, +) { + val nextIndex = index + 1 + if (index + 1 < items.size && nextIndex < items.size) { + val nexItemUid = items[nextIndex].uid + onTrackerInputUiEvent( + TrackerInputUiEvent.OnItemClick( + nexItemUid, + ), + ) + } +} + +fun getBackgroundShape(isLandscape: Boolean): RoundedCornerShape = + if (isLandscape) { + RoundedCornerShape( + topStart = CornerSize(Radius.L), + topEnd = CornerSize(Radius.NoRounding), + bottomEnd = CornerSize(Radius.NoRounding), + bottomStart = CornerSize(Radius.NoRounding), + ) + } else { + Shape.LargeTop + } + +fun getButtonColour(enabled: Boolean): Color = + if (enabled) { + TextColor.OnPrimary + } else { + TextColor.OnDisabledSurface + } diff --git a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/searchparameters/model/SearchParametersUiState.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/ui/state/SearchParametersUiState.kt similarity index 86% rename from app/src/main/java/org/dhis2/usescases/searchTrackEntity/searchparameters/model/SearchParametersUiState.kt rename to tracker/src/commonMain/kotlin/org/dhis2/tracker/search/ui/state/SearchParametersUiState.kt index be65022a20e..3f3fed50f4b 100644 --- a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/searchparameters/model/SearchParametersUiState.kt +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/ui/state/SearchParametersUiState.kt @@ -1,11 +1,11 @@ -package org.dhis2.usescases.searchTrackEntity.searchparameters.model +package org.dhis2.tracker.search.ui.state import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.SharedFlow -import org.dhis2.form.model.FieldUiModel +import org.dhis2.tracker.input.ui.state.TrackerInputUiState data class SearchParametersUiState( - val items: List = listOf(), + val items: List = listOf(), val minAttributesMessage: String? = null, private val _shouldShowMinAttributeWarning: MutableSharedFlow = MutableSharedFlow( From d320e42d0c9c8374c4e63a2d1b70625e37d9afe5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Miguel=20Rubio?= Date: Mon, 23 Feb 2026 12:43:42 +0100 Subject: [PATCH 063/114] test: adding WaitForView in checkDataSetIsNotCompletedAndModified step for completeExpiryAndFutureDays test (#4681) --- .../java/org/dhis2/usescases/datasets/DataSetDetailRobot.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/androidTest/java/org/dhis2/usescases/datasets/DataSetDetailRobot.kt b/app/src/androidTest/java/org/dhis2/usescases/datasets/DataSetDetailRobot.kt index 0216ff9c92a..bb7caf6f126 100644 --- a/app/src/androidTest/java/org/dhis2/usescases/datasets/DataSetDetailRobot.kt +++ b/app/src/androidTest/java/org/dhis2/usescases/datasets/DataSetDetailRobot.kt @@ -84,7 +84,7 @@ internal class DataSetDetailRobot( } fun checkDataSetIsNotCompletedAndModified(catCombo: String, orgUnit: String ) { - onView(withId(R.id.recycler)) + waitForView(withId(R.id.recycler)) .check( matches( hasItem( From f8a57fd56d29bca65161f22659b7c260ebecb425 Mon Sep 17 00:00:00 2001 From: Pablo Date: Tue, 24 Feb 2026 12:33:08 +0100 Subject: [PATCH 064/114] feat: [ANDROAPP-7459][3/6] Added wew sync metadata worker [skip size] (#4640) * feat: [ANDROAPP-7459][1/6] Added new worker to update sync settings * feat: [ANDROAPP-7459][2/6] Added required implementations for new workers (#4639) * feat: [ANDROAPP-7459][2/6] Added required implementations for new workers * fix comments * feat: [ANDROAPP-7459][3/6] Added wew sync metadata worker * fix rebase * fix comments * feat: [ANDROAPP-7459][4/6] Implement new sync in the app [skip size] (#4641) * build: [ANDROAPP-7459][6/6] Remove unused classes [skip size] (#4649) * fix crash when deleting account while metadata sync is in progress --- app/build.gradle.kts | 3 + app/src/androidTest/java/org/dhis2/AppTest.kt | 13 -- .../sync/MockedWorkManagerController.kt | 53 ----- .../usescases/sync/MockedWorkManagerModule.kt | 13 -- .../dhis2/usescases/sync/SyncActivityTest.kt | 108 ++++----- app/src/main/AndroidManifest.xml | 4 +- .../dhis2/data/service/SyncInitWorker.java | 46 ---- .../data/service/SyncInitWorkerComponent.java | 13 -- .../data/service/SyncInitWorkerModule.kt | 35 --- .../data/service/SyncMetadataWorker.java | 212 ------------------ .../service/SyncMetadataWorkerComponent.java | 13 -- .../data/service/SyncMetadataWorkerModule.kt | 35 --- .../org/dhis2/data/service/SyncPresenter.java | 9 +- .../dhis2/data/service/SyncPresenterImpl.kt | 80 ------- .../workManager/WorkManagerController.kt | 5 - .../workManager/WorkManagerControllerImpl.kt | 22 -- .../data/service/workManager/WorkerType.kt | 1 - .../org/dhis2/data/user/UserComponent.java | 10 - .../java/org/dhis2/di/KoinInitialization.kt | 2 + .../usescases/settings/SyncManagerFragment.kt | 5 +- .../usescases/settings/SyncManagerModule.kt | 6 +- .../settings/SyncManagerPresenter.kt | 16 +- .../settings/domain/GetSettingsState.kt | 62 ++--- .../usescases/settings/domain/LaunchSync.kt | 71 +++--- .../settings/models/SyncStateInput.kt | 10 + .../org/dhis2/usescases/sync/SyncActivity.kt | 24 +- .../org/dhis2/usescases/sync/SyncInjector.kt | 6 +- .../org/dhis2/usescases/sync/SyncPresenter.kt | 31 ++- .../dhis2/utils/analytics/AnalyticsHelper.kt | 4 +- .../dhis2/data/services/SyncPresenterTest.kt | 132 ----------- .../settings/SyncManagerPresenterTest.kt | 75 +++---- .../settings/domain/LaunchSyncTest.kt | 48 ++-- .../dhis2/usescases/sync/SyncPresenterTest.kt | 47 ++-- .../commons/di/CommonsModule.android.kt | 6 + .../notifications/NotificationManagerImpl.kt | 192 ++++++++++++++++ .../commons/reporting/AnalyticActions.kt | 1 - gradle/verification-metadata.xml | 14 ++ sync/build.gradle.kts | 6 +- .../mobile/sync/ExampleInstrumentedTest.kt | 0 .../org/dhis2/mobile/sync/ExampleUnitTest.kt | 0 .../data/AndroidSyncBackgroundJobAction.kt | 82 +++++-- .../mobile/sync/data/AndroidSyncRepository.kt | 1 - .../mobile/sync/data/SyncMetadataWorker.kt | 85 +++++++ .../mobile/sync/di/SyncModule.android.kt | 3 + .../AndroidSyncRepositoryTest.kt | 169 ++++++++++++++ .../org/dhis2/mobile/sync/domain/SyncData.kt | 17 ++ .../dhis2/mobile/sync/domain/SyncMetadata.kt | 89 ++++++++ .../mobile/sync/domain/SyncMetadataTest.kt | 115 ++++++++++ .../mobile/sync/domain/SyncSettingsTest.kt | 57 +++++ 49 files changed, 1074 insertions(+), 977 deletions(-) delete mode 100644 app/src/androidTest/java/org/dhis2/usescases/sync/MockedWorkManagerController.kt delete mode 100644 app/src/androidTest/java/org/dhis2/usescases/sync/MockedWorkManagerModule.kt delete mode 100644 app/src/main/java/org/dhis2/data/service/SyncInitWorker.java delete mode 100644 app/src/main/java/org/dhis2/data/service/SyncInitWorkerComponent.java delete mode 100644 app/src/main/java/org/dhis2/data/service/SyncInitWorkerModule.kt delete mode 100644 app/src/main/java/org/dhis2/data/service/SyncMetadataWorker.java delete mode 100644 app/src/main/java/org/dhis2/data/service/SyncMetadataWorkerComponent.java delete mode 100644 app/src/main/java/org/dhis2/data/service/SyncMetadataWorkerModule.kt create mode 100644 app/src/main/java/org/dhis2/usescases/settings/models/SyncStateInput.kt create mode 100644 commonskmm/src/androidMain/kotlin/org/dhis2/mobile/commons/notifications/NotificationManagerImpl.kt delete mode 100644 sync/src/androidDeviceTest/kotlin/org/dhis2/mobile/sync/ExampleInstrumentedTest.kt delete mode 100644 sync/src/androidHostTest/kotlin/org/dhis2/mobile/sync/ExampleUnitTest.kt create mode 100644 sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/SyncMetadataWorker.kt create mode 100644 sync/src/androidUnitTest/kotlin/org.dhis2.mobile.sync.data/AndroidSyncRepositoryTest.kt create mode 100644 sync/src/commonMain/kotlin/org/dhis2/mobile/sync/domain/SyncData.kt create mode 100644 sync/src/commonMain/kotlin/org/dhis2/mobile/sync/domain/SyncMetadata.kt create mode 100644 sync/src/commonTest/kotlin/org/dhis2/mobile/sync/domain/SyncMetadataTest.kt create mode 100644 sync/src/commonTest/kotlin/org/dhis2/mobile/sync/domain/SyncSettingsTest.kt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index cca34391705..7068334b38f 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -286,6 +286,7 @@ dependencies { implementation(project(":aggregates")) implementation(project(":commonskmm")) implementation(project(":login")) + implementation(project(":sync")) implementation(libs.security.conscrypt) implementation(libs.security.rootbeer) @@ -347,6 +348,8 @@ dependencies { androidTestImplementation(libs.test.rx2.idler) androidTestImplementation(libs.test.compose.ui.test) androidTestImplementation(libs.test.hamcrest) + androidTestImplementation(libs.koin.test) + androidTestImplementation(libs.koin.test.junit4) } sentry { diff --git a/app/src/androidTest/java/org/dhis2/AppTest.kt b/app/src/androidTest/java/org/dhis2/AppTest.kt index f594dd84e89..aac5b3b125c 100644 --- a/app/src/androidTest/java/org/dhis2/AppTest.kt +++ b/app/src/androidTest/java/org/dhis2/AppTest.kt @@ -1,7 +1,5 @@ package org.dhis2 -import androidx.lifecycle.MutableLiveData -import androidx.work.WorkInfo import org.dhis2.common.di.TestingInjector import org.dhis2.common.keystore.KeyStoreRobot import org.dhis2.common.preferences.PreferencesTestingModule @@ -10,8 +8,6 @@ import org.dhis2.commons.schedulers.SchedulersProviderImpl import org.dhis2.data.server.ServerModule import org.dhis2.data.user.UserModule import org.dhis2.usescases.BaseTest.Companion.MOCK_SERVER_URL -import org.dhis2.usescases.sync.MockedWorkManagerController -import org.dhis2.usescases.sync.MockedWorkManagerModule import org.dhis2.utils.analytics.AnalyticsModule import org.hisp.dhis.android.core.D2Manager import org.hisp.dhis.android.core.D2Manager.blockingInstantiateD2 @@ -20,8 +16,6 @@ import org.hisp.dhis.android.core.D2Manager.setTestingSecureStore class AppTest : App() { - val mutableWorkInfoStatuses = MutableLiveData>() - fun restoreDB() { } @@ -68,13 +62,6 @@ class AppTest : App() { .schedulerModule(SchedulerModule(SchedulersProviderImpl())) .analyticsModule(AnalyticsModule()) .preferenceModule(PreferencesTestingModule()) - .workManagerController( - MockedWorkManagerModule( - MockedWorkManagerController( - mutableWorkInfoStatuses - ) - ) - ) } companion object { diff --git a/app/src/androidTest/java/org/dhis2/usescases/sync/MockedWorkManagerController.kt b/app/src/androidTest/java/org/dhis2/usescases/sync/MockedWorkManagerController.kt deleted file mode 100644 index aa258d6b737..00000000000 --- a/app/src/androidTest/java/org/dhis2/usescases/sync/MockedWorkManagerController.kt +++ /dev/null @@ -1,53 +0,0 @@ -package org.dhis2.usescases.sync - -import androidx.lifecycle.LiveData -import androidx.work.WorkInfo -import org.dhis2.data.service.workManager.WorkManagerController -import org.dhis2.data.service.workManager.WorkerItem - -class MockedWorkManagerController(private val workInfoStatuses: LiveData>) : - WorkManagerController { - - override fun syncDataForWorker(workerItem: WorkerItem) { - } - - override fun syncDataForWorker(dataWorkerTag: String, workName: String) { - - } - - override fun syncMetaDataForWorker(metadataWorkerTag: String, workName: String) { - } - - override fun beginUniqueWork(workerItem: WorkerItem) { - } - - override fun enqueuePeriodicWork(workerItem: WorkerItem) { - } - - override fun getWorkInfosForUniqueWorkLiveData(workerName: String): LiveData> { - return workInfoStatuses - } - - override fun getWorkInfosByTagLiveData(tag: String): LiveData> { - return workInfoStatuses - } - - override fun getWorkInfosForTags(vararg tags: String): LiveData> { - return workInfoStatuses - } - - override fun cancelAllWork() { - } - - override suspend fun cancelAllWorkAndWait() { - } - - override fun cancelAllWorkByTag(tag: String) { - } - - override fun cancelUniqueWork(workName: String) { - } - - override fun pruneWork() { - } -} \ No newline at end of file diff --git a/app/src/androidTest/java/org/dhis2/usescases/sync/MockedWorkManagerModule.kt b/app/src/androidTest/java/org/dhis2/usescases/sync/MockedWorkManagerModule.kt deleted file mode 100644 index 6d312feb985..00000000000 --- a/app/src/androidTest/java/org/dhis2/usescases/sync/MockedWorkManagerModule.kt +++ /dev/null @@ -1,13 +0,0 @@ -package org.dhis2.usescases.sync - -import androidx.work.WorkManager -import org.dhis2.data.service.workManager.WorkManagerController -import org.dhis2.data.service.workManager.WorkManagerModule - -class MockedWorkManagerModule(private val mockedController: WorkManagerController) : - WorkManagerModule() { - - override fun providesWorkManagerController(workManager: WorkManager): WorkManagerController { - return mockedController - } -} \ No newline at end of file diff --git a/app/src/androidTest/java/org/dhis2/usescases/sync/SyncActivityTest.kt b/app/src/androidTest/java/org/dhis2/usescases/sync/SyncActivityTest.kt index 006b9ad8be9..8b9b969d5e3 100644 --- a/app/src/androidTest/java/org/dhis2/usescases/sync/SyncActivityTest.kt +++ b/app/src/androidTest/java/org/dhis2/usescases/sync/SyncActivityTest.kt @@ -1,52 +1,60 @@ package org.dhis2.usescases.sync -import androidx.lifecycle.MutableLiveData -import androidx.test.core.app.ApplicationProvider -import androidx.test.ext.junit.rules.activityScenarioRule +import androidx.test.core.app.ActivityScenario import androidx.test.ext.junit.runners.AndroidJUnit4 -import androidx.work.Data -import androidx.work.WorkInfo -import org.dhis2.AppTest -import org.dhis2.commons.Constants +import kotlinx.coroutines.flow.MutableStateFlow +import org.dhis2.mobile.sync.data.SyncBackgroundJobAction +import org.dhis2.mobile.sync.model.SyncJobStatus +import org.dhis2.mobile.sync.model.SyncStatus import org.dhis2.usescases.BaseTest -import org.junit.Before +import org.junit.After import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith -import java.util.UUID -import org.junit.After +import org.koin.test.KoinTest +import org.koin.test.mock.MockProviderRule +import org.koin.test.mock.declareMock +import org.mockito.Mockito +import org.mockito.kotlin.any +import org.mockito.kotlin.doAnswer +import org.mockito.kotlin.doReturn +import org.mockito.kotlin.whenever + @RunWith(AndroidJUnit4::class) -class SyncActivityTest : BaseTest() { - private lateinit var workInfoStatusLiveData: MutableLiveData> +class SyncActivityTest : BaseTest(), KoinTest { + private val metadataSyncJobStatuses = MutableStateFlow>(emptyList()) @get:Rule - val rule = activityScenarioRule() - - @Before - override fun setUp() { - super.setUp() - workInfoStatusLiveData = - ApplicationProvider.getApplicationContext().mutableWorkInfoStatuses - } + val mockProvider = + MockProviderRule.create { clazz -> + Mockito.mock(clazz.java) + } @After override fun teardown() { super.teardown() - workInfoStatusLiveData.postValue(emptyList()) + metadataSyncJobStatuses.tryEmit(emptyList()) } @Test fun shouldShowMetadataErrorDialog() { - syncRobot { - waitUntilActivityVisible() - waitToDebounce(3000) - workInfoStatusLiveData.postValue(arrayListOf(mockedMetaWorkInfo(WorkInfo.State.RUNNING))) - waitToDebounce(3000) - workInfoStatusLiveData.postValue(arrayListOf(mockedMetaWorkInfo(WorkInfo.State.FAILED))) - waitToDebounce(3000) - checkMetadataErrorDialogIsDisplayed() + declareMock { + whenever(launchMetadataSync(any())) doAnswer {} + whenever(observeMetadataJob()) doReturn metadataSyncJobStatuses + } + + ActivityScenario.launch(SyncActivity::class.java).use { + syncRobot { + waitUntilActivityVisible() + waitToDebounce(3000) + metadataSyncJobStatuses.tryEmit(listOf(mockedMetadataJobStatus(SyncStatus.Running))) + waitToDebounce(3000) + metadataSyncJobStatuses.tryEmit(listOf(mockedMetadataJobStatus(SyncStatus.Failed))) + waitToDebounce(3000) + checkMetadataErrorDialogIsDisplayed() + } } } @@ -54,28 +62,28 @@ class SyncActivityTest : BaseTest() { fun shouldCompleteSyncProcess() { enableIntents() - syncRobot { - waitUntilActivityVisible() - workInfoStatusLiveData.postValue(arrayListOf(mockedMetaWorkInfo(WorkInfo.State.RUNNING))) - waitToDebounce(3000) - checkMetadataIsSyncing() - checkDataIsWaiting() - workInfoStatusLiveData.postValue(arrayListOf(mockedMetaWorkInfo(WorkInfo.State.SUCCEEDED))) - waitToDebounce(3000) - checkMainActivityIsLaunched() + declareMock { + whenever(launchMetadataSync(any())) doAnswer {} + whenever(observeMetadataJob()) doReturn metadataSyncJobStatuses } - } - private fun mockedMetaWorkInfo(state: WorkInfo.State): WorkInfo { - return WorkInfo( - id = UUID.randomUUID(), - state = state, - tags = setOf(Constants.META_NOW), - outputData = Data.EMPTY, - progress = Data.EMPTY, - runAttemptCount = 0, - generation = 0 - ) + ActivityScenario.launch(SyncActivity::class.java).use { + syncRobot { + waitUntilActivityVisible() + metadataSyncJobStatuses.tryEmit(listOf(mockedMetadataJobStatus(SyncStatus.Running))) + waitToDebounce(3000) + checkMetadataIsSyncing() + checkDataIsWaiting() + metadataSyncJobStatuses.tryEmit(listOf(mockedMetadataJobStatus(SyncStatus.Succeed))) + waitToDebounce(3000) + checkMainActivityIsLaunched() + } + } } -} + private fun mockedMetadataJobStatus(status: SyncStatus) = SyncJobStatus( + tags = listOf("METADATA_SYNC", "METADATA_SYNC_NOW"), + status = status, + message = null + ) +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 015c7bc1c15..e9f21c33902 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -17,6 +17,7 @@ android:name="android.permission.READ_EXTERNAL_STORAGE" android:maxSdkVersion="32" /> + + android:foregroundServiceType="dataSync" /> triggerNotification( - getApplicationContext().getString(R.string.app_name), - getApplicationContext().getString(R.string.syncing_configuration), - progress)); - } catch (Exception e) { - Timber.e(e); - isMetaOk = false; - if (!NetworkUtils.isOnline(getApplicationContext())) - noNetwork = true; - if (e instanceof D2Error) { - D2Error error = (D2Error) e; - message.append(composeErrorMessageInfo(error)); - } else if (e.getCause() instanceof D2Error) { - D2Error error = (D2Error) e.getCause(); - message.append(composeErrorMessageInfo(error)); - } else { - message.append(e.toString().split("\n\t")[0]); - } - } finally { - presenter.logTimeToFinish(System.currentTimeMillis() - init, METADATA_TIME); - } - - String lastDataSyncDate = DateUtils.dateTimeFormat().format(Calendar.getInstance().getTime()); - - prefs.setValue(Constants.LAST_META_SYNC, lastDataSyncDate); - prefs.setValue(Constants.LAST_META_SYNC_STATUS, isMetaOk); - prefs.setValue(Constants.LAST_META_SYNC_NO_NETWORK, noNetwork); - - cancelNotification(); - - if (!isMetaOk) - return Result.failure(createOutputData(false, message.toString())); - - presenter.startPeriodicMetaWork(); - - return Result.success(createOutputData(true, message.toString())); - } else { - return Result.failure(createOutputData(false, getApplicationContext().getString(R.string.error_init_session))); - } - } - - @Override - public void onStopped() { - cancelNotification(); - super.onStopped(); - } - - private Data createOutputData(boolean state, String message) { - return new Data.Builder() - .putBoolean(METADATA_STATE, state) - .putString(METADATA_MESSAGE, message) - .build(); - } - - private String errorStackTrace(@Nullable Exception exception) { - if (exception == null) - return ""; - Writer writer = new StringWriter(); - exception.printStackTrace(new PrintWriter(writer)); - return writer.toString(); - } - - private StringBuilder composeErrorMessageInfo(D2Error error) { - StringBuilder builder = new StringBuilder("Cause: ") - .append(resourceManager.parseD2Error(error)) - .append("\n\n") - .append("Exception: ") - .append(errorStackTrace((error).originalException()).split("\n\t")[0]) - .append("\n\n"); - - if (error.created() != null) { - builder.append("Created: ") - .append(error.created().toString()) - .append("\n\n"); - } - - if (error.httpErrorCode() != null) { - builder.append("Http Error Code: ") - .append(error.httpErrorCode()) - .append("\n\n"); - } - - if (error.errorComponent() != null) { - builder.append("Error component: ") - .append(error.errorComponent()) - .append("\n\n"); - } - - if (error.url() != null) { - builder.append("Url: ") - .append(error.url()) - .append("\n\n"); - } - - builder.append("StackTrace: ") - .append(errorStackTrace(error).split("\n\t")[0]) - .append("\n\n"); - - return builder; - } - - private void triggerNotification(String title, String content, int progress) { - NotificationManager notificationManager = (NotificationManager) getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE); - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - NotificationChannel mChannel = new NotificationChannel(METADATA_CHANNEL, "MetadataSync", NotificationManager.IMPORTANCE_HIGH); - notificationManager.createNotificationChannel(mChannel); - } - NotificationCompat.Builder notificationBuilder = - new NotificationCompat.Builder(getApplicationContext(), METADATA_CHANNEL) - .setSmallIcon(R.drawable.ic_sync) - .setContentTitle(title) - .setContentText(content) - .setOngoing(true) - .setOnlyAlertOnce(true) - .setAutoCancel(false) - .setProgress(100, progress, false) - .setPriority(NotificationCompat.PRIORITY_DEFAULT); - - setForegroundAsync(new ForegroundInfo( - SyncMetadataWorker.SYNC_METADATA_ID, - notificationBuilder.build(), - Build.VERSION.SDK_INT >= Build.VERSION_CODES.R ? ServiceInfo.FOREGROUND_SERVICE_TYPE_DATA_SYNC : 0 - )); - } - - private void cancelNotification() { - NotificationManagerCompat notificationManager = - NotificationManagerCompat.from(getApplicationContext()); - notificationManager.cancel(SYNC_METADATA_ID); - } - - public interface OnProgressUpdate { - void onProgressUpdate(int progress); - } -} diff --git a/app/src/main/java/org/dhis2/data/service/SyncMetadataWorkerComponent.java b/app/src/main/java/org/dhis2/data/service/SyncMetadataWorkerComponent.java deleted file mode 100644 index 20d6b70c2da..00000000000 --- a/app/src/main/java/org/dhis2/data/service/SyncMetadataWorkerComponent.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.dhis2.data.service; - -import androidx.annotation.NonNull; - -import org.dhis2.commons.di.dagger.PerService; - -import dagger.Subcomponent; - -@PerService -@Subcomponent(modules = SyncMetadataWorkerModule.class) -public interface SyncMetadataWorkerComponent { - void inject(@NonNull SyncMetadataWorker syncMetadataWorker); -} diff --git a/app/src/main/java/org/dhis2/data/service/SyncMetadataWorkerModule.kt b/app/src/main/java/org/dhis2/data/service/SyncMetadataWorkerModule.kt deleted file mode 100644 index 33fcbff9d17..00000000000 --- a/app/src/main/java/org/dhis2/data/service/SyncMetadataWorkerModule.kt +++ /dev/null @@ -1,35 +0,0 @@ -package org.dhis2.data.service - -import dagger.Module -import dagger.Provides -import org.dhis2.commons.di.dagger.PerService -import org.dhis2.commons.prefs.PreferenceProvider -import org.dhis2.data.service.workManager.WorkManagerController -import org.dhis2.utils.analytics.AnalyticsHelper -import org.hisp.dhis.android.core.D2 - -@Module -class SyncMetadataWorkerModule { - @Provides - @PerService - fun syncRepository(d2: D2): SyncRepository = SyncRepositoryImpl(d2) - - @Provides - @PerService - internal fun syncPresenter( - d2: D2, - preferences: PreferenceProvider, - workManagerController: WorkManagerController, - analyticsHelper: AnalyticsHelper, - syncStatusController: SyncStatusController, - syncRepository: SyncRepository, - ): SyncPresenter = - SyncPresenterImpl( - d2, - preferences, - workManagerController, - analyticsHelper, - syncStatusController, - syncRepository, - ) -} diff --git a/app/src/main/java/org/dhis2/data/service/SyncPresenter.java b/app/src/main/java/org/dhis2/data/service/SyncPresenter.java index 507a0fabd4a..593091270dc 100644 --- a/app/src/main/java/org/dhis2/data/service/SyncPresenter.java +++ b/app/src/main/java/org/dhis2/data/service/SyncPresenter.java @@ -1,13 +1,12 @@ package org.dhis2.data.service; +import androidx.work.ListenableWorker; + import org.hisp.dhis.android.core.arch.call.D2Progress; import org.hisp.dhis.android.core.imports.TrackerImportConflict; -import org.hisp.dhis.android.core.tracker.exporter.TrackerD2Progress; import java.util.List; -import androidx.work.ListenableWorker; - import io.reactivex.Observable; interface SyncPresenter { @@ -15,8 +14,6 @@ interface SyncPresenter { void syncAndDownloadTeis() throws Exception; - void syncMetadata(SyncMetadataWorker.OnProgressUpdate progressUpdate) throws Exception; - void syncAndDownloadDataValues() throws Exception; void syncReservedValues(); @@ -59,8 +56,6 @@ interface SyncPresenter { void startPeriodicDataWork(); - void startPeriodicMetaWork(); - void downloadResources(); ListenableWorker.Result blockSyncGranularDataValues(String dataSetUid, String orgUnitUid, String attrOptionCombo, String periodId, String[] catOptionCombo); diff --git a/app/src/main/java/org/dhis2/data/service/SyncPresenterImpl.kt b/app/src/main/java/org/dhis2/data/service/SyncPresenterImpl.kt index 5f235e6521e..7a380dd0ad9 100644 --- a/app/src/main/java/org/dhis2/data/service/SyncPresenterImpl.kt +++ b/app/src/main/java/org/dhis2/data/service/SyncPresenterImpl.kt @@ -15,18 +15,15 @@ import org.dhis2.commons.prefs.Preference.Companion.EVENT_MAX import org.dhis2.commons.prefs.Preference.Companion.EVENT_MAX_DEFAULT import org.dhis2.commons.prefs.Preference.Companion.LIMIT_BY_ORG_UNIT import org.dhis2.commons.prefs.Preference.Companion.LIMIT_BY_PROGRAM -import org.dhis2.commons.prefs.Preference.Companion.META import org.dhis2.commons.prefs.Preference.Companion.TEI_MAX import org.dhis2.commons.prefs.Preference.Companion.TEI_MAX_DEFAULT import org.dhis2.commons.prefs.Preference.Companion.TIME_DAILY import org.dhis2.commons.prefs.Preference.Companion.TIME_DATA -import org.dhis2.commons.prefs.Preference.Companion.TIME_META import org.dhis2.commons.prefs.PreferenceProvider import org.dhis2.data.service.workManager.WorkManagerController import org.dhis2.data.service.workManager.WorkerItem import org.dhis2.data.service.workManager.WorkerType import org.dhis2.utils.analytics.AnalyticsHelper -import org.dhis2.utils.analytics.matomo.DEFAULT_EXTERNAL_TRACKER_NAME import org.hisp.dhis.android.core.D2 import org.hisp.dhis.android.core.arch.call.D2Progress import org.hisp.dhis.android.core.arch.call.D2ProgressStatus @@ -40,7 +37,6 @@ import org.hisp.dhis.android.core.settings.ProgramSettings import org.hisp.dhis.android.core.systeminfo.DHISVersion import timber.log.Timber import java.util.Calendar -import kotlin.math.ceil class SyncPresenterImpl( private val d2: D2, @@ -239,63 +235,6 @@ class SyncPresenterImpl( } } - override fun syncMetadata(progressUpdate: SyncMetadataWorker.OnProgressUpdate) { - Completable - .fromObservable( - d2 - .metadataModule() - .download() - .doOnNext { data -> - Timber.log(1, data.toString()) - progressUpdate.onProgressUpdate(ceil(data.percentage() ?: 0.0).toInt()) - }.doOnComplete { - updateProyectAnalytics() - setUpSMS() - }, - ).doOnError { - Timber.d("error while downloading Metadata") - }.onErrorComplete() - .andThen( - d2.mapsModule().mapLayersDownloader().downloadMetadata(), - ).andThen( - Completable.fromObservable( - d2 - .fileResourceModule() - .fileResourceDownloader() - .byDomainType() - .eq(FileResourceDomainType.ICON) - .download(), - ), - ).blockingAwait() - } - - private fun setUpSMS() { - val globalSettings = getSettings() - - globalSettings?.let { - if (!globalSettings.smsGateway().isNullOrEmpty()) { - d2 - .smsModule() - .configCase() - .setGatewayNumber(globalSettings.smsGateway()) - .andThen( - if (!globalSettings.smsResultSender().isNullOrEmpty()) { - d2 - .smsModule() - .configCase() - .setConfirmationSenderNumber(globalSettings.smsResultSender()) - } else { - Completable.complete() - }, - ).andThen( - d2.smsModule().configCase().setModuleEnabled(true), - ).andThen( - d2.smsModule().configCase().refreshMetadataIds(), - ).blockingAwait() - } - } - } - override fun downloadResources() { if (d2.systemInfoModule().versionManager().isGreaterThan(DHISVersion.V2_32)) { syncStatusController.initDownloadMedia() @@ -766,24 +705,6 @@ class SyncPresenterImpl( } } - override fun startPeriodicMetaWork() { - val seconds = - getSettings()?.metadataSync()?.toSeconds() ?: preferences.getInt(TIME_META, TIME_DAILY) - workManagerController.cancelUniqueWork(META) - - if (seconds != 0) { - val workerItem = - WorkerItem( - META, - WorkerType.METADATA, - seconds.toLong(), - policy = ExistingWorkPolicy.REPLACE, - ) - - workManagerController.syncDataForWorker(workerItem) - } - } - private fun getSettings(): GeneralSettings? = d2.settingModule().generalSetting().blockingGet() private fun getProgramSetting(): ProgramSettings? = d2.settingModule().programSetting().blockingGet() @@ -805,7 +726,6 @@ class SyncPresenterImpl( analyticsHelper.updateMatomoSecondaryTracker( it.matomoURL()!!, it.matomoID()!!, - DEFAULT_EXTERNAL_TRACKER_NAME, ) } } ?: analyticsHelper.clearMatomoSecondaryTracker() diff --git a/app/src/main/java/org/dhis2/data/service/workManager/WorkManagerController.kt b/app/src/main/java/org/dhis2/data/service/workManager/WorkManagerController.kt index 9723f3177bd..6ef8ddc5a98 100644 --- a/app/src/main/java/org/dhis2/data/service/workManager/WorkManagerController.kt +++ b/app/src/main/java/org/dhis2/data/service/workManager/WorkManagerController.kt @@ -34,11 +34,6 @@ import androidx.work.WorkInfo interface WorkManagerController { fun syncDataForWorker(workerItem: WorkerItem) - fun syncMetaDataForWorker( - metadataWorkerTag: String, - workName: String, - ) - fun syncDataForWorker( dataWorkerTag: String, workName: String, diff --git a/app/src/main/java/org/dhis2/data/service/workManager/WorkManagerControllerImpl.kt b/app/src/main/java/org/dhis2/data/service/workManager/WorkManagerControllerImpl.kt index 26158e84383..029f9b27af2 100644 --- a/app/src/main/java/org/dhis2/data/service/workManager/WorkManagerControllerImpl.kt +++ b/app/src/main/java/org/dhis2/data/service/workManager/WorkManagerControllerImpl.kt @@ -39,7 +39,6 @@ import androidx.work.await import org.dhis2.data.service.CheckVersionWorker import org.dhis2.data.service.SyncDataWorker import org.dhis2.data.service.SyncGranularWorker -import org.dhis2.data.service.SyncMetadataWorker import java.util.concurrent.TimeUnit class WorkManagerControllerImpl( @@ -55,19 +54,6 @@ class WorkManagerControllerImpl( } } - override fun syncMetaDataForWorker( - metadataWorkerTag: String, - workName: String, - ) { - val workerOneBuilder = OneTimeWorkRequest.Builder(SyncMetadataWorker::class.java) - workerOneBuilder - .addTag(metadataWorkerTag) - - workManager - .beginUniqueWork(workName, ExistingWorkPolicy.KEEP, workerOneBuilder.build()) - .enqueue() - } - override fun syncDataForWorker( dataWorkerTag: String, workName: String, @@ -132,7 +118,6 @@ class WorkManagerControllerImpl( private fun createOneTimeBuilder(workerItem: WorkerItem): OneTimeWorkRequest.Builder { val syncBuilder = when (workerItem.workerType) { - WorkerType.METADATA -> OneTimeWorkRequest.Builder(SyncMetadataWorker::class.java) WorkerType.DATA -> OneTimeWorkRequest.Builder(SyncDataWorker::class.java) WorkerType.GRANULAR -> OneTimeWorkRequest.Builder(SyncGranularWorker::class.java) WorkerType.NEW_VERSION -> OneTimeWorkRequest.Builder(CheckVersionWorker::class.java) @@ -155,13 +140,6 @@ class WorkManagerControllerImpl( val syncBuilder = when (workerItem.workerType) { - WorkerType.METADATA -> { - PeriodicWorkRequest.Builder( - SyncMetadataWorker::class.java, - seconds, - TimeUnit.SECONDS, - ) - } WorkerType.DATA -> { PeriodicWorkRequest.Builder( SyncDataWorker::class.java, diff --git a/app/src/main/java/org/dhis2/data/service/workManager/WorkerType.kt b/app/src/main/java/org/dhis2/data/service/workManager/WorkerType.kt index 6c77fc50fb5..067b2a45e11 100644 --- a/app/src/main/java/org/dhis2/data/service/workManager/WorkerType.kt +++ b/app/src/main/java/org/dhis2/data/service/workManager/WorkerType.kt @@ -29,7 +29,6 @@ package org.dhis2.data.service.workManager enum class WorkerType { - METADATA, DATA, GRANULAR, NEW_VERSION, diff --git a/app/src/main/java/org/dhis2/data/user/UserComponent.java b/app/src/main/java/org/dhis2/data/user/UserComponent.java index eebf6102a13..283f3d9d1e4 100644 --- a/app/src/main/java/org/dhis2/data/user/UserComponent.java +++ b/app/src/main/java/org/dhis2/data/user/UserComponent.java @@ -12,10 +12,6 @@ import org.dhis2.data.service.SyncDataWorkerModule; import org.dhis2.data.service.SyncGranularRxComponent; import org.dhis2.data.service.SyncGranularRxModule; -import org.dhis2.data.service.SyncInitWorkerComponent; -import org.dhis2.data.service.SyncInitWorkerModule; -import org.dhis2.data.service.SyncMetadataWorkerComponent; -import org.dhis2.data.service.SyncMetadataWorkerModule; import org.dhis2.usescases.about.AboutComponent; import org.dhis2.usescases.about.AboutModule; import org.dhis2.usescases.datasets.datasetDetail.DataSetDetailComponent; @@ -136,9 +132,6 @@ public interface UserComponent { @NonNull SyncDataWorkerComponent plus(SyncDataWorkerModule syncDataWorkerModule); - @NonNull - SyncMetadataWorkerComponent plus(SyncMetadataWorkerModule syncDataWorkerModule); - @NonNull EventCaptureComponent plus(EventCaptureModule eventCaptureModule); @@ -151,9 +144,6 @@ public interface UserComponent { @NonNull SyncComponent plus(SyncModule syncModule); - @NonNull - SyncInitWorkerComponent plus(SyncInitWorkerModule syncInitWorkerModule); - @NonNull EnrollmentComponent plus(EnrollmentModule enrollmentModule); diff --git a/app/src/main/java/org/dhis2/di/KoinInitialization.kt b/app/src/main/java/org/dhis2/di/KoinInitialization.kt index cd0ba2b8593..c2aa800c550 100644 --- a/app/src/main/java/org/dhis2/di/KoinInitialization.kt +++ b/app/src/main/java/org/dhis2/di/KoinInitialization.kt @@ -9,6 +9,7 @@ import org.dhis2.data.biometric.biometricModule import org.dhis2.mobile.aggregates.di.aggregatesModule import org.dhis2.mobile.commons.di.commonsModule import org.dhis2.mobile.login.main.di.loginModule +import org.dhis2.mobile.sync.di.syncModule import org.dhis2.tracker.search.di.trackerSearchModule import org.dhis2.usescases.datasets.di.dataSetModules import org.dhis2.usescases.searchTrackEntity.di.searchTEKoinModule @@ -39,6 +40,7 @@ object KoinInitialization { settingsProgramModule, biometricModule, matomoModule, + syncModule, ) } } diff --git a/app/src/main/java/org/dhis2/usescases/settings/SyncManagerFragment.kt b/app/src/main/java/org/dhis2/usescases/settings/SyncManagerFragment.kt index e744c147084..77922793602 100644 --- a/app/src/main/java/org/dhis2/usescases/settings/SyncManagerFragment.kt +++ b/app/src/main/java/org/dhis2/usescases/settings/SyncManagerFragment.kt @@ -17,12 +17,14 @@ import org.dhis2.commons.data.FormFileProvider import org.dhis2.commons.data.FormFileProvider.init import org.dhis2.commons.resources.ColorUtils import org.dhis2.mobile.login.authentication.TwoFASettingsActivity +import org.dhis2.mobile.sync.data.SyncBackgroundJobAction import org.dhis2.usescases.general.FragmentGlobalAbstract import org.dhis2.usescases.reservedValue.ReservedValueActivity import org.dhis2.usescases.settings.models.ErrorViewModel import org.dhis2.usescases.settings.ui.SettingsScreen import org.dhis2.usescases.settingsprogram.SettingsProgramActivity import org.hisp.dhis.mobile.ui.designsystem.theme.DHIS2Theme +import org.koin.android.ext.android.inject import timber.log.Timber import java.io.File import javax.inject.Inject @@ -32,6 +34,7 @@ class SyncManagerFragment : FragmentGlobalAbstract() { lateinit var settingsViewModelFactory: SettingsViewModelFactory private val presenter: SyncManagerPresenter by viewModels { settingsViewModelFactory } + private val syncBackgroundJobAction: SyncBackgroundJobAction by inject() @JvmField @Inject @@ -41,7 +44,7 @@ class SyncManagerFragment : FragmentGlobalAbstract() { super.onAttach(context) app() .userComponent() - ?.plus(SyncManagerModule()) + ?.plus(SyncManagerModule(syncBackgroundJobAction)) ?.inject(this) } diff --git a/app/src/main/java/org/dhis2/usescases/settings/SyncManagerModule.kt b/app/src/main/java/org/dhis2/usescases/settings/SyncManagerModule.kt index 2ca357252eb..c690c727e2f 100644 --- a/app/src/main/java/org/dhis2/usescases/settings/SyncManagerModule.kt +++ b/app/src/main/java/org/dhis2/usescases/settings/SyncManagerModule.kt @@ -12,6 +12,7 @@ import org.dhis2.commons.viewmodel.DispatcherProvider import org.dhis2.data.service.VersionRepository import org.dhis2.data.service.workManager.WorkManagerController import org.dhis2.mobile.commons.files.FileHandlerImpl +import org.dhis2.mobile.sync.data.SyncBackgroundJobAction import org.dhis2.usescases.settings.domain.CheckVersionUpdate import org.dhis2.usescases.settings.domain.DeleteLocalData import org.dhis2.usescases.settings.domain.ExportDatabase @@ -27,7 +28,9 @@ import org.dhis2.utils.analytics.AnalyticsHelper import org.hisp.dhis.android.core.D2 @Module -class SyncManagerModule { +class SyncManagerModule( + private val syncBackgroundJobAction: SyncBackgroundJobAction, +) { @Provides @PerFragment fun provideViewModelFactory( @@ -154,6 +157,7 @@ class SyncManagerModule { preferenceProvider: PreferenceProvider, analyticsHelper: AnalyticsHelper, ) = LaunchSync( + syncBackgroundJobAction, workManagerController, preferenceProvider, analyticsHelper, diff --git a/app/src/main/java/org/dhis2/usescases/settings/SyncManagerPresenter.kt b/app/src/main/java/org/dhis2/usescases/settings/SyncManagerPresenter.kt index d017aeb80d0..d33719c18ed 100644 --- a/app/src/main/java/org/dhis2/usescases/settings/SyncManagerPresenter.kt +++ b/app/src/main/java/org/dhis2/usescases/settings/SyncManagerPresenter.kt @@ -27,6 +27,7 @@ import org.dhis2.usescases.settings.domain.UpdateSyncSettings import org.dhis2.usescases.settings.models.DeleteDataState import org.dhis2.usescases.settings.models.ErrorViewModel import org.dhis2.usescases.settings.models.SettingsState +import org.dhis2.usescases.settings.models.SyncStateInput import org.hisp.dhis.android.core.settings.LimitScope import java.io.File @@ -113,14 +114,21 @@ class SyncManagerPresenter( } private suspend fun loadData() { - val settingsState = - getSettingsState( + getSettingsState( + SyncStateInput( openedItem = _settingsState.value?.openedItem, hasConnection = _settingsState.value?.hasConnection == true, metadataSyncInProgress = syncWorkInfo.value.metadataSyncProgress == LaunchSync.SyncStatus.InProgress, dataSyncInProgress = syncWorkInfo.value.dataSyncProgress == LaunchSync.SyncStatus.InProgress, - ) - _settingsState.update { settingsState } + ), + ).fold( + onSuccess = { settingsState -> + _settingsState.update { settingsState } + }, + onFailure = { + // do nothing + }, + ) } fun onItemClick(settingsItem: SettingItem) { diff --git a/app/src/main/java/org/dhis2/usescases/settings/domain/GetSettingsState.kt b/app/src/main/java/org/dhis2/usescases/settings/domain/GetSettingsState.kt index 106706ebb74..cb5f700318f 100644 --- a/app/src/main/java/org/dhis2/usescases/settings/domain/GetSettingsState.kt +++ b/app/src/main/java/org/dhis2/usescases/settings/domain/GetSettingsState.kt @@ -1,40 +1,42 @@ package org.dhis2.usescases.settings.domain +import org.dhis2.mobile.commons.domain.UseCase import org.dhis2.usescases.settings.GatewayValidator -import org.dhis2.usescases.settings.SettingItem import org.dhis2.usescases.settings.SettingsRepository import org.dhis2.usescases.settings.models.SettingsState +import org.dhis2.usescases.settings.models.SyncStateInput class GetSettingsState( private val settingsRepository: SettingsRepository, private val gatewayValidator: GatewayValidator, -) { - suspend operator fun invoke( - openedItem: SettingItem?, - hasConnection: Boolean, - metadataSyncInProgress: Boolean, - dataSyncInProgress: Boolean, - ): SettingsState = - SettingsState( - openedItem = openedItem, - hasConnection = hasConnection, - metadataSettingsViewModel = - settingsRepository.metaSync().blockingGet().copy( - syncInProgress = metadataSyncInProgress, - ), - dataSettingsViewModel = - settingsRepository.dataSync().blockingGet().copy( - syncInProgress = dataSyncInProgress, - ), - syncParametersViewModel = settingsRepository.syncParameters().blockingGet(), - reservedValueSettingsViewModel = settingsRepository.reservedValues().blockingGet(), - smsSettingsViewModel = - with(settingsRepository.sms().blockingGet()) { - copy( - gatewayValidationResult = gatewayValidator(this.gatewayNumber), - ) - }, - isTwoFAConfigured = settingsRepository.isTwoFAConfigured(), - versionName = settingsRepository.getVersionName(), - ) +) : UseCase { + override suspend fun invoke(input: SyncStateInput) = + try { + val state = + SettingsState( + openedItem = input.openedItem, + hasConnection = input.hasConnection, + metadataSettingsViewModel = + settingsRepository.metaSync().blockingGet().copy( + syncInProgress = input.metadataSyncInProgress, + ), + dataSettingsViewModel = + settingsRepository.dataSync().blockingGet().copy( + syncInProgress = input.dataSyncInProgress, + ), + syncParametersViewModel = settingsRepository.syncParameters().blockingGet(), + reservedValueSettingsViewModel = settingsRepository.reservedValues().blockingGet(), + smsSettingsViewModel = + with(settingsRepository.sms().blockingGet()) { + copy( + gatewayValidationResult = gatewayValidator(this.gatewayNumber), + ) + }, + isTwoFAConfigured = settingsRepository.isTwoFAConfigured(), + versionName = settingsRepository.getVersionName(), + ) + Result.success(state) + } catch (e: Exception) { + Result.failure(e) + } } diff --git a/app/src/main/java/org/dhis2/usescases/settings/domain/LaunchSync.kt b/app/src/main/java/org/dhis2/usescases/settings/domain/LaunchSync.kt index 11b0e0286c3..d08e2991053 100644 --- a/app/src/main/java/org/dhis2/usescases/settings/domain/LaunchSync.kt +++ b/app/src/main/java/org/dhis2/usescases/settings/domain/LaunchSync.kt @@ -15,12 +15,17 @@ import org.dhis2.commons.prefs.PreferenceProvider import org.dhis2.data.service.workManager.WorkManagerController import org.dhis2.data.service.workManager.WorkerItem import org.dhis2.data.service.workManager.WorkerType +import org.dhis2.mobile.commons.providers.TIME_DATA +import org.dhis2.mobile.commons.providers.TIME_META +import org.dhis2.mobile.sync.data.SyncBackgroundJobAction import org.dhis2.utils.analytics.AnalyticsHelper import org.dhis2.utils.analytics.CLICK import org.dhis2.utils.analytics.SYNC_DATA_NOW import org.dhis2.utils.analytics.SYNC_METADATA_NOW +import org.dhis2.mobile.sync.model.SyncStatus as Status class LaunchSync( + private val syncBackgroundJobAction: SyncBackgroundJobAction, private val workManagerController: WorkManagerController, private val preferenceProvider: PreferenceProvider, private val analyticsHelper: AnalyticsHelper, @@ -34,12 +39,19 @@ class LaunchSync( ) private val metadataWorkInfo = - workManagerController - .getWorkInfosByTagLiveData(Constants.META_NOW) - .asFlow() + syncBackgroundJobAction + .observeMetadataJob() .map { workStatuses -> - var workState: WorkInfo.State? = workStatuses.getOrNull(0)?.state - onWorkStatusesUpdate(workState, Constants.META_NOW) + var workState = workStatuses.firstOrNull()?.status + when (workState) { + Status.Enqueue, + Status.Running, + Status.Blocked, + -> syncStatus.update { it.copy(metadataSyncProgress = SyncStatus.InProgress) } + Status.Cancelled -> syncStatus.update { it.copy(metadataSyncProgress = SyncStatus.Cancelled) } + else -> syncStatus.update { it.copy(metadataSyncProgress = SyncStatus.Finished) } + } + syncStatus.value } private val dataWorkInfo = @@ -107,7 +119,6 @@ class LaunchSync( when (workState) { WorkInfo.State.CANCELLED -> when (workerTag) { - Constants.META_NOW -> syncStatus.update { it.copy(metadataSyncProgress = SyncStatus.Cancelled) } Constants.DATA_NOW -> syncStatus.update { it.copy(dataSyncProgress = SyncStatus.Cancelled) } else -> syncStatus } @@ -117,14 +128,12 @@ class LaunchSync( WorkInfo.State.BLOCKED, -> when (workerTag) { - Constants.META_NOW -> syncStatus.update { it.copy(metadataSyncProgress = SyncStatus.InProgress) } Constants.DATA_NOW -> syncStatus.update { it.copy(dataSyncProgress = SyncStatus.InProgress) } else -> syncStatus } else -> when (workerTag) { - Constants.META_NOW -> syncStatus.update { it.copy(metadataSyncProgress = SyncStatus.Finished) } Constants.DATA_NOW -> syncStatus.update { it.copy(dataSyncProgress = SyncStatus.Finished) } else -> syncStatus } @@ -157,52 +166,35 @@ class LaunchSync( private fun syncMeta() { analyticsHelper.setEvent(SYNC_METADATA_NOW, CLICK, SYNC_METADATA_NOW) - val workerItem = - WorkerItem( - Constants.META_NOW, - WorkerType.METADATA, - null, - null, - ExistingWorkPolicy.KEEP, - null, - ) - workManagerController.syncDataForWorker(workerItem) + syncBackgroundJobAction.launchMetadataSync(0) } private fun updateSyncDataPeriod(seconds: Int) { if (seconds != Constants.TIME_MANUAL) { syncData(seconds) } else { - cancelPendingWork(Constants.DATA) + preferenceProvider.setValue(TIME_DATA, 0) + workManagerController.cancelUniqueWork(Constants.DATA) } } - private fun updateSyncMetadataPeriod(seconds: Int) { + private suspend fun updateSyncMetadataPeriod(seconds: Int) { if (seconds != Constants.TIME_MANUAL) { syncMeta(seconds) } else { - cancelPendingWork(Constants.META) + preferenceProvider.setValue(TIME_META, 0) + syncBackgroundJobAction.cancelMetadataSync() } } private fun syncMeta(seconds: Int) { analyticsHelper.trackMatomoEvent(Categories.SETTINGS, Actions.SYNC_DATA, CLICK) - preferenceProvider.setValue(Constants.TIME_META, seconds) - workManagerController.cancelUniqueWork(Constants.META) - val workerItem = - WorkerItem( - Constants.META, - WorkerType.METADATA, - seconds.toLong(), - null, - null, - ExistingPeriodicWorkPolicy.REPLACE, - ) - workManagerController.enqueuePeriodicWork(workerItem) + preferenceProvider.setValue(TIME_META, seconds) + syncBackgroundJobAction.launchMetadataSync(seconds.toLong()) } private fun syncData(seconds: Int) { - preferenceProvider.setValue(Constants.TIME_DATA, seconds) + preferenceProvider.setValue(TIME_DATA, seconds) workManagerController.cancelUniqueWork(Constants.DATA) val workerItem = WorkerItem( @@ -215,15 +207,4 @@ class LaunchSync( ) workManagerController.enqueuePeriodicWork(workerItem) } - - private fun cancelPendingWork(tag: String) { - preferenceProvider.setValue( - when (tag) { - Constants.DATA -> Constants.TIME_DATA - else -> Constants.TIME_META - }, - 0, - ) - workManagerController.cancelUniqueWork(tag) - } } diff --git a/app/src/main/java/org/dhis2/usescases/settings/models/SyncStateInput.kt b/app/src/main/java/org/dhis2/usescases/settings/models/SyncStateInput.kt new file mode 100644 index 00000000000..e9a6d045b28 --- /dev/null +++ b/app/src/main/java/org/dhis2/usescases/settings/models/SyncStateInput.kt @@ -0,0 +1,10 @@ +package org.dhis2.usescases.settings.models + +import org.dhis2.usescases.settings.SettingItem + +data class SyncStateInput( + val openedItem: SettingItem?, + val hasConnection: Boolean, + val metadataSyncInProgress: Boolean, + val dataSyncInProgress: Boolean, +) diff --git a/app/src/main/java/org/dhis2/usescases/sync/SyncActivity.kt b/app/src/main/java/org/dhis2/usescases/sync/SyncActivity.kt index 0b0a027a4e4..1cb60bc3cc7 100644 --- a/app/src/main/java/org/dhis2/usescases/sync/SyncActivity.kt +++ b/app/src/main/java/org/dhis2/usescases/sync/SyncActivity.kt @@ -5,18 +5,23 @@ import android.os.Bundle import android.view.View.GONE import androidx.appcompat.content.res.AppCompatResources import androidx.databinding.DataBindingUtil -import androidx.work.WorkInfo +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.lifecycleScope +import androidx.lifecycle.repeatOnLifecycle +import kotlinx.coroutines.launch import org.dhis2.App import org.dhis2.R import org.dhis2.bindings.Bindings import org.dhis2.bindings.userComponent import org.dhis2.databinding.ActivitySynchronizationBinding +import org.dhis2.mobile.sync.data.SyncBackgroundJobAction import org.dhis2.usescases.general.ActivityGlobalAbstract import org.dhis2.usescases.login.LoginActivity import org.dhis2.usescases.main.MainActivity import org.dhis2.utils.OnDialogClickListener import org.dhis2.utils.extension.navigateTo import org.dhis2.utils.extension.share +import org.koin.android.ext.android.inject import javax.inject.Inject class SyncActivity : @@ -30,20 +35,23 @@ class SyncActivity : @Inject lateinit var animations: SyncAnimations + private val backgroundJobAction: SyncBackgroundJobAction by inject() + override fun onCreate(savedInstanceState: Bundle?) { val serverComponent = (applicationContext as App).serverComponent() - userComponent()?.plus(SyncModule(this, serverComponent))?.inject(this) ?: finish() + userComponent()?.plus(SyncModule(this, backgroundJobAction, serverComponent))?.inject(this) + ?: finish() super.onCreate(savedInstanceState) binding = DataBindingUtil.setContentView(this, R.layout.activity_synchronization) binding.presenter = presenter - presenter.sync() - } - override fun onResume() { - super.onResume() - presenter.observeSyncProcess().observe(this) { workInfoList: List -> - presenter.handleSyncInfo(workInfoList) + lifecycleScope.launch { + repeatOnLifecycle(Lifecycle.State.STARTED) { + presenter.observeSyncProcess().collect(presenter::handleSyncInfo) + } } + + presenter.sync() } override fun setMetadataSyncStarted() { diff --git a/app/src/main/java/org/dhis2/usescases/sync/SyncInjector.kt b/app/src/main/java/org/dhis2/usescases/sync/SyncInjector.kt index 1abecbbd72e..12e307c465f 100644 --- a/app/src/main/java/org/dhis2/usescases/sync/SyncInjector.kt +++ b/app/src/main/java/org/dhis2/usescases/sync/SyncInjector.kt @@ -7,7 +7,7 @@ import org.dhis2.commons.di.dagger.PerActivity import org.dhis2.commons.prefs.PreferenceProvider import org.dhis2.commons.schedulers.SchedulerProvider import org.dhis2.data.server.ServerComponent -import org.dhis2.data.service.workManager.WorkManagerController +import org.dhis2.mobile.sync.data.SyncBackgroundJobAction @PerActivity @Subcomponent(modules = [SyncModule::class]) @@ -18,6 +18,7 @@ interface SyncComponent { @Module class SyncModule( private val view: SyncView, + private val backgroundJobAction: SyncBackgroundJobAction, serverComponent: ServerComponent?, ) { private val userManager = serverComponent?.userManager() @@ -26,14 +27,13 @@ class SyncModule( @PerActivity fun providePresenter( schedulerProvider: SchedulerProvider, - workManagerController: WorkManagerController, preferences: PreferenceProvider, ): SyncPresenter = SyncPresenter( view, userManager, schedulerProvider, - workManagerController, + backgroundJobAction, preferences, ) } diff --git a/app/src/main/java/org/dhis2/usescases/sync/SyncPresenter.kt b/app/src/main/java/org/dhis2/usescases/sync/SyncPresenter.kt index 90735348a02..91d7c5e58bc 100644 --- a/app/src/main/java/org/dhis2/usescases/sync/SyncPresenter.kt +++ b/app/src/main/java/org/dhis2/usescases/sync/SyncPresenter.kt @@ -1,15 +1,14 @@ package org.dhis2.usescases.sync -import androidx.lifecycle.LiveData -import androidx.work.WorkInfo import io.reactivex.disposables.CompositeDisposable -import org.dhis2.commons.Constants import org.dhis2.commons.prefs.Preference import org.dhis2.commons.prefs.PreferenceProvider import org.dhis2.commons.schedulers.SchedulerProvider import org.dhis2.data.server.UserManager -import org.dhis2.data.service.METADATA_MESSAGE -import org.dhis2.data.service.workManager.WorkManagerController +import org.dhis2.mobile.sync.data.METADATA_SYNC_NOW +import org.dhis2.mobile.sync.data.SyncBackgroundJobAction +import org.dhis2.mobile.sync.model.SyncJobStatus +import org.dhis2.mobile.sync.model.SyncStatus import timber.log.Timber const val WAS_INITIAL_SYNC_DONE = "WasInitialSyncDone" @@ -18,35 +17,35 @@ class SyncPresenter internal constructor( private val view: SyncView, private val userManager: UserManager?, private val schedulerProvider: SchedulerProvider, - private val workManagerController: WorkManagerController, + private val backgroundJobAction: SyncBackgroundJobAction, private val preferences: PreferenceProvider, ) { private val disposable = CompositeDisposable() fun sync() { - workManagerController - .syncMetaDataForWorker(Constants.META_NOW, Constants.INITIAL_SYNC) + backgroundJobAction.launchMetadataSync(0) } - fun observeSyncProcess(): LiveData> = workManagerController.getWorkInfosForUniqueWorkLiveData(Constants.INITIAL_SYNC) + fun observeSyncProcess() = backgroundJobAction.observeMetadataJob() - fun handleSyncInfo(workInfoList: List) { + fun handleSyncInfo(workInfoList: List) { workInfoList.forEach { workInfo -> - if (workInfo.tags.contains(Constants.META_NOW)) { - handleMetaState(workInfo.state, workInfo.outputData.getString(METADATA_MESSAGE)) + if (workInfo.tags.contains(METADATA_SYNC_NOW)) { + handleMetaState(workInfo.status, workInfo.message) } } } private fun handleMetaState( - state: WorkInfo.State, + state: SyncStatus, message: String?, ) { when (state) { - WorkInfo.State.RUNNING -> view.setMetadataSyncStarted() - WorkInfo.State.SUCCEEDED -> view.setMetadataSyncSucceed() - WorkInfo.State.FAILED -> view.showMetadataFailedMessage(message) + SyncStatus.Running -> view.setMetadataSyncStarted() + SyncStatus.Succeed -> view.setMetadataSyncSucceed() + SyncStatus.Failed -> view.showMetadataFailedMessage(message) else -> { + // do nothing } } } diff --git a/app/src/main/java/org/dhis2/utils/analytics/AnalyticsHelper.kt b/app/src/main/java/org/dhis2/utils/analytics/AnalyticsHelper.kt index 3812af80ab1..3300d7e70d1 100644 --- a/app/src/main/java/org/dhis2/utils/analytics/AnalyticsHelper.kt +++ b/app/src/main/java/org/dhis2/utils/analytics/AnalyticsHelper.kt @@ -2,6 +2,7 @@ package org.dhis2.utils.analytics import org.dhis2.commons.matomo.MatomoAnalyticsController import org.dhis2.mobile.commons.reporting.AnalyticActions +import org.dhis2.utils.analytics.matomo.DEFAULT_EXTERNAL_TRACKER_NAME import javax.inject.Inject class AnalyticsHelper @@ -28,12 +29,11 @@ class AnalyticsHelper override fun updateMatomoSecondaryTracker( matomoUrl: String, matomoID: Int, - trackerName: String, ) { matomoAnalyticsController.updateDhisImplementationTracker( matomoUrl, matomoID, - trackerName, + DEFAULT_EXTERNAL_TRACKER_NAME, ) } diff --git a/app/src/test/java/org/dhis2/data/services/SyncPresenterTest.kt b/app/src/test/java/org/dhis2/data/services/SyncPresenterTest.kt index f0b474d582a..de07880d1f8 100644 --- a/app/src/test/java/org/dhis2/data/services/SyncPresenterTest.kt +++ b/app/src/test/java/org/dhis2/data/services/SyncPresenterTest.kt @@ -1,6 +1,5 @@ package org.dhis2.data.services -import io.reactivex.Completable import io.reactivex.Observable import org.dhis2.commons.bindings.program import org.dhis2.commons.prefs.PreferenceProvider @@ -11,16 +10,13 @@ import org.dhis2.data.service.SyncStatusController import org.dhis2.data.service.workManager.WorkManagerController import org.dhis2.utils.analytics.AnalyticsHelper import org.hisp.dhis.android.core.D2 -import org.hisp.dhis.android.core.arch.call.BaseD2Progress import org.hisp.dhis.android.core.arch.call.D2Progress import org.hisp.dhis.android.core.arch.call.D2ProgressStatus import org.hisp.dhis.android.core.arch.call.D2ProgressSyncStatus import org.hisp.dhis.android.core.common.State import org.hisp.dhis.android.core.event.Event -import org.hisp.dhis.android.core.fileresource.FileResourceDomainType import org.hisp.dhis.android.core.program.Program import org.hisp.dhis.android.core.program.ProgramType -import org.hisp.dhis.android.core.settings.GeneralSettings import org.hisp.dhis.android.core.settings.LimitScope import org.hisp.dhis.android.core.settings.ProgramSetting import org.hisp.dhis.android.core.settings.ProgramSettings @@ -30,12 +26,8 @@ import org.junit.Assert.assertTrue import org.junit.Before import org.junit.Test import org.mockito.Mockito -import org.mockito.kotlin.any import org.mockito.kotlin.doReturn import org.mockito.kotlin.mock -import org.mockito.kotlin.times -import org.mockito.kotlin.verify -import org.mockito.kotlin.verifyNoMoreInteractions import org.mockito.kotlin.whenever class SyncPresenterTest { @@ -125,130 +117,6 @@ class SyncPresenterTest { assertTrue(eventLimit == 200 && limitByOU && !limitByProgram) } - @Test - fun `Should configure secondary tracker if configuration exists`() { - whenever( - d2.metadataModule().download(), - ) doReturn - Observable.fromArray( - BaseD2Progress.empty(2), - ) - whenever( - d2.settingModule().generalSetting().blockingGet(), - ) doReturn - GeneralSettings - .builder() - .encryptDB(false) - .matomoID(11111) - .matomoURL("MatomoURL") - .build() - whenever( - d2.mapsModule().mapLayersDownloader().downloadMetadata(), - ) doReturn Completable.complete() - - whenever( - d2 - .fileResourceModule() - .fileResourceDownloader() - .byDomainType() - .eq(FileResourceDomainType.ICON) - .download(), - ) doReturn Observable.just(BaseD2Progress.empty(1)) - - presenter.syncMetadata { } - - verify(analyticsHelper, times(1)).updateMatomoSecondaryTracker(any(), any(), any()) - } - - @Test - fun `Should not configure secondary tracker if matomo settings is missing`() { - whenever( - d2.metadataModule().download(), - ) doReturn - Observable.fromArray( - BaseD2Progress.empty(2), - ) - whenever( - d2.settingModule().generalSetting().blockingGet(), - ) doReturn - GeneralSettings - .builder() - .encryptDB(false) - .build() - whenever( - d2.mapsModule().mapLayersDownloader().downloadMetadata(), - ) doReturn Completable.complete() - whenever( - d2 - .fileResourceModule() - .fileResourceDownloader() - .byDomainType() - .eq(FileResourceDomainType.ICON) - .download(), - ) doReturn Observable.just(BaseD2Progress.empty(1)) - presenter.syncMetadata { } - - verifyNoMoreInteractions(analyticsHelper) - } - - @Test - fun `Should not configure secondary tracker if no configuration exists`() { - whenever( - d2.metadataModule().download(), - ) doReturn - Observable.fromArray( - BaseD2Progress.empty(2), - ) - whenever( - d2.settingModule().generalSetting().blockingGet(), - ) doReturn null - whenever( - d2.mapsModule().mapLayersDownloader().downloadMetadata(), - ) doReturn Completable.complete() - whenever( - d2.mapsModule().mapLayersDownloader().downloadMetadata(), - ) doReturn Completable.complete() - whenever( - d2 - .fileResourceModule() - .fileResourceDownloader() - .byDomainType() - .eq(FileResourceDomainType.ICON) - .download(), - ) doReturn Observable.just(BaseD2Progress.empty(1)) - presenter.syncMetadata { } - - verify(analyticsHelper, times(0)).updateMatomoSecondaryTracker(any(), any(), any()) - } - - @Test - fun `Should clear secondary tracker`() { - whenever( - d2.metadataModule().download(), - ) doReturn - Observable.fromArray( - BaseD2Progress.empty(2), - ) - whenever( - d2.settingModule().generalSetting().blockingGet(), - ) doReturn null - whenever( - d2.mapsModule().mapLayersDownloader().downloadMetadata(), - ) doReturn Completable.complete() - whenever( - d2 - .fileResourceModule() - .fileResourceDownloader() - .byDomainType() - .eq(FileResourceDomainType.ICON) - .download(), - ) doReturn Observable.just(BaseD2Progress.empty(1)) - presenter.syncMetadata { } - - verify(analyticsHelper, times(0)).updateMatomoSecondaryTracker(any(), any(), any()) - verify(analyticsHelper).clearMatomoSecondaryTracker() - } - @Test fun `Should return successfully SYNC if tei enrollment and events are ok`() { whenever( diff --git a/app/src/test/java/org/dhis2/usescases/settings/SyncManagerPresenterTest.kt b/app/src/test/java/org/dhis2/usescases/settings/SyncManagerPresenterTest.kt index 4d70a7d708a..21c59026565 100644 --- a/app/src/test/java/org/dhis2/usescases/settings/SyncManagerPresenterTest.kt +++ b/app/src/test/java/org/dhis2/usescases/settings/SyncManagerPresenterTest.kt @@ -39,7 +39,6 @@ import org.junit.Before import org.junit.Rule import org.junit.Test import org.mockito.kotlin.any -import org.mockito.kotlin.anyOrNull import org.mockito.kotlin.doReturn import org.mockito.kotlin.doReturnConsecutively import org.mockito.kotlin.mock @@ -223,21 +222,20 @@ class SyncManagerPresenterTest { val timeoutTest = 1 whenever( getSettingsState.invoke( - anyOrNull(), - any(), - any(), any(), ), ) doReturnConsecutively listOf( - mockedSettingState(), - mockedSettingState().copy( - smsSettingsViewModel = - mockedSMSViewModel().copy( - isEnabled = true, - gatewayNumber = gatewayNumberTest, - responseTimeout = timeoutTest, - ), + Result.success(mockedSettingState()), + Result.success( + mockedSettingState().copy( + smsSettingsViewModel = + mockedSMSViewModel().copy( + isEnabled = true, + gatewayNumber = gatewayNumberTest, + responseTimeout = timeoutTest, + ), + ), ), ) @@ -254,7 +252,7 @@ class SyncManagerPresenterTest { awaitItem() presenter.enableSmsModule(true, gatewayNumberTest, timeoutTest) awaitItem() - verify(getSettingsState, times(2)).invoke(anyOrNull(), any(), any(), any()) + verify(getSettingsState, times(2)).invoke(any()) } } @@ -262,13 +260,8 @@ class SyncManagerPresenterTest { fun `Should not save gateway if validation fails`() = runTest { whenever( - getSettingsState.invoke( - anyOrNull(), - any(), - any(), - any(), - ), - ) doReturn mockedSettingState() + getSettingsState.invoke(any()), + ) doReturn Result.success(mockedSettingState()) val gatewayNumberTest = "+111" whenever( @@ -310,13 +303,8 @@ class SyncManagerPresenterTest { runTest { val smsResultSender = "test" whenever( - getSettingsState.invoke( - anyOrNull(), - any(), - any(), - any(), - ), - ) doReturn mockedSettingState() + getSettingsState.invoke(any()), + ) doReturn Result.success(mockedSettingState()) whenever(updateSmsResponse(any())) doReturn UpdateSmsResponse.UpdateSmsResponseResult.ValidationError( GatewayValidator.GatewayValidationResult.Invalid, @@ -364,17 +352,14 @@ class SyncManagerPresenterTest { fun `Should load data when setting manual trigger`() = runTest { whenever( - getSettingsState.invoke( - anyOrNull(), - any(), - any(), - any(), - ), + getSettingsState.invoke(any()), ) doReturnConsecutively listOf( - mockedSettingState(), - mockedSettingState().copy( - dataSettingsViewModel = mockedDataViewModel().copy(dataSyncPeriod = 0), + Result.success(mockedSettingState()), + Result.success( + mockedSettingState().copy( + dataSettingsViewModel = mockedDataViewModel().copy(dataSyncPeriod = 0), + ), ), ) @@ -402,13 +387,8 @@ class SyncManagerPresenterTest { fun `Should open clicked item`() = runTest { whenever( - getSettingsState.invoke( - anyOrNull(), - any(), - any(), - any(), - ), - ) doReturn mockedSettingState() + getSettingsState.invoke(any()), + ) doReturn Result.success(mockedSettingState()) presenter.settingsState.test { awaitItem() @@ -483,13 +463,8 @@ class SyncManagerPresenterTest { fun shouldUpdateSyncStatus() = runTest { whenever( - getSettingsState.invoke( - anyOrNull(), - any(), - any(), - any(), - ), - ) doReturn mockedSettingState() + getSettingsState.invoke(any()), + ) doReturn Result.success(mockedSettingState()) val dataSyncStartedProgress = LaunchSync.SyncStatusProgress( diff --git a/app/src/test/java/org/dhis2/usescases/settings/domain/LaunchSyncTest.kt b/app/src/test/java/org/dhis2/usescases/settings/domain/LaunchSyncTest.kt index 750be9ec62f..3efadfffb87 100644 --- a/app/src/test/java/org/dhis2/usescases/settings/domain/LaunchSyncTest.kt +++ b/app/src/test/java/org/dhis2/usescases/settings/domain/LaunchSyncTest.kt @@ -8,6 +8,7 @@ import androidx.work.WorkInfo import app.cash.turbine.test import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.test.UnconfinedTestDispatcher import kotlinx.coroutines.test.resetMain import kotlinx.coroutines.test.runTest @@ -17,6 +18,9 @@ import org.dhis2.commons.prefs.PreferenceProvider import org.dhis2.data.service.workManager.WorkManagerController import org.dhis2.data.service.workManager.WorkerItem import org.dhis2.data.service.workManager.WorkerType +import org.dhis2.mobile.sync.data.SyncBackgroundJobAction +import org.dhis2.mobile.sync.model.SyncJobStatus +import org.dhis2.mobile.sync.model.SyncStatus import org.dhis2.utils.analytics.AnalyticsHelper import org.junit.After import org.junit.Assert.assertEquals @@ -43,16 +47,18 @@ class LaunchSyncTest { private val preferenceProvider: PreferenceProvider = mock() private val analyticsHelper: AnalyticsHelper = mock() - private val mockedMetadataWorkInfo = MutableLiveData>() + private val mockedMetadataWorkInfo = MutableStateFlow>(emptyList()) private val mockedDataWorkInfo = MutableLiveData>() + private val syncBackgroundJobAction: SyncBackgroundJobAction = mock() @Before fun setUp() { Dispatchers.setMain(testingDispatcher) - whenever(workManagerController.getWorkInfosByTagLiveData(Constants.META_NOW)) doReturn mockedMetadataWorkInfo + whenever(syncBackgroundJobAction.observeMetadataJob()) doReturn mockedMetadataWorkInfo whenever(workManagerController.getWorkInfosByTagLiveData(Constants.DATA_NOW)) doReturn mockedDataWorkInfo launchSync = LaunchSync( + syncBackgroundJobAction = syncBackgroundJobAction, workManagerController = workManagerController, preferenceProvider = preferenceProvider, analyticsHelper = analyticsHelper, @@ -67,17 +73,8 @@ class LaunchSyncTest { @Test fun shouldStartSyncMetadata() = runTest { - val expectedWorkerItem = - WorkerItem( - Constants.META_NOW, - WorkerType.METADATA, - null, - null, - ExistingWorkPolicy.KEEP, - null, - ) launchSync(LaunchSync.SyncAction.SyncMetadata) - verify(workManagerController, times(1)).syncDataForWorker(expectedWorkerItem) + verify(syncBackgroundJobAction, times(1)).launchMetadataSync(0) } @Test @@ -119,19 +116,9 @@ class LaunchSyncTest { fun shouldUpdateSyncMetadataPeriod() = runTest { val newPeriod = 13 - val expectedWorkerItem = - WorkerItem( - Constants.META, - WorkerType.METADATA, - newPeriod.toLong(), - null, - null, - ExistingPeriodicWorkPolicy.REPLACE, - ) launchSync(LaunchSync.SyncAction.UpdateSyncMetadataPeriod(newPeriod)) verify(preferenceProvider, times(1)).setValue(Constants.TIME_META, newPeriod) - verify(workManagerController, times(1)).cancelUniqueWork(Constants.META) - verify(workManagerController, times(1)).enqueuePeriodicWork(expectedWorkerItem) + verify(syncBackgroundJobAction, times(1)).launchMetadataSync(newPeriod.toLong()) } @Test @@ -147,30 +134,31 @@ class LaunchSyncTest { runTest { launchSync(LaunchSync.SyncAction.UpdateSyncMetadataPeriod(0)) verify(preferenceProvider, times(1)).setValue(Constants.TIME_META, 0) - verify(workManagerController, times(1)).cancelUniqueWork(Constants.META) + verify(syncBackgroundJobAction, times(1)).cancelMetadataSync() } @Test fun shouldUpdateProgressStatus() = runTest { val startedMetadataWorkInfo = - mock { - on { state } doReturn WorkInfo.State.RUNNING + mock { + on { status } doReturn SyncStatus.Running } val startedDataWorkInfo = mock { on { state } doReturn WorkInfo.State.RUNNING } val finishedMetadataWorkInfo = - mock { - on { state } doReturn WorkInfo.State.SUCCEEDED + mock { + on { status } doReturn SyncStatus.Succeed } val finishedDataWorkInfo = mock { on { state } doReturn WorkInfo.State.SUCCEEDED } launchSync.syncWorkInfo.test { - mockedMetadataWorkInfo.postValue(listOf(startedMetadataWorkInfo)) + awaitItem() + mockedMetadataWorkInfo.emit(listOf(startedMetadataWorkInfo)) assertState(awaitItem(), LaunchSync.SyncStatus.InProgress, LaunchSync.SyncStatus.None) mockedDataWorkInfo.postValue(listOf(startedDataWorkInfo)) with(awaitItem()) { @@ -182,7 +170,7 @@ class LaunchSyncTest { assertFalse(this.hasSyncFinished(metadataWasRunning = true, dataWasRunning = false)) } - mockedMetadataWorkInfo.postValue(listOf(finishedMetadataWorkInfo)) + mockedMetadataWorkInfo.emit(listOf(finishedMetadataWorkInfo)) with(awaitItem()) { assertState( this, diff --git a/app/src/test/java/org/dhis2/usescases/sync/SyncPresenterTest.kt b/app/src/test/java/org/dhis2/usescases/sync/SyncPresenterTest.kt index 07b6c765d3b..c54d0634dd2 100644 --- a/app/src/test/java/org/dhis2/usescases/sync/SyncPresenterTest.kt +++ b/app/src/test/java/org/dhis2/usescases/sync/SyncPresenterTest.kt @@ -1,17 +1,15 @@ package org.dhis2.usescases.sync -import androidx.work.Data -import androidx.work.WorkInfo import io.reactivex.Completable import io.reactivex.Single -import org.dhis2.commons.Constants import org.dhis2.commons.prefs.Preference import org.dhis2.commons.prefs.PreferenceProvider import org.dhis2.commons.schedulers.SchedulerProvider import org.dhis2.data.schedulers.TrampolineSchedulerProvider import org.dhis2.data.server.UserManager -import org.dhis2.data.service.METADATA_MESSAGE -import org.dhis2.data.service.workManager.WorkManagerController +import org.dhis2.mobile.sync.data.SyncBackgroundJobAction +import org.dhis2.mobile.sync.model.SyncJobStatus +import org.dhis2.mobile.sync.model.SyncStatus import org.junit.Before import org.junit.Test import org.mockito.Mockito @@ -20,7 +18,6 @@ import org.mockito.kotlin.mock import org.mockito.kotlin.times import org.mockito.kotlin.verify import org.mockito.kotlin.whenever -import java.util.UUID class SyncPresenterTest { lateinit var presenter: SyncPresenter @@ -28,9 +25,10 @@ class SyncPresenterTest { private val userManager: UserManager = Mockito.mock(UserManager::class.java, Mockito.RETURNS_DEEP_STUBS) private val schedulerProvider: SchedulerProvider = TrampolineSchedulerProvider() - private val workManagerController: WorkManagerController = mock() private val preferences: PreferenceProvider = mock() + private val backgroundJobAction: SyncBackgroundJobAction = mock() + @Before fun setUp() { presenter = @@ -38,7 +36,7 @@ class SyncPresenterTest { view, userManager, schedulerProvider, - workManagerController, + backgroundJobAction, preferences, ) } @@ -46,35 +44,31 @@ class SyncPresenterTest { @Test fun `Should start initial sync`() { presenter.sync() - verify(workManagerController, times(1)).syncMetaDataForWorker( - Constants.META_NOW, - Constants.INITIAL_SYNC, - ) + verify(backgroundJobAction, times(1)).launchMetadataSync(0) } @Test fun `Should return work info live data`() { presenter.observeSyncProcess() - verify(workManagerController, times(1)) - .getWorkInfosForUniqueWorkLiveData(Constants.INITIAL_SYNC) + verify(backgroundJobAction, times(1)).observeMetadataJob() } @Test fun `Should set metadata sync started`() { - presenter.handleSyncInfo(arrayListOf(metaWorkInfo(WorkInfo.State.RUNNING))) + presenter.handleSyncInfo(arrayListOf(metaSyncJobStatus(SyncStatus.Running))) verify(view, times(1)).setMetadataSyncStarted() } @Test fun `Should set metadata sync succeeded`() { - presenter.handleSyncInfo(arrayListOf(metaWorkInfo(WorkInfo.State.SUCCEEDED))) + presenter.handleSyncInfo(arrayListOf(metaSyncJobStatus(SyncStatus.Succeed))) verify(view, times(1)).setMetadataSyncSucceed() } @Test fun `Should show metadata sync error message`() { val message = "Error message" - presenter.handleSyncInfo(arrayListOf(metaWorkInfo(WorkInfo.State.FAILED, message))) + presenter.handleSyncInfo(arrayListOf(metaSyncJobStatus(SyncStatus.Failed, message))) verify(view, times(1)).showMetadataFailedMessage(message) } @@ -97,17 +91,12 @@ class SyncPresenterTest { verify(view, times(1)).goToLogin() } - private fun metaWorkInfo( - state: WorkInfo.State, + private fun metaSyncJobStatus( + state: SyncStatus, message: String? = null, - ): WorkInfo = - WorkInfo( - id = UUID.randomUUID(), - state = state, - outputData = Data.Builder().apply { putString(METADATA_MESSAGE, message) }.build(), - tags = setOf(Constants.META_NOW), - progress = Data.EMPTY, - runAttemptCount = 0, - generation = 0, - ) + ) = SyncJobStatus( + status = state, + message = message, + tags = listOf("METADATA_SYNC_NOW"), + ) } diff --git a/commonskmm/src/androidMain/kotlin/org/dhis2/mobile/commons/di/CommonsModule.android.kt b/commonskmm/src/androidMain/kotlin/org/dhis2/mobile/commons/di/CommonsModule.android.kt index 5f84b93b638..46e9edc6b33 100644 --- a/commonskmm/src/androidMain/kotlin/org/dhis2/mobile/commons/di/CommonsModule.android.kt +++ b/commonskmm/src/androidMain/kotlin/org/dhis2/mobile/commons/di/CommonsModule.android.kt @@ -14,6 +14,8 @@ import org.dhis2.mobile.commons.files.FileHandler import org.dhis2.mobile.commons.files.FileHandlerImpl import org.dhis2.mobile.commons.network.NetworkStatusProvider import org.dhis2.mobile.commons.network.NetworkStatusProviderImpl +import org.dhis2.mobile.commons.notifications.NotificationManager +import org.dhis2.mobile.commons.notifications.NotificationManagerImpl import org.dhis2.mobile.commons.providers.PreferenceProvider import org.dhis2.mobile.commons.providers.PreferenceProviderImpl import org.dhis2.mobile.commons.reporting.CrashReportController @@ -50,6 +52,10 @@ actual val commonsModule: Module PreferenceProviderImpl(get()) } + single { + NotificationManagerImpl(get()) + } + factory { D2ErrorMessageProviderImpl() } diff --git a/commonskmm/src/androidMain/kotlin/org/dhis2/mobile/commons/notifications/NotificationManagerImpl.kt b/commonskmm/src/androidMain/kotlin/org/dhis2/mobile/commons/notifications/NotificationManagerImpl.kt new file mode 100644 index 00000000000..aacb93b5319 --- /dev/null +++ b/commonskmm/src/androidMain/kotlin/org/dhis2/mobile/commons/notifications/NotificationManagerImpl.kt @@ -0,0 +1,192 @@ +package org.dhis2.mobile.commons.notifications + +import android.Manifest +import android.app.NotificationChannel +import android.content.Context +import android.content.pm.PackageManager +import android.content.pm.ServiceInfo +import android.os.Build +import androidx.annotation.RequiresApi +import androidx.core.app.NotificationCompat +import androidx.core.app.NotificationCompat.FOREGROUND_SERVICE_IMMEDIATE +import androidx.work.ForegroundInfo + +private const val SYNC_METADATA_NOTIFICATION_ID = 26061987 +private const val SYNC_METADATA_CHANNEL_ID = "sync_metadata_notification" +private const val SYNC_METADATA_CHANNEL_NAME = "sync_metadata" + +private const val SYNC_DATA_NOTIFICATION_ID = 80071986 +private const val SYNC_DATA_CHANNEL_ID = "sync_data_notification" +private const val SYNC_DATA_CHANNEL_NAME = "sync_data" + +private const val SYNC_SETTINGS_NOTIFICATION_ID = 28042023 +private const val SYNC_SETTINGS_CHANNEL_ID = "sync_settings_notification" +private const val SYNC_SETTINGS_CHANNEL_NAME = "sync_settings" + +class NotificationManagerImpl( + private val context: Context, +) : NotificationManager { + private val notificationManager = + context.getSystemService(Context.NOTIFICATION_SERVICE) as android.app.NotificationManager + + override fun getDataSyncNotification( + smallIcon: Int, + contentTitle: String, + contentText: String, + progress: Int, + ): NotificationModel { + TODO("Not yet implemented") + } + + override fun displayDataSyncNotification( + smallIcon: Int, + contentTitle: String, + contentText: String, + progress: Int, + ) { + TODO("Not yet implemented") + } + + override fun getMetadataSyncNotification( + smallIcon: Int, + contentTitle: String, + contentText: String, + progress: Int, + ) = WorkerNotificationInfo( + createForegroundInfo( + notificationId = SYNC_METADATA_NOTIFICATION_ID, + channelId = SYNC_METADATA_CHANNEL_ID, + channelName = SYNC_METADATA_CHANNEL_NAME, + smallIcon = smallIcon, + contentTitle = contentTitle, + contentText = contentText, + progress = progress, + ), + ) + + override fun displayMetadataSyncNotification( + smallIcon: Int, + contentTitle: String, + contentText: String, + progress: Int, + ) { + val foregroundInfo = + createForegroundInfo( + notificationId = SYNC_METADATA_NOTIFICATION_ID, + channelId = SYNC_METADATA_CHANNEL_ID, + channelName = SYNC_METADATA_CHANNEL_NAME, + smallIcon = smallIcon, + contentTitle = contentTitle, + contentText = contentText, + progress = progress, + ) + + notify(foregroundInfo) + } + + override fun getSyncSettingsNotificationModel( + smallIcon: Int, + contentTitle: String, + contentText: String, + ) = WorkerNotificationInfo( + createForegroundInfo( + notificationId = SYNC_SETTINGS_NOTIFICATION_ID, + channelId = SYNC_SETTINGS_CHANNEL_ID, + channelName = SYNC_SETTINGS_CHANNEL_NAME, + smallIcon = smallIcon, + contentTitle = contentTitle, + contentText = contentText, + progress = -1, + ), + ) + + override fun displaySyncSettingsNotification( + smallIcon: Int, + contentTitle: String, + contentText: String, + ) { + val foregroundInfo = + createForegroundInfo( + notificationId = SYNC_SETTINGS_NOTIFICATION_ID, + channelId = SYNC_SETTINGS_CHANNEL_ID, + channelName = SYNC_SETTINGS_CHANNEL_NAME, + smallIcon = smallIcon, + contentTitle = contentTitle, + contentText = contentText, + progress = -1, + ) + notify(foregroundInfo) + } + + override fun cancelMetadataSyncNotification() { + notificationManager.cancel(SYNC_METADATA_NOTIFICATION_ID) + } + + override fun cancelSyncSettingsNotification() { + notificationManager.cancel(SYNC_SETTINGS_NOTIFICATION_ID) + } + + private fun createForegroundInfo( + notificationId: Int, + channelId: String, + channelName: String, + smallIcon: Int, + contentTitle: String, + contentText: String, + progress: Int = 0, + ): ForegroundInfo { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + createChannel(channelId, channelName) + } + val notification = + NotificationCompat + .Builder(context, channelId) + .setSmallIcon(smallIcon) + .setContentTitle(contentTitle) + .setContentText(contentText) + .setOngoing(true) + .setOnlyAlertOnce(true) + .setForegroundServiceBehavior(FOREGROUND_SERVICE_IMMEDIATE) + .setAutoCancel(false) + .setProgress(100, progress, progress == -1) + .build() + + return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + ForegroundInfo( + notificationId, + notification, + ServiceInfo.FOREGROUND_SERVICE_TYPE_DATA_SYNC, + ) + } else { + ForegroundInfo( + notificationId, + notification, + ) + } + } + + private fun notify(foregroundInfo: ForegroundInfo) { + if ( + Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU && + context.checkSelfPermission( + Manifest.permission.POST_NOTIFICATIONS, + ) == PackageManager.PERMISSION_GRANTED + ) { + notificationManager.notify(foregroundInfo.notificationId, foregroundInfo.notification) + } + } + + @RequiresApi(Build.VERSION_CODES.O) + private fun createChannel( + channelId: String, + channelName: String, + ) { + notificationManager.createNotificationChannel( + NotificationChannel( + channelId, + channelName, + android.app.NotificationManager.IMPORTANCE_HIGH, + ), + ) + } +} diff --git a/commonskmm/src/commonMain/kotlin/org/dhis2/mobile/commons/reporting/AnalyticActions.kt b/commonskmm/src/commonMain/kotlin/org/dhis2/mobile/commons/reporting/AnalyticActions.kt index 92da4053031..3877335781e 100644 --- a/commonskmm/src/commonMain/kotlin/org/dhis2/mobile/commons/reporting/AnalyticActions.kt +++ b/commonskmm/src/commonMain/kotlin/org/dhis2/mobile/commons/reporting/AnalyticActions.kt @@ -16,7 +16,6 @@ interface AnalyticActions { fun updateMatomoSecondaryTracker( matomoUrl: String, matomoID: Int, - trackerName: String, ) fun clearMatomoSecondaryTracker() diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index a48a4721150..e3730651265 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -12816,6 +12816,20 @@ + + + + + + + + + + + diff --git a/sync/build.gradle.kts b/sync/build.gradle.kts index d8f6f2db064..4912fafc6f4 100644 --- a/sync/build.gradle.kts +++ b/sync/build.gradle.kts @@ -67,7 +67,11 @@ kotlin { } androidUnitTest.dependencies { - + implementation(kotlin("test")) + implementation(libs.junit.jupiter) + implementation(libs.test.turbine) + implementation(libs.test.kotlinCoroutines) + implementation(libs.test.mockitoKotlin) } androidInstrumentedTest.dependencies { diff --git a/sync/src/androidDeviceTest/kotlin/org/dhis2/mobile/sync/ExampleInstrumentedTest.kt b/sync/src/androidDeviceTest/kotlin/org/dhis2/mobile/sync/ExampleInstrumentedTest.kt deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/sync/src/androidHostTest/kotlin/org/dhis2/mobile/sync/ExampleUnitTest.kt b/sync/src/androidHostTest/kotlin/org/dhis2/mobile/sync/ExampleUnitTest.kt deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/AndroidSyncBackgroundJobAction.kt b/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/AndroidSyncBackgroundJobAction.kt index 159461d8dbf..cd2c78a81b2 100644 --- a/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/AndroidSyncBackgroundJobAction.kt +++ b/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/AndroidSyncBackgroundJobAction.kt @@ -1,26 +1,62 @@ package org.dhis2.mobile.sync.data import androidx.work.ExistingPeriodicWorkPolicy +import androidx.work.ExistingWorkPolicy +import androidx.work.OneTimeWorkRequest import androidx.work.PeriodicWorkRequest +import androidx.work.WorkInfo import androidx.work.WorkManager +import androidx.work.WorkQuery import androidx.work.await -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.emptyFlow +import kotlinx.coroutines.flow.map import org.dhis2.mobile.sync.model.SyncJobStatus +import org.dhis2.mobile.sync.model.SyncStatus import java.util.concurrent.TimeUnit import kotlin.time.Duration.Companion.days -private const val METADATA_SYNC = "METADATA_SYNC" -private const val METADATA_SYNC_NOW = "METADATA_SYNC_NOW" -private const val DATA_SYNC = "DATA_SYNC" -private const val DATA_SYNC_NOW = "DATA_SYNC_NOW" -private const val SYNC_SETTINGS = "SYNC_SETTINGS" +const val METADATA_SYNC = "METADATA_SYNC" +const val METADATA_SYNC_NOW = "METADATA_SYNC_NOW" +const val DATA_SYNC = "DATA_SYNC" +const val DATA_SYNC_NOW = "DATA_SYNC_NOW" +const val SYNC_SETTINGS = "SYNC_SETTINGS" -internal class AndroidSyncBackgroundJobAction( +class AndroidSyncBackgroundJobAction( private val workManager: WorkManager, ) : SyncBackgroundJobAction { override fun launchMetadataSync(syncingPeriod: Long) { - // implement later + if (syncingPeriod == 0L) { + val request = + OneTimeWorkRequest + .Builder( + workerClass = SyncMetadataWorker::class.java, + ).addTag( + METADATA_SYNC_NOW, + ).build() + workManager.enqueueUniqueWork( + uniqueWorkName = METADATA_SYNC_NOW, + existingWorkPolicy = ExistingWorkPolicy.KEEP, + request = request, + ) + } else { + val request = + PeriodicWorkRequest + .Builder( + workerClass = SyncMetadataWorker::class.java, + repeatInterval = syncingPeriod, + repeatIntervalTimeUnit = TimeUnit.SECONDS, + ).addTag( + METADATA_SYNC, + ).setInitialDelay( + syncingPeriod, + TimeUnit.SECONDS, + ).build() + + workManager.enqueueUniquePeriodicWork( + uniqueWorkName = METADATA_SYNC, + existingPeriodicWorkPolicy = ExistingPeriodicWorkPolicy.CANCEL_AND_REENQUEUE, + request = request, + ) + } } override fun launchDataSync(syncingPeriod: Long) { @@ -46,10 +82,30 @@ internal class AndroidSyncBackgroundJobAction( ) } - override fun observeMetadataJob(): Flow> { - // implement later - return emptyFlow() - } + override fun observeMetadataJob() = + workManager + .getWorkInfosFlow( + WorkQuery.fromUniqueWorkNames( + METADATA_SYNC, + METADATA_SYNC_NOW, + ), + ).map { workInfos -> + workInfos.map { workInfo -> + SyncJobStatus( + tags = workInfo.tags.toList(), + status = + when (workInfo.state) { + WorkInfo.State.ENQUEUED -> SyncStatus.Enqueue + WorkInfo.State.RUNNING -> SyncStatus.Running + WorkInfo.State.SUCCEEDED -> SyncStatus.Succeed + WorkInfo.State.FAILED -> SyncStatus.Failed + WorkInfo.State.BLOCKED -> SyncStatus.Blocked + WorkInfo.State.CANCELLED -> SyncStatus.Cancelled + }, + message = workInfo.outputData.getString(METADATA_MESSAGE), + ) + } + } override suspend fun cancelSyncSettings() { workManager.cancelUniqueWork(SYNC_SETTINGS).await() diff --git a/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/AndroidSyncRepository.kt b/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/AndroidSyncRepository.kt index eafab16e4e6..9d95846eec5 100644 --- a/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/AndroidSyncRepository.kt +++ b/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/AndroidSyncRepository.kt @@ -117,7 +117,6 @@ class AndroidSyncRepository( analyticsHelper.updateMatomoSecondaryTracker( globalSettings.matomoURL()!!, globalSettings.matomoID()!!, - "secondaryTracker", ) } } ?: analyticsHelper.clearMatomoSecondaryTracker() diff --git a/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/SyncMetadataWorker.kt b/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/SyncMetadataWorker.kt new file mode 100644 index 00000000000..5ff78101410 --- /dev/null +++ b/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/SyncMetadataWorker.kt @@ -0,0 +1,85 @@ +package org.dhis2.mobile.sync.data + +import android.content.Context +import androidx.work.CoroutineWorker +import androidx.work.Data +import androidx.work.ForegroundInfo +import androidx.work.WorkerParameters +import org.dhis2.mobile.commons.notifications.NotificationManager +import org.dhis2.mobile.commons.notifications.WorkerNotificationInfo +import org.dhis2.mobile.sync.R +import org.dhis2.mobile.sync.domain.SyncMetadata +import org.dhis2.mobile.sync.resources.Res +import org.dhis2.mobile.sync.resources.app_name +import org.dhis2.mobile.sync.resources.syncing_configuration +import org.jetbrains.compose.resources.getString +import org.koin.core.component.KoinComponent +import org.koin.core.component.inject + +const val METADATA_MESSAGE = "METADATA_MESSAGE" + +class SyncMetadataWorker( + context: Context, + workerParams: WorkerParameters, +) : CoroutineWorker(context, workerParams), + KoinComponent { + private val syncMetadata: SyncMetadata by inject() + private val notificationManager: NotificationManager by inject() + + override suspend fun doWork(): Result { + setForegroundAsync(getForegroundInfo()) + + val notificationTitle = getString(Res.string.app_name) + val notificationText = getString(Res.string.syncing_configuration) + + notificationManager.displayMetadataSyncNotification( + smallIcon = R.drawable.ic_sync, + contentTitle = notificationTitle, + contentText = notificationText, + progress = 0, + ) + + val result = + syncMetadata { progress -> + notificationManager.displayMetadataSyncNotification( + smallIcon = R.drawable.ic_sync, + contentTitle = notificationTitle, + contentText = notificationText, + progress = progress, + ) + } + + notificationManager.cancelMetadataSyncNotification() + return when { + result.isSuccess -> Result.success() + else -> + Result.failure( + createOutputData( + result.exceptionOrNull()?.message ?: "Unknown error", + ), + ) + } + } + + override suspend fun getForegroundInfo(): ForegroundInfo { + val notificationModel = + notificationManager.getMetadataSyncNotification( + smallIcon = R.drawable.ic_sync, + contentTitle = getString(Res.string.app_name), + contentText = getString(Res.string.syncing_configuration), + progress = -1, + ) + val notificationInfo = + notificationModel as? WorkerNotificationInfo + ?: throw IllegalStateException( + "Expected WorkerNotificationInfo but got ${notificationModel::class.qualifiedName}", + ) + return notificationInfo.foregroundInfo + } + + private fun createOutputData(message: String) = + Data + .Builder() + .putString(METADATA_MESSAGE, message) + .build() +} diff --git a/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/di/SyncModule.android.kt b/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/di/SyncModule.android.kt index 17b950dbad1..fedff786cb3 100644 --- a/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/di/SyncModule.android.kt +++ b/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/di/SyncModule.android.kt @@ -5,6 +5,7 @@ import org.dhis2.mobile.sync.data.AndroidSyncBackgroundJobAction import org.dhis2.mobile.sync.data.AndroidSyncRepository import org.dhis2.mobile.sync.data.SyncBackgroundJobAction import org.dhis2.mobile.sync.data.SyncRepository +import org.dhis2.mobile.sync.domain.SyncMetadata import org.dhis2.mobile.sync.domain.SyncSettings import org.koin.core.module.dsl.factoryOf import org.koin.dsl.module @@ -24,5 +25,7 @@ actual val syncModule = AndroidSyncRepository(get(), get(), get(), get(), get()) } + factoryOf(::SyncMetadata) + factoryOf(::SyncSettings) } diff --git a/sync/src/androidUnitTest/kotlin/org.dhis2.mobile.sync.data/AndroidSyncRepositoryTest.kt b/sync/src/androidUnitTest/kotlin/org.dhis2.mobile.sync.data/AndroidSyncRepositoryTest.kt new file mode 100644 index 00000000000..aef0b06019f --- /dev/null +++ b/sync/src/androidUnitTest/kotlin/org.dhis2.mobile.sync.data/AndroidSyncRepositoryTest.kt @@ -0,0 +1,169 @@ +package org.dhis2.mobile.sync.data + +import io.reactivex.Completable +import io.reactivex.Observable +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.test.StandardTestDispatcher +import kotlinx.coroutines.test.resetMain +import kotlinx.coroutines.test.runTest +import kotlinx.coroutines.test.setMain +import org.dhis2.mobile.commons.coroutine.Dispatcher +import org.dhis2.mobile.commons.error.DomainErrorMapper +import org.dhis2.mobile.commons.providers.PreferenceProvider +import org.dhis2.mobile.commons.reporting.AnalyticActions +import org.hisp.dhis.android.core.D2 +import org.hisp.dhis.android.core.arch.call.BaseD2Progress +import org.hisp.dhis.android.core.fileresource.FileResourceDomainType +import org.hisp.dhis.android.core.settings.GeneralSettings +import org.junit.After +import org.junit.Before +import org.junit.Test +import org.mockito.Mockito +import org.mockito.Mockito.mock +import org.mockito.kotlin.any +import org.mockito.kotlin.doReturn +import org.mockito.kotlin.times +import org.mockito.kotlin.verify +import org.mockito.kotlin.verifyNoMoreInteractions +import org.mockito.kotlin.whenever + +class AndroidSyncRepositoryTest { + private val d2: D2 = Mockito.mock(D2::class.java, Mockito.RETURNS_DEEP_STUBS) + private val preferences: PreferenceProvider = mock() + private val analyticsHelper: AnalyticActions = mock() + private val domainErrorMapper: DomainErrorMapper = mock() + + private val testDispatcher = StandardTestDispatcher() + + val repository = + AndroidSyncRepository( + d2 = d2, + preferences = preferences, + analyticsHelper = analyticsHelper, + domainErrorMapper = domainErrorMapper, + dispatcher = + Dispatcher( + testDispatcher, + testDispatcher, + testDispatcher, + ), + ) + + @OptIn(ExperimentalCoroutinesApi::class) + @Before + fun setUp() { + Dispatchers.setMain(testDispatcher) + } + + @OptIn(ExperimentalCoroutinesApi::class) + @After + fun tearDown() { + Dispatchers.resetMain() + } + + @Test + fun `Should configure secondary tracker if configuration exists`() = + runTest { + whenever( + d2.settingModule().generalSetting().blockingGet(), + ) doReturn + GeneralSettings + .builder() + .encryptDB(false) + .matomoID(11111) + .matomoURL("MatomoURL") + .build() + whenever( + d2.mapsModule().mapLayersDownloader().downloadMetadata(), + ) doReturn Completable.complete() + + whenever( + d2 + .fileResourceModule() + .fileResourceDownloader() + .byDomainType() + .eq(FileResourceDomainType.ICON) + .download(), + ) doReturn Observable.just(BaseD2Progress.empty(1)) + + repository.updateProjectAnalytics() + + verify(analyticsHelper, times(1)).updateMatomoSecondaryTracker(any(), any()) + } + + @Test + fun `Should not configure secondary tracker if matomo settings is missing`() = + runTest { + whenever( + d2.settingModule().generalSetting().blockingGet(), + ) doReturn + GeneralSettings + .builder() + .encryptDB(false) + .build() + whenever( + d2.mapsModule().mapLayersDownloader().downloadMetadata(), + ) doReturn Completable.complete() + whenever( + d2 + .fileResourceModule() + .fileResourceDownloader() + .byDomainType() + .eq(FileResourceDomainType.ICON) + .download(), + ) doReturn Observable.just(BaseD2Progress.empty(1)) + + repository.updateProjectAnalytics() + + verifyNoMoreInteractions(analyticsHelper) + } + + @Test + fun `Should not configure secondary tracker if no configuration exists`() = + runTest { + whenever( + d2.settingModule().generalSetting().blockingGet(), + ) doReturn null + whenever( + d2.mapsModule().mapLayersDownloader().downloadMetadata(), + ) doReturn Completable.complete() + whenever( + d2.mapsModule().mapLayersDownloader().downloadMetadata(), + ) doReturn Completable.complete() + whenever( + d2 + .fileResourceModule() + .fileResourceDownloader() + .byDomainType() + .eq(FileResourceDomainType.ICON) + .download(), + ) doReturn Observable.just(BaseD2Progress.empty(1)) + repository.updateProjectAnalytics() + + verify(analyticsHelper, times(0)).updateMatomoSecondaryTracker(any(), any()) + } + + @Test + fun `Should clear secondary tracker`() = + runTest { + whenever( + d2.settingModule().generalSetting().blockingGet(), + ) doReturn null + whenever( + d2.mapsModule().mapLayersDownloader().downloadMetadata(), + ) doReturn Completable.complete() + whenever( + d2 + .fileResourceModule() + .fileResourceDownloader() + .byDomainType() + .eq(FileResourceDomainType.ICON) + .download(), + ) doReturn Observable.just(BaseD2Progress.empty(1)) + repository.updateProjectAnalytics() + + verify(analyticsHelper, times(0)).updateMatomoSecondaryTracker(any(), any()) + verify(analyticsHelper).clearMatomoSecondaryTracker() + } +} diff --git a/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/domain/SyncData.kt b/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/domain/SyncData.kt new file mode 100644 index 00000000000..31a78c2eb08 --- /dev/null +++ b/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/domain/SyncData.kt @@ -0,0 +1,17 @@ +package org.dhis2.mobile.sync.domain + +import org.dhis2.mobile.commons.domain.UseCase +import org.dhis2.mobile.sync.data.SyncBackgroundJobAction +import org.dhis2.mobile.sync.data.SyncRepository + +class SyncData( + private val repository: SyncRepository, + private val syncBackgroundJobAction: SyncBackgroundJobAction, +) : UseCase<(progress: Int) -> Unit, Unit> { + override suspend fun invoke(input: (progress: Int) -> Unit): Result = + try { + TODO("Not yet implemented") + } catch (e: Exception) { + Result.failure(e) + } +} diff --git a/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/domain/SyncMetadata.kt b/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/domain/SyncMetadata.kt new file mode 100644 index 00000000000..621243a788d --- /dev/null +++ b/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/domain/SyncMetadata.kt @@ -0,0 +1,89 @@ +package org.dhis2.mobile.sync.domain + +import org.dhis2.mobile.commons.domain.UseCase +import org.dhis2.mobile.sync.data.SyncBackgroundJobAction +import org.dhis2.mobile.sync.data.SyncRepository +import org.dhis2.mobile.sync.model.SyncPeriod + +class SyncMetadata( + private val repository: SyncRepository, + private val syncBackgroundJobAction: SyncBackgroundJobAction, +) : UseCase<(progress: Int) -> Unit, Unit> { + override suspend fun invoke(input: (progress: Int) -> Unit): Result = + try { + val initialMetadataSyncPeriod = repository.currentMetadataSyncPeriod() + val initialDataSyncPeriod = repository.currentDataSyncPeriod() + + val syncMetadataResult = + repository.syncMetadata { progress -> + val totalProgress = 30 * progress / 100 + input(totalProgress) + } + if (syncMetadataResult.isSuccess) { + repository.updateProjectAnalytics() + input(40) + repository.setUpSMS() + input(50) + repository.downloadMapMetadata() + input(60) + repository.downloadFileResources() + input(70) + repository.saveMetadataSyncState(true) + input(80) + + val finalMetadataSyncPeriod = repository.currentMetadataSyncPeriod() + val finalDataSyncPeriod = repository.currentDataSyncPeriod() + + handleMetadataPeriodChange(initialMetadataSyncPeriod, finalMetadataSyncPeriod) + input(90) + handleDataPeriodChange(initialDataSyncPeriod, finalDataSyncPeriod) + input(100) + Result.success(Unit) + } else { + repository.saveMetadataSyncState(false) + Result.failure(syncMetadataResult.exceptionOrNull()!!) + } + } catch (e: Exception) { + Result.failure(e) + } + + private suspend fun handleMetadataPeriodChange( + initialMetadataSyncPeriod: SyncPeriod, + finalMetadataSyncPeriod: SyncPeriod, + ) { + val metadataSyncPeriodChanged = + initialMetadataSyncPeriod != finalMetadataSyncPeriod + val metadataSyncPeriodChangedToManual = + initialMetadataSyncPeriod !is SyncPeriod.Manual && finalMetadataSyncPeriod is SyncPeriod.Manual + + when { + metadataSyncPeriodChangedToManual -> { + syncBackgroundJobAction.cancelMetadataSync() + syncBackgroundJobAction.launchSyncSettings() + } + + metadataSyncPeriodChanged -> { + syncBackgroundJobAction.launchMetadataSync(finalMetadataSyncPeriod.toSeconds()) + } + } + } + + private suspend fun handleDataPeriodChange( + initialDataSyncPeriod: SyncPeriod, + finalDataSyncPeriod: SyncPeriod, + ) { + val dataSyncPeriodChanged = initialDataSyncPeriod != finalDataSyncPeriod + val dataSyncPeriodChangedToManual = + initialDataSyncPeriod !is SyncPeriod.Manual && finalDataSyncPeriod is SyncPeriod.Manual + + when { + dataSyncPeriodChangedToManual -> { + syncBackgroundJobAction.cancelDataSync() + } + + dataSyncPeriodChanged -> { + syncBackgroundJobAction.launchDataSync(finalDataSyncPeriod.toSeconds()) + } + } + } +} diff --git a/sync/src/commonTest/kotlin/org/dhis2/mobile/sync/domain/SyncMetadataTest.kt b/sync/src/commonTest/kotlin/org/dhis2/mobile/sync/domain/SyncMetadataTest.kt new file mode 100644 index 00000000000..fd2c1e0ddc7 --- /dev/null +++ b/sync/src/commonTest/kotlin/org/dhis2/mobile/sync/domain/SyncMetadataTest.kt @@ -0,0 +1,115 @@ +package org.dhis2.mobile.sync.domain + +import kotlinx.coroutines.runBlocking +import org.dhis2.mobile.sync.data.SyncBackgroundJobAction +import org.dhis2.mobile.sync.data.SyncRepository +import org.dhis2.mobile.sync.model.SyncPeriod +import org.junit.Test +import org.mockito.kotlin.any +import org.mockito.kotlin.doReturn +import org.mockito.kotlin.mock +import org.mockito.kotlin.never +import org.mockito.kotlin.verify +import org.mockito.kotlin.whenever + +class SyncMetadataTest { + private val repository: SyncRepository = mock() + private val syncBackgroundJobAction: SyncBackgroundJobAction = mock() + + private val syncMetadata = + SyncMetadata( + repository, + syncBackgroundJobAction, + ) + + @Test + fun `Should not trigger background jobs if sync periods do not change`() = + runBlocking { + whenever(repository.currentMetadataSyncPeriod()) doReturn SyncPeriod.Manual + whenever(repository.currentDataSyncPeriod()) doReturn SyncPeriod.Manual + whenever(repository.syncMetadata(any())) doReturn Result.success(Unit) + + syncMetadata.invoke { } + + verify(syncBackgroundJobAction, never()).launchMetadataSync(any()) + verify(syncBackgroundJobAction, never()).cancelMetadataSync() + verify(syncBackgroundJobAction, never()).launchDataSync(any()) + verify(syncBackgroundJobAction, never()).cancelDataSync() + } + + @Test + fun `Should cancel metadata sync if period changes to manual`() = + runBlocking { + whenever(repository.currentMetadataSyncPeriod()).thenReturn( + SyncPeriod.Every24Hour, + SyncPeriod.Manual, + ) + whenever(repository.currentDataSyncPeriod()) doReturn SyncPeriod.Manual + whenever(repository.syncMetadata(any())) doReturn Result.success(Unit) + + syncMetadata.invoke { } + + verify(syncBackgroundJobAction).cancelMetadataSync() + verify(syncBackgroundJobAction).launchSyncSettings() + } + + @Test + fun `Should re-launch metadata sync if period changes`() = + runBlocking { + whenever(repository.currentMetadataSyncPeriod()).thenReturn( + SyncPeriod.Every24Hour, + SyncPeriod.Every7Days, + ) + whenever(repository.currentDataSyncPeriod()) doReturn SyncPeriod.Manual + whenever(repository.syncMetadata(any())) doReturn Result.success(Unit) + + syncMetadata.invoke { } + + verify(syncBackgroundJobAction).launchMetadataSync(SyncPeriod.Every7Days.toSeconds()) + } + + @Test + fun `Should cancel data sync if period changes to manual`() = + runBlocking { + whenever(repository.currentMetadataSyncPeriod()) doReturn SyncPeriod.Manual + whenever(repository.currentDataSyncPeriod()).thenReturn( + SyncPeriod.Every24Hour, + SyncPeriod.Manual, + ) + whenever(repository.syncMetadata(any())) doReturn Result.success(Unit) + + syncMetadata.invoke { } + + verify(syncBackgroundJobAction).cancelDataSync() + } + + @Test + fun `Should re-launch data sync if period changes`() = + runBlocking { + whenever(repository.currentMetadataSyncPeriod()) doReturn SyncPeriod.Manual + whenever(repository.currentDataSyncPeriod()).thenReturn( + SyncPeriod.Every24Hour, + SyncPeriod.Every7Days, + ) + whenever(repository.syncMetadata(any())) doReturn Result.success(Unit) + + syncMetadata.invoke { } + + verify(syncBackgroundJobAction).launchDataSync(SyncPeriod.Every7Days.toSeconds()) + } + + @Test + fun `Should return failure and save state when metadata sync fails`() = + runBlocking { + val exception = Exception("Sync failed") + whenever(repository.currentMetadataSyncPeriod()) doReturn SyncPeriod.Manual + whenever(repository.currentDataSyncPeriod()) doReturn SyncPeriod.Manual + whenever(repository.syncMetadata(any())) doReturn Result.failure(exception) + + val result = syncMetadata.invoke { } + + verify(repository).saveMetadataSyncState(false) + assert(result.isFailure) + assert(result.exceptionOrNull() == exception) + } +} diff --git a/sync/src/commonTest/kotlin/org/dhis2/mobile/sync/domain/SyncSettingsTest.kt b/sync/src/commonTest/kotlin/org/dhis2/mobile/sync/domain/SyncSettingsTest.kt new file mode 100644 index 00000000000..dbeff9413a3 --- /dev/null +++ b/sync/src/commonTest/kotlin/org/dhis2/mobile/sync/domain/SyncSettingsTest.kt @@ -0,0 +1,57 @@ +package org.dhis2.mobile.sync.domain + +import kotlinx.coroutines.runBlocking +import org.dhis2.mobile.commons.domain.invoke +import org.dhis2.mobile.sync.data.SyncBackgroundJobAction +import org.dhis2.mobile.sync.data.SyncRepository +import org.dhis2.mobile.sync.model.SyncPeriod +import org.junit.Test +import org.mockito.kotlin.doReturnConsecutively +import org.mockito.kotlin.mock +import org.mockito.kotlin.never +import org.mockito.kotlin.times +import org.mockito.kotlin.verify +import org.mockito.kotlin.whenever + +class SyncSettingsTest { + private val syncRepository: SyncRepository = mock() + private val syncBackgroundJobAction: SyncBackgroundJobAction = mock() + + private val syncSettings = SyncSettings(syncRepository, syncBackgroundJobAction) + + @Test + fun `Should not cancel sync settings if period does not change to manual`() = + runBlocking { + whenever(syncRepository.currentMetadataSyncPeriod()) doReturnConsecutively + listOf( + SyncPeriod.Every24Hour, + SyncPeriod.Every12Hour, + ) + + syncSettings.invoke() + + verify( + syncBackgroundJobAction, + never(), + ).launchMetadataSync(SyncPeriod.Every12Hour.toSeconds()) + verify(syncBackgroundJobAction, never()).cancelSyncSettings() + } + + @Test + fun `Should cancel sync settings if period changes from manual`() = + runBlocking { + whenever(syncRepository.currentMetadataSyncPeriod()) doReturnConsecutively + listOf( + SyncPeriod.Manual, + SyncPeriod.Every12Hour, + ) + + syncSettings.invoke() + + verify( + syncBackgroundJobAction, + times(1), + ).launchMetadataSync(SyncPeriod.Every12Hour.toSeconds()) + verify(syncBackgroundJobAction, times(1)).cancelSyncSettings() + } +} From e804222eb9ceba7a404fae1c2959466d7cc8d867 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Garc=C3=ADa?= Date: Tue, 24 Feb 2026 16:12:54 +0100 Subject: [PATCH 065/114] feat: [ANDROAPP-7129] Update to Rule Engine 3.6.0, apply sort order for events (#4658) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update Rule-Engine version 3.6.0 * Apply sort order when fetching events * Remove duplicated optIn label --------- Co-authored-by: Andrés Miguel Rubio --- .../dhis2/mobileProgramRules/RuleConstants.kt | 5 + .../RuleEngineExtensions.kt | 50 +++-- .../mobileProgramRules/RuleEngineHelper.kt | 2 +- .../mobileProgramRules/RulesRepository.kt | 71 ++---- .../RuleEngineExtensionsTest.kt | 6 +- .../RuleEngineHelperTest.kt | 38 +++- .../mobileProgramRules/RulesRepositoryTest.kt | 41 ++-- gradle/libs.versions.toml | 4 +- gradle/verification-metadata.xml | 202 +++++++++++++++++- .../android/rtsm/services/StockManagerImpl.kt | 3 +- .../rules/RuleValidationHelperImpl.kt | 16 +- .../android/rtsm/utils/RuleEngineHelper.kt | 3 +- .../android/rtsm/services/ProgramRuleTests.kt | 59 +++-- 13 files changed, 379 insertions(+), 121 deletions(-) create mode 100644 dhis2-mobile-program-rules/src/main/java/org/dhis2/mobileProgramRules/RuleConstants.kt diff --git a/dhis2-mobile-program-rules/src/main/java/org/dhis2/mobileProgramRules/RuleConstants.kt b/dhis2-mobile-program-rules/src/main/java/org/dhis2/mobileProgramRules/RuleConstants.kt new file mode 100644 index 00000000000..43e5c34f347 --- /dev/null +++ b/dhis2-mobile-program-rules/src/main/java/org/dhis2/mobileProgramRules/RuleConstants.kt @@ -0,0 +1,5 @@ +package org.dhis2.mobileProgramRules + +object RuleConstants { + const val LEGENDSET_LABEL = "legendSet" +} diff --git a/dhis2-mobile-program-rules/src/main/java/org/dhis2/mobileProgramRules/RuleEngineExtensions.kt b/dhis2-mobile-program-rules/src/main/java/org/dhis2/mobileProgramRules/RuleEngineExtensions.kt index 76d31368433..8b03888f94e 100644 --- a/dhis2-mobile-program-rules/src/main/java/org/dhis2/mobileProgramRules/RuleEngineExtensions.kt +++ b/dhis2-mobile-program-rules/src/main/java/org/dhis2/mobileProgramRules/RuleEngineExtensions.kt @@ -1,12 +1,9 @@ package org.dhis2.mobileProgramRules -import kotlinx.datetime.Instant -import kotlinx.datetime.LocalDateTime -import kotlinx.datetime.LocalTime import kotlinx.datetime.TimeZone -import kotlinx.datetime.toDeprecatedInstant -import kotlinx.datetime.toInstant +import kotlinx.datetime.number import kotlinx.datetime.toLocalDateTime +import org.dhis2.mobileProgramRules.RuleConstants.LEGENDSET_LABEL import org.hisp.dhis.android.core.D2 import org.hisp.dhis.android.core.common.ValueType import org.hisp.dhis.android.core.dataelement.DataElementCollectionRepository @@ -25,6 +22,8 @@ import org.hisp.dhis.rules.models.Rule import org.hisp.dhis.rules.models.RuleAction import org.hisp.dhis.rules.models.RuleAttributeValue import org.hisp.dhis.rules.models.RuleDataValue +import org.hisp.dhis.rules.models.RuleInstant +import org.hisp.dhis.rules.models.RuleLocalDate import org.hisp.dhis.rules.models.RuleValueType import org.hisp.dhis.rules.models.RuleVariable import org.hisp.dhis.rules.models.RuleVariableAttribute @@ -36,22 +35,28 @@ import org.hisp.dhis.rules.models.RuleVariablePreviousEvent import timber.log.Timber import java.util.Date import kotlin.time.ExperimentalTime +import kotlin.time.Instant -fun Date.toRuleEngineInstant() = Instant.fromEpochMilliseconds(this.time) - -fun Date.toRuleEngineLocalDate() = toRuleEngineInstant().toLocalDateTime(TimeZone.currentSystemDefault()).date +@OptIn(ExperimentalTime::class) +private fun Date.toKtInstant() = Instant.fromEpochMilliseconds(this.time) @OptIn(ExperimentalTime::class) -fun Date.toRuleEngineInstantWithNoTime() = - LocalDateTime(toRuleEngineLocalDate(), LocalTime(0, 0, 0, 0)) - .toInstant(TimeZone.currentSystemDefault()) - .toDeprecatedInstant() +private fun Date.toKtLocalDateTime() = toKtInstant().toLocalDateTime(TimeZone.currentSystemDefault()) + +fun Date.toRuleEngineInstant() = RuleInstant(this.time) + +fun Date?.toRuleEngineInstantOrNow() = this?.toRuleEngineInstant() ?: RuleInstant.now() + +fun Date.toRuleEngineLocalDate() = + this.toKtLocalDateTime().let { + RuleLocalDate(it.year, it.month.number, it.day) + } fun List.sortForRuleEngine(): List = sortedWith( compareBy( - { it.eventDate()?.toRuleEngineInstantWithNoTime() }, - { it.created() }, + { it.eventDate()?.toRuleEngineLocalDate() }, + { it.createdAtClient() ?: it.created() }, ).reversed(), ) @@ -133,6 +138,7 @@ fun ProgramRuleAction.toRuleEngineObject(): RuleAction { ).also { map -> contentToDisplay?.let { map["content"] = it } }, + priority = priority(), ) ProgramRuleActionType.DISPLAYTEXT -> @@ -144,7 +150,9 @@ fun ProgramRuleAction.toRuleEngineObject(): RuleAction { Pair("location", location() ?: "indicators"), ).also { map -> contentToDisplay?.let { map["content"] = it } + legendSet()?.let { map[LEGENDSET_LABEL] = it.uid() } }, + priority = priority(), ) ProgramRuleActionType.DISPLAYKEYVALUEPAIR -> @@ -156,7 +164,9 @@ fun ProgramRuleAction.toRuleEngineObject(): RuleAction { Pair("location", location()!!), ).also { map -> contentToDisplay?.let { map["content"] = it } + legendSet()?.let { map[LEGENDSET_LABEL] = it.uid() } }, + priority = priority(), ) ProgramRuleActionType.HIDESECTION -> @@ -168,6 +178,7 @@ fun ProgramRuleAction.toRuleEngineObject(): RuleAction { mutableMapOf( Pair("programStageSection", it.uid()), ), + priority = priority(), ) } ?: RuleAction( "HIDE SECTION RULE IS MISSING PROGRAM STAGE SECTION", @@ -183,6 +194,7 @@ fun ProgramRuleAction.toRuleEngineObject(): RuleAction { mutableMapOf( Pair("programStage", it.uid()), ), + priority = priority(), ) } ?: RuleAction( "HIDE STAGE RULE IS MISSING PROGRAM STAGE", @@ -213,6 +225,7 @@ fun ProgramRuleAction.toRuleEngineObject(): RuleAction { ) } ?: emptyMap() }, + priority = priority(), ) } } @@ -227,6 +240,7 @@ fun ProgramRuleAction.toRuleEngineObject(): RuleAction { ).also { map -> contentToDisplay?.let { map["content"] = it } }, + priority = priority(), ) ProgramRuleActionType.WARNINGONCOMPLETE -> @@ -239,6 +253,7 @@ fun ProgramRuleAction.toRuleEngineObject(): RuleAction { ).also { map -> contentToDisplay?.let { map["content"] = it } }, + priority = priority(), ) ProgramRuleActionType.SHOWERROR -> @@ -251,6 +266,7 @@ fun ProgramRuleAction.toRuleEngineObject(): RuleAction { ).also { map -> contentToDisplay?.let { map["content"] = it } }, + priority = priority(), ) ProgramRuleActionType.ERRORONCOMPLETE -> @@ -263,6 +279,7 @@ fun ProgramRuleAction.toRuleEngineObject(): RuleAction { ).also { map -> contentToDisplay?.let { map["content"] = it } }, + priority = priority(), ) ProgramRuleActionType.CREATEEVENT -> @@ -276,6 +293,7 @@ fun ProgramRuleAction.toRuleEngineObject(): RuleAction { ).also { map -> contentToDisplay?.let { map["content"] = it } }, + priority = priority(), ) } ?: RuleAction( "CREATE EVENT RULE IS MISSING PROGRAM STAGE SECTION", @@ -292,6 +310,7 @@ fun ProgramRuleAction.toRuleEngineObject(): RuleAction { ).also { map -> contentToDisplay?.let { map["content"] = it } }, + priority = priority(), ) ProgramRuleActionType.HIDEOPTION -> @@ -306,6 +325,7 @@ fun ProgramRuleAction.toRuleEngineObject(): RuleAction { ).also { map -> contentToDisplay?.let { map["content"] = it } }, + priority = priority(), ) } ?: RuleAction( "HIDE OPTION RULE IS MISSING OPTION", @@ -324,6 +344,7 @@ fun ProgramRuleAction.toRuleEngineObject(): RuleAction { ).also { map -> contentToDisplay?.let { map["content"] = it } }, + priority = priority(), ) } ?: RuleAction( "SHOW OPTION GROUP RULE IS MISSING OPTION GROUP", @@ -342,6 +363,7 @@ fun ProgramRuleAction.toRuleEngineObject(): RuleAction { ).also { map -> contentToDisplay?.let { map["content"] = it } }, + priority = priority(), ) } ?: RuleAction( "HIDE OPTION GROUP RULE IS MISSING OPTION GROUP", diff --git a/dhis2-mobile-program-rules/src/main/java/org/dhis2/mobileProgramRules/RuleEngineHelper.kt b/dhis2-mobile-program-rules/src/main/java/org/dhis2/mobileProgramRules/RuleEngineHelper.kt index f992d0a131d..6777eedd337 100644 --- a/dhis2-mobile-program-rules/src/main/java/org/dhis2/mobileProgramRules/RuleEngineHelper.kt +++ b/dhis2-mobile-program-rules/src/main/java/org/dhis2/mobileProgramRules/RuleEngineHelper.kt @@ -84,7 +84,7 @@ class RuleEngineHelper( RuleEngineContext( rules = rules.await(), ruleVariables = ruleVariables.await(), - supplementaryData = supplData.await(), + ruleSupplementaryData = supplData.await(), constantsValues = constants.await(), ), ruleEnrollment = ruleEnrollment.await(), diff --git a/dhis2-mobile-program-rules/src/main/java/org/dhis2/mobileProgramRules/RulesRepository.kt b/dhis2-mobile-program-rules/src/main/java/org/dhis2/mobileProgramRules/RulesRepository.kt index 8971a8591a4..ad8d50388a1 100644 --- a/dhis2-mobile-program-rules/src/main/java/org/dhis2/mobileProgramRules/RulesRepository.kt +++ b/dhis2-mobile-program-rules/src/main/java/org/dhis2/mobileProgramRules/RulesRepository.kt @@ -1,22 +1,17 @@ package org.dhis2.mobileProgramRules -import android.os.Build import android.text.TextUtils.isEmpty -import kotlinx.datetime.Clock -import kotlinx.datetime.Instant -import kotlinx.datetime.TimeZone -import kotlinx.datetime.toLocalDateTime import org.dhis2.commons.bindings.enrollment import org.dhis2.commons.bindings.event import org.dhis2.commons.bindings.organisationUnit import org.dhis2.commons.bindings.program import org.dhis2.commons.bindings.programStage import org.hisp.dhis.android.core.D2 -import org.hisp.dhis.android.core.arch.repositories.scope.RepositoryScope import org.hisp.dhis.android.core.enrollment.Enrollment import org.hisp.dhis.android.core.event.Event import org.hisp.dhis.android.core.event.EventStatus import org.hisp.dhis.android.core.program.ProgramRule +import org.hisp.dhis.rules.api.RuleSupplementaryData import org.hisp.dhis.rules.models.Rule import org.hisp.dhis.rules.models.RuleAttributeValue import org.hisp.dhis.rules.models.RuleDataValue @@ -33,8 +28,8 @@ class RulesRepository( ) { // ORG UNIT GROUPS // USER ROLES - suspend fun supplementaryData(orgUnitUid: String): Map> { - val supData = HashMap>() + suspend fun supplementaryData(orgUnitUid: String): RuleSupplementaryData { + val ouGroupMap = HashMap>() d2 .organisationUnitModule() @@ -44,18 +39,19 @@ class RulesRepository( .blockingGet() .let { orgUnit -> orgUnit?.organisationUnitGroups()?.map { - it.code()?.let { code -> supData[code] = arrayListOf(orgUnit.uid()) } - supData[it.uid()] = arrayListOf(orgUnit.uid()) + it.code()?.let { code -> ouGroupMap[code] = arrayListOf(orgUnit.uid()) } + ouGroupMap[it.uid()] = arrayListOf(orgUnit.uid()) } } val userRoleUids = d2.userModule().userRoles().blockingGetUids() val userGroupUids = d2.userModule().userGroups().blockingGetUids() - supData["USER_ROLES"] = userRoleUids - supData["USER_GROUPS"] = userGroupUids - supData["android_version"] = listOf(Build.VERSION.SDK_INT.toString()) - return supData + return RuleSupplementaryData( + userGroups = userGroupUids, + userRoles = userRoleUids, + orgUnitGroups = ouGroupMap, + ) } suspend fun rules( @@ -133,21 +129,9 @@ class RulesRepository( } else { RuleEventStatus.valueOf(event.status()!!.name) }, - eventDate = event.eventDate()!!.toRuleEngineInstant(), - dueDate = - event.dueDate()?.let { - Instant - .fromEpochMilliseconds(it.time) - .toLocalDateTime(TimeZone.currentSystemDefault()) - .date - }, - completedDate = - event.completedDate()?.let { - Instant - .fromEpochMilliseconds(it.time) - .toLocalDateTime(TimeZone.currentSystemDefault()) - .date - }, + eventDate = event.eventDate()!!.toRuleEngineLocalDate(), + dueDate = event.dueDate()?.toRuleEngineLocalDate(), + completedDate = event.completedDate()?.toRuleEngineLocalDate(), organisationUnit = event.organisationUnit()!!, organisationUnitCode = d2 @@ -157,11 +141,8 @@ class RulesRepository( event.organisationUnit(), ).blockingGet() ?.code(), - createdDate = - event - .created() - ?.let { Instant.fromEpochMilliseconds(it.time) } - ?: Clock.System.now(), + createdDate = event.created().toRuleEngineInstantOrNow(), + createdAtClientDate = event.createdAtClient()?.toRuleEngineInstant(), dataValues = event.trackedEntityDataValues()?.toRuleDataValue() ?: emptyList(), ) @@ -186,8 +167,8 @@ class RulesRepository( .byDeleted() .isFalse .withTrackedEntityDataValues() - .orderByEventDate(RepositoryScope.OrderByDirection.DESC) .blockingGet() + .sortForRuleEngine() } else { d2 .eventModule() @@ -205,8 +186,8 @@ class RulesRepository( .byDeleted() .isFalse .withTrackedEntityDataValues() - .orderByEventDate(RepositoryScope.OrderByDirection.DESC) .blockingGet() + .sortForRuleEngine() .let { list -> val currentEventIndex = list.indexOfFirst { it.uid() == eventToEvaluate.uid() } @@ -269,7 +250,7 @@ class RulesRepository( } else { RuleEventStatus.valueOf(event.status()!!.name) }, - eventDate = event.eventDate()!!.toRuleEngineInstant(), + eventDate = event.eventDate()!!.toRuleEngineLocalDate(), dueDate = event.dueDate()?.toRuleEngineLocalDate(), completedDate = event.completedDate()?.toRuleEngineLocalDate(), organisationUnit = event.organisationUnit()!!, @@ -280,11 +261,8 @@ class RulesRepository( .uid(event.organisationUnit()) .blockingGet() ?.code(), - createdDate = - event - .created() - ?.let { Instant.fromEpochMilliseconds(it.time) } - ?: Clock.System.now(), + createdDate = event.created().toRuleEngineInstantOrNow(), + createdAtClientDate = event.createdAtClient()?.toRuleEngineInstant(), dataValues = event.trackedEntityDataValues()?.toRuleDataValue() ?: emptyList(), ) @@ -415,16 +393,13 @@ class RulesRepository( programStage = event.programStage()!!, programStageName = d2.programStage(event.programStage()!!)?.name()!!, status = RuleEventStatus.valueOf(event.status()!!.name), - eventDate = event.eventDate()!!.toRuleEngineInstant(), + eventDate = event.eventDate()!!.toRuleEngineLocalDate(), dueDate = event.dueDate()?.toRuleEngineLocalDate(), completedDate = event.completedDate()?.toRuleEngineLocalDate(), organisationUnit = event.organisationUnit()!!, organisationUnitCode = d2.organisationUnit(event.organisationUnit()!!)?.code(), - createdDate = - event - .created() - ?.let { Instant.fromEpochMilliseconds(it.time) } - ?: Clock.System.now(), + createdDate = event.created().toRuleEngineInstantOrNow(), + createdAtClientDate = event.createdAtClient()?.toRuleEngineInstant(), dataValues = emptyList(), ) } diff --git a/dhis2-mobile-program-rules/src/test/java/org/dhis2/mobileProgramRules/RuleEngineExtensionsTest.kt b/dhis2-mobile-program-rules/src/test/java/org/dhis2/mobileProgramRules/RuleEngineExtensionsTest.kt index 05ec4abc3d2..b34420f0829 100644 --- a/dhis2-mobile-program-rules/src/test/java/org/dhis2/mobileProgramRules/RuleEngineExtensionsTest.kt +++ b/dhis2-mobile-program-rules/src/test/java/org/dhis2/mobileProgramRules/RuleEngineExtensionsTest.kt @@ -52,14 +52,14 @@ class RuleEngineExtensionsTest { val date1 = DateUtils.DATE_FORMAT.parse("2025-09-25T11:43:32.431") val date2 = DateUtils.DATE_FORMAT.parse("2025-09-25T00:00:00.000") - assertEquals(date1.toRuleEngineInstantWithNoTime(), date2.toRuleEngineInstantWithNoTime()) + assertEquals(date1.toRuleEngineLocalDate(), date2.toRuleEngineLocalDate()) val date3 = DateUtils.DATE_FORMAT.parse("2025-09-25T11:43:32.431") val date4 = DateUtils.DATE_FORMAT.parse("2025-09-26T00:00:00.000") assertNotEquals( - date3.toRuleEngineInstantWithNoTime(), - date4.toRuleEngineInstantWithNoTime(), + date3.toRuleEngineLocalDate(), + date4.toRuleEngineLocalDate(), ) } diff --git a/dhis2-mobile-program-rules/src/test/java/org/dhis2/mobileProgramRules/RuleEngineHelperTest.kt b/dhis2-mobile-program-rules/src/test/java/org/dhis2/mobileProgramRules/RuleEngineHelperTest.kt index 8693a982723..840b8f886bf 100644 --- a/dhis2-mobile-program-rules/src/test/java/org/dhis2/mobileProgramRules/RuleEngineHelperTest.kt +++ b/dhis2-mobile-program-rules/src/test/java/org/dhis2/mobileProgramRules/RuleEngineHelperTest.kt @@ -1,7 +1,9 @@ package org.dhis2.mobileProgramRules import kotlinx.coroutines.test.runTest +import org.dhis2.mobileProgramRules.RuleConstants.LEGENDSET_LABEL import org.hisp.dhis.android.core.program.ProgramRuleActionType +import org.hisp.dhis.rules.api.RuleSupplementaryData import org.hisp.dhis.rules.models.Rule import org.hisp.dhis.rules.models.RuleAction import org.hisp.dhis.rules.models.RuleEnrollment @@ -22,12 +24,13 @@ class RuleEngineHelperTest { data: String, actionType: String, priority: Int?, + values: Map = emptyMap(), ): Rule = Rule( condition = "true", actions = listOf( - RuleAction(data = "'$data'", type = actionType), + RuleAction(data = "'$data'", type = actionType, values = values), ), uid = data, name = "Rule 1", @@ -76,7 +79,7 @@ class RuleEngineHelperTest { whenever(rulesRepository.rules(any(), anyOrNull())) doReturn rules whenever(rulesRepository.ruleVariables(any())) doReturn emptyList() - whenever(rulesRepository.supplementaryData(any())) doReturn emptyMap() + whenever(rulesRepository.supplementaryData(any())) doReturn RuleSupplementaryData() whenever(rulesRepository.constants()) doReturn emptyMap() whenever(rulesRepository.enrollmentEvents(any())) doReturn emptyList() whenever(rulesRepository.getRuleEnrollment(any())) doReturn createEnrollment() @@ -93,4 +96,35 @@ class RuleEngineHelperTest { listOf("Rule1", "Rule4", "Rule2", "Rule3"), ) } + + @Test + fun `Should return values passed to ruleActions`() = + runTest { + val rules = + listOf( + createFeedbackRule( + data = "Rule1", + actionType = ProgramRuleActionType.DISPLAYKEYVALUEPAIR.name, + priority = 1, + values = mapOf(LEGENDSET_LABEL to "test_legend_set"), + ), + ) + + whenever(rulesRepository.rules(any(), anyOrNull())) doReturn rules + whenever(rulesRepository.ruleVariables(any())) doReturn emptyList() + whenever(rulesRepository.supplementaryData(any())) doReturn RuleSupplementaryData() + whenever(rulesRepository.constants()) doReturn emptyMap() + whenever(rulesRepository.enrollmentEvents(any())) doReturn emptyList() + whenever(rulesRepository.getRuleEnrollment(any())) doReturn createEnrollment() + whenever(rulesRepository.queryAttributeValues(any())) doReturn emptyList() + whenever(rulesRepository.enrollmentProgram(any())) doReturn Pair("program", "orgunit") + + val engineHelper = + RuleEngineHelper(EvaluationType.Enrollment("enrollment"), rulesRepository) + + val ruleEffects = engineHelper.evaluate() + + assertEquals(ruleEffects.size, 1) + assertEquals(ruleEffects.first().ruleAction.values, mapOf(LEGENDSET_LABEL to "test_legend_set")) + } } diff --git a/dhis2-mobile-program-rules/src/test/java/org/dhis2/mobileProgramRules/RulesRepositoryTest.kt b/dhis2-mobile-program-rules/src/test/java/org/dhis2/mobileProgramRules/RulesRepositoryTest.kt index 6bb1e5c5f4e..295016ffaf0 100644 --- a/dhis2-mobile-program-rules/src/test/java/org/dhis2/mobileProgramRules/RulesRepositoryTest.kt +++ b/dhis2-mobile-program-rules/src/test/java/org/dhis2/mobileProgramRules/RulesRepositoryTest.kt @@ -38,22 +38,21 @@ class RulesRepositoryTest { runBlocking { repository.supplementaryData("org_unit_test") } - assertTrue(supplData.isNotEmpty()) - assertTrue(supplData.containsKey("USER_ROLES")) - assertTrue(supplData.containsKey("USER_GROUPS")) - assertTrue(supplData.containsKey("org_unit_group_test_code")) - assertTrue(supplData.containsKey("org_unit_group_test")) - assertTrue(supplData["USER_ROLES"]?.contains("UtXToHNI0Cb") ?: false) - assertTrue(supplData["USER_ROLES"]?.contains("oPNOIj7zJ1m") ?: false) - assertTrue(supplData["USER_GROUPS"]?.contains("gVC8vCfNAx8") ?: false) - assertTrue(supplData["USER_GROUPS"]?.contains("Kk12LkEWtXp") ?: false) + assertTrue(supplData.userRoles.isNotEmpty()) + assertTrue(supplData.userGroups.isNotEmpty()) + assertTrue(supplData.orgUnitGroups.containsKey("org_unit_group_test_code")) + assertTrue(supplData.orgUnitGroups.containsKey("org_unit_group_test")) + assertTrue(supplData.userRoles.contains("UtXToHNI0Cb")) + assertTrue(supplData.userRoles.contains("oPNOIj7zJ1m")) + assertTrue(supplData.userGroups.contains("gVC8vCfNAx8")) + assertTrue(supplData.userGroups.contains("Kk12LkEWtXp")) assertTrue( - supplData + supplData.orgUnitGroups .getOrElse("org_unit_group_test") { arrayListOf() } .contains("org_unit_test"), ) assertTrue( - supplData + supplData.orgUnitGroups .getOrElse("org_unit_group_test_code") { arrayListOf() } .contains("org_unit_test"), ) @@ -77,19 +76,21 @@ class RulesRepositoryTest { repository.supplementaryData("org_unit_test") } - assertTrue(supplData.isNotEmpty()) - - assertTrue(supplData.containsKey("USER_ROLES")) - assertTrue(!supplData.containsKey("org_unit_group_test_code")) - assertTrue(supplData.containsKey("org_unit_group_test")) - assertTrue(supplData["USER_ROLES"]?.contains("UtXToHNI0Cb") ?: false) - assertTrue(supplData["USER_ROLES"]?.contains("oPNOIj7zJ1m") ?: false) + assertTrue(supplData.userRoles.isNotEmpty()) + assertTrue(!supplData.orgUnitGroups.containsKey("org_unit_group_test_code")) + assertTrue(supplData.orgUnitGroups.containsKey("org_unit_group_test")) + assertTrue(supplData.userRoles.contains("UtXToHNI0Cb")) + assertTrue(supplData.userRoles.contains("oPNOIj7zJ1m")) assertTrue( - supplData + supplData.orgUnitGroups .getOrElse("org_unit_group_test") { arrayListOf() } .contains("org_unit_test"), ) - assertTrue(supplData.getOrElse("org_unit_group_test_code") { arrayListOf() }.isEmpty()) + assertTrue( + supplData.orgUnitGroups + .getOrElse("org_unit_group_test_code") { arrayListOf() } + .isEmpty(), + ) } private fun getTestUserRoles(): List = arrayListOf("UtXToHNI0Cb", "oPNOIj7zJ1m") diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index f787f8925e8..3d29f26df63 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -12,8 +12,8 @@ dagger = '2.57.2' jacoco = '0.8.14' designSystem = "0.7.0-SNAPSHOT" dhis2sdk = "1.14.0-20260219.101444-21" -ruleEngine = "3.3.11" -expressionParser = "1.2.2" +ruleEngine = "3.6.0" +expressionParser = "1.3.1" appcompat = "1.7.1" annotation = "1.9.1" cardview = "1.0.0" diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index e3730651265..91c1498ba12 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -7088,6 +7088,9 @@ + + + @@ -7096,6 +7099,9 @@ + + + @@ -7475,6 +7481,78 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -7698,6 +7776,9 @@ + + + @@ -7751,6 +7832,9 @@ + + + @@ -7783,6 +7867,9 @@ + + + @@ -10350,6 +10437,9 @@ + + + @@ -10358,6 +10448,9 @@ + + + @@ -10366,6 +10459,9 @@ + + + @@ -10623,14 +10719,6 @@ - - - - - - - - @@ -10718,6 +10806,14 @@ + + + + + + + + @@ -10797,6 +10893,22 @@ + + + + + + + + + + + + + + + + @@ -12506,6 +12618,9 @@ + + + @@ -12538,6 +12653,9 @@ + + + @@ -12550,6 +12668,11 @@ + + + + + @@ -12594,6 +12717,16 @@ + + + + + + + + + + @@ -12645,6 +12778,14 @@ + + + + + + + + @@ -12653,6 +12794,11 @@ + + + + + @@ -12731,6 +12877,9 @@ + + + @@ -12998,6 +13147,22 @@ + + + + + + + + + + + + + + + + @@ -13115,9 +13280,15 @@ + + + + + + @@ -13399,6 +13570,9 @@ + + + @@ -13886,6 +14060,9 @@ + + + @@ -13910,6 +14087,9 @@ + + + @@ -13950,6 +14130,9 @@ + + + @@ -13974,6 +14157,9 @@ + + + diff --git a/stock-usecase/src/main/java/org/dhis2/android/rtsm/services/StockManagerImpl.kt b/stock-usecase/src/main/java/org/dhis2/android/rtsm/services/StockManagerImpl.kt index 3b15f359383..2333f7ec820 100644 --- a/stock-usecase/src/main/java/org/dhis2/android/rtsm/services/StockManagerImpl.kt +++ b/stock-usecase/src/main/java/org/dhis2/android/rtsm/services/StockManagerImpl.kt @@ -18,6 +18,7 @@ import org.dhis2.android.rtsm.utils.AttributeHelper import org.dhis2.android.rtsm.utils.ConfigUtils.getTransactionDataElement import org.dhis2.commons.bindings.distributedTo import org.dhis2.commons.bindings.stockUseCase +import org.dhis2.mobileProgramRules.sortForRuleEngine import org.hisp.dhis.android.core.D2 import org.hisp.dhis.android.core.arch.repositories.scope.RepositoryScope import org.hisp.dhis.android.core.enrollment.Enrollment @@ -143,8 +144,8 @@ class StockManagerImpl( .byDeleted() .isFalse .withTrackedEntityDataValues() - .orderByEventDate(RepositoryScope.OrderByDirection.DESC) .blockingGet() + .sortForRuleEngine() events .filter { diff --git a/stock-usecase/src/main/java/org/dhis2/android/rtsm/services/rules/RuleValidationHelperImpl.kt b/stock-usecase/src/main/java/org/dhis2/android/rtsm/services/rules/RuleValidationHelperImpl.kt index 5d2d9e75df6..ea3b5721372 100644 --- a/stock-usecase/src/main/java/org/dhis2/android/rtsm/services/rules/RuleValidationHelperImpl.kt +++ b/stock-usecase/src/main/java/org/dhis2/android/rtsm/services/rules/RuleValidationHelperImpl.kt @@ -2,8 +2,6 @@ package org.dhis2.android.rtsm.services.rules import io.reactivex.Flowable import io.reactivex.Single -import kotlinx.datetime.Clock -import kotlinx.datetime.Instant import org.apache.commons.lang3.math.NumberUtils import org.dhis2.android.rtsm.data.TransactionType import org.dhis2.android.rtsm.data.models.StockEntry @@ -15,6 +13,7 @@ import org.dhis2.commons.bindings.distributedTo import org.dhis2.commons.rules.RuleEngineContextData import org.dhis2.mobileProgramRules.toRuleDataValue import org.dhis2.mobileProgramRules.toRuleEngineInstant +import org.dhis2.mobileProgramRules.toRuleEngineInstantOrNow import org.dhis2.mobileProgramRules.toRuleEngineLocalDate import org.dhis2.mobileProgramRules.toRuleList import org.dhis2.mobileProgramRules.toRuleVariableList @@ -27,6 +26,7 @@ import org.hisp.dhis.android.core.program.ProgramRuleActionType import org.hisp.dhis.android.core.program.ProgramStage import org.hisp.dhis.android.core.usecase.stock.StockUseCase import org.hisp.dhis.rules.api.RuleEngine +import org.hisp.dhis.rules.api.RuleSupplementaryData import org.hisp.dhis.rules.models.RuleDataValue import org.hisp.dhis.rules.models.RuleEffect import org.hisp.dhis.rules.models.RuleEvent @@ -131,6 +131,7 @@ class RuleValidationHelperImpl( programStage.uid(), programStage.name()!!, RuleEventStatus.ACTIVE, + period.toRuleEngineLocalDate(), period.toRuleEngineInstant(), period.toRuleEngineInstant(), period.toRuleEngineLocalDate(), @@ -178,7 +179,7 @@ class RuleValidationHelperImpl( constantsMap } - private fun supplementaryData(): Single>> = Single.just(hashMapOf()) + private fun supplementaryData(): Single = Single.just(RuleSupplementaryData()) private fun ruleEngineData( teiUid: String, @@ -272,12 +273,9 @@ class RuleValidationHelperImpl( } else { RuleEventStatus.valueOf(event.status()!!.name) }, - eventDate = (event.eventDate() ?: Date()).toRuleEngineInstant(), - createdDate = - event - .created() - ?.let { Instant.fromEpochMilliseconds(it.time) } - ?: Clock.System.now(), + eventDate = (event.eventDate() ?: Date()).toRuleEngineLocalDate(), + createdDate = event.created().toRuleEngineInstantOrNow(), + createdAtClientDate = event.createdAtClient()?.toRuleEngineInstant(), dueDate = event.dueDate()?.toRuleEngineLocalDate(), completedDate = event.completedDate()?.toRuleEngineLocalDate(), organisationUnit = event.organisationUnit()!!, diff --git a/stock-usecase/src/main/java/org/dhis2/android/rtsm/utils/RuleEngineHelper.kt b/stock-usecase/src/main/java/org/dhis2/android/rtsm/utils/RuleEngineHelper.kt index 1cacfde8e01..81de23ba072 100644 --- a/stock-usecase/src/main/java/org/dhis2/android/rtsm/utils/RuleEngineHelper.kt +++ b/stock-usecase/src/main/java/org/dhis2/android/rtsm/utils/RuleEngineHelper.kt @@ -2,6 +2,7 @@ package org.dhis2.android.rtsm.utils import org.dhis2.commons.rules.RuleEngineContextData import org.hisp.dhis.rules.api.RuleEngineContext +import org.hisp.dhis.rules.api.RuleSupplementaryData import org.hisp.dhis.rules.models.Rule import org.hisp.dhis.rules.models.RuleEvent import org.hisp.dhis.rules.models.RuleVariable @@ -13,7 +14,7 @@ class RuleEngineHelper { rules: List, ruleVariables: List, constants: Map, - supplementaryData: Map>, + supplementaryData: RuleSupplementaryData, events: List, ): RuleEngineContextData { debugRuleEngine(rules, ruleVariables, events) diff --git a/stock-usecase/src/test/java/org/dhis2/android/rtsm/services/ProgramRuleTests.kt b/stock-usecase/src/test/java/org/dhis2/android/rtsm/services/ProgramRuleTests.kt index 62d3c2b0da1..16f62c8f4b8 100644 --- a/stock-usecase/src/test/java/org/dhis2/android/rtsm/services/ProgramRuleTests.kt +++ b/stock-usecase/src/test/java/org/dhis2/android/rtsm/services/ProgramRuleTests.kt @@ -2,12 +2,12 @@ package org.dhis2.android.rtsm.services import com.google.common.collect.Lists import org.dhis2.mobileProgramRules.toRuleEngineInstant -import org.dhis2.mobileProgramRules.toRuleEngineInstantWithNoTime import org.dhis2.mobileProgramRules.toRuleEngineLocalDate import org.hisp.dhis.android.core.arch.helpers.DateUtils import org.hisp.dhis.android.core.program.ProgramRuleActionType import org.hisp.dhis.rules.api.RuleEngine import org.hisp.dhis.rules.api.RuleEngineContext +import org.hisp.dhis.rules.api.RuleSupplementaryData import org.hisp.dhis.rules.models.Rule import org.hisp.dhis.rules.models.RuleAction import org.hisp.dhis.rules.models.RuleDataValue @@ -80,7 +80,7 @@ class ProgramRuleTests { return RuleEngineContext( rules, rulesVariables, - emptyMap(), + RuleSupplementaryData(), emptyMap(), ) } @@ -133,7 +133,8 @@ class ProgramRuleTests { "test_program_stage", "", RuleEventStatus.ACTIVE, - Date().toRuleEngineInstantWithNoTime(), + Date().toRuleEngineLocalDate(), + Date().toRuleEngineInstant(), Date().toRuleEngineInstant(), Date().toRuleEngineLocalDate(), null, @@ -185,8 +186,9 @@ class ProgramRuleTests { val ruleEventAndroid = getRuleEvent( uid = "event_android", - eventDate = "2025-09-25T13:04:13.783", + eventDate = "2025-09-25T11:04:13.783", created = "2025-09-25T13:04:13.783", + createdAtClient = "2025-09-25T11:04:13.783", dataValues = listOf( RuleDataValue( @@ -195,11 +197,26 @@ class ProgramRuleTests { ), ), ) + val ruleEventAndroidSameCreated = + getRuleEvent( + uid = "event_android", + eventDate = "2025-09-25T12:02:13.783", + created = "2025-09-25T13:04:13.783", + createdAtClient = "2025-09-25T12:02:13.783", + dataValues = + listOf( + RuleDataValue( + dataElement1, + "5", + ), + ), + ) val ruleEventWeb = getRuleEvent( uid = "event_web", eventDate = "2025-09-25T00:00:00.000", created = "2025-09-25T15:06:41.483", + createdAtClient = null, dataValues = listOf( RuleDataValue( @@ -213,6 +230,7 @@ class ProgramRuleTests { uid = "event_new", eventDate = "2025-09-25T18:06:41.483", created = "2025-09-25T18:06:41.483", + createdAtClient = "2025-09-25T18:06:41.483", dataValues = listOf(), ) @@ -247,24 +265,40 @@ class ProgramRuleTests { ), ) - val ruleEffects = - RuleEngine.getInstance().evaluate( + // Evaluate the Android and Web events + RuleEngine + .getInstance() + .evaluate( ruleEventNew, getEmptyRuleEnrollment(), listOf(ruleEventAndroid, ruleEventWeb), ruleEngineContext, - ) + ).let { ruleEffects -> + // The rule effect must assign the value coming from event_web because its created date + // is most recent compared to event_android. + assertEquals(ruleEffects.size, 1) + assertEquals(ruleEffects.first().data, "10") + } - // The rule effect must assigned the value coming from event_web because its created date - // is most recent compared to event_android. - assertEquals(ruleEffects.size, 1) - assertEquals(ruleEffects.first().data, "10") + // Evaluate Android events with the same creation date + RuleEngine + .getInstance() + .evaluate( + ruleEventNew, + getEmptyRuleEnrollment(), + listOf(ruleEventAndroid, ruleEventAndroidSameCreated), + ruleEngineContext, + ).let { ruleEffects -> + assertEquals(ruleEffects.size, 1) + assertEquals(ruleEffects.first().data, "5") + } } private fun getRuleEvent( uid: String, eventDate: String, created: String, + createdAtClient: String?, dataValues: List, ): RuleEvent = RuleEvent( @@ -272,8 +306,9 @@ class ProgramRuleTests { "test_program_stage", "", RuleEventStatus.ACTIVE, - DateUtils.DATE_FORMAT.parse(eventDate).toRuleEngineInstantWithNoTime(), + DateUtils.DATE_FORMAT.parse(eventDate).toRuleEngineLocalDate(), DateUtils.DATE_FORMAT.parse(created).toRuleEngineInstant(), + createdAtClient?.let { DateUtils.DATE_FORMAT.parse(it).toRuleEngineInstant() }, null, null, "", From 5d3e48ea1662bcb63634f64227ffc947cd54574b Mon Sep 17 00:00:00 2001 From: "@dhis2-bot" Date: Wed, 25 Feb 2026 08:41:42 +0100 Subject: [PATCH 066/114] fix(translations): sync translations from transifex (develop) (#4666) * fix(translations): sync translations from transifex (develop) * fix(translations): sync translations from transifex (develop) --- commons/src/main/res/values-lo/strings.xml | 3 ++- commons/src/main/res/values-zh/strings.xml | 4 ++++ .../src/commonMain/composeResources/values-lo/strings.xml | 3 ++- form/src/main/res/values-lo/strings.xml | 1 + sync/src/commonMain/composeResources/values-ar/strings.xml | 3 ++- sync/src/commonMain/composeResources/values-ckb/strings.xml | 3 ++- sync/src/commonMain/composeResources/values-cs/strings.xml | 3 ++- .../src/commonMain/composeResources/values-es-rES/strings.xml | 3 ++- sync/src/commonMain/composeResources/values-es/strings.xml | 3 ++- sync/src/commonMain/composeResources/values-fr/strings.xml | 3 ++- sync/src/commonMain/composeResources/values-id/strings.xml | 3 ++- sync/src/commonMain/composeResources/values-km/strings.xml | 3 ++- sync/src/commonMain/composeResources/values-lo/strings.xml | 3 ++- sync/src/commonMain/composeResources/values-nb/strings.xml | 3 ++- sync/src/commonMain/composeResources/values-nl/strings.xml | 3 ++- sync/src/commonMain/composeResources/values-pt/strings.xml | 3 ++- sync/src/commonMain/composeResources/values-ru/strings.xml | 3 ++- sync/src/commonMain/composeResources/values-sv/strings.xml | 3 ++- sync/src/commonMain/composeResources/values-uk/strings.xml | 3 ++- .../src/commonMain/composeResources/values-uz-rUZ/strings.xml | 3 ++- sync/src/commonMain/composeResources/values-uz/strings.xml | 3 ++- sync/src/commonMain/composeResources/values-vi/strings.xml | 3 ++- .../src/commonMain/composeResources/values-zh-rCN/strings.xml | 3 ++- sync/src/commonMain/composeResources/values-zh/strings.xml | 3 +++ 24 files changed, 50 insertions(+), 21 deletions(-) diff --git a/commons/src/main/res/values-lo/strings.xml b/commons/src/main/res/values-lo/strings.xml index 1c3812c27c4..b56aa1d51e7 100644 --- a/commons/src/main/res/values-lo/strings.xml +++ b/commons/src/main/res/values-lo/strings.xml @@ -227,4 +227,5 @@ ອາທິດ ເດືອນ ປີ - + ລຶບທັງໝົດ + diff --git a/commons/src/main/res/values-zh/strings.xml b/commons/src/main/res/values-zh/strings.xml index 51340ad9ab1..031f5dbb1d7 100644 --- a/commons/src/main/res/values-zh/strings.xml +++ b/commons/src/main/res/values-zh/strings.xml @@ -50,6 +50,7 @@ 两周 开始于周三的周报 开始于周四的周报 + 每周从周五开始 开始于周六的周报 开始于周日的周报 每月 @@ -61,8 +62,11 @@ 从 7 月开始,每 6 个月一次 开始于11月的半年 每年 + 从 2 月开始的财务年度 开始于四月的财政年 开始于六月的财政年 + 从 8 月开始的财政年度 + 9 月开始的财政年度 开始于十月的财政年 开始于11月的财政年 diff --git a/commonskmm/src/commonMain/composeResources/values-lo/strings.xml b/commonskmm/src/commonMain/composeResources/values-lo/strings.xml index e9d1e1ed7b1..8bacfa370ce 100644 --- a/commonskmm/src/commonMain/composeResources/values-lo/strings.xml +++ b/commonskmm/src/commonMain/composeResources/values-lo/strings.xml @@ -56,7 +56,7 @@ ບໍ່​ແມ່ນ​ຕອນ​ນີ້ ບັນທຶກ ສຶບຕໍ່ແກ້ໄຂ - ທ່ານຕ້ອງການໝາຍແບບຟອມນີ້ວ່າສຳເລັດແລ້ວຫຼືບໍ? + ທ່ານຕ້ອງການໝາຍແບບຟອມນີ້ວ່າສຳເລັດແລ້ວຫຼືບໍ\? ຖ້າທ່ານອອກດຽວນີ້ ຂໍ້ມູນທັງໝົດໃນແບບຟອມຈະຖືກຍົກເລີກ. ເຜີຍແຜ່ ປິດ @@ -86,6 +86,7 @@ %s ລາຍລະອຽດ ຫົວໜ່ວຍການຈັດຕັ້ງ ປະສານງານ + ໝວດໝູ່ແບບປະສົມ (Category Combo) ລາຍການທີ່ໃຫ້ເລືອກ ແມ່ນ ບໍ່ແມ່ນ diff --git a/form/src/main/res/values-lo/strings.xml b/form/src/main/res/values-lo/strings.xml index bfef36c2592..558a0193e17 100644 --- a/form/src/main/res/values-lo/strings.xml +++ b/form/src/main/res/values-lo/strings.xml @@ -66,5 +66,6 @@ %s ລາຍລະອຽດ ສະຖານທີ່ Coordinates + ໝວດໝູ່ແບບປະສົມ (Category Combo) ລາຍການທີ່ໃຫ້ເລືອກ \ No newline at end of file diff --git a/sync/src/commonMain/composeResources/values-ar/strings.xml b/sync/src/commonMain/composeResources/values-ar/strings.xml index 4c1c46011bd..05ec9b7e48c 100644 --- a/sync/src/commonMain/composeResources/values-ar/strings.xml +++ b/sync/src/commonMain/composeResources/values-ar/strings.xml @@ -1,5 +1,6 @@ - + Dhis2 + diff --git a/sync/src/commonMain/composeResources/values-ckb/strings.xml b/sync/src/commonMain/composeResources/values-ckb/strings.xml index 4c1c46011bd..05ec9b7e48c 100644 --- a/sync/src/commonMain/composeResources/values-ckb/strings.xml +++ b/sync/src/commonMain/composeResources/values-ckb/strings.xml @@ -1,5 +1,6 @@ - + Dhis2 + diff --git a/sync/src/commonMain/composeResources/values-cs/strings.xml b/sync/src/commonMain/composeResources/values-cs/strings.xml index 4c1c46011bd..05ec9b7e48c 100644 --- a/sync/src/commonMain/composeResources/values-cs/strings.xml +++ b/sync/src/commonMain/composeResources/values-cs/strings.xml @@ -1,5 +1,6 @@ - + Dhis2 + diff --git a/sync/src/commonMain/composeResources/values-es-rES/strings.xml b/sync/src/commonMain/composeResources/values-es-rES/strings.xml index 4c1c46011bd..fbe849a24c8 100644 --- a/sync/src/commonMain/composeResources/values-es-rES/strings.xml +++ b/sync/src/commonMain/composeResources/values-es-rES/strings.xml @@ -1,5 +1,6 @@ - + DHIS 2 + diff --git a/sync/src/commonMain/composeResources/values-es/strings.xml b/sync/src/commonMain/composeResources/values-es/strings.xml index 4c1c46011bd..fbe849a24c8 100644 --- a/sync/src/commonMain/composeResources/values-es/strings.xml +++ b/sync/src/commonMain/composeResources/values-es/strings.xml @@ -1,5 +1,6 @@ - + DHIS 2 + diff --git a/sync/src/commonMain/composeResources/values-fr/strings.xml b/sync/src/commonMain/composeResources/values-fr/strings.xml index 4c1c46011bd..05ec9b7e48c 100644 --- a/sync/src/commonMain/composeResources/values-fr/strings.xml +++ b/sync/src/commonMain/composeResources/values-fr/strings.xml @@ -1,5 +1,6 @@ - + Dhis2 + diff --git a/sync/src/commonMain/composeResources/values-id/strings.xml b/sync/src/commonMain/composeResources/values-id/strings.xml index 4c1c46011bd..91e4338bcb7 100644 --- a/sync/src/commonMain/composeResources/values-id/strings.xml +++ b/sync/src/commonMain/composeResources/values-id/strings.xml @@ -1,5 +1,6 @@ - + DHIS2 + diff --git a/sync/src/commonMain/composeResources/values-km/strings.xml b/sync/src/commonMain/composeResources/values-km/strings.xml index 4c1c46011bd..f568a46e86f 100644 --- a/sync/src/commonMain/composeResources/values-km/strings.xml +++ b/sync/src/commonMain/composeResources/values-km/strings.xml @@ -1,5 +1,6 @@ - + ឌីអេចអាយអេសធូ (DHIS 2) + diff --git a/sync/src/commonMain/composeResources/values-lo/strings.xml b/sync/src/commonMain/composeResources/values-lo/strings.xml index 4c1c46011bd..5276a519bfc 100644 --- a/sync/src/commonMain/composeResources/values-lo/strings.xml +++ b/sync/src/commonMain/composeResources/values-lo/strings.xml @@ -1,5 +1,6 @@ - + ລະບົບ DHIS2 + diff --git a/sync/src/commonMain/composeResources/values-nb/strings.xml b/sync/src/commonMain/composeResources/values-nb/strings.xml index 4c1c46011bd..05ec9b7e48c 100644 --- a/sync/src/commonMain/composeResources/values-nb/strings.xml +++ b/sync/src/commonMain/composeResources/values-nb/strings.xml @@ -1,5 +1,6 @@ - + Dhis2 + diff --git a/sync/src/commonMain/composeResources/values-nl/strings.xml b/sync/src/commonMain/composeResources/values-nl/strings.xml index 4c1c46011bd..05ec9b7e48c 100644 --- a/sync/src/commonMain/composeResources/values-nl/strings.xml +++ b/sync/src/commonMain/composeResources/values-nl/strings.xml @@ -1,5 +1,6 @@ - + Dhis2 + diff --git a/sync/src/commonMain/composeResources/values-pt/strings.xml b/sync/src/commonMain/composeResources/values-pt/strings.xml index 4c1c46011bd..05ec9b7e48c 100644 --- a/sync/src/commonMain/composeResources/values-pt/strings.xml +++ b/sync/src/commonMain/composeResources/values-pt/strings.xml @@ -1,5 +1,6 @@ - + Dhis2 + diff --git a/sync/src/commonMain/composeResources/values-ru/strings.xml b/sync/src/commonMain/composeResources/values-ru/strings.xml index 4c1c46011bd..05ec9b7e48c 100644 --- a/sync/src/commonMain/composeResources/values-ru/strings.xml +++ b/sync/src/commonMain/composeResources/values-ru/strings.xml @@ -1,5 +1,6 @@ - + Dhis2 + diff --git a/sync/src/commonMain/composeResources/values-sv/strings.xml b/sync/src/commonMain/composeResources/values-sv/strings.xml index 4c1c46011bd..91e4338bcb7 100644 --- a/sync/src/commonMain/composeResources/values-sv/strings.xml +++ b/sync/src/commonMain/composeResources/values-sv/strings.xml @@ -1,5 +1,6 @@ - + DHIS2 + diff --git a/sync/src/commonMain/composeResources/values-uk/strings.xml b/sync/src/commonMain/composeResources/values-uk/strings.xml index 4c1c46011bd..05ec9b7e48c 100644 --- a/sync/src/commonMain/composeResources/values-uk/strings.xml +++ b/sync/src/commonMain/composeResources/values-uk/strings.xml @@ -1,5 +1,6 @@ - + Dhis2 + diff --git a/sync/src/commonMain/composeResources/values-uz-rUZ/strings.xml b/sync/src/commonMain/composeResources/values-uz-rUZ/strings.xml index 4c1c46011bd..91e4338bcb7 100644 --- a/sync/src/commonMain/composeResources/values-uz-rUZ/strings.xml +++ b/sync/src/commonMain/composeResources/values-uz-rUZ/strings.xml @@ -1,5 +1,6 @@ - + DHIS2 + diff --git a/sync/src/commonMain/composeResources/values-uz/strings.xml b/sync/src/commonMain/composeResources/values-uz/strings.xml index 4c1c46011bd..91e4338bcb7 100644 --- a/sync/src/commonMain/composeResources/values-uz/strings.xml +++ b/sync/src/commonMain/composeResources/values-uz/strings.xml @@ -1,5 +1,6 @@ - + DHIS2 + diff --git a/sync/src/commonMain/composeResources/values-vi/strings.xml b/sync/src/commonMain/composeResources/values-vi/strings.xml index 4c1c46011bd..05ec9b7e48c 100644 --- a/sync/src/commonMain/composeResources/values-vi/strings.xml +++ b/sync/src/commonMain/composeResources/values-vi/strings.xml @@ -1,5 +1,6 @@ - + Dhis2 + diff --git a/sync/src/commonMain/composeResources/values-zh-rCN/strings.xml b/sync/src/commonMain/composeResources/values-zh-rCN/strings.xml index 4c1c46011bd..91e4338bcb7 100644 --- a/sync/src/commonMain/composeResources/values-zh-rCN/strings.xml +++ b/sync/src/commonMain/composeResources/values-zh-rCN/strings.xml @@ -1,5 +1,6 @@ - + DHIS2 + diff --git a/sync/src/commonMain/composeResources/values-zh/strings.xml b/sync/src/commonMain/composeResources/values-zh/strings.xml index 4c1c46011bd..d9ec0be1115 100644 --- a/sync/src/commonMain/composeResources/values-zh/strings.xml +++ b/sync/src/commonMain/composeResources/values-zh/strings.xml @@ -1,5 +1,8 @@ + DHIS2 + 检查网络设置 + 同步配置 From d3592d3db30c595390d9f75eb95ef0735d6dd60e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 25 Feb 2026 11:02:10 +0100 Subject: [PATCH 067/114] deps: bump the gradle-updates group across 1 directory with 4 updates (#4660) Bumps the gradle-updates group with 4 updates in the / directory: androidx.paging:paging-compose, [org.jetbrains.androidx.navigation:navigation-compose](https://github.com/JetBrains/compose-multiplatform), androidx.paging:paging-testing and [org.junit.jupiter:junit-jupiter](https://github.com/junit-team/junit-framework). Updates `androidx.paging:paging-compose` from 3.4.0 to 3.4.1 Updates `org.jetbrains.androidx.navigation:navigation-compose` from 2.9.1 to 2.9.2 - [Release notes](https://github.com/JetBrains/compose-multiplatform/releases) - [Changelog](https://github.com/JetBrains/compose-multiplatform/blob/master/CHANGELOG.md) - [Commits](https://github.com/JetBrains/compose-multiplatform/commits) Updates `androidx.paging:paging-testing` from 3.4.0 to 3.4.1 Updates `org.junit.jupiter:junit-jupiter` from 6.0.2 to 6.0.3 - [Release notes](https://github.com/junit-team/junit-framework/releases) - [Commits](https://github.com/junit-team/junit-framework/compare/r6.0.2...r6.0.3) --- updated-dependencies: - dependency-name: androidx.paging:paging-compose dependency-version: 3.4.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-updates - dependency-name: org.jetbrains.androidx.navigation:navigation-compose dependency-version: 2.9.2 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-updates - dependency-name: androidx.paging:paging-testing dependency-version: 3.4.1 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-updates - dependency-name: org.junit.jupiter:junit-jupiter dependency-version: 6.0.3 dependency-type: direct:production update-type: version-update:semver-patch dependency-group: gradle-updates ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- gradle/libs.versions.toml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 3d29f26df63..dcf4cf283ef 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,7 +1,7 @@ [versions] kotlinxDatetime = "0.7.1-0.6.x-compat" #Needs to be compatible with the Rule engine, update when it's updated lifecycleRuntimeCompose = "2.9.6" -navigationCompose = "2.9.1" +navigationCompose = "2.9.2" sdk = "36" minSdk = "23" vCode = "151" @@ -28,8 +28,8 @@ fragmentktx = "1.8.9" recyclerview = "1.4.0" compose = "1.9.5" composePluginVersion = "1.9.3" -composePaging = "3.4.0" -pagingTesting = "3.4.0" +composePaging = "3.4.1" +pagingTesting = "3.4.1" composeConstraintLayout = "1.1.1" activityCompose = "1.11.0" viewModelCompose = "2.9.4" @@ -84,7 +84,7 @@ material3WindowSize = "1.4.0" material3WindowSizeCompose = "1.8.2" material3AdaptiveAndroid = "1.1.0" koin = "4.1.1" -junitJupiter = "6.0.2" +junitJupiter = "6.0.3" ktxml = "1.0.0" atomicfu = "0.29.0" playservicesauth = "21.4.0" From 39cddbcf9dc63d0f34df93599b80869747ee0b1d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Tar=C3=AD?= Date: Thu, 26 Feb 2026 07:21:09 +0100 Subject: [PATCH 068/114] fix: [ANDROAPP-7081] program stage sections order is not applied correctly (#4680) * chore: [ANDROAPP-7081] sort enrollment and event sections by sort order * chore: [ANDROAPP-7081] fix test --- .../eventInitial/EventInitialRepositoryImpl.kt | 2 ++ .../programEventDetail/ProgramEventMapper.kt | 1 + .../main/java/org/dhis2/form/data/EventRepository.kt | 2 ++ .../form/data/metadata/EnrollmentConfiguration.kt | 1 + .../java/org/dhis2/form/data/EventRepositoryTest.kt | 11 +++++++++++ 5 files changed, 17 insertions(+) diff --git a/app/src/main/java/org/dhis2/usescases/eventsWithoutRegistration/eventInitial/EventInitialRepositoryImpl.kt b/app/src/main/java/org/dhis2/usescases/eventsWithoutRegistration/eventInitial/EventInitialRepositoryImpl.kt index 1672ed3d2a0..180a1523caf 100644 --- a/app/src/main/java/org/dhis2/usescases/eventsWithoutRegistration/eventInitial/EventInitialRepositoryImpl.kt +++ b/app/src/main/java/org/dhis2/usescases/eventsWithoutRegistration/eventInitial/EventInitialRepositoryImpl.kt @@ -315,6 +315,7 @@ class EventInitialRepositoryImpl internal constructor( .programStageSections() .byProgramStageUid() .eq(stage!!.uid()) + .orderBySortOrder(RepositoryScope.OrderByDirection.ASC) .blockingGet() stageSections @@ -369,6 +370,7 @@ class EventInitialRepositoryImpl internal constructor( .withDataElements() .byProgramStageUid() .eq(event.programStage()) + .orderBySortOrder(RepositoryScope.OrderByDirection.ASC) .blockingGet() val stageDataElements = d2 diff --git a/app/src/main/java/org/dhis2/usescases/programEventDetail/ProgramEventMapper.kt b/app/src/main/java/org/dhis2/usescases/programEventDetail/ProgramEventMapper.kt index 896f7665d49..0538363ac81 100644 --- a/app/src/main/java/org/dhis2/usescases/programEventDetail/ProgramEventMapper.kt +++ b/app/src/main/java/org/dhis2/usescases/programEventDetail/ProgramEventMapper.kt @@ -275,6 +275,7 @@ class ProgramEventMapper( .byProgramStageUid() .eq(programStage) .withDataElements() + .orderBySortOrder(RepositoryScope.OrderByDirection.ASC) .blockingGet() private fun getCategoryOptionCombo(attributeOptionCombo: String?) = diff --git a/form/src/main/java/org/dhis2/form/data/EventRepository.kt b/form/src/main/java/org/dhis2/form/data/EventRepository.kt index 3b61ebeab03..359cd4d3d12 100644 --- a/form/src/main/java/org/dhis2/form/data/EventRepository.kt +++ b/form/src/main/java/org/dhis2/form/data/EventRepository.kt @@ -150,6 +150,7 @@ class EventRepository( .byProgramStageUid() .eq(event?.programStage()) .withDataElements() + .orderBySortOrder(RepositoryScope.OrderByDirection.ASC) .blockingGet() .associateBy { section -> section.uid() } } @@ -174,6 +175,7 @@ class EventRepository( .byProgramStageUid() .eq(programStage?.uid()) .withDataElements() + .orderBySortOrder(RepositoryScope.OrderByDirection.ASC) .get() .flatMap { programStageSection -> if (programStageSection.isEmpty()) { diff --git a/form/src/main/java/org/dhis2/form/data/metadata/EnrollmentConfiguration.kt b/form/src/main/java/org/dhis2/form/data/metadata/EnrollmentConfiguration.kt index 6143bd41d88..5d9b754a887 100644 --- a/form/src/main/java/org/dhis2/form/data/metadata/EnrollmentConfiguration.kt +++ b/form/src/main/java/org/dhis2/form/data/metadata/EnrollmentConfiguration.kt @@ -46,6 +46,7 @@ class EnrollmentConfiguration( .withAttributes() .byProgramUid() .eq(enrollment()?.program()) + .orderBySortOrder(RepositoryScope.OrderByDirection.ASC) .blockingGet() fun orgUnit(orgUnitUid: String) = diff --git a/form/src/test/java/org/dhis2/form/data/EventRepositoryTest.kt b/form/src/test/java/org/dhis2/form/data/EventRepositoryTest.kt index f5fb706e9be..8b51b6ef16a 100644 --- a/form/src/test/java/org/dhis2/form/data/EventRepositoryTest.kt +++ b/form/src/test/java/org/dhis2/form/data/EventRepositoryTest.kt @@ -10,6 +10,7 @@ import org.dhis2.form.model.EventMode import org.dhis2.form.ui.FieldViewModelFactory import org.dhis2.mobile.commons.customintents.CustomIntentRepository import org.hisp.dhis.android.core.D2 +import org.hisp.dhis.android.core.arch.repositories.scope.RepositoryScope import org.hisp.dhis.android.core.category.CategoryCombo import org.hisp.dhis.android.core.common.Geometry import org.hisp.dhis.android.core.event.Event @@ -258,6 +259,16 @@ class EventRepositoryTest { .byProgramStageUid() .eq(anyOrNull()) .withDataElements() + .orderBySortOrder(RepositoryScope.OrderByDirection.ASC), + ) doReturn mock() + whenever( + d2 + .programModule() + .programStageSections() + .byProgramStageUid() + .eq(anyOrNull()) + .withDataElements() + .orderBySortOrder(RepositoryScope.OrderByDirection.ASC) .blockingGet(), ) doReturn listOf(mockedFirstSection, mockedSecondSection) } From 49a8189f99f4ec30168deb4fff47769f7e87372c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Miguel=20Rubio?= Date: Thu, 26 Feb 2026 09:31:59 +0100 Subject: [PATCH 069/114] feat: check minCharacters to search and display warning (#4682) * feat: check minCharacters to search and display warning * test: add SearchParametersViewModelTest.kt * test: fix copilot feedback in SearchParametersViewModelTest.kt * fix: Make suspend functions inside SearchParametersViewModel.kt internal --- .../SearchParametersScreenProvider.kt | 2 +- ...t => DrawableResourcesProvider.android.kt} | 0 ...ources.kt => DrawableResourcesProvider.kt} | 0 .../resources/StringResourceProvider.kt | 11 ++ ...t => DrawableResourcesProvider.desktop.kt} | 0 tracker/build.gradle.kts | 2 - .../composeResources/values/strings.xml | 2 +- .../tracker/search/di/TrackerSearchModule.kt | 13 +- .../ui/screen/SearchParametersScreen.kt | 27 ++- .../ui/viewmodel/SearchParametersViewModel.kt | 72 ++++++++ .../SearchParametersViewModelTest.kt | 165 ++++++++++++++++++ 11 files changed, 286 insertions(+), 8 deletions(-) rename commonskmm/src/androidMain/kotlin/org/dhis2/mobile/commons/resources/{Resources.android.kt => DrawableResourcesProvider.android.kt} (100%) rename commonskmm/src/commonMain/kotlin/org/dhis2/mobile/commons/resources/{Resources.kt => DrawableResourcesProvider.kt} (100%) create mode 100644 commonskmm/src/commonMain/kotlin/org/dhis2/mobile/commons/resources/StringResourceProvider.kt rename commonskmm/src/desktopMain/java/org/dhis2/mobile/commons/resources/{Resources.desktop.kt => DrawableResourcesProvider.desktop.kt} (100%) create mode 100644 tracker/src/commonMain/kotlin/org/dhis2/tracker/search/ui/viewmodel/SearchParametersViewModel.kt create mode 100644 tracker/src/commonTest/kotlin/org/dhis2/tracker/search/ui/viewmodel/SearchParametersViewModelTest.kt diff --git a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/searchparameters/SearchParametersScreenProvider.kt b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/searchparameters/SearchParametersScreenProvider.kt index f75a1882e43..d65d6591b1e 100644 --- a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/searchparameters/SearchParametersScreenProvider.kt +++ b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/searchparameters/SearchParametersScreenProvider.kt @@ -114,7 +114,7 @@ fun provideSearchScreen( val isLandscape = configuration.orientation == Configuration.ORIENTATION_LANDSCAPE SearchParametersScreen( - uiState = viewModel.searchParametersUiState, + externalUiState = viewModel.searchParametersUiState, onSearchScreenUiEvent = { when (it) { is SearchScreenUiEvent.OnSearchButtonClicked -> diff --git a/commonskmm/src/androidMain/kotlin/org/dhis2/mobile/commons/resources/Resources.android.kt b/commonskmm/src/androidMain/kotlin/org/dhis2/mobile/commons/resources/DrawableResourcesProvider.android.kt similarity index 100% rename from commonskmm/src/androidMain/kotlin/org/dhis2/mobile/commons/resources/Resources.android.kt rename to commonskmm/src/androidMain/kotlin/org/dhis2/mobile/commons/resources/DrawableResourcesProvider.android.kt diff --git a/commonskmm/src/commonMain/kotlin/org/dhis2/mobile/commons/resources/Resources.kt b/commonskmm/src/commonMain/kotlin/org/dhis2/mobile/commons/resources/DrawableResourcesProvider.kt similarity index 100% rename from commonskmm/src/commonMain/kotlin/org/dhis2/mobile/commons/resources/Resources.kt rename to commonskmm/src/commonMain/kotlin/org/dhis2/mobile/commons/resources/DrawableResourcesProvider.kt diff --git a/commonskmm/src/commonMain/kotlin/org/dhis2/mobile/commons/resources/StringResourceProvider.kt b/commonskmm/src/commonMain/kotlin/org/dhis2/mobile/commons/resources/StringResourceProvider.kt new file mode 100644 index 00000000000..6003c0e8ae4 --- /dev/null +++ b/commonskmm/src/commonMain/kotlin/org/dhis2/mobile/commons/resources/StringResourceProvider.kt @@ -0,0 +1,11 @@ +package org.dhis2.mobile.commons.resources + +import org.jetbrains.compose.resources.StringResource +import org.jetbrains.compose.resources.getString + +class StringResourceProvider { + suspend fun provideString( + resource: StringResource, + number: Int, + ): String = getString(resource, number) +} diff --git a/commonskmm/src/desktopMain/java/org/dhis2/mobile/commons/resources/Resources.desktop.kt b/commonskmm/src/desktopMain/java/org/dhis2/mobile/commons/resources/DrawableResourcesProvider.desktop.kt similarity index 100% rename from commonskmm/src/desktopMain/java/org/dhis2/mobile/commons/resources/Resources.desktop.kt rename to commonskmm/src/desktopMain/java/org/dhis2/mobile/commons/resources/DrawableResourcesProvider.desktop.kt diff --git a/tracker/build.gradle.kts b/tracker/build.gradle.kts index 857e11e1cd6..9a9ab870e3e 100644 --- a/tracker/build.gradle.kts +++ b/tracker/build.gradle.kts @@ -48,8 +48,6 @@ kotlin { implementation(kotlin("test")) // Koin Test features implementation(libs.koin.test) - implementation(libs.koin.test.junit5) - implementation(libs.koin.test.junit4) implementation(libs.test.turbine) implementation(libs.test.kotlinCoroutines) implementation(libs.test.mockitoKotlin) diff --git a/tracker/src/commonMain/composeResources/values/strings.xml b/tracker/src/commonMain/composeResources/values/strings.xml index e47fae5fd7b..e41770e623f 100644 --- a/tracker/src/commonMain/composeResources/values/strings.xml +++ b/tracker/src/commonMain/composeResources/values/strings.xml @@ -25,5 +25,5 @@ Must match the end of the value yes no - + Enter at least %1$d characters \ No newline at end of file diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/di/TrackerSearchModule.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/di/TrackerSearchModule.kt index 1ae532b442d..8018e82997f 100644 --- a/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/di/TrackerSearchModule.kt +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/di/TrackerSearchModule.kt @@ -1,9 +1,12 @@ package org.dhis2.tracker.search.di +import org.dhis2.mobile.commons.resources.StringResourceProvider import org.dhis2.tracker.search.domain.FetchOptionSetOptions import org.dhis2.tracker.search.domain.SearchTrackedEntities +import org.dhis2.tracker.search.ui.viewmodel.SearchParametersViewModel import org.koin.core.module.Module import org.koin.core.module.dsl.factoryOf +import org.koin.core.module.dsl.viewModelOf import org.koin.dsl.module /** @@ -20,7 +23,8 @@ val trackerSearchModule = // Include platform-specific repository implementations includes(trackerSearchRepositoryModule) - // SearchTrackedEntities - factory with teType parameter + // Use cases + // With teType parameter factory { params -> SearchTrackedEntities( repository = get(), @@ -28,6 +32,11 @@ val trackerSearchModule = teType = params.get(), ) } - // FetchOptionSetOptions use case factoryOf(::FetchOptionSetOptions) + + // Providers + single { StringResourceProvider() } + + // ViewModels + viewModelOf(::SearchParametersViewModel) } diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/ui/screen/SearchParametersScreen.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/ui/screen/SearchParametersScreen.kt index 368e69323d0..e29700ffe6b 100644 --- a/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/ui/screen/SearchParametersScreen.kt +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/ui/screen/SearchParametersScreen.kt @@ -23,6 +23,8 @@ import androidx.compose.material3.SnackbarHost import androidx.compose.material3.SnackbarHostState import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Alignment @@ -49,6 +51,7 @@ import org.dhis2.tracker.input.ui.state.loadOptionSetConfiguration import org.dhis2.tracker.search.ui.action.SearchScreenUiEvent import org.dhis2.tracker.search.ui.provider.provideParameterSelectorItem import org.dhis2.tracker.search.ui.state.SearchParametersUiState +import org.dhis2.tracker.search.ui.viewmodel.SearchParametersViewModel import org.hisp.dhis.mobile.ui.designsystem.component.AdditionalInfoItemColor import org.hisp.dhis.mobile.ui.designsystem.component.Button import org.hisp.dhis.mobile.ui.designsystem.component.ButtonStyle @@ -59,16 +62,26 @@ import org.hisp.dhis.mobile.ui.designsystem.theme.Shape import org.hisp.dhis.mobile.ui.designsystem.theme.SurfaceColor import org.hisp.dhis.mobile.ui.designsystem.theme.TextColor import org.jetbrains.compose.resources.stringResource +import org.koin.compose.viewmodel.koinViewModel @Composable fun SearchParametersScreen( - uiState: SearchParametersUiState, + externalUiState: SearchParametersUiState, onSearchScreenUiEvent: (SearchScreenUiEvent) -> Unit, onTrackerInputUiEvent: (TrackerInputUiEvent) -> Unit, isLandscape: Boolean, getOptionSetFlow: (fieldUid: String, optionSetUid: String) -> Flow>?, onOptionSetSearch: (fieldUid: String, query: String) -> Unit, ) { + val viewModel = koinViewModel() + + LaunchedEffect(externalUiState) { + viewModel.updateFromExternal(externalUiState) + } + + val uiState by viewModel.uiState.collectAsState() + val validationResult by viewModel.validationResult.collectAsState() + val snackBarHostState = remember { SnackbarHostState() } val coroutineScope = rememberCoroutineScope() val focusManager = LocalFocusManager.current @@ -93,6 +106,16 @@ fun SearchParametersScreen( } } + LaunchedEffect(validationResult) { + validationResult?.let { isValid -> + if (isValid) { + onSearchScreenUiEvent(SearchScreenUiEvent.OnSearchButtonClicked) + } + + viewModel.resetValidationResult() + } + } + val backgroundShape = getBackgroundShape(isLandscape) Scaffold( @@ -229,7 +252,7 @@ fun SearchParametersScreen( }, ) { focusManager.clearFocus() - onSearchScreenUiEvent(SearchScreenUiEvent.OnSearchButtonClicked) + viewModel.onValidateSearch() } } } diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/ui/viewmodel/SearchParametersViewModel.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/ui/viewmodel/SearchParametersViewModel.kt new file mode 100644 index 00000000000..3ea6a59c0cb --- /dev/null +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/ui/viewmodel/SearchParametersViewModel.kt @@ -0,0 +1,72 @@ +package org.dhis2.tracker.search.ui.viewmodel + +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.flow.update +import kotlinx.coroutines.launch +import org.dhis2.mobile.commons.resources.StringResourceProvider +import org.dhis2.mobile.tracker.resources.Res +import org.dhis2.mobile.tracker.resources.min_characters_warning +import org.dhis2.tracker.search.ui.state.SearchParametersUiState + +class SearchParametersViewModel( + private val resourceProvider: StringResourceProvider, +) : ViewModel() { + private val _uiState = MutableStateFlow(SearchParametersUiState()) + val uiState: StateFlow = _uiState.asStateFlow() + + private val _validationResult = MutableStateFlow(null) + val validationResult: StateFlow = _validationResult.asStateFlow() + + fun updateFromExternal(externalState: SearchParametersUiState) { + _uiState.value = externalState + } + + fun onValidateSearch() { + viewModelScope.launch { + _validationResult.value = onValidateMinCharacters() + } + } + + private suspend fun onValidateMinCharacters(): Boolean { + val items = _uiState.value.items + // Check if there are invalid items to later check the warning + val invalidItems = + items.filter { item -> + val min = item.minCharactersToSearch ?: return@filter false + val value = item.value + !value.isNullOrEmpty() && value.length < min + } + + if (invalidItems.isNotEmpty()) { + val updatedItems = + items.map { item -> + val min = item.minCharactersToSearch + if (min != null && !item.value.isNullOrEmpty() && item.value.length < min) { + item.copy( + error = + resourceProvider.provideString( + resource = Res.string.min_characters_warning, + min, + ), + ) + } else { + item.copy(error = null) + } + } + _uiState.update { it.copy(items = updatedItems) } + return false + } + + val clearedItems = items.map { it.copy(error = null) } + _uiState.update { it.copy(items = clearedItems) } + return true + } + + fun resetValidationResult() { + _validationResult.value = null + } +} diff --git a/tracker/src/commonTest/kotlin/org/dhis2/tracker/search/ui/viewmodel/SearchParametersViewModelTest.kt b/tracker/src/commonTest/kotlin/org/dhis2/tracker/search/ui/viewmodel/SearchParametersViewModelTest.kt new file mode 100644 index 00000000000..f334b522772 --- /dev/null +++ b/tracker/src/commonTest/kotlin/org/dhis2/tracker/search/ui/viewmodel/SearchParametersViewModelTest.kt @@ -0,0 +1,165 @@ +package org.dhis2.tracker.search.ui.viewmodel + +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.test.StandardTestDispatcher +import kotlinx.coroutines.test.advanceUntilIdle +import kotlinx.coroutines.test.resetMain +import kotlinx.coroutines.test.runTest +import kotlinx.coroutines.test.setMain +import org.dhis2.mobile.commons.resources.StringResourceProvider +import org.dhis2.tracker.input.ui.state.TrackerInputUiState +import org.dhis2.tracker.search.ui.state.SearchParametersUiState +import org.junit.Assert +import org.mockito.kotlin.any +import org.mockito.kotlin.mock +import org.mockito.kotlin.whenever +import kotlin.test.AfterTest +import kotlin.test.BeforeTest +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertNotEquals +import kotlin.test.assertNull + +@ExperimentalCoroutinesApi +class SearchParametersViewModelTest { + private val testingDispatcher = StandardTestDispatcher() + private val resourceProvider = mock() + private lateinit var viewModel: SearchParametersViewModel + + @BeforeTest + fun setUp() { + Dispatchers.setMain(testingDispatcher) + viewModel = SearchParametersViewModel(resourceProvider) + } + + @AfterTest + fun tearDown() { + Dispatchers.resetMain() + } + + @Test + fun `onValidateSearch should set validationResult to true when all items are valid`() = + runTest(testingDispatcher) { + // Given + val validItems = + listOf( + provideItem( + uid = "test1", + label = "Test 1", + value = "validvalue", + minCharactersToSearch = 3, + ), + provideItem( + uid = "test2", + label = "Test 2", + value = "another", + minCharactersToSearch = null, + ), + provideItem( + uid = "test3", + label = "Test 3", + value = null, + minCharactersToSearch = 3, + ), + ) + + viewModel.updateFromExternal(SearchParametersUiState(items = validItems)) + + // When + viewModel.onValidateSearch() + advanceUntilIdle() + + // Then + val validationResult = viewModel.validationResult.first() + assertEquals(true, validationResult) + } + + @Test + fun `onValidateSearch should set validationResult to false when items have insufficient characters`() = + runTest(testingDispatcher) { + // Given + val invalidItems = + listOf( + provideItem( + uid = "test1", + value = "ab", + minCharactersToSearch = 3, + ), + provideItem( + uid = "test2", + label = "Test 2", + value = "abcde", + minCharactersToSearch = 5, + ), + provideItem( + uid = "test3", + label = "Test 3", + value = "a", + minCharactersToSearch = 2, + ), + ) + whenever( + resourceProvider.provideString(any(), any()), + ).thenReturn("Minimum characters required") + + viewModel.updateFromExternal(SearchParametersUiState(items = invalidItems)) + + // When + viewModel.onValidateSearch() + advanceUntilIdle() + + // Then + val validationResult = viewModel.validationResult.first() + assertNotEquals(true, validationResult) + + val uiState = viewModel.uiState.first() // Also check that error is set on the item + assertEquals(3, uiState.items.size) + Assert.assertTrue(uiState.items[0].error?.isNotEmpty() == true) // Error should be set + } + + @Test + fun `resetValidationResult should set validationResult to null`() = + runTest(testingDispatcher) { + // Given + viewModel.updateFromExternal(SearchParametersUiState(items = listOf())) + viewModel.onValidateSearch() + advanceUntilIdle() + + // When + viewModel.resetValidationResult() + + // Then + val validationResult = viewModel.validationResult.first() + assertNull(validationResult) + } + + private fun provideItem( + uid: String = "test1", + label: String = "Test 1", + value: String?, + minCharactersToSearch: Int?, + ): TrackerInputUiState = + TrackerInputUiState( + uid = uid, + label = label, + value = value, + focused = false, + valueType = mock(), + optionSet = null, + error = null, + warning = null, + description = null, + mandatory = false, + editable = true, + legend = null, + orientation = mock(), + optionSetConfiguration = null, + customIntentUid = null, + displayName = null, + orgUnitSelectorScope = null, + searchOperator = null, + minCharactersToSearch = minCharactersToSearch, + ) +} From 9f2870573430c53efdb7fa1e449ccce9f3f576b6 Mon Sep 17 00:00:00 2001 From: Ferdy Rodriguez Date: Thu, 26 Feb 2026 10:41:20 +0100 Subject: [PATCH 070/114] feat: [ANDROAPP-7226] Support of search operators [skip size] (#4683) * Adds supports for Search Operators * update condition to check dataValues size greater than one in search repository implementation * fix ktlint errors * Correctly updates existing QueryData item's value. Adds test to check for null or empty values in AddToQuery * dynamically shows search operator supporting text when field is focused. --- .../searchTrackEntity/SearchTEActivity.kt | 2 +- .../searchTrackEntity/SearchTEIViewModel.kt | 148 +++++++++++++----- .../listView/SearchTEList.kt | 2 +- .../SearchTEIViewModelTest.kt | 66 ++++---- .../data/SearchTrackedEntityRepositoryImpl.kt | 28 ++-- .../SearchTrackedEntityRepositoryImplTest.kt | 57 ++++++- .../input/ui/state/TrackerInputUiState.kt | 14 +- .../data/SearchTrackedEntityRepository.kt | 6 +- .../search/domain/SearchTrackedEntities.kt | 53 +++---- .../dhis2/tracker/search/model/QueryData.kt | 7 + .../model/SearchTrackedEntitiesInput.kt | 2 +- .../domain/SearchTrackedEntitiesTest.kt | 113 +++++++++---- 12 files changed, 337 insertions(+), 161 deletions(-) create mode 100644 tracker/src/commonMain/kotlin/org/dhis2/tracker/search/model/QueryData.kt diff --git a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEActivity.kt b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEActivity.kt index 6c71aadcef9..6aa087ef3fa 100644 --- a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEActivity.kt +++ b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEActivity.kt @@ -299,7 +299,7 @@ class SearchTEActivity : override fun onSaveInstanceState(outState: Bundle) { super.onSaveInstanceState(outState) - outState.putSerializable(Constants.QUERY_DATA, viewModel.queryData as Serializable) + outState.putSerializable(Constants.QUERY_DATA, viewModel.queryDataAsMap() as Serializable) outState.putString(CURRENT_SCREEN, currentContent?.name) } diff --git a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEIViewModel.kt b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEIViewModel.kt index c0076d8155a..c6fc35f741d 100644 --- a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEIViewModel.kt +++ b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEIViewModel.kt @@ -64,6 +64,7 @@ import org.dhis2.tracker.search.domain.FetchOptionSetOptions import org.dhis2.tracker.search.domain.FetchSearchParameters import org.dhis2.tracker.search.domain.SearchTrackedEntities import org.dhis2.tracker.search.model.FetchSearchParametersData +import org.dhis2.tracker.search.model.QueryData import org.dhis2.tracker.search.model.SearchTrackedEntitiesInput import org.dhis2.tracker.search.ui.state.SearchParametersUiState import org.dhis2.usescases.searchTrackEntity.listView.SearchResult @@ -111,11 +112,6 @@ class SearchTEIViewModel( val navigationBarUIState: MutableState> = _navigationBarUIState - val queryData = - mutableMapOf?>().apply { - initialQuery?.let { putAll(it) } - } - private val _legacyInteraction = MutableLiveData() val legacyInteraction: LiveData = _legacyInteraction @@ -154,6 +150,11 @@ class SearchTEIViewModel( var searchParametersUiState by mutableStateOf(SearchParametersUiState()) + val queryDataList = + mutableListOf().apply { + initialQuery?.let { addAll(it.toQueryDataList()) } + } + var mapManager: MapManager? = null private var fetchJob: Job? = null @@ -328,7 +329,7 @@ class SearchTEIViewModel( isSearching = searching, searchForm = SearchForm( - queryHasData = queryData.isNotEmpty(), + queryHasData = queryDataList.isNotEmpty(), minAttributesToSearch = searchRepository .getProgram(initialProgramUid) @@ -365,7 +366,7 @@ class SearchTEIViewModel( isSearching = searching, searchForm = SearchForm( - queryHasData = queryData.isNotEmpty(), + queryHasData = queryDataList.isNotEmpty(), minAttributesToSearch = searchRepository .getProgram(initialProgramUid) @@ -405,7 +406,7 @@ class SearchTEIViewModel( isSearching = searching, searchForm = SearchForm( - queryHasData = queryData.isNotEmpty(), + queryHasData = queryDataList.isNotEmpty(), minAttributesToSearch = searchRepository .getProgram(initialProgramUid) @@ -448,9 +449,24 @@ class SearchTEIViewModel( values: List?, ) { if (values.isNullOrEmpty()) { - queryData.remove(uid) + queryDataList.removeIf { it.attributeId == uid } } else { - queryData[uid] = values + if (queryDataList.none { it.attributeId == uid }) { + queryDataList.add( + QueryData( + attributeId = uid, + values = values, + searchOperator = searchParametersUiState.items.firstOrNull { it.uid == uid }?.searchOperator, + ), + ) + } else { + queryDataList + .indexOfFirst { it.attributeId == uid } + .takeIf { it != -1 } + ?.let { index -> + queryDataList[index] = queryDataList[index].copy(values = values) + } + } } updateSearchParameters(uid, values) @@ -484,7 +500,7 @@ class SearchTEIViewModel( } fun clearQueryData() { - queryData.clear() + queryDataList.clear() clearSearchParameters() updateSearch() performSearch() @@ -510,13 +526,13 @@ class SearchTEIViewModel( currentSearchList.copy( searchForm = currentSearchList.searchForm.copy( - queryHasData = queryData.isNotEmpty(), + queryHasData = queryDataList.isNotEmpty(), ), ), ) } searchParametersUiState = - searchParametersUiState.copy(searchEnabled = queryData.isNotEmpty()) + searchParametersUiState.copy(searchEnabled = queryDataList.isNotEmpty()) } private fun loadSearchResults(): Flow> = @@ -529,7 +545,7 @@ class SearchTEIViewModel( val allowCache = searchRepositoryKt.saveSearchValuesAndGetAllowCache( - queryData, + queryDataAsMap(), selectedProgram?.uid(), ) val newTrackerSearchModel = @@ -539,7 +555,7 @@ class SearchTEIViewModel( excludeValues = excludeValues, hasStateFilters = filterManager.stateFilters.isNotEmpty(), isOnline = isOnline, - queryData = queryData, + queryDataList = queryDataList, ) val results = searchTrackedEntities.invoke(newTrackerSearchModel) @@ -572,7 +588,7 @@ class SearchTEIViewModel( val allowCache = searchRepositoryKt.saveSearchValuesAndGetAllowCache( - queryData, + queryDataAsMap(), selectedProgram?.uid(), ) val newTrackerSearchModel = @@ -582,7 +598,7 @@ class SearchTEIViewModel( excludeValues = excludeValues, hasStateFilters = filterManager.stateFilters.isNotEmpty(), isOnline = false, - queryData = queryData, + queryDataList = queryDataList, ) val results = searchTrackedEntities.invoke(newTrackerSearchModel) @@ -616,7 +632,7 @@ class SearchTEIViewModel( val allowCache = searchRepositoryKt.saveSearchValuesAndGetAllowCache( - queryData, + queryDataAsMap(), selectedProgram?.uid(), ) val newTrackerSearchModel = @@ -626,7 +642,7 @@ class SearchTEIViewModel( excludeValues = excludeValues, hasStateFilters = filterManager.stateFilters.isNotEmpty(), isOnline = isOnline, - queryData = queryData, + queryDataList = queryDataList, ) val results = searchTrackedEntities.invoke(newTrackerSearchModel) @@ -663,7 +679,7 @@ class SearchTEIViewModel( val data = mapDataRepository.getTrackerMapData( searchRepository.getProgram(initialProgramUid), - queryData, + queryDataAsMap(), layersVisibility, ) _mapResults.send(data) @@ -685,10 +701,10 @@ class SearchTEIViewModel( viewModelScope.launch(dispatchers.io()) { try { if (canPerformSearch()) { - searching = queryData.isNotEmpty() + searching = queryDataList.isNotEmpty() searchParametersUiState = searchParametersUiState.copy( - clearSearchEnabled = queryData.isNotEmpty(), + clearSearchEnabled = queryDataList.isNotEmpty(), searchedItems = getFriendlyQueryData(), ) @@ -734,12 +750,12 @@ class SearchTEIViewModel( private fun minAttributesToSearchCheck(): Boolean = searchRepository.getProgram(initialProgramUid)?.let { program -> - (program.minAttributesRequiredToSearch() ?: 0) <= queryData.size + (program.minAttributesRequiredToSearch() ?: 0) <= queryDataList.size } ?: true private fun displayFrontPageList(): Boolean = searchRepository.getProgram(initialProgramUid)?.let { program -> - program.displayFrontPageList() == true && queryData.isEmpty() + program.displayFrontPageList() == true && queryDataList.isEmpty() } ?: false private fun canDisplayResult( @@ -760,10 +776,10 @@ class SearchTEIViewModel( } fun queryDataByProgram(programUid: String?): MutableMap> = - searchRepository.filterQueryForProgram(queryData, programUid) + searchRepository.filterQueryForProgram(queryDataAsMap(), programUid) fun onEnrollClick() { - _legacyInteraction.postValue(LegacyInteraction.OnEnrollClick(queryData)) + _legacyInteraction.postValue(LegacyInteraction.OnEnrollClick(queryDataAsMap())) } fun onAddRelationship( @@ -801,7 +817,7 @@ class SearchTEIViewModel( LegacyInteraction.OnEnroll( initialProgramUid, downloadResult.teiUid, - queryData, + queryDataAsMap(), ), ) } else { @@ -888,7 +904,7 @@ class SearchTEIViewModel( hasGlobalResults == null && searchRepository.getProgram(initialProgramUid) != null && - searchRepository.filterQueryForProgram(queryData, null).isNotEmpty() && + searchRepository.filterQueryForProgram(queryDataAsMap(), null).isNotEmpty() && searchRepository.filtersApplyOnGlobalSearch() -> { listOf( SearchResult( @@ -1078,13 +1094,22 @@ class SearchTEIViewModel( ), ).fold( onSuccess = { searchParameters -> + val newItems = + searchParameters.map { searchParameter -> + searchParameter.toTrackerInputUiState() + } searchParametersUiState = searchParametersUiState.copy( - items = - searchParameters.map { searchParameter -> - searchParameter.toTrackerInputUiState() - }, + items = newItems, ) + + queryDataList.forEachIndexed { index, entry -> + val searchOperator = + newItems + .firstOrNull { it.uid == entry.attributeId } + ?.searchOperator + queryDataList[index] = entry.copy(searchOperator = searchOperator) + } }, onFailure = { // TODO(Implement error) @@ -1103,10 +1128,10 @@ class SearchTEIViewModel( value?.let { listOf(it) }, ) - searching = queryData.isNotEmpty() + searching = queryDataList.isNotEmpty() searchParametersUiState = searchParametersUiState.copy( - clearSearchEnabled = queryData.isNotEmpty(), + clearSearchEnabled = queryDataList.isNotEmpty(), searchedItems = getFriendlyQueryData(), ) @@ -1123,7 +1148,7 @@ class SearchTEIViewModel( excludeValues = excludeValues, hasStateFilters = filterManager.stateFilters.isNotEmpty(), isOnline = isOnline, - queryData = queryData, + queryDataList = queryDataList, ) // Use invokeImmediate for QR code scanning to get immediate non-paginated results @@ -1340,4 +1365,57 @@ class SearchTEIViewModel( ) } } + + /** + * + * Converts the internal queryDataList to a map representation. + * + * Since the previous map representation of queryData (Map>) is used outside + * of the SearchTEIViewModel, this function helps to represent the new and refactor. + * + * QueryData list into the Map> on those places. + * We will continue to refactor the map from other places it was used in the future. And these + * methods will help us do a smooth refactor without breaking changes. + * + * After all QueryData maps are refactored, this function will be removed. + * + * @return A mutableMap with attribute IDs as keys and their corresponding value lists + * + */ + fun queryDataAsMap() = queryDataList.toMap() + + /** + * + * Converts the mutableList of [QueryData] to a mutableMap where keys are attribute IDs + * and values are lists of strings. + * + * @return A mutableMap with attribute IDs as keys and their corresponding value lists + * + */ + private fun MutableList.toMap(): MutableMap?> = + this + .associate { queryData -> + val valueList = queryData.values + queryData.attributeId to valueList + }.toMutableMap() + + /** + * + * Converts a mutableMap to a mutableList of [QueryData] where map keys are attribute IDs + * and map values are lists of strings. + * + * @return A mutableList of [QueryData] objects + * + */ + private fun MutableMap?>.toQueryDataList() = + this + .map { (attributeId, valuesList) -> + QueryData( + attributeId = attributeId, + values = valuesList, + searchOperator = null, + ) + }.toMutableList() + + // } diff --git a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/listView/SearchTEList.kt b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/listView/SearchTEList.kt index b0193d2f4a3..e585a6c3950 100644 --- a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/listView/SearchTEList.kt +++ b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/listView/SearchTEList.kt @@ -266,7 +266,7 @@ class SearchTEList : FragmentGlobalAbstract() { val teTypeName by viewModel.teTypeName.observeAsState() val hasQueryData = remember(viewModel.searchParametersUiState) { - viewModel.queryData.isNotEmpty() + viewModel.queryDataList.isNotEmpty() } updateLayoutParams { diff --git a/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchTEIViewModelTest.kt b/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchTEIViewModelTest.kt index 15c0e38e256..3c7e0dd9e23 100644 --- a/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchTEIViewModelTest.kt +++ b/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchTEIViewModelTest.kt @@ -49,6 +49,7 @@ import org.junit.Rule import org.junit.Test import org.maplibre.geojson.BoundingBox import org.mockito.kotlin.any +import org.mockito.kotlin.anyOrNull import org.mockito.kotlin.doReturn import org.mockito.kotlin.eq import org.mockito.kotlin.mock @@ -214,12 +215,12 @@ class SearchTEIViewModelTest { value = "testingValue", ) - val queryData = viewModel.queryData + val queryData = viewModel.queryDataList assertTrue(queryData.isNotEmpty()) - assertTrue(queryData["testingUid"]?.size == 1) - val values = queryData["testingUid"] - assertTrue(values?.contains("testingValue") == true) + assertTrue(queryData.size == 1) + val data = queryData.first { it.attributeId == "testingUid" } + assertTrue(data.values?.get(0) == "testingValue") } @Test @@ -229,14 +230,14 @@ class SearchTEIViewModelTest { value = "testingValue,testingValue2", ) - val queryData = viewModel.queryData + val queryData = viewModel.queryDataList assertTrue(queryData.isNotEmpty()) - assertTrue(queryData.containsKey("testingUid")) - val values = queryData["testingUid"] - assertTrue(values?.size == 2) - assertTrue(values?.contains("testingValue") == true) - assertTrue(values?.contains("testingValue2") == true) + assertTrue(queryData.any { it.attributeId == "testingUid" }) + val data = queryData.first { it.attributeId == "testingUid" } + assertTrue(data.values?.size == 2) + assertTrue(data.values?.contains("testingValue") == true) + assertTrue(data.values?.contains("testingValue2") == true) } @Test @@ -250,20 +251,20 @@ class SearchTEIViewModelTest { value = "testingValue,testingValue2", ) - val queryData = viewModel.queryData + val queryData = viewModel.queryDataList assertTrue(queryData.isNotEmpty()) - assertTrue(queryData.containsKey("testingUid")) - val values1 = queryData["testingUid"] - assertTrue(values1?.size == 2) - assertTrue(values1?.contains("testingValue") == true) - assertTrue(values1?.contains("testingValue2") == true) - - assertTrue(queryData.containsKey("testingUid")) - val values2 = queryData["testingUid2"] - assertTrue(values2?.size == 2) - assertTrue(values2?.contains("testingValue") == true) - assertTrue(values2?.contains("testingValue2") == true) + assertTrue(queryData.any { it.attributeId == "testingUid" }) + val data1 = queryData.first { it.attributeId == "testingUid" } + assertTrue(data1.values?.size == 2) + assertTrue(data1.values?.contains("testingValue") == true) + assertTrue(data1.values?.contains("testingValue2") == true) + + assertTrue(queryData.any { it.attributeId == "testingUid2" }) + val data2 = queryData.first { it.attributeId == "testingUid2" } + assertTrue(data2.values?.size == 2) + assertTrue(data2.values?.contains("testingValue") == true) + assertTrue(data2.values?.contains("testingValue2") == true) } @ExperimentalCoroutinesApi @@ -279,7 +280,7 @@ class SearchTEIViewModelTest { eq( SearchTrackedEntitiesInput( selectedProgram = testingProgram.uid(), - queryData = mutableMapOf(), + queryDataList = mutableListOf(), allowCache = true, excludeValues = emptySet(), hasStateFilters = false, @@ -326,7 +327,7 @@ class SearchTEIViewModelTest { whenever( mapDataRepository.getTrackerMapData( testingProgram(), - viewModel.queryData, + viewModel.queryDataAsMap(), ), ) doReturn trackerMapData @@ -370,7 +371,7 @@ class SearchTEIViewModelTest { whenever( mapDataRepository.getTrackerMapData( testingProgram(), - viewModel.queryData, + viewModel.queryDataAsMap(), ), ) doReturn TrackerMapData( @@ -400,14 +401,14 @@ class SearchTEIViewModelTest { assertTrue(viewModel.refreshData.value != null) verify(mapDataRepository).getTrackerMapData( testingProgram(), - viewModel.queryData, + viewModel.queryDataAsMap(), ) } @Test fun `Should filter query data for new program`() { viewModel.queryDataByProgram("programUid") - verify(repository).filterQueryForProgram(viewModel.queryData, "programUid") + verify(repository).filterQueryForProgram(viewModel.queryDataAsMap(), "programUid") } @Test @@ -499,8 +500,11 @@ class SearchTEIViewModelTest { setCurrentProgram(testingProgram(maxTeiCountToReturn = 1)) setAllowCreateBeforeSearch(false) whenever( - repository.filterQueryForProgram(viewModel.queryData, null), - ) doReturn mapOf("field" to listOf("value")) + repository.filterQueryForProgram( + any(), + anyOrNull(), + ), + ) doReturn mapOf("testingUid" to listOf("testingValue")) performSearch() viewModel.onDataLoaded(1) @@ -515,7 +519,7 @@ class SearchTEIViewModelTest { fun `Should return unable to search outside result for search`() { setCurrentProgram(testingProgram(maxTeiCountToReturn = 1)) setAllowCreateBeforeSearch(false) - whenever(repository.filterQueryForProgram(viewModel.queryData, null)) doReturn mapOf() + whenever(repository.filterQueryForProgram(viewModel.queryDataAsMap(), null)) doReturn mapOf() whenever(repository.trackedEntityTypeFields()) doReturn listOf("Field_1", "Field_2") performSearch() @@ -731,7 +735,7 @@ class SearchTEIViewModelTest { viewModel.searchParametersUiState.copy(items = getTrackerInputModels()) performSearch() viewModel.clearQueryData() - assert(viewModel.queryData.isEmpty()) + assert(viewModel.queryDataList.isEmpty()) assert(viewModel.searchParametersUiState.items.all { it.value == null }) assert(viewModel.searchParametersUiState.searchedItems.isEmpty()) } diff --git a/tracker/src/androidMain/kotlin/org/dhis2/tracker/search/data/SearchTrackedEntityRepositoryImpl.kt b/tracker/src/androidMain/kotlin/org/dhis2/tracker/search/data/SearchTrackedEntityRepositoryImpl.kt index a4bfd48d5e4..0782420f8e5 100644 --- a/tracker/src/androidMain/kotlin/org/dhis2/tracker/search/data/SearchTrackedEntityRepositoryImpl.kt +++ b/tracker/src/androidMain/kotlin/org/dhis2/tracker/search/data/SearchTrackedEntityRepositoryImpl.kt @@ -5,6 +5,7 @@ import androidx.paging.map import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.map import org.dhis2.commons.filters.data.FilterPresenter +import org.dhis2.tracker.search.model.SearchOperator import org.dhis2.tracker.search.model.SearchTrackedEntityAttribute import org.dhis2.tracker.search.model.TrackedEntitySearchItemResult import org.hisp.dhis.android.core.D2 @@ -46,25 +47,30 @@ class SearchTrackedEntityRepositoryImpl( override suspend fun addToQuery( dataId: String, - dataValues: List, - isUnique: Boolean, - isOptionSet: Boolean, + dataValues: List?, + searchOperator: SearchOperator?, ) { + if (dataValues.isNullOrEmpty()) return + trackedEntityInstanceQuery = if (dataValues.size > 1) { // return any tracked entities with attributes that match the values in the list trackedEntityInstanceQuery?.byFilter(dataId)?.`in`(dataValues) } else { - if (dataValues.size == 1) { - if (isUnique || isOptionSet) { - // If the attribute is unique or an option set, we want an exact match - trackedEntityInstanceQuery?.byFilter(dataId)?.eq(dataValues[0]) - } else { - // return tracked entities that contain the data value + when (searchOperator) { + SearchOperator.LIKE -> { trackedEntityInstanceQuery?.byFilter(dataId)?.like(dataValues[0]) } - } else { - trackedEntityInstanceQuery + SearchOperator.SW -> { + trackedEntityInstanceQuery?.byFilter(dataId)?.sw(dataValues[0]) + } + SearchOperator.EW -> { + trackedEntityInstanceQuery?.byFilter(dataId)?.ew(dataValues[0]) + } + SearchOperator.EQ -> { + trackedEntityInstanceQuery?.byFilter(dataId)?.eq(dataValues[0]) + } + else -> trackedEntityInstanceQuery?.byFilter(dataId)?.like(dataValues[0]) } } } diff --git a/tracker/src/androidUnitTest/kotlin/org/dhis2/tracker/search/data/SearchTrackedEntityRepositoryImplTest.kt b/tracker/src/androidUnitTest/kotlin/org/dhis2/tracker/search/data/SearchTrackedEntityRepositoryImplTest.kt index 7bc2c81871d..6cad077b456 100644 --- a/tracker/src/androidUnitTest/kotlin/org/dhis2/tracker/search/data/SearchTrackedEntityRepositoryImplTest.kt +++ b/tracker/src/androidUnitTest/kotlin/org/dhis2/tracker/search/data/SearchTrackedEntityRepositoryImplTest.kt @@ -2,6 +2,7 @@ package org.dhis2.tracker.search.data import kotlinx.coroutines.test.runTest import org.dhis2.commons.filters.data.FilterPresenter +import org.dhis2.tracker.search.model.SearchOperator import org.hisp.dhis.android.core.D2 import org.hisp.dhis.android.core.arch.repositories.`object`.ReadOnlyOneObjectRepositoryFinalImpl import org.hisp.dhis.android.core.trackedentity.TrackedEntityAttribute @@ -223,8 +224,7 @@ class SearchTrackedEntityRepositoryImplTest { repository.addToQuery( dataId = dataId, dataValues = dataValues, - isUnique = false, - isOptionSet = false, + searchOperator = null, ) // Then - verify the filter was applied @@ -248,8 +248,7 @@ class SearchTrackedEntityRepositoryImplTest { repository.addToQuery( dataId = dataId, dataValues = dataValues, - isUnique = true, - isOptionSet = false, + searchOperator = SearchOperator.EQ, ) // Then - verify the filter was applied @@ -273,8 +272,7 @@ class SearchTrackedEntityRepositoryImplTest { repository.addToQuery( dataId = dataId, dataValues = dataValues, - isUnique = false, - isOptionSet = true, + searchOperator = SearchOperator.EQ, ) // Then - verify the filter was applied @@ -298,14 +296,57 @@ class SearchTrackedEntityRepositoryImplTest { repository.addToQuery( dataId = dataId, dataValues = dataValues, - isUnique = false, - isOptionSet = false, + searchOperator = SearchOperator.LIKE, ) // Then - verify the filter was applied verify(mockQuery).byFilter(dataId) } + @Test + fun `addToQuery should do nothing when dataValues is null`() = + runTest { + // Given + val dataId = "attr1" + val mockQuery: TrackedEntitySearchCollectionRepository = mock(defaultAnswer = Mockito.RETURNS_DEEP_STUBS) + + whenever(filterPresenter.filteredTrackedEntityInstances(any(), any())) doReturn mockQuery + + repository.addFiltersToQuery(programUid, teType) + + // When + repository.addToQuery( + dataId = dataId, + dataValues = null, + searchOperator = null, + ) + + // Then - byFilter should never be called, query remains unchanged + verify(mockQuery, Mockito.never()).byFilter(any()) + } + + @Test + fun `addToQuery should do nothing when dataValues is empty`() = + runTest { + // Given + val dataId = "attr1" + val mockQuery: TrackedEntitySearchCollectionRepository = mock(defaultAnswer = Mockito.RETURNS_DEEP_STUBS) + + whenever(filterPresenter.filteredTrackedEntityInstances(any(), any())) doReturn mockQuery + + repository.addFiltersToQuery(programUid, teType) + + // When + repository.addToQuery( + dataId = dataId, + dataValues = emptyList(), + searchOperator = null, + ) + + // Then - byFilter should never be called, query remains unchanged + verify(mockQuery, Mockito.never()).byFilter(any()) + } + @Test fun `addFiltersToQuery should initialize query with filter presenter`() = runTest { diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/state/TrackerInputUiState.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/state/TrackerInputUiState.kt index 85f029905fc..d0aefc2e87d 100644 --- a/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/state/TrackerInputUiState.kt +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/state/TrackerInputUiState.kt @@ -62,11 +62,15 @@ fun TrackerInputUiState.supportingText(): List? = ) }, searchOperator?.let { operator -> - operator.supportingTextString()?.let { text -> - SupportingTextData( - text, - SupportingTextState.DEFAULT, - ) + if (focused) { + operator.supportingTextString()?.let { text -> + SupportingTextData( + text, + SupportingTextState.DEFAULT, + ) + } + } else { + null } }, description?.let { diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/data/SearchTrackedEntityRepository.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/data/SearchTrackedEntityRepository.kt index 2cd934ed16d..a1d605d507f 100644 --- a/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/data/SearchTrackedEntityRepository.kt +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/data/SearchTrackedEntityRepository.kt @@ -2,6 +2,7 @@ package org.dhis2.tracker.search.data import androidx.paging.PagingData import kotlinx.coroutines.flow.Flow +import org.dhis2.tracker.search.model.SearchOperator import org.dhis2.tracker.search.model.SearchTrackedEntityAttribute import org.dhis2.tracker.search.model.TrackedEntitySearchItemResult @@ -15,9 +16,8 @@ interface SearchTrackedEntityRepository { suspend fun addToQuery( dataId: String, - dataValues: List, - isUnique: Boolean, - isOptionSet: Boolean, + dataValues: List? = null, + searchOperator: SearchOperator?, ) suspend fun addFiltersToQuery( diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/domain/SearchTrackedEntities.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/domain/SearchTrackedEntities.kt index c313d045951..a96ff91a770 100644 --- a/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/domain/SearchTrackedEntities.kt +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/domain/SearchTrackedEntities.kt @@ -67,40 +67,29 @@ class SearchTrackedEntities( // Add filters from FilterManager repository.addFiltersToQuery(input.selectedProgram, teType) - input.queryData?.let { queryData -> - // iterate through the query data and add to the repository query - for ((dataId, dataValues) in queryData) { - // checks if the dataId is an attribute of the teType - val isTETypeAttribute = getIsTETypeAttribute(input.selectedProgram, dataId, teType) + input.queryDataList?.forEach { data -> + val isTETypeAttribute = getIsTETypeAttribute(input.selectedProgram, data.attributeId, teType) - if (input.selectedProgram != null || isTETypeAttribute) { - // fetches the teAttribute details (isUnique, isOptionSet) - - dataValues?.let { values -> - // normalize values: if the attribute doesn't have custom intent that returns multiple values - // and there are multiple values, join them into a single comma-separated value - val normalizedValues = - if (values.size > 1 && - !customIntentRepository.attributeHasCustomIntentAndReturnsAListOfValues( - dataId, - CustomIntentActionTypeModel.SEARCH, - ) - ) { - mutableListOf(values.joinToString(",")) - } else { - values - } - - val teAttribute = repository.getTEAttribute(dataId) - - repository.addToQuery( - dataId, - normalizedValues, - teAttribute.isUnique, - teAttribute.isOptionSet, - ) + if (input.selectedProgram != null || isTETypeAttribute) { + val normalizedValues = + data.values?.let { + if (it.size > 1 && + !customIntentRepository.attributeHasCustomIntentAndReturnsAListOfValues( + data.attributeId, + CustomIntentActionTypeModel.SEARCH, + ) + ) { + mutableListOf(it.joinToString(",")) + } else { + it + } } - } + + repository.addToQuery( + data.attributeId, + normalizedValues, + data.searchOperator, + ) } } } diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/model/QueryData.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/model/QueryData.kt new file mode 100644 index 00000000000..a306466dda0 --- /dev/null +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/model/QueryData.kt @@ -0,0 +1,7 @@ +package org.dhis2.tracker.search.model + +data class QueryData( + val attributeId: String, + val values: List?, + val searchOperator: SearchOperator?, +) diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/model/SearchTrackedEntitiesInput.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/model/SearchTrackedEntitiesInput.kt index 07c69077884..48d8061fc59 100644 --- a/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/model/SearchTrackedEntitiesInput.kt +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/model/SearchTrackedEntitiesInput.kt @@ -6,5 +6,5 @@ data class SearchTrackedEntitiesInput( val excludeValues: Set?, val hasStateFilters: Boolean, val isOnline: Boolean, - val queryData: Map?>?, + val queryDataList: List? = null, ) diff --git a/tracker/src/commonTest/kotlin/org/dhis2/tracker/search/domain/SearchTrackedEntitiesTest.kt b/tracker/src/commonTest/kotlin/org/dhis2/tracker/search/domain/SearchTrackedEntitiesTest.kt index d8c89db0806..3cf9ce9cb6d 100644 --- a/tracker/src/commonTest/kotlin/org/dhis2/tracker/search/domain/SearchTrackedEntitiesTest.kt +++ b/tracker/src/commonTest/kotlin/org/dhis2/tracker/search/domain/SearchTrackedEntitiesTest.kt @@ -8,6 +8,8 @@ import org.dhis2.mobile.commons.customintents.CustomIntentRepository import org.dhis2.mobile.commons.error.DomainError import org.dhis2.mobile.commons.model.CustomIntentActionTypeModel import org.dhis2.tracker.search.data.SearchTrackedEntityRepository +import org.dhis2.tracker.search.model.QueryData +import org.dhis2.tracker.search.model.SearchOperator import org.dhis2.tracker.search.model.SearchTrackedEntitiesInput import org.dhis2.tracker.search.model.SearchTrackedEntityAttribute import org.dhis2.tracker.search.model.TrackedEntitySearchItemResult @@ -44,7 +46,19 @@ class SearchTrackedEntitiesTest { fun `invoke should successfully return flow when query has data`() = runTest { // Given - val queryData = mutableMapOf?>("attr1" to listOf("value1"), "attr2" to listOf("value2")) + val queryDataList = + mutableListOf( + QueryData( + attributeId = "attr1", + values = listOf("value1"), + searchOperator = null, + ), + QueryData( + attributeId = "attr2", + values = listOf("value2"), + searchOperator = null, + ), + ) val searchParams = SearchTrackedEntitiesInput( selectedProgram = "programUid", @@ -52,7 +66,7 @@ class SearchTrackedEntitiesTest { excludeValues = hashSetOf(), hasStateFilters = false, isOnline = true, - queryData = queryData, + queryDataList = queryDataList, ) val mockPagingData: PagingData = PagingData.empty() @@ -81,14 +95,12 @@ class SearchTrackedEntitiesTest { verify(repository).addToQuery( dataId = "attr1", dataValues = listOf("value1"), - isUnique = false, - isOptionSet = false, + searchOperator = null, ) verify(repository).addToQuery( dataId = "attr2", dataValues = listOf("value2"), - isUnique = false, - isOptionSet = false, + searchOperator = null, ) verify(repository).fetchResults( isOnline = true, @@ -108,7 +120,7 @@ class SearchTrackedEntitiesTest { excludeValues = hashSetOf(), hasStateFilters = false, isOnline = false, - queryData = null, + queryDataList = null, ) val mockPagingData: PagingData = PagingData.empty() @@ -122,7 +134,7 @@ class SearchTrackedEntitiesTest { // Then assertTrue(result.isSuccess) verify(repository).addFiltersToQuery("programUid", teType) - verify(repository, never()).addToQuery(any(), any(), any(), any()) + verify(repository, never()).addToQuery(any(), any(), any()) verify(repository).fetchResults( isOnline = false, hasStateFilters = false, @@ -142,7 +154,7 @@ class SearchTrackedEntitiesTest { excludeValues = excludedValues, hasStateFilters = false, isOnline = false, - queryData = null, + queryDataList = null, ) val mockPagingData: PagingData = PagingData.empty() @@ -170,7 +182,7 @@ class SearchTrackedEntitiesTest { excludeValues = excludedValues, hasStateFilters = false, isOnline = false, - queryData = null, + queryDataList = null, ) val mockPagingData: PagingData = PagingData.empty() @@ -190,7 +202,14 @@ class SearchTrackedEntitiesTest { fun `invoke should add query for unique attributes`() = runTest { // Given - val queryData = mutableMapOf?>("uniqueAttr" to listOf("exactValue")) + val queryData = + mutableListOf( + QueryData( + attributeId = "uniqueAttr", + values = listOf("exactValue"), + searchOperator = SearchOperator.EQ, + ), + ) val searchParams = SearchTrackedEntitiesInput( selectedProgram = "programUid", @@ -198,7 +217,7 @@ class SearchTrackedEntitiesTest { excludeValues = hashSetOf(), hasStateFilters = false, isOnline = true, - queryData = queryData, + queryDataList = queryData, ) val mockPagingData: PagingData = PagingData.empty() @@ -226,8 +245,7 @@ class SearchTrackedEntitiesTest { verify(repository).addToQuery( dataId = "uniqueAttr", dataValues = listOf("exactValue"), - isUnique = true, - isOptionSet = false, + searchOperator = SearchOperator.EQ, ) } @@ -235,7 +253,14 @@ class SearchTrackedEntitiesTest { fun `invoke should add query for option set attributes`() = runTest { // Given - val queryData = mutableMapOf?>("optionSetAttr" to listOf("optionValue")) + val queryData = + mutableListOf( + QueryData( + attributeId = "optionSetAttr", + values = listOf("optionValue"), + searchOperator = SearchOperator.EQ, + ), + ) val searchParams = SearchTrackedEntitiesInput( selectedProgram = "programUid", @@ -243,7 +268,7 @@ class SearchTrackedEntitiesTest { excludeValues = hashSetOf(), hasStateFilters = false, isOnline = true, - queryData = queryData, + queryDataList = queryData, ) val mockPagingData: PagingData = PagingData.empty() @@ -271,8 +296,7 @@ class SearchTrackedEntitiesTest { verify(repository).addToQuery( dataId = "optionSetAttr", dataValues = listOf("optionValue"), - isUnique = false, - isOptionSet = true, + searchOperator = SearchOperator.EQ, ) } @@ -280,7 +304,14 @@ class SearchTrackedEntitiesTest { fun `invoke should join multiple values when custom intent does not return list`() = runTest { // Given - val queryData = mutableMapOf?>("attr1" to listOf("value1", "value2", "value3")) + val queryData = + mutableListOf( + QueryData( + attributeId = "attr1", + values = listOf("value1", "value2", "value3"), + searchOperator = null, + ), + ) val searchParams = SearchTrackedEntitiesInput( selectedProgram = "programUid", @@ -288,7 +319,7 @@ class SearchTrackedEntitiesTest { excludeValues = hashSetOf(), hasStateFilters = false, isOnline = true, - queryData = queryData, + queryDataList = queryData, ) val mockPagingData: PagingData = PagingData.empty() @@ -316,8 +347,7 @@ class SearchTrackedEntitiesTest { verify(repository).addToQuery( dataId = "attr1", dataValues = listOf("value1,value2,value3"), - isUnique = false, - isOptionSet = false, + searchOperator = null, ) } @@ -325,7 +355,14 @@ class SearchTrackedEntitiesTest { fun `invoke should keep multiple values when custom intent returns list`() = runTest { // Given - val queryData = mutableMapOf?>("attr1" to listOf("value1", "value2", "value3")) + val queryData = + mutableListOf( + QueryData( + attributeId = "attr1", + values = listOf("value1", "value2", "value3"), + searchOperator = null, + ), + ) val searchParams = SearchTrackedEntitiesInput( selectedProgram = "programUid", @@ -333,7 +370,7 @@ class SearchTrackedEntitiesTest { excludeValues = hashSetOf(), hasStateFilters = false, isOnline = true, - queryData = queryData, + queryDataList = queryData, ) val mockPagingData: PagingData = PagingData.empty() @@ -361,8 +398,7 @@ class SearchTrackedEntitiesTest { verify(repository).addToQuery( dataId = "attr1", dataValues = listOf("value1", "value2", "value3"), - isUnique = false, - isOptionSet = false, + searchOperator = null, ) } @@ -370,7 +406,19 @@ class SearchTrackedEntitiesTest { fun `invoke should skip attributes not belonging to teType when no program selected`() = runTest { // Given - val queryData = mutableMapOf?>("attr1" to listOf("value1"), "attr2" to listOf("value2")) + val queryData = + mutableListOf( + QueryData( + attributeId = "attr1", + values = listOf("value1"), + searchOperator = SearchOperator.EQ, + ), + QueryData( + attributeId = "attr2", + values = listOf("value2"), + searchOperator = SearchOperator.LIKE, + ), + ) val searchParams = SearchTrackedEntitiesInput( selectedProgram = null, @@ -378,7 +426,7 @@ class SearchTrackedEntitiesTest { excludeValues = hashSetOf(), hasStateFilters = false, isOnline = false, - queryData = queryData, + queryDataList = queryData, ) val mockPagingData: PagingData = PagingData.empty() @@ -407,8 +455,7 @@ class SearchTrackedEntitiesTest { verify(repository).addToQuery( dataId = "attr1", dataValues = listOf("value1"), - isUnique = false, - isOptionSet = false, + SearchOperator.EQ, ) verify(repository, never()).getTEAttribute("attr2") } @@ -424,7 +471,7 @@ class SearchTrackedEntitiesTest { excludeValues = hashSetOf(), hasStateFilters = false, isOnline = true, - queryData = null, + queryDataList = null, ) val domainError = DomainError.UnexpectedError("Test error") @@ -451,7 +498,7 @@ class SearchTrackedEntitiesTest { excludeValues = hashSetOf(), hasStateFilters = true, isOnline = true, - queryData = null, + queryDataList = null, ) val mockPagingData: PagingData = PagingData.empty() @@ -482,7 +529,7 @@ class SearchTrackedEntitiesTest { excludeValues = hashSetOf(), hasStateFilters = false, isOnline = false, - queryData = null, + queryDataList = null, ) val mockPagingData: PagingData = PagingData.empty() From 0282fc64003a8105e5ce4587a418048fe0619f8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Fernando=20G=C3=B3mez?= Date: Thu, 26 Feb 2026 15:56:32 +0100 Subject: [PATCH 071/114] feat: Use new Indicator component for feedback [ANDROAPP-7511] (#4689) * feat: [ANDROAPP-7511] Use new Indicator component for feedback - Enable Markdown with useMarkdown flag - For DisplayText use title only with no content * fix: [ANDROAPP-7511] Update default color and value for Indicators --- .../dashboardfragments/indicators/BaseIndicatorRepository.kt | 4 ++-- .../java/dhis2/org/analytics/charts/ui/IndicatorViewHolder.kt | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/org/dhis2/usescases/teiDashboard/dashboardfragments/indicators/BaseIndicatorRepository.kt b/app/src/main/java/org/dhis2/usescases/teiDashboard/dashboardfragments/indicators/BaseIndicatorRepository.kt index 7c1f1e179af..d3194241c19 100644 --- a/app/src/main/java/org/dhis2/usescases/teiDashboard/dashboardfragments/indicators/BaseIndicatorRepository.kt +++ b/app/src/main/java/org/dhis2/usescases/teiDashboard/dashboardfragments/indicators/BaseIndicatorRepository.kt @@ -131,9 +131,9 @@ abstract class BaseIndicatorRepository( ProgramIndicator .builder() .uid(UidGeneratorImpl().generate()) - .displayName(resourceManager.defaultIndicatorLabel()) + .displayName("${ruleAction.content() ?: ""}${ruleEffect.data}") .build(), - "${ruleAction.content() ?: ""}${ruleEffect.data}", + "", null, ruleAction.values["location"] ?: DEFAULT_LOCATION, resourceManager.defaultIndicatorLabel(), diff --git a/dhis_android_analytics/src/main/java/dhis2/org/analytics/charts/ui/IndicatorViewHolder.kt b/dhis_android_analytics/src/main/java/dhis2/org/analytics/charts/ui/IndicatorViewHolder.kt index 1d21a5552be..13b12ac6e41 100644 --- a/dhis_android_analytics/src/main/java/dhis2/org/analytics/charts/ui/IndicatorViewHolder.kt +++ b/dhis_android_analytics/src/main/java/dhis2/org/analytics/charts/ui/IndicatorViewHolder.kt @@ -54,7 +54,7 @@ class IndicatorViewHolder( if (!programIndicatorModel.color.isNullOrEmpty()) { Color(programIndicatorModel.color()) } else { - SurfaceColor.Container + SurfaceColor.ContainerHigh }, content = programIndicatorModel.value ?: "", modifier = @@ -69,6 +69,7 @@ class IndicatorViewHolder( Modifier }, ), + useMarkdown = true, ) Spacer(modifier = Modifier.size(16.dp)) } From f4b9f2e5ba5cf62e0a400b21e53b32288e98c0f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Miguel=20Rubio?= Date: Fri, 27 Feb 2026 12:24:59 +0100 Subject: [PATCH 072/114] test: Implement SearchParametersIntegrationTest.kt (#4684) * test: add SearchParametersViewModelTest.kt * fix: Make suspend functions inside SearchParametersViewModel.kt internal * test: Implement SearchParametersIntegrationTest.kt * ci: add verification metadata * ci: ktlintFormat * test: add copilot feedback --- gradle/verification-metadata.xml | 257 +++++++++++++++++- .../search/SearchParametersIntegrationTest.kt | 138 ++++++++++ 2 files changed, 383 insertions(+), 12 deletions(-) create mode 100644 tracker/src/commonTest/kotlin/org/dhis2/tracker/search/SearchParametersIntegrationTest.kt diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index 91c1498ba12..3790393031a 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -4023,6 +4023,11 @@ + + + + + @@ -4031,11 +4036,24 @@ + + + + + + + + + + + + + @@ -4044,11 +4062,24 @@ + + + + + + + + + + + + + @@ -4057,6 +4088,14 @@ + + + + + + + + @@ -4086,6 +4125,14 @@ + + + + + + + + @@ -4110,6 +4157,14 @@ + + + + + + + + @@ -4118,6 +4173,14 @@ + + + + + + + + @@ -4158,6 +4221,14 @@ + + + + + + + + @@ -4174,6 +4245,14 @@ + + + + + + + + @@ -4190,6 +4269,14 @@ + + + + + + + + @@ -4198,6 +4285,14 @@ + + + + + + + + @@ -4230,6 +4325,14 @@ + + + + + + + + @@ -4246,6 +4349,14 @@ + + + + + + + + @@ -4262,6 +4373,14 @@ + + + + + + + + @@ -11053,6 +11172,14 @@ + + + + + + + + @@ -11069,6 +11196,14 @@ + + + + + + + + @@ -11101,6 +11236,14 @@ + + + + + + + + @@ -11109,6 +11252,14 @@ + + + + + + + + @@ -11117,6 +11268,14 @@ + + + + + + + + @@ -11125,6 +11284,14 @@ + + + + + + + + @@ -11133,6 +11300,14 @@ + + + + + + + + @@ -11141,6 +11316,14 @@ + + + + + + + + @@ -12966,18 +13149,15 @@ - - - - - - - - - + + + + + + + + + @@ -14037,6 +14217,11 @@ + + + + + @@ -14053,6 +14238,14 @@ + + + + + + + + @@ -14080,6 +14273,14 @@ + + + + + + + + @@ -14107,6 +14308,14 @@ + + + + + + + + @@ -14123,6 +14332,14 @@ + + + + + + + + @@ -14150,6 +14367,14 @@ + + + + + + + + @@ -14177,6 +14402,14 @@ + + + + + + + + diff --git a/tracker/src/commonTest/kotlin/org/dhis2/tracker/search/SearchParametersIntegrationTest.kt b/tracker/src/commonTest/kotlin/org/dhis2/tracker/search/SearchParametersIntegrationTest.kt new file mode 100644 index 00000000000..debc6b3ef70 --- /dev/null +++ b/tracker/src/commonTest/kotlin/org/dhis2/tracker/search/SearchParametersIntegrationTest.kt @@ -0,0 +1,138 @@ +package org.dhis2.tracker.search + +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.test.StandardTestDispatcher +import kotlinx.coroutines.test.advanceUntilIdle +import kotlinx.coroutines.test.resetMain +import kotlinx.coroutines.test.runTest +import kotlinx.coroutines.test.setMain +import org.dhis2.mobile.commons.coroutine.Dispatcher +import org.dhis2.mobile.commons.resources.StringResourceProvider +import org.dhis2.tracker.input.model.TrackerInputType +import org.dhis2.tracker.input.ui.mapper.toTrackerInputUiState +import org.dhis2.tracker.search.data.SearchParametersRepository +import org.dhis2.tracker.search.domain.FetchSearchParameters +import org.dhis2.tracker.search.model.FetchSearchParametersData +import org.dhis2.tracker.search.model.SearchOperator +import org.dhis2.tracker.search.model.SearchParameterModel +import org.dhis2.tracker.search.ui.state.SearchParametersUiState +import org.dhis2.tracker.search.ui.viewmodel.SearchParametersViewModel +import org.mockito.kotlin.any +import org.mockito.kotlin.mock +import org.mockito.kotlin.whenever +import kotlin.test.AfterTest +import kotlin.test.BeforeTest +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertNull +import kotlin.test.assertTrue + +@ExperimentalCoroutinesApi +class SearchParametersIntegrationTest { + private val testDispatcher = StandardTestDispatcher() + private val dispatcher = + Dispatcher( + io = testDispatcher, + main = testDispatcher, + default = testDispatcher, + ) + + private val repository: SearchParametersRepository = mock() + private val resourceProvider: StringResourceProvider = mock() + + private lateinit var fetchSearchParameters: FetchSearchParameters + private lateinit var viewModel: SearchParametersViewModel + + @BeforeTest + fun setUp() { + Dispatchers.setMain(testDispatcher) + fetchSearchParameters = FetchSearchParameters(dispatcher, repository) + viewModel = SearchParametersViewModel(resourceProvider) + } + + @AfterTest + fun tearDown() { + Dispatchers.resetMain() + } + + @Test + fun `given min character limit is configured, when user enters exactly min characters, then search proceeds successfully`() = + runTest(testDispatcher) { + // Given + val min = 2 + val teiTypeUid = "teiType123" + val searchParameter = buildSearchParameter(minCharactersToSearch = min) + whenever(repository.getSearchParametersByTrackedEntityType(teiTypeUid)) + .thenReturn(listOf(searchParameter)) + + val fetchResult = + fetchSearchParameters(FetchSearchParametersData(teiTypeUid = teiTypeUid)) + assertTrue(fetchResult.isSuccess) + + // When - user enters exactly min characters + val itemWithExactMinChars = + fetchResult + .getOrNull()!! + .map { it.toTrackerInputUiState().copy(value = "a".repeat(min)) } + viewModel.updateFromExternal(SearchParametersUiState(items = itemWithExactMinChars)) + viewModel.onValidateSearch() + advanceUntilIdle() + + // Then - search proceeds successfully + val validationResult = viewModel.validationResult.first() + assertEquals(true, validationResult) + + // And no error message is shown + val uiState = viewModel.uiState.first() + assertTrue(uiState.items.all { it.error == null }) + } + + @Test + fun `given min character limit, when user enters fewer than min characters, then search fails and error is shown`() = + runTest(testDispatcher) { + // Given + val min = 3 + val teiTypeUid = "teiType123" + val errorMessage = "Minimum $min characters required" + val searchParameter = buildSearchParameter(minCharactersToSearch = min) + whenever(repository.getSearchParametersByTrackedEntityType(teiTypeUid)) + .thenReturn(listOf(searchParameter)) + whenever(resourceProvider.provideString(any(), any())).thenReturn(errorMessage) + + val fetchResult = + fetchSearchParameters(FetchSearchParametersData(teiTypeUid = teiTypeUid)) + assertTrue(fetchResult.isSuccess) + + // When - user enters fewer than min characters + val itemWithInsufficientChars = + fetchResult + .getOrNull()!! + .map { it.toTrackerInputUiState().copy(value = "a".repeat(min - 1)) } + viewModel.updateFromExternal(SearchParametersUiState(items = itemWithInsufficientChars)) + viewModel.onValidateSearch() + advanceUntilIdle() + + // Then - search proceeds unsuccessfully + val validationResult = viewModel.validationResult.first() + assertEquals(false, validationResult) + + // And an error message is shown + val uiState = viewModel.uiState.first() + assertNull(uiState.items.firstOrNull { it.error == null }) + assertEquals(errorMessage, uiState.items.first().error) + } + + private fun buildSearchParameter(minCharactersToSearch: Int): SearchParameterModel = + SearchParameterModel( + uid = "field1", + label = "First Name", + inputType = TrackerInputType.TEXT, + optionSet = null, + customIntentUid = null, + minCharactersToSearch = minCharactersToSearch, + searchOperator = SearchOperator.LIKE, + isUnique = false, + ) +} From ee9bff4964ef0d09e753a7c6e93320c51c0de782 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Tar=C3=AD?= Date: Mon, 2 Mar 2026 14:57:24 +0100 Subject: [PATCH 073/114] chore: [ANDROAPP-7525] adapt to changes in sdk event service and enrollment aoc (#4691) * chore: [ANDROAPP-7525] update sdk and dependency metadata # Conflicts: # gradle/verification-metadata.xml * chore: [ANDROAPP-7525] update non editable status code and string * chore: [ANDROAPP-7525] add new mandatory attributeOptionCombo to enrollments * chore: [ANDROAPP-7525] fix format * chore: [ANDROAPP-7525] fix test * chore: [ANDROAPP-7525] change string code name in all languages --- .../scheduling/SchedulingDialogUiTest.kt | 6 +++- .../EventCaptureFormPresenter.kt | 4 +-- .../providers/EventDetailResourcesProvider.kt | 4 +-- app/src/main/res/values-ar/strings.xml | 2 +- app/src/main/res/values-cs/strings.xml | 2 +- app/src/main/res/values-es-rES/strings.xml | 2 +- app/src/main/res/values-es/strings.xml | 2 +- app/src/main/res/values-fr/strings.xml | 2 +- app/src/main/res/values-lo/strings.xml | 2 +- app/src/main/res/values-nl/strings.xml | 2 +- app/src/main/res/values-pt/strings.xml | 2 +- app/src/main/res/values-ru/strings.xml | 2 +- app/src/main/res/values-uk/strings.xml | 2 +- app/src/main/res/values-vi/strings.xml | 2 +- app/src/main/res/values-zh-rCN/strings.xml | 2 +- app/src/main/res/values-zh/strings.xml | 2 +- app/src/main/res/values/strings.xml | 2 +- .../data/dhislogic/DhisEnrollmentUtilsTest.kt | 2 ++ .../dhislogic/EnrollmentEventGeneratorTest.kt | 1 + .../sorting/SearchSortingValueSetterTest.kt | 1 + ...pCoordinateFieldToFeatureCollectionTest.kt | 3 ++ .../MapDataElementToFeatureTest.kt | 3 ++ .../EventCaptureRepositoryImplTest.kt | 1 + .../usescases/notes/NotesRepositoryTest.kt | 7 ++++- .../noteDetail/NoteDetailRepositoryTest.kt | 7 ++++- .../searchTrackEntity/SearchRepositoryTest.kt | 1 + .../ui/mapper/TEICardMapperTest.kt | 2 ++ .../DashboardRepositoryImplTest.kt | 2 ++ .../teiDashboard/TeiDashboardPresenterTest.kt | 7 ++++- .../EventIndicatorRepositoryTest.kt | 7 ++++- .../TrackerAnalyticsRepositoryTest.kt | 7 ++++- .../RelationshipPresenterTest.kt | 1 + .../scheduling/SchedulingViewModelTest.kt | 7 ++++- .../TeiProgramListRepositoryImplTest.kt | 2 ++ .../ui/mapper/InfoBarMapperTest.kt | 1 + .../ui/mapper/QuickActionsMapperTest.kt | 1 + .../ui/mapper/TEIDetailMapperTest.kt | 1 + .../analytics/charts/ChartsRepositoryTest.kt | 2 ++ gradle/libs.versions.toml | 2 +- gradle/verification-metadata.xml | 31 +++++++++++++++++++ 40 files changed, 115 insertions(+), 26 deletions(-) diff --git a/app/src/androidTest/java/org/dhis2/usescases/teidashboard/dialogs/scheduling/SchedulingDialogUiTest.kt b/app/src/androidTest/java/org/dhis2/usescases/teidashboard/dialogs/scheduling/SchedulingDialogUiTest.kt index 439cd182a0d..63bb99534cd 100644 --- a/app/src/androidTest/java/org/dhis2/usescases/teidashboard/dialogs/scheduling/SchedulingDialogUiTest.kt +++ b/app/src/androidTest/java/org/dhis2/usescases/teidashboard/dialogs/scheduling/SchedulingDialogUiTest.kt @@ -34,7 +34,11 @@ class SchedulingDialogUiTest : BaseTest() { val composeTestRule = createAndroidComposeRule() private val viewModel: SchedulingViewModel = mock() - private val enrollment = Enrollment.builder().uid("enrollmentUid").build() + private val enrollment = Enrollment + .builder() + .uid("enrollmentUid") + .attributeOptionCombo("attributeOptionComboUid") + .build() private val overdueSubtitle = "Overdue subtitle" diff --git a/app/src/main/java/org/dhis2/usescases/eventsWithoutRegistration/eventCapture/eventCaptureFragment/EventCaptureFormPresenter.kt b/app/src/main/java/org/dhis2/usescases/eventsWithoutRegistration/eventCapture/eventCaptureFragment/EventCaptureFormPresenter.kt index 86ca05bc1c7..4bf38c2a121 100644 --- a/app/src/main/java/org/dhis2/usescases/eventsWithoutRegistration/eventCapture/eventCaptureFragment/EventCaptureFormPresenter.kt +++ b/app/src/main/java/org/dhis2/usescases/eventsWithoutRegistration/eventCapture/eventCaptureFragment/EventCaptureFormPresenter.kt @@ -72,8 +72,8 @@ class EventCaptureFormPresenter( 1, ) to false - EventNonEditableReason.ORGUNIT_IS_NOT_IN_CAPTURE_SCOPE -> - resourceManager.getString(R.string.edition_orgunit_capture_scope) to + EventNonEditableReason.ORGUNIT_IS_NOT_IN_USER_SCOPE -> + resourceManager.getString(R.string.edition_orgunit_user_scope) to false } view.showNonEditableMessage(reason, canBeReOpened) diff --git a/app/src/main/java/org/dhis2/usescases/eventsWithoutRegistration/eventDetails/providers/EventDetailResourcesProvider.kt b/app/src/main/java/org/dhis2/usescases/eventsWithoutRegistration/eventDetails/providers/EventDetailResourcesProvider.kt index 5057dbcf06d..5fe7fc1a62f 100644 --- a/app/src/main/java/org/dhis2/usescases/eventsWithoutRegistration/eventDetails/providers/EventDetailResourcesProvider.kt +++ b/app/src/main/java/org/dhis2/usescases/eventsWithoutRegistration/eventDetails/providers/EventDetailResourcesProvider.kt @@ -46,8 +46,8 @@ class EventDetailResourcesProvider( R.string.edition_enrollment_is_no_open_V2, 1, ) - EventNonEditableReason.ORGUNIT_IS_NOT_IN_CAPTURE_SCOPE -> - resourceManager.getString(R.string.edition_orgunit_capture_scope) + EventNonEditableReason.ORGUNIT_IS_NOT_IN_USER_SCOPE -> + resourceManager.getString(R.string.edition_orgunit_user_scope) } fun provideButtonUpdate() = resourceManager.getString(R.string.update) diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 178250337e8..795f1ac441b 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -799,7 +799,7 @@ ليس لديك إذن لتحرير هذه البيانات هذه البيانات غير قابلة للتعديل لأنه تم اغلاق الوحدة التنظيمية ليس لديك إذن لتحرير هذه البيانات - لا يمكنك تحرير البيانات من هذه الوحدة التنظيمية + لا يمكنك تحرير البيانات من هذه الوحدة التنظيمية إعادة البحث البحث عبر الإتصال بالسيرفر عن طريق الإنترنت ارجع الرسالة التالية: تحذير قواعد البرنامج diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 52e7f792fb0..7c95d05181f 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -817,7 +817,7 @@ K úpravě těchto údajů nemáte oprávnění Tato data nelze upravovat, protože organizační jednotka je zavřená K úpravě těchto údajů nemáte oprávnění - Data z této organizační jednotky nemůžete upravovat + Data z této organizační jednotky nemůžete upravovat Obnovit vyhledávání Online vyhledávání vrátilo následující zprávu: Upozornění na pravidla programu diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index 4040f9348fb..15df8b14832 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -775,7 +775,7 @@ No tiene permisos de edición para estos datos. Los datos no son editables por que la unidad organizativa está cerrada. No tiene permisos de edición para estos datos. - No puede editar datos en esta unidad organizativa. + No puede editar datos en esta unidad organizativa. Reiniciar búsqueda La búsqueda online a devuelto este mensaje: Advertencia de reglas del programa diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index d4332bf6a1b..8b22f556b2a 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -811,7 +811,7 @@ No tiene permisos de edición para estos datos. Los datos no son editables por que la unidad organizativa está cerrada. No tiene permisos de edición para estos datos. - No puede editar datos en esta unidad organizativa. + No puede editar datos en esta unidad organizativa. Reiniciar búsqueda La búsqueda online a devuelto este mensaje: Advertencia de reglas del programa diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 0267efee3d4..9cdc56e5576 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -779,7 +779,7 @@ Cette donnée n\'est pas modifiable car son heure d\'édition est expirée Vous n\'êtes pas autorisé à modifier ces données Vous n\'êtes pas autorisé à modifier ces données - Vous ne pouvez pas modifier les données de cette unité organisationnelle + Vous ne pouvez pas modifier les données de cette unité organisationnelle Réinitialiser la recherche La recherche en ligne a renvoyé le message suivant : Avertissement relatif aux règles du programme diff --git a/app/src/main/res/values-lo/strings.xml b/app/src/main/res/values-lo/strings.xml index fca80f9df6a..c6ab3e8edc6 100644 --- a/app/src/main/res/values-lo/strings.xml +++ b/app/src/main/res/values-lo/strings.xml @@ -773,7 +773,7 @@ ທ່ານບໍ່ໄດ້ຮັບອານຸຍາດໃນການແກ້ໄຂຂໍ້ມູນນີ້ ຂໍ້ມູນນີ້ບໍ່ສາມາດແກ້ໄຂໄດ້ເນື່ອງຈາກຫົວຫນ່ວຍການຈັດຕັ້ງຖືກປິດໃວ້ຢູ່ ທ່ານບໍ່ໄດ້ຮັບອານຸຍາດໃນການແກ້ໄຂຂໍ້ມູນນີ້ - ທ່ານບໍ່ສາມາດແກ້ໄຂຂໍ້ມູນຈາກຫົວຫນ່ວຍການຈັດຕັ້ງນີ້ໄດ້ + ທ່ານບໍ່ສາມາດແກ້ໄຂຂໍ້ມູນຈາກຫົວຫນ່ວຍການຈັດຕັ້ງນີ້ໄດ້ ລີເຊັດການຄົ້ນຫາ ການຄົ້ນຫາອອນໄລນ໌ສົ່ງຂໍ້ຄວາມຕໍ່ໄປນີ້: ຂໍ້ຄວນລະວັງກົດຂອງສາຍງານ diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 5ca9c9d85ca..0a62a1985e0 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -782,7 +782,7 @@ U heeft geen toestemming om deze gegevens te bewerken Deze gegevens zijn niet bewerkbaar omdat de organisatie-eenheid gesloten is U heeft geen toestemming om deze gegevens te bewerken - U kunt gegevens van deze organisatie-eenheid niet bewerken + U kunt gegevens van deze organisatie-eenheid niet bewerken Zoeken resetten De online zoekopdracht leverde het volgende bericht op: Waarschuwing programmaregels diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index 022335f6705..d3ab2b35547 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -808,7 +808,7 @@ Não tem permissão para editar estes dados Estes dados não são editáveis porque a unidade organizacional está encerrada Não tem permissão para editar estes dados - Não é possível editar dados desta unidade organizacional + Não é possível editar dados desta unidade organizacional Repor a pesquisa A pesquisa em linha deu a seguinte mensagem: Aviso de regras do programa diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 026770ee294..f24f2038586 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -776,7 +776,7 @@ У Вас нет прав на редактирование этих данных Эти данные нельзя редактировать, потому что организационное подразделение закрыто У вас нет прав на редактирование этих данных - Вы не можете редактировать данные из этой Организационной единицы + Вы не можете редактировать данные из этой Организационной единицы Сброс поиска Онлайн поиск дал следующее сообщение: Предупреждение о правилах программы diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 2a103ab6774..5d026635f3f 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -795,7 +795,7 @@ Ви не маєте дозволу редагувати ці дані Ці дані не можна редагувати, оскільки організаційний підрозділ закрито Ви не маєте дозволу редагувати ці дані - Ви не можете редагувати дані з цього організаційного підрозділу + Ви не можете редагувати дані з цього організаційного підрозділу Скинути пошук Онлайн-пошук дав таке повідомлення: Попередження про правила програми diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 1e16d6b8b29..30f4c979edc 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -804,7 +804,7 @@ Bạn không có quyền chỉnh sửa dữ liệu này Dữ liệu này không thể sửa bởi vì đơn vị đã bị đóng Bạn không có quyền chỉnh sửa dữ liệu này - Bạn không thể chỉnh sửa dữ liệu từ đơn vị này + Bạn không thể chỉnh sửa dữ liệu từ đơn vị này Đặt lại Tìm Kiếm Tìm kiếm trực tuyến trả về tin nhắn sau: Cảnh báo quy tắc chương trình diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 59694fa102e..580b97a7e34 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -804,7 +804,7 @@ 您无权编辑此数据 此数据不可修改,因为单位部门已关闭 您无权编辑此数据 - 您无法编辑此机构的数据 + 您无法编辑此机构的数据 重置搜索 网上搜索返回如下信息: 项目规则警告 diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index 6ab1c89314f..8a0f0c97aa0 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -811,7 +811,7 @@ 您无权编辑此数据 此数据不可修改,因为单位部门已关闭 您无权编辑此数据 - 您无法编辑此机构的数据 + 您无法编辑此机构的数据 重置搜索 网上搜索返回如下信息: 项目规则警告 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 43c1d6df602..f4aa3019257 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -827,7 +827,7 @@ You do not have permission to edit this data This data is not editable because the organization unit is closed You do not have permission to edit this data - You cannot edit data from this organisation unit + You cannot edit data from this organisation unit Reset search The online search returned the following message: Program rules warning diff --git a/app/src/test/java/org/dhis2/data/dhislogic/DhisEnrollmentUtilsTest.kt b/app/src/test/java/org/dhis2/data/dhislogic/DhisEnrollmentUtilsTest.kt index 0fe12fafebd..bc018e273e9 100644 --- a/app/src/test/java/org/dhis2/data/dhislogic/DhisEnrollmentUtilsTest.kt +++ b/app/src/test/java/org/dhis2/data/dhislogic/DhisEnrollmentUtilsTest.kt @@ -47,6 +47,7 @@ class DhisEnrollmentUtilsTest { .builder() .uid("enrollmentUid") .status(EnrollmentStatus.CANCELLED) + .attributeOptionCombo("attributeOptionComboUid") .build() val result = dhisEnrollmentUtils.isEventEnrollmentOpen( @@ -92,6 +93,7 @@ class DhisEnrollmentUtilsTest { .builder() .uid("enrollmentUid") .status(EnrollmentStatus.ACTIVE) + .attributeOptionCombo("attributeOptionComboUid") .build() val result = dhisEnrollmentUtils.isEventEnrollmentOpen( diff --git a/app/src/test/java/org/dhis2/data/dhislogic/EnrollmentEventGeneratorTest.kt b/app/src/test/java/org/dhis2/data/dhislogic/EnrollmentEventGeneratorTest.kt index 10e238194b7..77fc808aa2d 100644 --- a/app/src/test/java/org/dhis2/data/dhislogic/EnrollmentEventGeneratorTest.kt +++ b/app/src/test/java/org/dhis2/data/dhislogic/EnrollmentEventGeneratorTest.kt @@ -164,6 +164,7 @@ class EnrollmentEventGeneratorTest { GregorianCalendar(2019, 0, 1).time, ).program(PROGRAM_UID) .organisationUnit(ENROLLMENT_ORG_UNIT) + .attributeOptionCombo("attributeOptionComboUid") .build() private fun mockedProgram(useFirstStage: Boolean) = diff --git a/app/src/test/java/org/dhis2/data/sorting/SearchSortingValueSetterTest.kt b/app/src/test/java/org/dhis2/data/sorting/SearchSortingValueSetterTest.kt index 089d9537808..3770540ec16 100644 --- a/app/src/test/java/org/dhis2/data/sorting/SearchSortingValueSetterTest.kt +++ b/app/src/test/java/org/dhis2/data/sorting/SearchSortingValueSetterTest.kt @@ -547,6 +547,7 @@ class SearchSortingValueSetterTest { .status(EnrollmentStatus.ACTIVE) .program("programUid") .enrollmentDate(Date.from(Instant.parse("2020-01-01T00:00:00.00Z"))) + .attributeOptionCombo("attributeOptionComboUid") .build(), ) tei = diff --git a/app/src/test/java/org/dhis2/uicomponents/map/geometry/MapCoordinateFieldToFeatureCollectionTest.kt b/app/src/test/java/org/dhis2/uicomponents/map/geometry/MapCoordinateFieldToFeatureCollectionTest.kt index 24c0aa71ddc..55bcaa81c08 100644 --- a/app/src/test/java/org/dhis2/uicomponents/map/geometry/MapCoordinateFieldToFeatureCollectionTest.kt +++ b/app/src/test/java/org/dhis2/uicomponents/map/geometry/MapCoordinateFieldToFeatureCollectionTest.kt @@ -76,6 +76,7 @@ class MapCoordinateFieldToFeatureCollectionTest { .builder() .uid("enrollmentUid") .trackedEntityInstance("teiUid") + .attributeOptionCombo("attributeOptionComboUid") .build(), Geometry .builder() @@ -104,6 +105,7 @@ class MapCoordinateFieldToFeatureCollectionTest { .builder() .uid("enrollmentUid") .trackedEntityInstance("teiUid") + .attributeOptionCombo("attributeOptionComboUid") .build(), Geometry .builder() @@ -132,6 +134,7 @@ class MapCoordinateFieldToFeatureCollectionTest { .builder() .uid("enrollmentUid") .trackedEntityInstance("teiUid") + .attributeOptionCombo("attributeOptionComboUid") .build(), Geometry .builder() diff --git a/app/src/test/java/org/dhis2/uicomponents/map/geometry/mapper/featurecollection/MapDataElementToFeatureTest.kt b/app/src/test/java/org/dhis2/uicomponents/map/geometry/mapper/featurecollection/MapDataElementToFeatureTest.kt index 109afa7ac23..4945cb931f5 100644 --- a/app/src/test/java/org/dhis2/uicomponents/map/geometry/mapper/featurecollection/MapDataElementToFeatureTest.kt +++ b/app/src/test/java/org/dhis2/uicomponents/map/geometry/mapper/featurecollection/MapDataElementToFeatureTest.kt @@ -85,6 +85,7 @@ class MapDataElementToFeatureTest { .builder() .uid("enrollmentUid") .trackedEntityInstance("teiUid") + .attributeOptionCombo("attributeOptionComboUid") .build(), Geometry .builder() @@ -113,6 +114,7 @@ class MapDataElementToFeatureTest { .builder() .uid("enrollmentUid") .trackedEntityInstance("teiUid") + .attributeOptionCombo("attributeOptionComboUid") .build(), Geometry .builder() @@ -141,6 +143,7 @@ class MapDataElementToFeatureTest { .builder() .uid("enrollmentUid") .trackedEntityInstance("teiUid") + .attributeOptionCombo("attributeOptionComboUid") .build(), Geometry .builder() diff --git a/app/src/test/java/org/dhis2/usescases/eventsWithoutRegistration/eventCapture/EventCaptureRepositoryImplTest.kt b/app/src/test/java/org/dhis2/usescases/eventsWithoutRegistration/eventCapture/EventCaptureRepositoryImplTest.kt index 263ca795f01..6329a7dbeb8 100644 --- a/app/src/test/java/org/dhis2/usescases/eventsWithoutRegistration/eventCapture/EventCaptureRepositoryImplTest.kt +++ b/app/src/test/java/org/dhis2/usescases/eventsWithoutRegistration/eventCapture/EventCaptureRepositoryImplTest.kt @@ -130,6 +130,7 @@ class EventCaptureRepositoryImplTest { .builder() .uid(trackerEventEnrollmentUid) .status(EnrollmentStatus.CANCELLED) + .attributeOptionCombo("attributeOptionComboUid") .build() val repository = diff --git a/app/src/test/java/org/dhis2/usescases/notes/NotesRepositoryTest.kt b/app/src/test/java/org/dhis2/usescases/notes/NotesRepositoryTest.kt index c51061d5fca..87cb0762bcd 100644 --- a/app/src/test/java/org/dhis2/usescases/notes/NotesRepositoryTest.kt +++ b/app/src/test/java/org/dhis2/usescases/notes/NotesRepositoryTest.kt @@ -174,6 +174,11 @@ class NotesRepositoryTest { .eq(teiUid) .one() .blockingGet(), - ) doReturn Enrollment.builder().uid(enrollmentUid).build() + ) doReturn + Enrollment + .builder() + .uid(enrollmentUid) + .attributeOptionCombo("attributeOptionComboUid") + .build() } } diff --git a/app/src/test/java/org/dhis2/usescases/notes/noteDetail/NoteDetailRepositoryTest.kt b/app/src/test/java/org/dhis2/usescases/notes/noteDetail/NoteDetailRepositoryTest.kt index e228758c385..c8c2fd556ae 100644 --- a/app/src/test/java/org/dhis2/usescases/notes/noteDetail/NoteDetailRepositoryTest.kt +++ b/app/src/test/java/org/dhis2/usescases/notes/noteDetail/NoteDetailRepositoryTest.kt @@ -153,6 +153,11 @@ class NoteDetailRepositoryTest { .eq(teiUid) .one() .blockingGet(), - ) doReturn Enrollment.builder().uid("EnrollmentUid").build() + ) doReturn + Enrollment + .builder() + .uid("EnrollmentUid") + .attributeOptionCombo("attributeOptionComboUid") + .build() } } diff --git a/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryTest.kt b/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryTest.kt index 248187774ea..e67ade57eed 100644 --- a/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryTest.kt +++ b/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryTest.kt @@ -465,6 +465,7 @@ class SearchRepositoryTest { .organisationUnit(orgUnitUid) .program(programUid) .status(status) + .attributeOptionCombo("attributeOptionComboUid") .build() private fun createEvent( diff --git a/app/src/test/java/org/dhis2/usescases/searchTrackEntity/ui/mapper/TEICardMapperTest.kt b/app/src/test/java/org/dhis2/usescases/searchTrackEntity/ui/mapper/TEICardMapperTest.kt index 54ab9118a00..8e4c670254d 100644 --- a/app/src/test/java/org/dhis2/usescases/searchTrackEntity/ui/mapper/TEICardMapperTest.kt +++ b/app/src/test/java/org/dhis2/usescases/searchTrackEntity/ui/mapper/TEICardMapperTest.kt @@ -135,6 +135,7 @@ class TEICardMapperTest { .uid("EnrollmentUid") .program("programUid") .status(EnrollmentStatus.COMPLETED) + .attributeOptionCombo("attributeOptionComboUid") .build(), ) setAttributeValues(attributeValues) @@ -167,6 +168,7 @@ class TEICardMapperTest { .builder() .uid("EnrollmentUid") .followUp(true) + .attributeOptionCombo("attributeOptionComboUid") .build(), ) } diff --git a/app/src/test/java/org/dhis2/usescases/teiDashboard/DashboardRepositoryImplTest.kt b/app/src/test/java/org/dhis2/usescases/teiDashboard/DashboardRepositoryImplTest.kt index 8e81092c0b1..3fe08ab4fac 100644 --- a/app/src/test/java/org/dhis2/usescases/teiDashboard/DashboardRepositoryImplTest.kt +++ b/app/src/test/java/org/dhis2/usescases/teiDashboard/DashboardRepositoryImplTest.kt @@ -102,6 +102,7 @@ class DashboardRepositoryImplTest { .uid("enrollment_1") .deleted(true) .trackedEntityInstance(teiUid) + .attributeOptionCombo("attributeOptionComboUid") .build() val enrollment2 = getMockingEnrollment() @@ -588,6 +589,7 @@ class DashboardRepositoryImplTest { Enrollment .builder() .uid("enrollmentUid") + .attributeOptionCombo("attributeOptionComboUid") .build() private fun getMockSingleEvent(): Event = diff --git a/app/src/test/java/org/dhis2/usescases/teiDashboard/TeiDashboardPresenterTest.kt b/app/src/test/java/org/dhis2/usescases/teiDashboard/TeiDashboardPresenterTest.kt index fdc8041f68f..ed5c643f437 100644 --- a/app/src/test/java/org/dhis2/usescases/teiDashboard/TeiDashboardPresenterTest.kt +++ b/app/src/test/java/org/dhis2/usescases/teiDashboard/TeiDashboardPresenterTest.kt @@ -74,7 +74,12 @@ class TeiDashboardPresenterTest { .enrollmentCategoryCombo(ObjectWithUid.create("categoryComboUid")) .build() val trackedEntityInstance = TrackedEntityInstance.builder().uid(teiUid).build() - val enrollment = Enrollment.builder().uid("enrollmentUid").build() + val enrollment = + Enrollment + .builder() + .uid("enrollmentUid") + .attributeOptionCombo("attributeOptionComboUid") + .build() val programStages = listOf(ProgramStage.builder().uid("programStageUid").build()) val trackedEntityAttributes = listOf( diff --git a/app/src/test/java/org/dhis2/usescases/teiDashboard/dashboardfragments/indicators/EventIndicatorRepositoryTest.kt b/app/src/test/java/org/dhis2/usescases/teiDashboard/dashboardfragments/indicators/EventIndicatorRepositoryTest.kt index 6ef547a9758..c3623f11e80 100644 --- a/app/src/test/java/org/dhis2/usescases/teiDashboard/dashboardfragments/indicators/EventIndicatorRepositoryTest.kt +++ b/app/src/test/java/org/dhis2/usescases/teiDashboard/dashboardfragments/indicators/EventIndicatorRepositoryTest.kt @@ -70,7 +70,12 @@ class EventIndicatorRepositoryTest { .eq("programUid") .one() .blockingGet(), - ) doReturn Enrollment.builder().uid("enrollmentUid").build() + ) doReturn + Enrollment + .builder() + .uid("enrollmentUid") + .attributeOptionCombo("attributeOptionComboUid") + .build() whenever( resourceManager.sectionIndicators(), ) doReturn "Indicators" diff --git a/app/src/test/java/org/dhis2/usescases/teiDashboard/dashboardfragments/indicators/TrackerAnalyticsRepositoryTest.kt b/app/src/test/java/org/dhis2/usescases/teiDashboard/dashboardfragments/indicators/TrackerAnalyticsRepositoryTest.kt index a9ae3d0ccb1..818520bae8e 100644 --- a/app/src/test/java/org/dhis2/usescases/teiDashboard/dashboardfragments/indicators/TrackerAnalyticsRepositoryTest.kt +++ b/app/src/test/java/org/dhis2/usescases/teiDashboard/dashboardfragments/indicators/TrackerAnalyticsRepositoryTest.kt @@ -76,7 +76,12 @@ class TrackerAnalyticsRepositoryTest { .eq("programUid") .one() .blockingGet(), - ) doReturn Enrollment.builder().uid("enrollmentUid").build() + ) doReturn + Enrollment + .builder() + .uid("enrollmentUid") + .attributeOptionCombo("attributeOptionComboUid") + .build() whenever( resourceManager.sectionCharts(), ) doReturn "Charts" diff --git a/app/src/test/java/org/dhis2/usescases/teiDashboard/dashboardfragments/relationships/RelationshipPresenterTest.kt b/app/src/test/java/org/dhis2/usescases/teiDashboard/dashboardfragments/relationships/RelationshipPresenterTest.kt index bbc4d713712..36fb4159bd1 100644 --- a/app/src/test/java/org/dhis2/usescases/teiDashboard/dashboardfragments/relationships/RelationshipPresenterTest.kt +++ b/app/src/test/java/org/dhis2/usescases/teiDashboard/dashboardfragments/relationships/RelationshipPresenterTest.kt @@ -245,6 +245,7 @@ class RelationshipPresenterTest { Enrollment .builder() .uid("enrollmentUid") + .attributeOptionCombo("attributeOptionComboUid") .build(), ) diff --git a/app/src/test/java/org/dhis2/usescases/teiDashboard/dialogs/scheduling/SchedulingViewModelTest.kt b/app/src/test/java/org/dhis2/usescases/teiDashboard/dialogs/scheduling/SchedulingViewModelTest.kt index 7ad7accf8d9..14400aa54d3 100644 --- a/app/src/test/java/org/dhis2/usescases/teiDashboard/dialogs/scheduling/SchedulingViewModelTest.kt +++ b/app/src/test/java/org/dhis2/usescases/teiDashboard/dialogs/scheduling/SchedulingViewModelTest.kt @@ -33,7 +33,12 @@ class SchedulingViewModelTest { private val testingDispatcher = UnconfinedTestDispatcher() - private val enrollment = Enrollment.builder().uid(ENROLLMENT_UID).build() + private val enrollment = + Enrollment + .builder() + .uid(ENROLLMENT_UID) + .attributeOptionCombo("attributeOptionComboUid") + .build() private val programStage = ProgramStage.builder().uid(STAGE).build() private val enrollmentObjectRepository: EnrollmentObjectRepository = diff --git a/app/src/test/java/org/dhis2/usescases/teiDashboard/teiProgramList/TeiProgramListRepositoryImplTest.kt b/app/src/test/java/org/dhis2/usescases/teiDashboard/teiProgramList/TeiProgramListRepositoryImplTest.kt index 74d2256fe3b..ec2de96bd51 100644 --- a/app/src/test/java/org/dhis2/usescases/teiDashboard/teiProgramList/TeiProgramListRepositoryImplTest.kt +++ b/app/src/test/java/org/dhis2/usescases/teiDashboard/teiProgramList/TeiProgramListRepositoryImplTest.kt @@ -76,6 +76,7 @@ class TeiProgramListRepositoryImplTest { Enrollment .builder() .uid("enrollmentUid") + .attributeOptionCombo("attributeOptionComboUid") .build() val testObservable = @@ -142,6 +143,7 @@ class TeiProgramListRepositoryImplTest { Enrollment .builder() .uid("enrollmentUid") + .attributeOptionCombo("attributeOptionComboUid") .build() val testObservable = diff --git a/app/src/test/java/org/dhis2/usescases/teiDashboard/ui/mapper/InfoBarMapperTest.kt b/app/src/test/java/org/dhis2/usescases/teiDashboard/ui/mapper/InfoBarMapperTest.kt index 8a4ee17d24d..b52bee833c6 100644 --- a/app/src/test/java/org/dhis2/usescases/teiDashboard/ui/mapper/InfoBarMapperTest.kt +++ b/app/src/test/java/org/dhis2/usescases/teiDashboard/ui/mapper/InfoBarMapperTest.kt @@ -165,6 +165,7 @@ class InfoBarMapperTest { .status(status) .followUp(followup) .program("Program1Uid") + .attributeOptionCombo("attributeOptionComboUid") .build() private fun setPrograms() = diff --git a/app/src/test/java/org/dhis2/usescases/teiDashboard/ui/mapper/QuickActionsMapperTest.kt b/app/src/test/java/org/dhis2/usescases/teiDashboard/ui/mapper/QuickActionsMapperTest.kt index af590ae0550..2343906cd72 100644 --- a/app/src/test/java/org/dhis2/usescases/teiDashboard/ui/mapper/QuickActionsMapperTest.kt +++ b/app/src/test/java/org/dhis2/usescases/teiDashboard/ui/mapper/QuickActionsMapperTest.kt @@ -117,6 +117,7 @@ class QuickActionsMapperTest { .status(status) .followUp(followup) .program("Program1Uid") + .attributeOptionCombo("attributeOptionComboUid") .build() val tei = TrackedEntityInstance diff --git a/app/src/test/java/org/dhis2/usescases/teiDashboard/ui/mapper/TEIDetailMapperTest.kt b/app/src/test/java/org/dhis2/usescases/teiDashboard/ui/mapper/TEIDetailMapperTest.kt index d3ec64daaa7..f8c2e9e03d4 100644 --- a/app/src/test/java/org/dhis2/usescases/teiDashboard/ui/mapper/TEIDetailMapperTest.kt +++ b/app/src/test/java/org/dhis2/usescases/teiDashboard/ui/mapper/TEIDetailMapperTest.kt @@ -124,6 +124,7 @@ class TEIDetailMapperTest { .status(EnrollmentStatus.COMPLETED) .program("Program1Uid") .organisationUnit("orgUnitUid") + .attributeOptionCombo("attributeOptionComboUid") .build() private fun setPrograms() = diff --git a/dhis_android_analytics/src/test/java/dhis2/org/analytics/charts/ChartsRepositoryTest.kt b/dhis_android_analytics/src/test/java/dhis2/org/analytics/charts/ChartsRepositoryTest.kt index 416e55b4a47..f9f6a6001eb 100644 --- a/dhis_android_analytics/src/test/java/dhis2/org/analytics/charts/ChartsRepositoryTest.kt +++ b/dhis_android_analytics/src/test/java/dhis2/org/analytics/charts/ChartsRepositoryTest.kt @@ -80,6 +80,7 @@ class ChartsRepositoryTest { .uid("enrollmentUid") .program("programUid") .trackedEntityInstance(null) + .attributeOptionCombo("attributeOptionComboUid") .build() val result = repository.getAnalyticsForEnrollment("enrollmentUid") assertTrue( @@ -539,6 +540,7 @@ class ChartsRepositoryTest { .uid("enrollmentUid") .program("programUid") .trackedEntityInstance("teiUid") + .attributeOptionCombo("attributeOptionComboUid") .build() } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index dcf4cf283ef..677c0a4a363 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -11,7 +11,7 @@ kotlin = '2.2.21' dagger = '2.57.2' jacoco = '0.8.14' designSystem = "0.7.0-SNAPSHOT" -dhis2sdk = "1.14.0-20260219.101444-21" +dhis2sdk = "1.14.0-20260226.083755-24" ruleEngine = "3.6.0" expressionParser = "1.3.1" appcompat = "1.7.1" diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index 3790393031a..702f5acb887 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -10045,6 +10045,11 @@ + + + + + @@ -10089,6 +10094,14 @@ + + + + + + + + @@ -10161,6 +10174,11 @@ + + + + + @@ -10201,6 +10219,14 @@ + + + + + + + + @@ -14119,6 +14145,11 @@ + + + + + From 1b295263d9705dafca75a3b3e45af97e28662d90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Miguel=20Rubio?= Date: Tue, 3 Mar 2026 12:36:51 +0100 Subject: [PATCH 074/114] fix: Replace .height(columnHeightDp) from MainContent.kt by fillMaxHeight() (#4679) --- .../java/org/dhis2/composetable/ui/TextInput.kt | 4 +--- .../ui/home/screens/components/MainContent.kt | 16 +++------------- 2 files changed, 4 insertions(+), 16 deletions(-) diff --git a/compose-table/src/main/java/org/dhis2/composetable/ui/TextInput.kt b/compose-table/src/main/java/org/dhis2/composetable/ui/TextInput.kt index 749d73e0856..c9d8d98657c 100644 --- a/compose-table/src/main/java/org/dhis2/composetable/ui/TextInput.kt +++ b/compose-table/src/main/java/org/dhis2/composetable/ui/TextInput.kt @@ -9,7 +9,6 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.imePadding import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.wrapContentHeight @@ -76,8 +75,7 @@ fun TextInput( .background( color = Color.White, shape = RoundedCornerShape(topStart = 16.dp, topEnd = 16.dp), - ).padding(start = 16.dp, end = 4.dp, top = 16.dp, bottom = 4.dp) - .imePadding(), + ).padding(start = 16.dp, end = 4.dp, top = 16.dp, bottom = 4.dp), verticalArrangement = spacedBy(8.dp), ) { InputTitle(textInputModel.mainLabel, textInputModel.secondaryLabels) diff --git a/stock-usecase/src/main/java/org/dhis2/android/rtsm/ui/home/screens/components/MainContent.kt b/stock-usecase/src/main/java/org/dhis2/android/rtsm/ui/home/screens/components/MainContent.kt index 127195531c1..257a1281000 100644 --- a/stock-usecase/src/main/java/org/dhis2/android/rtsm/ui/home/screens/components/MainContent.kt +++ b/stock-usecase/src/main/java/org/dhis2/android/rtsm/ui/home/screens/components/MainContent.kt @@ -8,8 +8,8 @@ import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.absolutePadding +import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.offset import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size @@ -38,9 +38,6 @@ import androidx.compose.ui.draw.shadow import androidx.compose.ui.focus.onFocusChanged import androidx.compose.ui.graphics.Color import androidx.compose.ui.layout.FirstBaseline -import androidx.compose.ui.layout.onGloballyPositioned -import androidx.compose.ui.layout.onSizeChanged -import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalFocusManager import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource @@ -89,8 +86,6 @@ fun MainContent( val focusManager = LocalFocusManager.current val search by manageStockViewModel.scanText.collectAsState() val settingsUiState by viewModel.settingsUiState.collectAsState() - var columnHeightDp by remember { mutableStateOf(0.dp) } - val localDensity = LocalDensity.current val tablePadding = getTablePadding(backdropState.isRevealed) var tableResizeActions by remember { mutableStateOf(null) @@ -99,12 +94,7 @@ fun MainContent( Column( modifier = Modifier - .fillMaxWidth() - .onGloballyPositioned { coordinates -> - columnHeightDp = with(localDensity) { coordinates.size.height.toDp() } - }.onSizeChanged { coordinates -> - columnHeightDp = with(localDensity) { coordinates.height.toDp() } - }, + .fillMaxWidth(), horizontalAlignment = Alignment.CenterHorizontally, ) { Row( @@ -265,7 +255,7 @@ fun MainContent( modifier = Modifier .padding(bottom = tablePadding) - .height(columnHeightDp), + .fillMaxHeight(), ) { if (( manageStockViewModel.dataEntryUiState From 04cb2ef40cd4d18bb2700b0e551636f54bd19fbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Miguel=20Rubio?= Date: Thu, 5 Mar 2026 06:44:04 +0100 Subject: [PATCH 075/114] Androapp 7534 refactor data set table view model to improve asynchrony (#4705) * test: add withContext when render datasets in the UI * fix: Pre compute overwrittenWidths in IO thread before in main context. * fix: Preserve user resize while loading * fix: Removed async {...}.await * fix: Use launchUseCase extension to handle idling resources * refactor: remove loading state when loading dataset tables * test: improve DataSetTableViewModelTest.kt with two sections stub * test: improve SchedulingDialogUiTest.kt * refactor: Make updateFileLoadingState in line without a coroutine given that it is already called from a coroutine --- .../ui/viewModel/DataSetTableViewModel.kt | 248 +++++++++--------- .../ui/viewModel/DataSetTableViewModelTest.kt | 20 +- .../usescases/datasets/DataSetTableRobot.kt | 4 +- .../scheduling/SchedulingDialogUiTest.kt | 12 +- 4 files changed, 144 insertions(+), 140 deletions(-) diff --git a/aggregates/src/commonMain/kotlin/org/dhis2/mobile/aggregates/ui/viewModel/DataSetTableViewModel.kt b/aggregates/src/commonMain/kotlin/org/dhis2/mobile/aggregates/ui/viewModel/DataSetTableViewModel.kt index fce2ed7f0ff..3c3511eba23 100644 --- a/aggregates/src/commonMain/kotlin/org/dhis2/mobile/aggregates/ui/viewModel/DataSetTableViewModel.kt +++ b/aggregates/src/commonMain/kotlin/org/dhis2/mobile/aggregates/ui/viewModel/DataSetTableViewModel.kt @@ -121,65 +121,51 @@ internal class DataSetTableViewModel( } else { dataSetInstanceData.dataSetSections.firstOrNull()?.uid ?: NO_SECTION_UID } - _dataSetScreenState.value = - DataSetScreenState.Loaded( - dataSetDetails = - dataSetInstanceData.dataSetDetails.copy( - customTitle = - dataSetInstanceData.dataSetDetails.customTitle.copy( - header = dataSetSectionTitle, - ), - ), - dataSetSections = dataSetInstanceData.dataSetSections, - renderingConfig = dataSetInstanceData.dataSetRenderingConfig, - dataSetSectionTable = - DataSetSectionTable( - sectionToLoad, - emptyList(), - overridingDimensions = overwrittenWidths(sectionToLoad), - loading = true, - ), - initialSection = dataSetInstanceData.initialSectionToLoad, - selectedCellInfo = CellSelectionState.Default(TableSelection.Unselected()), - ) - - val sectionTable = async { sectionData(sectionToLoad) } + val initialDimensions = overwrittenWidths(sectionToLoad) + withContext(dispatcher.main()) { + _dataSetScreenState.value = + DataSetScreenState.Loaded( + dataSetDetails = + dataSetInstanceData.dataSetDetails.copy( + customTitle = + dataSetInstanceData.dataSetDetails.customTitle.copy( + header = dataSetSectionTitle, + ), + ), + dataSetSections = dataSetInstanceData.dataSetSections, + renderingConfig = dataSetInstanceData.dataSetRenderingConfig, + dataSetSectionTable = + DataSetSectionTable( + sectionToLoad, + emptyList(), + overridingDimensions = initialDimensions, + loading = true, + ), + initialSection = dataSetInstanceData.initialSectionToLoad, + selectedCellInfo = CellSelectionState.Default(TableSelection.Unselected()), + ) + } - _dataSetScreenState.update { - when (it) { - is DataSetScreenState.Loaded -> - it.copy( - dataSetDetails = - dataSetInstanceData.dataSetDetails.copy( - customTitle = - dataSetInstanceData.dataSetDetails.customTitle.copy( - header = dataSetSectionTitle, - ), - ), - dataSetSectionTable = - DataSetSectionTable( - sectionToLoad, - sectionTable.await(), - overridingDimensions = overwrittenWidths(sectionToLoad), - loading = false, - ), - ) + val tableModels = sectionData(sectionToLoad) - DataSetScreenState.Loading -> - DataSetScreenState.Loaded( - dataSetDetails = dataSetInstanceData.dataSetDetails, - dataSetSections = dataSetInstanceData.dataSetSections, - renderingConfig = dataSetInstanceData.dataSetRenderingConfig, - dataSetSectionTable = - DataSetSectionTable( - sectionToLoad, - sectionTable.await(), - overridingDimensions = overwrittenWidths(sectionToLoad), - loading = true, - ), - initialSection = initialSection, - selectedCellInfo = CellSelectionState.Default(TableSelection.Unselected()), - ) + withContext(dispatcher.main()) { + _dataSetScreenState.update { + (it as? DataSetScreenState.Loaded)?.copy( + dataSetDetails = + dataSetInstanceData.dataSetDetails.copy( + customTitle = + dataSetInstanceData.dataSetDetails.customTitle.copy( + header = dataSetSectionTitle, + ), + ), + dataSetSectionTable = + DataSetSectionTable( + sectionToLoad, + tableModels, + overridingDimensions = it.dataSetSectionTable.overridingDimensions, + loading = false, + ), + ) ?: it } } } @@ -189,65 +175,69 @@ internal class DataSetTableViewModel( if (_dataSetScreenState.value.currentSection() == sectionUid) return sectionChangeJob?.takeIf { it.isActive }?.cancel() sectionChangeJob = - viewModelScope.launch(dispatcher.io()) { + launchUseCase(dispatcher.io()) { val selectedSectionIndex = (dataSetScreenState.value as? DataSetScreenState.Loaded) ?.dataSetSections ?.indexOfFirst { it.uid == sectionUid } - CoroutineTracker.increment() - _dataSetScreenState.update { - if (it is DataSetScreenState.Loaded) { - val dataSetSectionTitle = - if (it.dataSetDetails.customTitle.isConfiguredTitle) { - it.dataSetDetails.customTitle.header - } else { - it.dataSetSections.firstOrNull { section -> section.uid == sectionUid }?.title - } - it.copy( - dataSetDetails = - it.dataSetDetails.copy( - customTitle = - DataSetCustomTitle( - header = dataSetSectionTitle, - subHeader = it.dataSetDetails.customTitle.subHeader, - textAlignment = it.dataSetDetails.customTitle.textAlignment, - isConfiguredTitle = it.dataSetDetails.customTitle.isConfiguredTitle, - ), - ), - dataSetSectionTable = - it.dataSetSectionTable.copy( - id = sectionUid, - tableModels = emptyList(), - overridingDimensions = overwrittenWidths(sectionUid), - loading = true, - ), - selectedCellInfo = CellSelectionState.Default(TableSelection.Unselected()), - initialSection = selectedSectionIndex ?: 0, - ) - } else { - it + val initialDimensions = overwrittenWidths(sectionUid) + withContext(dispatcher.main()) { + _dataSetScreenState.update { + if (it is DataSetScreenState.Loaded) { + val dataSetSectionTitle = + if (it.dataSetDetails.customTitle.isConfiguredTitle) { + it.dataSetDetails.customTitle.header + } else { + it.dataSetSections.firstOrNull { section -> section.uid == sectionUid }?.title + } + it.copy( + dataSetDetails = + it.dataSetDetails.copy( + customTitle = + DataSetCustomTitle( + header = dataSetSectionTitle, + subHeader = it.dataSetDetails.customTitle.subHeader, + textAlignment = it.dataSetDetails.customTitle.textAlignment, + isConfiguredTitle = it.dataSetDetails.customTitle.isConfiguredTitle, + ), + ), + dataSetSectionTable = + it.dataSetSectionTable.copy( + id = sectionUid, + tableModels = emptyList(), + overridingDimensions = initialDimensions, + loading = true, + ), + selectedCellInfo = CellSelectionState.Default(TableSelection.Unselected()), + initialSection = selectedSectionIndex ?: 0, + ) + } else { + it + } } } - val sectionData = async { sectionData(sectionUid) } - _dataSetScreenState.update { - if (it is DataSetScreenState.Loaded) { - it.copy( - dataSetSectionTable = - it.dataSetSectionTable.copy( - id = sectionUid, - tableModels = sectionData.await(), - overridingDimensions = overwrittenWidths(sectionUid), - loading = false, - ), - initialSection = selectedSectionIndex ?: 0, - ) - } else { - it + val tableModels = sectionData(sectionUid) + withContext(dispatcher.main()) { + _dataSetScreenState.update { + if (it is DataSetScreenState.Loaded) { + it.copy( + dataSetSectionTable = + it.dataSetSectionTable.copy( + id = sectionUid, + tableModels = tableModels, + // Preserve any resize the user applied while loading + overridingDimensions = it.dataSetSectionTable.overridingDimensions, + loading = false, + ), + initialSection = selectedSectionIndex ?: 0, + ) + } else { + it + } } } - CoroutineTracker.decrement() } } @@ -585,22 +575,20 @@ internal class DataSetTableViewModel( } private fun updateFileLoadingState(state: UploadFileState) { - viewModelScope.launch(dispatcher.io()) { - _dataSetScreenState.update { - (it as? DataSetScreenState.Loaded)?.copy( - selectedCellInfo = - if (it.selectedCellInfo is CellSelectionState.InputDataUiState) { - it.selectedCellInfo.copy( - inputExtra = - it.selectedCellInfo.fileExtras().copy( - fileState = state, - ), - ) - } else { - it.selectedCellInfo - }, - ) ?: it - } + _dataSetScreenState.update { + (it as? DataSetScreenState.Loaded)?.copy( + selectedCellInfo = + if (it.selectedCellInfo is CellSelectionState.InputDataUiState) { + it.selectedCellInfo.copy( + inputExtra = + it.selectedCellInfo.fileExtras().copy( + fileState = state, + ), + ) + } else { + it.selectedCellInfo + }, + ) ?: it } } @@ -626,13 +614,15 @@ internal class DataSetTableViewModel( ?.dataSetSectionTable ?.id ?: return@launch val updatedDimensions = overwrittenWidths(currentSectionId) - _dataSetScreenState.update { state -> - (state as? DataSetScreenState.Loaded)?.copy( - dataSetSectionTable = - state.dataSetSectionTable.copy( - overridingDimensions = updatedDimensions, - ), - ) ?: state + withContext(dispatcher.main()) { + _dataSetScreenState.update { state -> + (state as? DataSetScreenState.Loaded)?.copy( + dataSetSectionTable = + state.dataSetSectionTable.copy( + overridingDimensions = updatedDimensions, + ), + ) ?: state + } } } } diff --git a/aggregates/src/commonTest/kotlin/org/dhis2/mobile/aggregates/ui/viewModel/DataSetTableViewModelTest.kt b/aggregates/src/commonTest/kotlin/org/dhis2/mobile/aggregates/ui/viewModel/DataSetTableViewModelTest.kt index 781babd905d..d1a838d8d67 100644 --- a/aggregates/src/commonTest/kotlin/org/dhis2/mobile/aggregates/ui/viewModel/DataSetTableViewModelTest.kt +++ b/aggregates/src/commonTest/kotlin/org/dhis2/mobile/aggregates/ui/viewModel/DataSetTableViewModelTest.kt @@ -182,8 +182,13 @@ internal class DataSetTableViewModelTest : KoinTest { dataSetSections = listOf( DataSetSection( - uid = "sectionUid", - title = "sectionTitle", + uid = "section_uid1", + title = "sectionTitle1", + misconfiguredRows = emptyList(), + ), + DataSetSection( + uid = "section_uid2", + title = "sectionTitle2", misconfiguredRows = emptyList(), ), ), @@ -437,8 +442,8 @@ internal class DataSetTableViewModelTest : KoinTest { if (this is DataSetScreenState.Loaded) { assertTrue(this.selectedCellInfo is InputDataUiState) require(this.selectedCellInfo is InputDataUiState) - assertEquals("Legend label 2", this.selectedCellInfo?.legendData?.title) - assertEquals("#CD5C5C".toColor(), this.selectedCellInfo?.legendData?.color) + assertEquals("Legend label 2", this.selectedCellInfo.legendData?.title) + assertEquals("#CD5C5C".toColor(), this.selectedCellInfo.legendData?.color) } else { assertTrue(false) } @@ -965,16 +970,15 @@ internal class DataSetTableViewModelTest : KoinTest { runTest { viewModel.dataSetScreenState.test { awaitInitialization() - viewModel.onSectionSelected("section_uid1") + viewModel.onSectionSelected("section_uid2") with(awaitItem()) { assertTrue(this is DataSetScreenState.Loaded) assertTrue((this as DataSetScreenState.Loaded).dataSetSectionTable.loading) - assertTrue(this.currentSection() == "section_uid1") + assertTrue(this.currentSection() == "section_uid2") } - viewModel.onSectionSelected("section_uid2") with(awaitItem()) { assertTrue(this is DataSetScreenState.Loaded) - assertTrue((this as DataSetScreenState.Loaded).dataSetSectionTable.loading) + assertTrue(!(this as DataSetScreenState.Loaded).dataSetSectionTable.loading) assertTrue(this.currentSection() == "section_uid2") } viewModel.onSectionSelected("section_uid1") diff --git a/app/src/androidTest/java/org/dhis2/usescases/datasets/DataSetTableRobot.kt b/app/src/androidTest/java/org/dhis2/usescases/datasets/DataSetTableRobot.kt index dac099e47cc..1805133dbdf 100644 --- a/app/src/androidTest/java/org/dhis2/usescases/datasets/DataSetTableRobot.kt +++ b/app/src/androidTest/java/org/dhis2/usescases/datasets/DataSetTableRobot.kt @@ -253,7 +253,7 @@ internal class DataSetTableRobot( fun assertTableIsDisplayed() { composeTestRule.waitUntilExactlyOneExists( hasTestTag("TABLE_SCROLLABLE_COLUMN"), - timeoutMillis = 10000 + timeoutMillis = TIMEOUT ) } @@ -261,7 +261,7 @@ internal class DataSetTableRobot( fun assertImmunizationTableIsDisplayed() { composeTestRule.waitUntilAtLeastOneExists( hasText("Fixed"), - timeoutMillis = 5000 + timeoutMillis = TIMEOUT ) } diff --git a/app/src/androidTest/java/org/dhis2/usescases/teidashboard/dialogs/scheduling/SchedulingDialogUiTest.kt b/app/src/androidTest/java/org/dhis2/usescases/teidashboard/dialogs/scheduling/SchedulingDialogUiTest.kt index 63bb99534cd..7406d43880b 100644 --- a/app/src/androidTest/java/org/dhis2/usescases/teidashboard/dialogs/scheduling/SchedulingDialogUiTest.kt +++ b/app/src/androidTest/java/org/dhis2/usescases/teidashboard/dialogs/scheduling/SchedulingDialogUiTest.kt @@ -1,10 +1,13 @@ package org.dhis2.usescases.teidashboard.dialogs.scheduling import androidx.compose.ui.test.ExperimentalTestApi +import androidx.compose.ui.test.hasAnyAncestor import androidx.compose.ui.test.hasTestTag +import androidx.compose.ui.test.isSelectable import androidx.compose.ui.test.junit4.createAndroidComposeRule import androidx.compose.ui.test.onAllNodesWithTag import androidx.compose.ui.test.onFirst +import androidx.compose.ui.test.onLast import androidx.compose.ui.test.onNodeWithTag import androidx.compose.ui.test.onNodeWithText import androidx.compose.ui.test.performClick @@ -149,7 +152,14 @@ class SchedulingDialogUiTest : BaseTest() { ) { } } - composeTestRule.onNodeWithText("No").performClick() + composeTestRule.waitForIdle() + composeTestRule + .onAllNodes( + matcher = hasAnyAncestor(hasTestTag("YES_NO_OPTIONS")) and isSelectable(), + useUnmergedTree = true, + ) + .onLast() + .performClick() composeTestRule.onNodeWithText("Program stage").assertDoesNotExist() composeTestRule.onNodeWithText("Date").assertDoesNotExist() composeTestRule.onNodeWithText("CatCombo *").assertDoesNotExist() From 2e0ac971c026bc31851a9469dfdd5a69649c6466 Mon Sep 17 00:00:00 2001 From: Ferdy Rodriguez Date: Thu, 5 Mar 2026 08:12:46 +0100 Subject: [PATCH 076/114] fix: [ANDROAPP-7522] Handles Yes Only value when checked (#4707) * Correctly manage Yes Only value when checked * Correctly manage Yes Only value when checked * fix: [ANDROAPP-7522] maintain toggle logic --------- Co-authored-by: Xavier Molloy --- .../org/dhis2/tracker/input/ui/provider/TrackerInputProvider.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/provider/TrackerInputProvider.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/provider/TrackerInputProvider.kt index 2f81fb85c54..0a344595e7f 100644 --- a/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/provider/TrackerInputProvider.kt +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/provider/TrackerInputProvider.kt @@ -622,7 +622,7 @@ fun TrackerInputProvider( onUiEvent( TrackerInputUiEvent.OnValueChange( uid = inputModel.uid, - value = getYesOnlyValue(isChecked), + value = if (isChecked) "true" else null, ), ) }, From f7556c3bf370bd5bc8bee1ed39b8e0b80ac4dd78 Mon Sep 17 00:00:00 2001 From: Ferdy Rodriguez Date: Thu, 5 Mar 2026 09:50:38 +0100 Subject: [PATCH 077/114] test: Search operators automation tests (#4704) * Automate test regarding search operators * Added comments --- .../input/ui/state/TrackerInputUiState.kt | 48 ++++-- .../tracker/search/model/SearchOperator.kt | 16 ++ .../search/SearchParametersIntegrationTest.kt | 162 +++++++++++++++++- 3 files changed, 202 insertions(+), 24 deletions(-) diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/state/TrackerInputUiState.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/state/TrackerInputUiState.kt index d0aefc2e87d..41d7768f940 100644 --- a/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/state/TrackerInputUiState.kt +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/state/TrackerInputUiState.kt @@ -47,7 +47,27 @@ data class TrackerInputUiState( ) @Composable -fun TrackerInputUiState.supportingText(): List? = +fun TrackerInputUiState.supportingText(): List? { + val label = + searchOperator?.let { operator -> + if (focused) operator.supportingTextString() else null + } + return supportingTextList(searchOperatorLabel = label) +} + +fun TrackerInputUiState.inputState(): InputShellState = + when { + !editable -> InputShellState.DISABLED + error != null -> InputShellState.ERROR + focused -> InputShellState.FOCUSED + else -> InputShellState.UNFOCUSED + } + +/** + * Non-composable function to be used wherever a composable context is not available. For example, + * Unit Tests. Should use the [TrackerInputUiState.supportingText] method instead. + */ +fun TrackerInputUiState.supportingTextList(searchOperatorLabel: String?): List? = listOfNotNull( error?.let { SupportingTextData( @@ -61,17 +81,15 @@ fun TrackerInputUiState.supportingText(): List? = SupportingTextState.WARNING, ) }, - searchOperator?.let { operator -> - if (focused) { - operator.supportingTextString()?.let { text -> - SupportingTextData( - text, - SupportingTextState.DEFAULT, - ) - } - } else { - null + if (focused && searchOperator != null) { + searchOperatorLabel?.let { text -> + SupportingTextData( + text, + SupportingTextState.DEFAULT, + ) } + } else { + null }, description?.let { SupportingTextData( @@ -81,14 +99,6 @@ fun TrackerInputUiState.supportingText(): List? = }, ).ifEmpty { null } -fun TrackerInputUiState.inputState(): InputShellState = - when { - !editable -> InputShellState.DISABLED - error != null -> InputShellState.ERROR - focused -> InputShellState.FOCUSED - else -> InputShellState.UNFOCUSED - } - @Composable private fun SearchOperator.supportingTextString() = when (this) { diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/model/SearchOperator.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/model/SearchOperator.kt index 7f886bd1054..ab6ccf44e7a 100644 --- a/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/model/SearchOperator.kt +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/model/SearchOperator.kt @@ -1,8 +1,24 @@ package org.dhis2.tracker.search.model +import androidx.annotation.VisibleForTesting + enum class SearchOperator { LIKE, SW, EW, EQ, } + +/** + * Method use explicitly for testing purposes. Simulating that the search operator + * has a label assigned. + */ +@VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) +fun SearchOperator.hasLabel(): Boolean = + when (this) { + SearchOperator.EQ, + SearchOperator.SW, + SearchOperator.EW, + -> true + else -> false + } diff --git a/tracker/src/commonTest/kotlin/org/dhis2/tracker/search/SearchParametersIntegrationTest.kt b/tracker/src/commonTest/kotlin/org/dhis2/tracker/search/SearchParametersIntegrationTest.kt index debc6b3ef70..881b0f3364f 100644 --- a/tracker/src/commonTest/kotlin/org/dhis2/tracker/search/SearchParametersIntegrationTest.kt +++ b/tracker/src/commonTest/kotlin/org/dhis2/tracker/search/SearchParametersIntegrationTest.kt @@ -12,13 +12,16 @@ import org.dhis2.mobile.commons.coroutine.Dispatcher import org.dhis2.mobile.commons.resources.StringResourceProvider import org.dhis2.tracker.input.model.TrackerInputType import org.dhis2.tracker.input.ui.mapper.toTrackerInputUiState +import org.dhis2.tracker.input.ui.state.supportingTextList import org.dhis2.tracker.search.data.SearchParametersRepository import org.dhis2.tracker.search.domain.FetchSearchParameters import org.dhis2.tracker.search.model.FetchSearchParametersData import org.dhis2.tracker.search.model.SearchOperator import org.dhis2.tracker.search.model.SearchParameterModel +import org.dhis2.tracker.search.model.hasLabel import org.dhis2.tracker.search.ui.state.SearchParametersUiState import org.dhis2.tracker.search.ui.viewmodel.SearchParametersViewModel +import org.hisp.dhis.mobile.ui.designsystem.component.SupportingTextState import org.mockito.kotlin.any import org.mockito.kotlin.mock import org.mockito.kotlin.whenever @@ -26,6 +29,7 @@ import kotlin.test.AfterTest import kotlin.test.BeforeTest import kotlin.test.Test import kotlin.test.assertEquals +import kotlin.test.assertNotNull import kotlin.test.assertNull import kotlin.test.assertTrue @@ -63,7 +67,11 @@ class SearchParametersIntegrationTest { // Given val min = 2 val teiTypeUid = "teiType123" - val searchParameter = buildSearchParameter(minCharactersToSearch = min) + val searchParameter = + buildSearchParameter( + uid = "field1", + minCharactersToSearch = min, + ) whenever(repository.getSearchParametersByTrackedEntityType(teiTypeUid)) .thenReturn(listOf(searchParameter)) @@ -96,7 +104,11 @@ class SearchParametersIntegrationTest { val min = 3 val teiTypeUid = "teiType123" val errorMessage = "Minimum $min characters required" - val searchParameter = buildSearchParameter(minCharactersToSearch = min) + val searchParameter = + buildSearchParameter( + uid = "field1", + minCharactersToSearch = min, + ) whenever(repository.getSearchParametersByTrackedEntityType(teiTypeUid)) .thenReturn(listOf(searchParameter)) whenever(resourceProvider.provideString(any(), any())).thenReturn(errorMessage) @@ -124,15 +136,155 @@ class SearchParametersIntegrationTest { assertEquals(errorMessage, uiState.items.first().error) } - private fun buildSearchParameter(minCharactersToSearch: Int): SearchParameterModel = + @Test + fun `given a configured search operator, when user clicks field, then search operator message is shown`() = + runTest(testDispatcher) { + // Given + val teiTypeUid = "teiType123" + val searchParameters = + listOf( + buildSearchParameter( + uid = "field1", + minCharactersToSearch = 0, + searchOperator = SearchOperator.EQ, + ), + buildSearchParameter( + uid = "field2", + minCharactersToSearch = 0, + searchOperator = SearchOperator.LIKE, + ), + buildSearchParameter( + uid = "field3", + minCharactersToSearch = 0, + searchOperator = SearchOperator.SW, + ), + buildSearchParameter( + uid = "field4", + minCharactersToSearch = 0, + searchOperator = SearchOperator.EW, + ), + ) + + whenever(repository.getSearchParametersByTrackedEntityType(teiTypeUid)) + .thenReturn(searchParameters) + + val fetchResult = + fetchSearchParameters(FetchSearchParametersData(teiTypeUid = teiTypeUid)) + assertTrue(fetchResult.isSuccess) + + fetchResult + .getOrNull() + ?.forEach { searchParam -> + // Simulate the user clicking the field (focused = true) + val item = searchParam.toTrackerInputUiState().copy(focused = true) + val operator = searchParam.searchOperator + + // Mimic what the Composable layer does: resolve a label only when the + // operator has one (stringResource is not available in unit tests). + val operatorLabel = if (operator?.hasLabel() == true) "operator label" else null + val supportingText = item.supportingTextList(searchOperatorLabel = operatorLabel) + + if (operator?.hasLabel() == true) { + // EQ, SW, EW – a DEFAULT supporting text entry must be present + assertNotNull(supportingText) + assertTrue(supportingText.any { it.state == SupportingTextState.DEFAULT }) + } else { + // LIKE – no label, no error/warning/description → null + assertNull(supportingText) + } + } + } + + @Test + fun `given a configured search operator with error, when user clicks field, supporting text color in Red`() = + runTest(testDispatcher) { + // Given + val teiTypeUid = "teiType123" + val searchParameters = + listOf( + buildSearchParameter( + uid = "field1", + minCharactersToSearch = 0, + searchOperator = SearchOperator.EQ, + ), + ) + + whenever(repository.getSearchParametersByTrackedEntityType(teiTypeUid)) + .thenReturn(searchParameters) + + val fetchResult = + fetchSearchParameters(FetchSearchParametersData(teiTypeUid = teiTypeUid)) + assertTrue(fetchResult.isSuccess) + + val itemWithError = + fetchResult + .getOrNull()!! + .map { searchParam -> + searchParam.toTrackerInputUiState().copy(error = "any Error", focused = true) + } + viewModel.updateFromExternal(SearchParametersUiState(items = itemWithError)) + val uiState = viewModel.uiState.first() + val supportingListData = + uiState + .items + .first() + .supportingTextList(null) + ?.firstOrNull() + assertNotNull(supportingListData) + assertEquals(SupportingTextState.ERROR, supportingListData.state) + } + + @Test + fun `given a configured search operator with warning, when user clicks field, supporting text color in Orange`() = + runTest(testDispatcher) { + // Given + val teiTypeUid = "teiType123" + val searchParameters = + listOf( + buildSearchParameter( + uid = "field1", + minCharactersToSearch = 0, + searchOperator = SearchOperator.EQ, + ), + ) + + whenever(repository.getSearchParametersByTrackedEntityType(teiTypeUid)) + .thenReturn(searchParameters) + + val fetchResult = + fetchSearchParameters(FetchSearchParametersData(teiTypeUid = teiTypeUid)) + assertTrue(fetchResult.isSuccess) + + val itemWithError = + fetchResult + .getOrNull()!! + .map { searchParam -> + searchParam.toTrackerInputUiState().copy(warning = "any Warning", focused = true) + } + viewModel.updateFromExternal(SearchParametersUiState(items = itemWithError)) + val uiState = viewModel.uiState.first() + val supportingListData = + uiState.items + .first() + .supportingTextList(null) + ?.firstOrNull() + assertNotNull(supportingListData) + assertEquals(SupportingTextState.WARNING, supportingListData.state) + } + + private fun buildSearchParameter( + uid: String, + minCharactersToSearch: Int, + searchOperator: SearchOperator? = null, + ): SearchParameterModel = SearchParameterModel( - uid = "field1", + uid = uid, label = "First Name", inputType = TrackerInputType.TEXT, optionSet = null, customIntentUid = null, minCharactersToSearch = minCharactersToSearch, - searchOperator = SearchOperator.LIKE, + searchOperator = searchOperator, isUnique = false, ) } From f221b3d3a41ae1217cd4abea6e031e7c4da21bad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Miguel=20Rubio?= Date: Thu, 5 Mar 2026 10:59:15 +0100 Subject: [PATCH 078/114] test: update NoteRobot.kt (#4709) --- .../usescases/teidashboard/robot/NoteRobot.kt | 21 ++++++++++--------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/app/src/androidTest/java/org/dhis2/usescases/teidashboard/robot/NoteRobot.kt b/app/src/androidTest/java/org/dhis2/usescases/teidashboard/robot/NoteRobot.kt index d77699f8755..ed7f3e92a96 100644 --- a/app/src/androidTest/java/org/dhis2/usescases/teidashboard/robot/NoteRobot.kt +++ b/app/src/androidTest/java/org/dhis2/usescases/teidashboard/robot/NoteRobot.kt @@ -5,12 +5,10 @@ import androidx.test.espresso.action.ViewActions.click import androidx.test.espresso.assertion.ViewAssertions.matches import androidx.test.espresso.intent.Intents import androidx.test.espresso.intent.matcher.IntentMatchers.hasComponent -import androidx.test.espresso.matcher.RootMatchers.isDialog import androidx.test.espresso.matcher.ViewMatchers.Visibility import androidx.test.espresso.matcher.ViewMatchers.hasDescendant import androidx.test.espresso.matcher.ViewMatchers.isDisplayed import androidx.test.espresso.matcher.ViewMatchers.isEnabled -import androidx.test.espresso.matcher.ViewMatchers.isRoot import androidx.test.espresso.matcher.ViewMatchers.withEffectiveVisibility import androidx.test.espresso.matcher.ViewMatchers.withId import androidx.test.espresso.matcher.ViewMatchers.withText @@ -50,17 +48,13 @@ class NoteRobot : BaseRobot() { } fun clickYesOnAlertDialog() { - waitForView(isRoot()) - .inRoot(isDialog()) - .perform(searchFor(withId(android.R.id.button1))) - waitForView(withId(android.R.id.button1)) - .inRoot(isDialog()) + waitForView(withId(android.R.id.button1), waitMillis = DIALOG_WAIT_TIMEOUT_MS) .check(matches(isDisplayed())) .perform(click()) } fun checkNoteWasNotCreated(text: String) { - waitForView(withId(R.id.notes_recycler)).check( + waitForView(withId(R.id.notes_recycler), waitMillis = NOTES_WAIT_TIMEOUT_MS).check( matches( not( atPosition( @@ -79,7 +73,8 @@ class NoteRobot : BaseRobot() { isDisplayed(), isNotEmpty(), atPosition(0, hasDescendant(withText(text))) - ) + ), + waitMillis = NOTES_WAIT_TIMEOUT_MS ) } @@ -90,7 +85,8 @@ class NoteRobot : BaseRobot() { } fun checkNoteDetails(user: String, noteText: String) { - waitForView(withId(R.id.notes_recycler)).check(matches(isDisplayed())) + waitForView(withId(R.id.notes_recycler), waitMillis = NOTES_WAIT_TIMEOUT_MS) + .check(matches(isDisplayed())) waitForView( allOf( withId(R.id.storeBy), @@ -108,4 +104,9 @@ class NoteRobot : BaseRobot() { ) .check(matches(withEffectiveVisibility(Visibility.VISIBLE))) } + + companion object { + private const val DIALOG_WAIT_TIMEOUT_MS = 10000 + private const val NOTES_WAIT_TIMEOUT_MS = 15000 + } } From 70fca84c927f464c390f5f9517368a1f9dceb67d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Miguel=20Rubio?= Date: Thu, 5 Mar 2026 13:13:52 +0100 Subject: [PATCH 079/114] build: ANDROAPP-7529 update-gradle-9 [skip size] (#4694) * build: update gradle to 9.0.1 * build: apply plugins to kmp build.gradle.kts files * build: Sentry initialization * build: add desugar library to login * build: update unit test executions with testAndroidHostTest * build: removing multidex * build: android.newDsl=false to support sonarqube * build: android.newDsl=false to support sonarqube * fix: Remove attachBaseContext from App to inherit it. * fix: update verification-metadata.xml * build: update version name to test apks * build:sentry * fix: sonarcloud code smell, indexed accessors * build: use compileOnly for debug dependencies * refactor: AndroidSyncRepositoryTest.kt to AndroidHostTests * build: update AGP to 9.1.0 * build: remove testing version name * ci: Update sonar version * build: downgrade AGP to 9.0.1 because of sonar --- Jenkinsfile | 2 +- aggregates/build.gradle.kts | 49 +- .../data/DataSetInstanceRepositoryImplTest.kt | 0 app/build.gradle.kts | 142 +- app/src/main/java/org/dhis2/App.java | 14 +- .../java/org/dhis2/di/KoinInitialization.kt | 7 + .../datasetDetail/DataSetDetailActivity.java | 14 +- build.gradle.kts | 4 + commons/build.gradle.kts | 28 +- .../commons/reporting/CrashReportModule.kt | 5 +- commonskmm/build.gradle.kts | 67 +- .../validators/FieldMaskValidatorTest.kt | 0 .../commons/di/CommonsModule.android.kt | 2 +- .../reporting/CrashReportControllerImpl.kt | 38 +- compose-table/build.gradle.kts | 1 - dhis2-mobile-program-rules/build.gradle.kts | 1 - dhis2_android_maps/build.gradle.kts | 6 +- dhis_android_analytics/build.gradle.kts | 7 +- form/build.gradle.kts | 7 +- .../main/java/org/dhis2/form/di/Injector.kt | 2 +- gradle.properties | 11 +- gradle/libs.versions.toml | 15 +- gradle/verification-metadata.xml | 2138 ++++++++++++++++- gradle/wrapper/gradle-wrapper.properties | 2 +- login/build.gradle.kts | 92 +- .../kotlin/screen/TwoFAToEnableScreenTest.kt | 74 - .../data/repository/AccountRepositoryImpl.kt | 7 +- .../login/main/di/LoginModule.android.kt | 6 + run_tests.sh | 2 +- stock-usecase/build.gradle.kts | 2 - sync/build.gradle.kts | 70 +- .../sync/data}/AndroidSyncRepositoryTest.kt | 0 .../res/drawable/ic_sync.xml | 0 tracker/build.gradle.kts | 66 +- .../AndroidRelationshipFakeModels.kt | 0 .../TrackerRelationshipsRepositoryTest.kt | 0 .../SearchTrackedEntityRepositoryImplTest.kt | 0 37 files changed, 2444 insertions(+), 437 deletions(-) rename aggregates/src/{androidUnitTest => androidHostTest}/kotlin/org/dhis2/mobile/aggregates/data/DataSetInstanceRepositoryImplTest.kt (100%) rename commonskmm/src/{androidUnitTest => androidHostTest}/kotlin/org/dhis2/commons/validation/validators/FieldMaskValidatorTest.kt (100%) delete mode 100644 login/src/androidInstrumentedTest/kotlin/screen/TwoFAToEnableScreenTest.kt rename sync/src/{androidUnitTest/kotlin/org.dhis2.mobile.sync.data => androidHostTest/kotlin/org/dhis2/mobile/sync/data}/AndroidSyncRepositoryTest.kt (100%) rename sync/src/{main => androidMain}/res/drawable/ic_sync.xml (100%) rename tracker/src/{androidUnitTest => androidHostTest}/kotlin/org/dhis2/tracker/relationships/AndroidRelationshipFakeModels.kt (100%) rename tracker/src/{androidUnitTest => androidHostTest}/kotlin/org/dhis2/tracker/relationships/data/TrackerRelationshipsRepositoryTest.kt (100%) rename tracker/src/{androidUnitTest => androidHostTest}/kotlin/org/dhis2/tracker/search/data/SearchTrackedEntityRepositoryImplTest.kt (100%) diff --git a/Jenkinsfile b/Jenkinsfile index ca2ad64efda..10854742886 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -77,7 +77,7 @@ pipeline { steps { script { echo 'Running unit tests' - sh './gradlew --dependency-verification lenient testDebugUnitTest testDhis2DebugUnitTest --stacktrace --no-daemon' + sh './gradlew --dependency-verification lenient testDebugUnitTest testDhis2DebugUnitTest testAndroidHostTest --stacktrace --no-daemon' } } } diff --git a/aggregates/build.gradle.kts b/aggregates/build.gradle.kts index 9eedb8161a5..b7e394b50bf 100644 --- a/aggregates/build.gradle.kts +++ b/aggregates/build.gradle.kts @@ -1,16 +1,22 @@ import kotlin.text.set plugins { - kotlin("multiplatform") + alias(libs.plugins.kotlin.multiplatform) alias(libs.plugins.compose) - id("com.android.library") + alias(libs.plugins.android.kotlin.multiplatform.library) alias(libs.plugins.kotlin.compose.compiler) } kotlin { - androidTarget { - compilerOptions { - jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17) + androidLibrary { + namespace = "org.dhis2.mobile.aggregates" + compileSdk = libs.versions.sdk.get().toInt() + minSdk = libs.versions.minSdk.get().toInt() + compilerOptions { jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17) } + androidResources { enable = true } + withHostTestBuilder {}.configure {} + withDeviceTestBuilder {}.configure { + instrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } } @@ -65,9 +71,12 @@ kotlin { implementation(libs.koin.androidx.compose) implementation(project(":commons")) implementation(project(":dhis2_android_maps")) + compileOnly(libs.androidx.compose.uitooling) } - androidUnitTest.dependencies { } + getByName("androidHostTest") { + dependencies { implementation(libs.junit.jupiter) } + } val desktopMain by getting { dependencies { @@ -83,30 +92,6 @@ compose.resources { generateResClass = always } -android { - namespace = "org.dhis2.mobile.aggregates" - compileSdk = libs.versions.sdk.get().toInt() - - sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml") - sourceSets["main"].res.srcDirs("src/androidMain/res") - - defaultConfig { - minSdk = libs.versions.minSdk.get().toInt() - } - compileOptions { - isCoreLibraryDesugaringEnabled = true - - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 - } - - dependencies { - coreLibraryDesugaring(libs.desugar) - } -} - dependencies { - testImplementation(libs.junit.jupiter) - debugImplementation(libs.androidx.compose.preview) - debugImplementation(libs.androidx.compose.uitooling) -} \ No newline at end of file + coreLibraryDesugaring(libs.desugar) +} diff --git a/aggregates/src/androidUnitTest/kotlin/org/dhis2/mobile/aggregates/data/DataSetInstanceRepositoryImplTest.kt b/aggregates/src/androidHostTest/kotlin/org/dhis2/mobile/aggregates/data/DataSetInstanceRepositoryImplTest.kt similarity index 100% rename from aggregates/src/androidUnitTest/kotlin/org/dhis2/mobile/aggregates/data/DataSetInstanceRepositoryImplTest.kt rename to aggregates/src/androidHostTest/kotlin/org/dhis2/mobile/aggregates/data/DataSetInstanceRepositoryImplTest.kt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 7068334b38f..96701323e44 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -1,5 +1,3 @@ -@file:Suppress("UnstableApiUsage") - import com.android.build.api.variant.impl.VariantOutputImpl import org.jetbrains.kotlin.gradle.dsl.JvmTarget import java.text.SimpleDateFormat @@ -7,8 +5,7 @@ import java.util.Date plugins { id("com.android.application") - kotlin("android") - kotlin("kapt") + alias(libs.plugins.legacy.kapt) id("com.google.devtools.ksp") id("kotlin-parcelize") alias(libs.plugins.kotlin.serialization) @@ -17,48 +14,52 @@ plugins { } apply(from = "${project.rootDir}/jacoco/jacoco.gradle.kts") -android { - - val getBuildDate by extra { - fun(): String { - return SimpleDateFormat("yyyy-MM-dd HH:mm").format(Date()) - } +val getBuildDate by extra { + fun(): String { + return SimpleDateFormat("yyyy-MM-dd HH:mm").format(Date()) } +} - val getCommitHash by extra { - fun(): String { - return try { - val process = ProcessBuilder("git", "rev-parse", "--short", "HEAD") - .redirectOutput(ProcessBuilder.Redirect.PIPE) - .redirectError(ProcessBuilder.Redirect.PIPE) - .start() - process.inputStream.bufferedReader().readText().trim() - } catch (e: Exception) { - "unknown" - } +val getCommitHash by extra { + fun(): String { + return try { + val process = ProcessBuilder("git", "rev-parse", "--short", "HEAD") + .redirectOutput(ProcessBuilder.Redirect.PIPE) + .redirectError(ProcessBuilder.Redirect.PIPE) + .start() + process.inputStream.bufferedReader().readText().trim() + } catch (e: Exception) { + "unknown" } } +} - val getBranchName by extra { - fun(): String { - val envBranchName = System.getenv("GITHUB_HEAD_REF") - ?: System.getenv("GITHUB_REF_NAME") +val getBranchName by extra { + fun(): String { + val envBranchName = System.getenv("GITHUB_HEAD_REF") + ?: System.getenv("GITHUB_REF_NAME") - return try { - if (!envBranchName.isNullOrBlank()) { - return envBranchName.replace(Regex("[/\\\\:*?\"<>|]"), "-") - } - val process = ProcessBuilder("git", "rev-parse", "--abbrev-ref", "HEAD") - .redirectOutput(ProcessBuilder.Redirect.PIPE) - .redirectError(ProcessBuilder.Redirect.PIPE) - .start() - val branchName = process.inputStream.bufferedReader().readText().trim() - branchName.replace(Regex("[/\\\\:*?\"<>|]"), "-") - } catch (e: Exception) { - "unknown" + return try { + if (!envBranchName.isNullOrBlank()) { + return envBranchName.replace(Regex("[/\\\\:*?\"<>|]"), "-") } + val process = ProcessBuilder("git", "rev-parse", "--abbrev-ref", "HEAD") + .redirectOutput(ProcessBuilder.Redirect.PIPE) + .redirectError(ProcessBuilder.Redirect.PIPE) + .start() + val branchName = process.inputStream.bufferedReader().readText().trim() + branchName.replace(Regex("[/\\\\:*?\"<>|]"), "-") + } catch (e: Exception) { + "unknown" } } +} + +base { + archivesName.set("dhis2-v" + libs.versions.vName.get()) +} + +android { signingConfigs { create("release") { @@ -104,23 +105,18 @@ android { } } + compileSdk = libs.versions.sdk.get().toInt() namespace = "org.dhis2" testNamespace = "org.dhis2.test" - base { - archivesName.set("dhis2-v" + libs.versions.vName.get()) - } - defaultConfig { applicationId = "com.dhis2" - compileSdk = libs.versions.sdk.get().toInt() targetSdk = libs.versions.sdk.get().toInt() minSdk = libs.versions.minSdk.get().toInt() versionCode = libs.versions.vCode.get().toInt() versionName = libs.versions.vName.get() testInstrumentationRunner = "org.dhis2.Dhis2Runner" vectorDrawables.useSupportLibrary = true - multiDexEnabled = true val bitriseSentryDSN = System.getenv("SENTRY_DSN") ?: "" @@ -153,6 +149,9 @@ android { "META-INF/gradle/incremental.annotation.processors" ) ) + // Compose Multiplatform string resources from KMP modules can duplicate + // when multiple modules package the same locale strings.xml as Java resources. + pickFirsts.addAll(listOf("values*/**")) } } @@ -229,42 +228,42 @@ android { abortOnError = false checkReleaseBuilds = false } +} - androidComponents { - onVariants { variant -> - val buildType = variant.buildType - val flavorName = variant.flavorName +androidComponents { + onVariants { variant -> + val buildType = variant.buildType + val flavorName = variant.flavorName - // Apply suffix only for training flavor in release buildType - if (buildType == "release" && flavorName == "dhis2Training") { - variant.applicationId.set("${variant.applicationId.get()}.training") - } - - variant.outputs.forEach { output -> - if (output is VariantOutputImpl) { - val suffix = when { - buildType == "release" && flavorName == "dhis2Training" -> "-training" - buildType == "release" && flavorName == "dhis2PlayServices" -> "-googlePlay" - buildType == "debug" -> "-${getBranchName()}" - else -> "" - } + // Apply suffix only for training flavor in release buildType + if (buildType == "release" && flavorName == "dhis2Training") { + variant.applicationId.set("${variant.applicationId.get()}.training") + } - output.outputFileName = "dhis2-v${libs.versions.vName.get()}$suffix.apk" + variant.outputs.forEach { output -> + if (output is VariantOutputImpl) { + val suffix = when { + buildType == "release" && flavorName == "dhis2Training" -> "-training" + buildType == "release" && flavorName == "dhis2PlayServices" -> "-googlePlay" + buildType == "debug" -> "-${getBranchName()}" + else -> "" } - } + output.outputFileName = "dhis2-v${libs.versions.vName.get()}$suffix.apk" + } } - } - ksp { - arg("room.schemaLocation", "$projectDir/schemas") - arg("room.incremental", "true") - arg("room.expandProjection", "true") - // Enable debug logs - arg("ksp.logging.level", "DEBUG") } } +ksp { + arg("room.schemaLocation", "$projectDir/schemas") + arg("room.incremental", "true") + arg("room.expandProjection", "true") + // Enable debug logs + arg("ksp.logging.level", "DEBUG") +} + kotlin { compilerOptions { jvmTarget.set(JvmTarget.JVM_17) @@ -273,6 +272,10 @@ kotlin { } } +kapt { + correctErrorTypes = true +} + dependencies { implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar")))) implementation(project(":dhis_android_analytics")) @@ -296,7 +299,6 @@ dependencies { implementation(libs.androidx.annotation) implementation(libs.androidx.cardview) implementation(libs.androidx.legacy.support.v4) - implementation(libs.androidx.multidex) implementation(libs.androidx.constraintlayout) implementation(libs.androidx.work) implementation(libs.androidx.workrx) diff --git a/app/src/main/java/org/dhis2/App.java b/app/src/main/java/org/dhis2/App.java index ddf0b0cac60..74aa75c7115 100644 --- a/app/src/main/java/org/dhis2/App.java +++ b/app/src/main/java/org/dhis2/App.java @@ -11,8 +11,6 @@ import androidx.lifecycle.LifecycleObserver; import androidx.lifecycle.OnLifecycleEvent; import androidx.lifecycle.ProcessLifecycleOwner; -import androidx.multidex.MultiDex; -import androidx.multidex.MultiDexApplication; import org.dhis2.commons.di.dagger.PerActivity; import org.dhis2.commons.di.dagger.PerServer; @@ -71,7 +69,7 @@ import io.sentry.android.core.SentryAndroid; import timber.log.Timber; -public class App extends MultiDexApplication implements Components, LifecycleObserver { +public class App extends android.app.Application implements Components, LifecycleObserver { @NonNull @Singleton @@ -120,6 +118,10 @@ public void onCreate() { public void initCrashController() { if (areTrackingPermissionGranted()) { + if (BuildConfig.SENTRY_DSN.isEmpty()) { + Timber.w("Sentry DSN is empty. Skipping Sentry initialization."); + return; + } SentryAndroid.init(this, options -> { options.setDsn(BuildConfig.SENTRY_DSN); options.setAnrReportInDebug(true); @@ -154,12 +156,6 @@ private void initCustomCrashActivity() { .apply(); } - @Override - protected void attachBaseContext(Context base) { - super.attachBaseContext(base); - MultiDex.install(this); - } - private void setUpAppComponent() { appComponent = prepareAppComponent().build(); appComponent.inject(this); diff --git a/app/src/main/java/org/dhis2/di/KoinInitialization.kt b/app/src/main/java/org/dhis2/di/KoinInitialization.kt index c2aa800c550..3eec9f862f9 100644 --- a/app/src/main/java/org/dhis2/di/KoinInitialization.kt +++ b/app/src/main/java/org/dhis2/di/KoinInitialization.kt @@ -1,6 +1,7 @@ package org.dhis2.di import android.app.Application +import org.dhis2.BuildConfig import org.dhis2.android.rtsm.di.stockModule import org.dhis2.commons.di.filterModule import org.dhis2.commons.di.resourceManagerModule @@ -25,6 +26,12 @@ object KoinInitialization { startKoin { androidLogger() androidContext(this@invoke) + properties( + mapOf( + "sentryDsn" to BuildConfig.SENTRY_DSN, + "isTrainingFlavor" to (BuildConfig.FLAVOR == "dhis2Training"), + ), + ) modules( serverModule(d2Configuration), commonsModule, diff --git a/app/src/main/java/org/dhis2/usescases/datasets/datasetDetail/DataSetDetailActivity.java b/app/src/main/java/org/dhis2/usescases/datasets/datasetDetail/DataSetDetailActivity.java index 5bc7f3c3c27..054df4253f6 100644 --- a/app/src/main/java/org/dhis2/usescases/datasets/datasetDetail/DataSetDetailActivity.java +++ b/app/src/main/java/org/dhis2/usescases/datasets/datasetDetail/DataSetDetailActivity.java @@ -105,14 +105,12 @@ private void configureBottomNavigation() { binding.navigationBar.setOnItemSelectedListener(item -> { Fragment newFragment = null; - switch (item.getItemId()) { - case R.id.navigation_list_view: - newFragment = DataSetListFragment.newInstance(dataSetUid, accessWriteData); - break; - case R.id.navigation_analytics: - presenter.trackDataSetAnalytics(); - newFragment = GroupAnalyticsFragment.Companion.forDataSet(dataSetUid); - break; + int itemId = item.getItemId(); + if (itemId == R.id.navigation_list_view) { + newFragment = DataSetListFragment.newInstance(dataSetUid, accessWriteData); + } else if (itemId == R.id.navigation_analytics) { + presenter.trackDataSetAnalytics(); + newFragment = GroupAnalyticsFragment.Companion.forDataSet(dataSetUid); } FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); if (fragment == null ||(newFragment != null && !fragment.getClass().toString().equals(newFragment.getClass().toString()))) { diff --git a/build.gradle.kts b/build.gradle.kts index 0f749f4a086..b751339a98c 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -18,6 +18,8 @@ plugins { alias(libs.plugins.kotlin.compose.compiler) apply false alias(libs.plugins.ksp) apply false alias(libs.plugins.cyclonedx) + alias(libs.plugins.kotlin.multiplatform) apply false + alias(libs.plugins.android.kotlin.multiplatform.library) apply false } @@ -96,6 +98,8 @@ allprojects { } tasks.withType { + // ensures test results are not cached between test runs + outputs.upToDateWhen { false } afterSuite( KotlinClosure2({ desc: TestDescriptor, result: TestResult -> if (result.resultType == TestResult.ResultType.FAILURE) { diff --git a/commons/build.gradle.kts b/commons/build.gradle.kts index e7f6e7c3bd6..3d207288041 100644 --- a/commons/build.gradle.kts +++ b/commons/build.gradle.kts @@ -2,8 +2,7 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget plugins { id("com.android.library") - kotlin("android") - kotlin("kapt") + alias(libs.plugins.legacy.kapt) id("com.google.devtools.ksp") id("kotlin-parcelize") alias(libs.plugins.kotlin.compose.compiler) @@ -61,6 +60,10 @@ kotlin { } } +kapt { + correctErrorTypes = true +} + dependencies { implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar")))) implementation(project(":commonskmm")) @@ -80,6 +83,7 @@ dependencies { api(libs.androidx.viewModelKtx) api(libs.androidx.recyclerView) debugApi(libs.androidx.compose.uitooling) + api(libs.androidx.compose.preview) api(libs.androidx.compose.ui) api(libs.androidx.compose.livedata) api(libs.androidx.compose.paging) @@ -102,16 +106,16 @@ dependencies { api(libs.barcodeScanner.zxing.android) { exclude("com.google.zxing", "core") } - testApi(libs.test.junit) - testApi(libs.test.mockitoCore) - testApi(libs.test.mockitoKotlin) - testApi(libs.test.mockitoInline) - androidTestApi(libs.test.mockitoCore) - androidTestApi(libs.test.mockitoKotlin) - androidTestApi(libs.test.dexmaker.mockitoInline) - androidTestApi(libs.test.junit.ext) - androidTestApi(libs.test.espresso) - androidTestApi(libs.test.espresso.idlingresource) + testImplementation(libs.test.junit) + testImplementation(libs.test.mockitoCore) + testImplementation(libs.test.mockitoKotlin) + testImplementation(libs.test.mockitoInline) + androidTestImplementation(libs.test.mockitoCore) + androidTestImplementation(libs.test.mockitoKotlin) + androidTestImplementation(libs.test.dexmaker.mockitoInline) + androidTestImplementation(libs.test.junit.ext) + androidTestImplementation(libs.test.espresso) + androidTestImplementation(libs.test.espresso.idlingresource) api(libs.test.espresso.idlingresource) api(libs.test.espresso.idlingconcurrent) api(libs.analytics.sentry) diff --git a/commons/src/main/java/org/dhis2/commons/reporting/CrashReportModule.kt b/commons/src/main/java/org/dhis2/commons/reporting/CrashReportModule.kt index 31f48c6c5a1..c90bd0f6ce4 100644 --- a/commons/src/main/java/org/dhis2/commons/reporting/CrashReportModule.kt +++ b/commons/src/main/java/org/dhis2/commons/reporting/CrashReportModule.kt @@ -11,5 +11,8 @@ import javax.inject.Singleton class CrashReportModule internal constructor() { @Provides @Singleton - fun provideCrashReportController(context: Context): CrashReportController = CrashReportControllerImpl(context) + fun provideCrashReportController(context: Context): CrashReportController = CrashReportControllerImpl( + context = context, + sentryDsn = "", + ) } diff --git a/commonskmm/build.gradle.kts b/commonskmm/build.gradle.kts index 909d0454f74..bd3c8f6b8e3 100644 --- a/commonskmm/build.gradle.kts +++ b/commonskmm/build.gradle.kts @@ -1,12 +1,9 @@ -@file:OptIn(ExperimentalKotlinGradlePluginApi::class) - -import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi import org.jetbrains.kotlin.gradle.dsl.JvmTarget plugins { - kotlin("multiplatform") + alias(libs.plugins.kotlin.multiplatform) alias(libs.plugins.compose) - id("com.android.library") + alias(libs.plugins.android.kotlin.multiplatform.library) alias(libs.plugins.kotlin.compose.compiler) alias(libs.plugins.kotlin.atomicfu) alias(libs.plugins.kotlin.serialization) @@ -15,22 +12,22 @@ plugins { kotlin { compilerOptions { freeCompilerArgs.add("-Xcontext-parameters") + freeCompilerArgs.add("-Xexpect-actual-classes") } - androidTarget { - compilations.all { - compileTaskProvider.configure { - compilerOptions { - jvmTarget.set(JvmTarget.JVM_17) - } - } + + androidLibrary { + namespace = "org.dhis2.mobile.commons" + compileSdk = libs.versions.sdk.get().toInt() + minSdk = libs.versions.minSdk.get().toInt() + compilerOptions { jvmTarget.set(JvmTarget.JVM_17) } + androidResources { enable = true } + withHostTestBuilder {}.configure {} + withDeviceTestBuilder {}.configure { + instrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } } - jvm("desktop") - @OptIn(ExperimentalKotlinGradlePluginApi::class) - compilerOptions { - freeCompilerArgs.add("-Xexpect-actual-classes") - } + jvm("desktop") sourceSets { commonMain.dependencies { @@ -78,13 +75,16 @@ kotlin { // Sentry api(libs.analytics.sentry) implementation(libs.androidx.work) + compileOnly(libs.androidx.compose.preview) + compileOnly(libs.androidx.compose.uitooling) } - androidUnitTest.dependencies { - + getByName("androidHostTest") { + dependencies { + } } - androidInstrumentedTest.dependencies { + getByName("androidDeviceTest") { dependencies { implementation(libs.test.junit.ext) implementation(libs.test.espresso) @@ -107,31 +107,6 @@ compose.resources { generateResClass = always } -android { - namespace = "org.dhis2.mobile.commons" - compileSdk = libs.versions.sdk.get().toInt() - defaultConfig { - minSdk = libs.versions.minSdk.get().toInt() - val bitriseSentryDSN = System.getenv("SENTRY_DSN") ?: "" - buildConfigField("String", "SENTRY_DSN", "\"${bitriseSentryDSN}\"") - } - buildFeatures { - buildConfig = true - } - compileOptions { - isCoreLibraryDesugaringEnabled = true - - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 - } - - dependencies { - coreLibraryDesugaring(libs.desugar) - } -} - dependencies { - debugImplementation(libs.androidx.compose.preview) - debugImplementation(libs.androidx.compose.uitooling) + coreLibraryDesugaring(libs.desugar) } - diff --git a/commonskmm/src/androidUnitTest/kotlin/org/dhis2/commons/validation/validators/FieldMaskValidatorTest.kt b/commonskmm/src/androidHostTest/kotlin/org/dhis2/commons/validation/validators/FieldMaskValidatorTest.kt similarity index 100% rename from commonskmm/src/androidUnitTest/kotlin/org/dhis2/commons/validation/validators/FieldMaskValidatorTest.kt rename to commonskmm/src/androidHostTest/kotlin/org/dhis2/commons/validation/validators/FieldMaskValidatorTest.kt diff --git a/commonskmm/src/androidMain/kotlin/org/dhis2/mobile/commons/di/CommonsModule.android.kt b/commonskmm/src/androidMain/kotlin/org/dhis2/mobile/commons/di/CommonsModule.android.kt index 46e9edc6b33..fecd0e199fa 100644 --- a/commonskmm/src/androidMain/kotlin/org/dhis2/mobile/commons/di/CommonsModule.android.kt +++ b/commonskmm/src/androidMain/kotlin/org/dhis2/mobile/commons/di/CommonsModule.android.kt @@ -41,7 +41,7 @@ actual val commonsModule: Module FileHandlerImpl() } single { - CrashReportControllerImpl(get()) + CrashReportControllerImpl(get(), getProperty("sentryDsn", "")) } single { diff --git a/commonskmm/src/androidMain/kotlin/org/dhis2/mobile/commons/reporting/CrashReportControllerImpl.kt b/commonskmm/src/androidMain/kotlin/org/dhis2/mobile/commons/reporting/CrashReportControllerImpl.kt index ac505a6d64b..1979a81096f 100644 --- a/commonskmm/src/androidMain/kotlin/org/dhis2/mobile/commons/reporting/CrashReportControllerImpl.kt +++ b/commonskmm/src/androidMain/kotlin/org/dhis2/mobile/commons/reporting/CrashReportControllerImpl.kt @@ -1,13 +1,13 @@ package org.dhis2.mobile.commons.reporting import android.content.Context +import android.content.pm.ApplicationInfo import io.sentry.Breadcrumb import io.sentry.Sentry import io.sentry.SentryLevel import io.sentry.SentryOptions.BeforeSendCallback import io.sentry.android.core.SentryAndroid import io.sentry.android.core.SentryAndroidOptions -import org.dhis2.mobile.commons.BuildConfig import org.hisp.dhis.android.core.D2Manager import timber.log.Timber @@ -15,20 +15,27 @@ const val DATA_STORE_CRASH_PERMISSION_KEY = "analytics_permission" class CrashReportControllerImpl( private val context: Context, + private val sentryDsn: String, + private val isDebug: Boolean = context.applicationInfo.flags and ApplicationInfo.FLAG_DEBUGGABLE != 0, ) : CrashReportController { override fun init() { + val resolvedDsn = resolveSentryDsn() + if (resolvedDsn.isBlank()) { + Timber.w("Sentry DSN is empty. Skipping Sentry initialization.") + return + } SentryAndroid.init(context) { options: SentryAndroidOptions? -> - options!!.setDsn(BuildConfig.SENTRY_DSN) + options!!.setDsn(resolvedDsn) options.isAnrReportInDebug = true options.beforeSend = BeforeSendCallback { event, _ -> if (SentryLevel.DEBUG == event.level) null else event } - options.environment = if (BuildConfig.DEBUG) "debug" else "production" - options.isDebug = BuildConfig.DEBUG + options.environment = if (isDebug) "debug" else "production" + options.isDebug = isDebug options.isAttachViewHierarchy = true - options.setTracesSampleRate(if (BuildConfig.DEBUG) 1.0 else 0.1) - options.setProfilesSampleRate(if (BuildConfig.DEBUG) 1.0 else 0.1) + options.setTracesSampleRate(if (isDebug) 1.0 else 0.1) + options.setProfilesSampleRate(if (isDebug) 1.0 else 0.1) } } @@ -97,4 +104,23 @@ class CrashReportControllerImpl( Timber.d("Tracking is disabled") } } + + private fun resolveSentryDsn(): String { + if (sentryDsn.isNotBlank()) { + return sentryDsn + } + + return try { + val buildConfigClass = Class.forName("${context.packageName}.BuildConfig") + (buildConfigClass.getField("SENTRY_DSN")[null] as? String).orEmpty() + } catch (_: ClassNotFoundException) { + "" + } catch (_: NoSuchFieldException) { + "" + } catch (_: IllegalAccessException) { + "" + } catch (_: SecurityException) { + "" + } + } } diff --git a/compose-table/build.gradle.kts b/compose-table/build.gradle.kts index 7e05c3b3414..215c0241340 100644 --- a/compose-table/build.gradle.kts +++ b/compose-table/build.gradle.kts @@ -2,7 +2,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget plugins { id("com.android.library") - kotlin("android") alias(libs.plugins.kotlin.serialization) alias(libs.plugins.kotlin.compose.compiler) } diff --git a/dhis2-mobile-program-rules/build.gradle.kts b/dhis2-mobile-program-rules/build.gradle.kts index 470b75ce8f0..7f2f277ed4c 100644 --- a/dhis2-mobile-program-rules/build.gradle.kts +++ b/dhis2-mobile-program-rules/build.gradle.kts @@ -2,7 +2,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget plugins { id("com.android.library") - kotlin("android") } apply(from = "${project.rootDir}/jacoco/jacoco.gradle.kts") diff --git a/dhis2_android_maps/build.gradle.kts b/dhis2_android_maps/build.gradle.kts index c5dc169b4bb..c39c2c4290a 100644 --- a/dhis2_android_maps/build.gradle.kts +++ b/dhis2_android_maps/build.gradle.kts @@ -2,7 +2,7 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget plugins { id("com.android.library") - kotlin("android") + alias(libs.plugins.legacy.kapt) id("com.google.devtools.ksp") alias(libs.plugins.kotlin.compose.compiler) alias(libs.plugins.kotlin.serialization) @@ -52,6 +52,10 @@ kotlin { } } +kapt { + correctErrorTypes = true +} + dependencies { implementation(project(":commons")) implementation(project(":commonskmm")) diff --git a/dhis_android_analytics/build.gradle.kts b/dhis_android_analytics/build.gradle.kts index 6ebb32d5980..2c659157427 100644 --- a/dhis_android_analytics/build.gradle.kts +++ b/dhis_android_analytics/build.gradle.kts @@ -2,8 +2,7 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget plugins { id("com.android.library") - kotlin("android") - kotlin("kapt") + alias(libs.plugins.legacy.kapt) id("com.google.devtools.ksp") alias(libs.plugins.kotlin.compose.compiler) } @@ -53,6 +52,10 @@ kotlin { } } +kapt { + correctErrorTypes = true +} + dependencies { implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar")))) implementation(project(":commons")) diff --git a/form/build.gradle.kts b/form/build.gradle.kts index 21683e3fb79..cd63a9bcdf5 100644 --- a/form/build.gradle.kts +++ b/form/build.gradle.kts @@ -2,7 +2,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget plugins { id("com.android.library") - kotlin("android") id("com.google.devtools.ksp") alias(libs.plugins.kotlin.compose.compiler) } @@ -69,9 +68,9 @@ dependencies { testImplementation(libs.bundles.form.test) testImplementation(libs.test.junit) androidTestImplementation(libs.test.compose.ui.test) - androidTestApi(libs.test.mockitoCore) - androidTestApi(libs.test.mockitoKotlin) - androidTestApi(libs.test.dexmaker.mockitoInline) + androidTestImplementation(libs.test.mockitoCore) + androidTestImplementation(libs.test.mockitoKotlin) + androidTestImplementation(libs.test.dexmaker.mockitoInline) debugImplementation(libs.androidx.compose.uitooling) debugImplementation(libs.test.ui.test.manifest) diff --git a/form/src/main/java/org/dhis2/form/di/Injector.kt b/form/src/main/java/org/dhis2/form/di/Injector.kt index e0e481eaae0..87da96a7f7a 100644 --- a/form/src/main/java/org/dhis2/form/di/Injector.kt +++ b/form/src/main/java/org/dhis2/form/di/Injector.kt @@ -237,7 +237,7 @@ object Injector { private fun provideEnrollmentObjectRepository(enrollmentUid: String): EnrollmentObjectRepository = provideD2().enrollmentModule().enrollments().uid(enrollmentUid) - private fun provideCrashReportController(context: Context) = CrashReportControllerImpl(context) + private fun provideCrashReportController(context: Context) = CrashReportControllerImpl(context, sentryDsn = "") private fun provideNetworkUtils(context: Context) = NetworkUtils(context) diff --git a/gradle.properties b/gradle.properties index e13a05e180a..7d5c150076d 100644 --- a/gradle.properties +++ b/gradle.properties @@ -17,6 +17,10 @@ org.gradle.jvmargs=-Xmx4096M -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF # org.gradle.parallel=true android.useAndroidX=true android.enableJetifier=true +# TODO: Remove when SonarQube Gradle plugin supports AGP 9.x new DSL (AppExtension removal) +# NOTE: AGP 9.1.0 also removed getCDirectories() from SourceProvider, breaking sonar-scanner-gradle +# 7.2.3.7755. Pinned to AGP 9.0.1 until SonarQube Gradle plugin 7.3 adds AGP 9.1+ support. +android.newDsl=false #disable firebase performance. Should be enabled for release firebasePerformanceInstrumentationEnabled=false @@ -35,13 +39,12 @@ org.gradle.caching=true android.suppressUnsupportedCompileSdk=32 android.nonTransitiveRClass=false -android.nonFinalResIds=false - -android.enableR8.fullMode=false # Kotlin compiler flags -kotlin.daemon.jvmargs=-Xmx2048M +kotlin.daemon.jvmargs=-Xmx4096M kotlin.incremental=true # Enable dependency verification org.gradle.dependency.verification.mode=lenient +android.r8.strictFullModeForKeepRules=false +kotlinx.atomicfu.enableJvmIrTransformation=true diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 677c0a4a363..043aeb6f504 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -6,8 +6,8 @@ sdk = "36" minSdk = "23" vCode = "151" vName = "3.4.0-DEV" -gradle = "8.13.2" -kotlin = '2.2.21' +gradle = "9.0.1" +kotlin = '2.3.10' dagger = '2.57.2' jacoco = '0.8.14' designSystem = "0.7.0-SNAPSHOT" @@ -44,8 +44,8 @@ rxandroid = "2.1.1" maplibremarkerview = "3.0.2" maplibreannotation = "3.0.2" matomo = "4.4" -sentry = "8.29.0" -sentryPlugin = "5.12.2" +sentry = "8.33.0" +sentryPlugin = "6.1.0" timber = "5.0.1" rxlint = "1.7.8" crashactivity = "2.4.0" @@ -89,10 +89,10 @@ ktxml = "1.0.0" atomicfu = "0.29.0" playservicesauth = "21.4.0" playservicesphone = "18.0.2" #Can not be updated to latest due minSDK requirement of 23 -ksp = "2.2.21-2.0.4" +ksp = "2.3.6" commonsText = "1.14.0" ktlint = "13.1.0" -sonarqube = "7.0.1.6134" +sonarqube = "7.2.3.7755" browser = "1.9.0" biometric = "1.1.0" coil = "3.3.0" @@ -224,11 +224,14 @@ coil-network = { module = "io.coil-kt.coil3:coil-network-okhttp", version.ref = androidx-work-runtime-ktx = { group = "androidx.work", name = "work-runtime-ktx", version.ref = "workRuntimeKtx" } [plugins] +kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" } +android-kotlin-multiplatform-library = { id = "com.android.kotlin.multiplatform.library", version.ref = "gradle" } kotlin-compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" } kotlin-serialization = { id = "kotlinx-serialization" } compose = { id = "org.jetbrains.compose", version.ref = "composePluginVersion" } ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" } kotlin-atomicfu = { id = "org.jetbrains.kotlinx.atomicfu", version.ref = "atomicfu" } +legacy-kapt = { id = "com.android.legacy-kapt", version.ref = "gradle" } ktlint = { id = "org.jlleitschuh.gradle.ktlint", version.ref = "ktlint" } sonarqube = { id = "org.sonarqube", version.ref = "sonarqube" } sentry = { id = "io.sentry.android.gradle", version.ref = "sentryPlugin" } diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index 702f5acb887..575fc7e0c70 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -131,6 +131,11 @@ + + + + + @@ -519,6 +524,11 @@ + + + + + @@ -973,6 +983,11 @@ + + + + + @@ -1089,6 +1104,19 @@ + + + + + + + + + + + + + @@ -1115,6 +1143,19 @@ + + + + + + + + + + + + + @@ -1158,6 +1199,14 @@ + + + + + + + + @@ -1272,6 +1321,11 @@ + + + + + @@ -1530,6 +1584,11 @@ + + + + + @@ -1636,6 +1695,11 @@ + + + + + @@ -1741,6 +1805,11 @@ + + + + + @@ -1831,6 +1900,11 @@ + + + + + @@ -1889,6 +1963,11 @@ + + + + + @@ -1944,6 +2023,11 @@ + + + + + @@ -2076,6 +2160,11 @@ + + + + + @@ -2134,6 +2223,11 @@ + + + + + @@ -2192,6 +2286,11 @@ + + + + + @@ -2250,6 +2349,11 @@ + + + + + @@ -2355,6 +2459,11 @@ + + + + + @@ -2444,6 +2553,11 @@ + + + + + @@ -2785,6 +2899,22 @@ + + + + + + + + + + + + + + + + @@ -2809,6 +2939,22 @@ + + + + + + + + + + + + + + + + @@ -2825,6 +2971,22 @@ + + + + + + + + + + + + + + + + @@ -2841,6 +3003,22 @@ + + + + + + + + + + + + + + + + @@ -2865,6 +3043,22 @@ + + + + + + + + + + + + + + + + @@ -2889,6 +3083,22 @@ + + + + + + + + + + + + + + + + @@ -2913,6 +3123,22 @@ + + + + + + + + + + + + + + + + @@ -3089,6 +3315,14 @@ + + + + + + + + @@ -3216,6 +3450,9 @@ + + + @@ -3260,6 +3497,9 @@ + + + @@ -3323,6 +3563,9 @@ + + + @@ -3367,6 +3610,9 @@ + + + @@ -3553,6 +3799,9 @@ + + + @@ -3605,6 +3854,9 @@ + + + @@ -3627,6 +3879,16 @@ + + + + + + + + + + @@ -3681,6 +3943,9 @@ + + + @@ -3777,6 +4042,9 @@ + + + @@ -3818,6 +4086,9 @@ + + + @@ -3858,6 +4129,11 @@ + + + + + @@ -3929,6 +4205,9 @@ + + + @@ -5213,6 +5492,11 @@ + + + + + @@ -5370,6 +5654,22 @@ + + + + + + + + + + + + + + + + @@ -5386,6 +5686,22 @@ + + + + + + + + + + + + + + + + @@ -5402,6 +5718,42 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -5418,6 +5770,22 @@ + + + + + + + + + + + + + + + + @@ -5434,6 +5802,22 @@ + + + + + + + + + + + + + + + + @@ -5466,6 +5850,22 @@ + + + + + + + + + + + + + + + + @@ -5498,6 +5898,22 @@ + + + + + + + + + + + + + + + + @@ -5514,6 +5930,22 @@ + + + + + + + + + + + + + + + + @@ -5530,6 +5962,22 @@ + + + + + + + + + + + + + + + + @@ -5546,6 +5994,22 @@ + + + + + + + + + + + + + + + + @@ -5562,6 +6026,22 @@ + + + + + + + + + + + + + + + + @@ -5578,6 +6058,22 @@ + + + + + + + + + + + + + + + + @@ -5594,6 +6090,22 @@ + + + + + + + + + + + + + + + + @@ -5618,6 +6130,22 @@ + + + + + + + + + + + + + + + + @@ -5634,6 +6162,22 @@ + + + + + + + + + + + + + + + + @@ -5650,6 +6194,22 @@ + + + + + + + + + + + + + + + + @@ -5666,6 +6226,22 @@ + + + + + + + + + + + + + + + + @@ -5682,6 +6258,22 @@ + + + + + + + + + + + + + + + + @@ -5698,6 +6290,22 @@ + + + + + + + + + + + + + + + + @@ -5714,6 +6322,22 @@ + + + + + + + + + + + + + + + + @@ -5722,6 +6346,14 @@ + + + + + + + + @@ -5738,6 +6370,22 @@ + + + + + + + + + + + + + + + + @@ -5754,7 +6402,23 @@ - + + + + + + + + + + + + + + + + + @@ -5770,6 +6434,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -5786,6 +6482,22 @@ + + + + + + + + + + + + + + + + @@ -5802,6 +6514,22 @@ + + + + + + + + + + + + + + + + @@ -5842,6 +6570,22 @@ + + + + + + + + + + + + + + + + @@ -5858,6 +6602,22 @@ + + + + + + + + + + + + + + + + @@ -5922,6 +6682,22 @@ + + + + + + + + + + + + + + + + @@ -6002,6 +6778,22 @@ + + + + + + + + + + + + + + + + @@ -6018,6 +6810,22 @@ + + + + + + + + + + + + + + + + @@ -6034,6 +6842,22 @@ + + + + + + + + + + + + + + + + @@ -6050,6 +6874,22 @@ + + + + + + + + + + + + + + + + @@ -6098,6 +6938,22 @@ + + + + + + + + + + + + + + + + @@ -6114,6 +6970,22 @@ + + + + + + + + + + + + + + + + @@ -6130,6 +7002,22 @@ + + + + + + + + + + + + + + + + @@ -6146,6 +7034,22 @@ + + + + + + + + + + + + + + + + @@ -6162,6 +7066,22 @@ + + + + + + + + + + + + + + + + @@ -6178,6 +7098,22 @@ + + + + + + + + + + + + + + + + @@ -6194,6 +7130,22 @@ + + + + + + + + + + + + + + + + @@ -6210,6 +7162,22 @@ + + + + + + + + + + + + + + + + @@ -6226,6 +7194,22 @@ + + + + + + + + + + + + + + + + @@ -6242,6 +7226,22 @@ + + + + + + + + + + + + + + + + @@ -6258,6 +7258,22 @@ + + + + + + + + + + + + + + + + @@ -6274,6 +7290,22 @@ + + + + + + + + + + + + + + + + @@ -6290,6 +7322,22 @@ + + + + + + + + + + + + + + + + @@ -6306,6 +7354,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -6322,6 +7418,22 @@ + + + + + + + + + + + + + + + + @@ -6720,6 +7832,14 @@ + + + + + + + + @@ -6874,6 +7994,14 @@ + + + + + + + + @@ -6932,6 +8060,11 @@ + + + + + @@ -6948,6 +8081,11 @@ + + + + + @@ -6964,6 +8102,14 @@ + + + + + + + + @@ -6988,6 +8134,14 @@ + + + + + + + + @@ -7020,6 +8174,14 @@ + + + + + + + + @@ -7036,6 +8198,14 @@ + + + + + + + + @@ -7049,6 +8219,11 @@ + + + + + @@ -7058,6 +8233,9 @@ + + + @@ -7101,6 +8279,11 @@ + + + + + @@ -7362,6 +8545,21 @@ + + + + + + + + + + + + + + + @@ -7378,6 +8576,19 @@ + + + + + + + + + + + + + @@ -7402,6 +8613,22 @@ + + + + + + + + + + + + + + + + @@ -7410,6 +8637,14 @@ + + + + + + + + @@ -7438,6 +8673,21 @@ + + + + + + + + + + + + + + + @@ -7446,6 +8696,14 @@ + + + + + + + + @@ -7454,6 +8712,14 @@ + + + + + + + + @@ -7462,6 +8728,14 @@ + + + + + + + + @@ -7470,6 +8744,14 @@ + + + + + + + + @@ -7478,6 +8760,14 @@ + + + + + + + + @@ -7486,6 +8776,14 @@ + + + + + + + + @@ -8104,6 +9402,14 @@ + + + + + + + + @@ -8128,6 +9434,14 @@ + + + + + + + + @@ -8330,6 +9644,24 @@ + + + + + + + + + + + + + + + + + + @@ -8348,6 +9680,14 @@ + + + + + + + + @@ -9655,6 +10995,14 @@ + + + + + + + + @@ -9671,6 +11019,14 @@ + + + + + + + + @@ -9687,6 +11043,14 @@ + + + + + + + + @@ -9695,6 +11059,14 @@ + + + + + + + + @@ -9711,6 +11083,14 @@ + + + + + + + + @@ -9727,6 +11107,14 @@ + + + + + + + + @@ -9743,6 +11131,14 @@ + + + + + + + + @@ -9759,6 +11155,14 @@ + + + + + + + + @@ -9775,11 +11179,24 @@ + + + + + + + + + + + + + @@ -10094,6 +11511,14 @@ + + + + + + + + @@ -10102,6 +11527,14 @@ + + + + + + + + @@ -10118,6 +11551,14 @@ + + + + + + + + @@ -10219,6 +11660,11 @@ + + + + + @@ -10517,6 +11963,14 @@ + + + + + + + + @@ -10864,6 +12318,14 @@ + + + + + + + + @@ -12376,6 +13838,14 @@ + + + + + + + + @@ -12384,6 +13854,22 @@ + + + + + + + + + + + + + + + + @@ -12392,6 +13878,14 @@ + + + + + + + + @@ -12400,6 +13894,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -12408,6 +13926,14 @@ + + + + + + + + @@ -12424,11 +13950,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -12437,6 +13987,22 @@ + + + + + + + + + + + + + + + + @@ -12445,6 +14011,22 @@ + + + + + + + + + + + + + + + + @@ -12453,6 +14035,14 @@ + + + + + + + + @@ -12469,6 +14059,22 @@ + + + + + + + + + + + + + + + + @@ -12477,6 +14083,14 @@ + + + + + + + + @@ -12485,6 +14099,22 @@ + + + + + + + + + + + + + + + + @@ -12493,6 +14123,14 @@ + + + + + + + + @@ -12509,6 +14147,22 @@ + + + + + + + + + + + + + + + + @@ -12517,6 +14171,22 @@ + + + + + + + + + + + + + + + + @@ -12525,6 +14195,25 @@ + + + + + + + + + + + + + + + + + + + @@ -12536,6 +14225,22 @@ + + + + + + + + + + + + + + + + @@ -12544,6 +14249,22 @@ + + + + + + + + + + + + + + + + @@ -12552,6 +14273,22 @@ + + + + + + + + + + + + + + + + @@ -12560,6 +14297,14 @@ + + + + + + + + @@ -12568,6 +14313,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -12576,6 +14345,14 @@ + + + + + + + + @@ -12584,6 +14361,14 @@ + + + + + + + + @@ -12608,6 +14393,22 @@ + + + + + + + + + + + + + + + + @@ -12616,6 +14417,14 @@ + + + + + + + + @@ -12624,6 +14433,14 @@ + + + + + + + + @@ -12640,6 +14457,14 @@ + + + + + + + + @@ -12688,6 +14513,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + @@ -12704,6 +14553,14 @@ + + + + + + + + @@ -12712,6 +14569,14 @@ + + + + + + + + @@ -12720,6 +14585,14 @@ + + + + + + + + @@ -12728,6 +14601,14 @@ + + + + + + + + @@ -12736,6 +14617,14 @@ + + + + + + + + @@ -12744,6 +14633,14 @@ + + + + + + + + @@ -12752,6 +14649,14 @@ + + + + + + + + @@ -12840,6 +14745,9 @@ + + + @@ -12877,6 +14785,17 @@ + + + + + + + + + + + @@ -12964,6 +14883,11 @@ + + + + + @@ -12979,6 +14903,11 @@ + + + + + @@ -13197,6 +15126,17 @@ + + + + + + + + + + + @@ -13205,6 +15145,22 @@ + + + + + + + + + + + + + + + + @@ -13213,6 +15169,22 @@ + + + + + + + + + + + + + + + + @@ -13221,6 +15193,22 @@ + + + + + + + + + + + + + + + + @@ -13229,6 +15217,22 @@ + + + + + + + + + + + + + + + + @@ -13237,6 +15241,14 @@ + + + + + + + + @@ -13245,11 +15257,21 @@ + + + + + + + + + + @@ -14215,10 +16237,29 @@ + + + + + + + + + + + + + + + + + + + @@ -14606,6 +16647,14 @@ + + + + + + + + @@ -14622,6 +16671,14 @@ + + + + + + + + @@ -14696,6 +16753,14 @@ + + + + + + + + @@ -14712,6 +16777,14 @@ + + + + + + + + @@ -14849,11 +16922,26 @@ + + + + + + + + + + + + + + + @@ -14870,6 +16958,33 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -14878,6 +16993,14 @@ + + + + + + + + @@ -14886,11 +17009,24 @@ + + + + + + + + + + + + + diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index ff96c38feaf..ac6cfd349c9 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ #Tue Jul 22 10:02:18 CEST 2025 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/login/build.gradle.kts b/login/build.gradle.kts index 47cc88ba03d..9bfcdae9e18 100644 --- a/login/build.gradle.kts +++ b/login/build.gradle.kts @@ -1,10 +1,7 @@ -import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi -import org.jetbrains.kotlin.gradle.plugin.KotlinSourceSetTree - plugins { - kotlin("multiplatform") + alias(libs.plugins.kotlin.multiplatform) alias(libs.plugins.compose) - id("com.android.library") + alias(libs.plugins.android.kotlin.multiplatform.library) alias(libs.plugins.kotlin.compose.compiler) alias(libs.plugins.kotlin.serialization) } @@ -14,12 +11,22 @@ kotlin { compilerOptions { freeCompilerArgs.add("-Xcontext-parameters") } - androidTarget { - compilerOptions { - jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17) + + androidLibrary { + namespace = "org.dhis2.mobile.login" + compileSdk = libs.versions.sdk.get().toInt() + minSdk = libs.versions.minSdk.get().toInt() + enableCoreLibraryDesugaring = true + compilerOptions { jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17) } + packaging { + resources { + pickFirsts.add("values*/**") + } + } + withHostTestBuilder {}.configure {} + withDeviceTestBuilder { sourceSetTreeName = "test" }.configure { + instrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } - @OptIn(ExperimentalKotlinGradlePluginApi::class) - instrumentedTestVariant.sourceSetTree.set(KotlinSourceSetTree.test) } jvm("desktop") @@ -74,6 +81,20 @@ kotlin { implementation(libs.koin.androidx.compose) implementation(libs.androidx.activity.compose) implementation(libs.androidx.browser) + compileOnly(libs.androidx.compose.uitooling) + } + } + + getByName("androidHostTest") { + dependencies { + implementation(libs.junit.jupiter) + } + } + + getByName("androidDeviceTest") { + dependencies { + implementation(libs.test.compose.ui.test.junit4.android) + implementation(libs.test.ui.test.manifest) } } @@ -92,57 +113,6 @@ compose.resources { generateResClass = always } -android { - namespace = "org.dhis2.mobile.login" - compileSdk = libs.versions.sdk.get().toInt() - - sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml") - sourceSets["main"].res.srcDirs("src/androidMain/res") - - defaultConfig { - minSdk = libs.versions.minSdk.get().toInt() - testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" - } - compileOptions { - isCoreLibraryDesugaringEnabled = true - - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 - } - - buildTypes { - getByName("debug") { - - } - getByName("release") { - - } - } - buildFeatures.buildConfig = true - - flavorDimensions += listOf("default") - productFlavors { - create("dhis2") { - buildConfigField("String", "LOGIN_TEST", "\"test\"") - } - create("dhis2PlayServices") { - buildConfigField("String", "LOGIN_TEST", "\"test\"") - - } - create("dhis2Training") { - buildConfigField("String", "LOGIN_TEST", "\"test\"") - } - } -} - dependencies { coreLibraryDesugaring(libs.desugar) } - -dependencies { - testImplementation(libs.junit.jupiter) - debugImplementation(libs.androidx.compose.preview) - debugImplementation(libs.androidx.compose.uitooling) - androidTestImplementation(libs.test.compose.ui.test.junit4.android) - debugImplementation(libs.test.ui.test.manifest) -} \ No newline at end of file diff --git a/login/src/androidInstrumentedTest/kotlin/screen/TwoFAToEnableScreenTest.kt b/login/src/androidInstrumentedTest/kotlin/screen/TwoFAToEnableScreenTest.kt deleted file mode 100644 index 51b89b75804..00000000000 --- a/login/src/androidInstrumentedTest/kotlin/screen/TwoFAToEnableScreenTest.kt +++ /dev/null @@ -1,74 +0,0 @@ -package screen - -import androidx.compose.ui.test.ExperimentalTestApi -import androidx.compose.ui.test.assertIsDisplayed -import androidx.compose.ui.test.assertIsNotEnabled -import androidx.compose.ui.test.hasTestTag -import androidx.compose.ui.test.hasText -import androidx.compose.ui.test.junit4.createComposeRule -import androidx.compose.ui.test.onNodeWithTag -import androidx.compose.ui.test.runComposeUiTest -import org.dhis2.mobile.login.authentication.ui.screen.TURN_ON_BUTTON_TEST_TAG -import org.dhis2.mobile.login.authentication.ui.screen.TwoFAToEnableScreen -import org.dhis2.mobile.login.authentication.ui.state.TwoFAUiState -import org.hisp.dhis.mobile.ui.designsystem.theme.DHIS2Theme -import org.junit.Rule -import kotlin.test.Test - -@OptIn(ExperimentalTestApi::class) -class TwoFAToEnableScreenTest { - @get:Rule - val composeTestRule = createComposeRule() - - private val secretCode = "secret_code" - - @Test - fun should_init_with_disabled_button() { - with(composeTestRule) { - setContent { - DHIS2Theme { - TwoFAToEnableScreen( - enableUiState = - TwoFAUiState.Enable( - secretCode = secretCode, - isEnabling = false, - enableErrorMessage = null, - ), - onAuthenticatorButtonClicked = {}, - onCopyCodeButtonClicked = {}, - onEnableButtonClicked = {}, - ) - } - } - - onNodeWithTag(TURN_ON_BUTTON_TEST_TAG).assertIsNotEnabled() - } - } - - @Test - fun should_set_error_if_code_is_wrong() = - runComposeUiTest { - with(composeTestRule) { - setContent { - DHIS2Theme { - TwoFAToEnableScreen( - enableUiState = - TwoFAUiState.Enable( - secretCode = secretCode, - isEnabling = false, - enableErrorMessage = "Error code", - ), - onAuthenticatorButtonClicked = {}, - onCopyCodeButtonClicked = {}, - onEnableButtonClicked = {}, - ) - } - } - - onNode( - hasTestTag("INPUT_TEXT_SUPPORTING_TEXT") and - hasText("two_fa_failed_to_turn_on"), - ).assertIsDisplayed() - } - } -} diff --git a/login/src/androidMain/kotlin/org/dhis2/mobile/login/accounts/data/repository/AccountRepositoryImpl.kt b/login/src/androidMain/kotlin/org/dhis2/mobile/login/accounts/data/repository/AccountRepositoryImpl.kt index 173dafcd054..4b6f786a65d 100644 --- a/login/src/androidMain/kotlin/org/dhis2/mobile/login/accounts/data/repository/AccountRepositoryImpl.kt +++ b/login/src/androidMain/kotlin/org/dhis2/mobile/login/accounts/data/repository/AccountRepositoryImpl.kt @@ -1,7 +1,6 @@ package org.dhis2.mobile.login.accounts.data.repository import org.dhis2.mobile.commons.providers.PreferenceProvider -import org.dhis2.mobile.login.BuildConfig import org.dhis2.mobile.login.accounts.data.credentials.defaultTestingCredentials import org.dhis2.mobile.login.accounts.data.credentials.trainingTestingCredentials import org.dhis2.mobile.login.accounts.domain.model.AccountModel @@ -12,6 +11,8 @@ import org.hisp.dhis.android.core.configuration.internal.DatabaseAccount class AccountRepositoryImpl( private val d2: D2, private val preferenceProvider: PreferenceProvider, + private val isDebug: Boolean, + private val isTrainingFlavor: Boolean, ) : AccountRepository { override suspend fun getLoggedInAccounts(): List = d2.userModule().accountManager().getAccounts().map { @@ -20,9 +21,9 @@ class AccountRepositoryImpl( override suspend fun availableServers(): List { val providedServers = - if (BuildConfig.DEBUG) { + if (isDebug) { defaultTestingCredentials - } else if (BuildConfig.FLAVOR == "dhis2Training") { + } else if (isTrainingFlavor) { trainingTestingCredentials } else { emptyList() diff --git a/login/src/androidMain/kotlin/org/dhis2/mobile/login/main/di/LoginModule.android.kt b/login/src/androidMain/kotlin/org/dhis2/mobile/login/main/di/LoginModule.android.kt index 67f3de6957d..75e5b511142 100644 --- a/login/src/androidMain/kotlin/org/dhis2/mobile/login/main/di/LoginModule.android.kt +++ b/login/src/androidMain/kotlin/org/dhis2/mobile/login/main/di/LoginModule.android.kt @@ -1,5 +1,7 @@ package org.dhis2.mobile.login.main.di +import android.content.Context +import android.content.pm.ApplicationInfo import org.dhis2.mobile.commons.auth.OpenIdController import org.dhis2.mobile.commons.auth.OpenIdControllerImpl import org.dhis2.mobile.login.accounts.data.repository.AccountRepository @@ -14,9 +16,13 @@ import org.koin.dsl.module internal actual val accountModule = module { factory { + val context = get() + val isDebug = context.applicationInfo.flags and ApplicationInfo.FLAG_DEBUGGABLE != 0 AccountRepositoryImpl( get(), get(), + isDebug = isDebug, + isTrainingFlavor = getProperty("isTrainingFlavor", false), ) } diff --git a/run_tests.sh b/run_tests.sh index 1aaa083608d..1907444367b 100755 --- a/run_tests.sh +++ b/run_tests.sh @@ -6,6 +6,6 @@ echo "Running Ktlint check..." ./gradlew ktlintCheck echo "Running Unit Tests..." -./gradlew testDebugUnitTest testDhis2DebugUnitTest +./gradlew testDebugUnitTest testDhis2DebugUnitTest testAndroidHostTest echo "All tasks completed!" diff --git a/stock-usecase/build.gradle.kts b/stock-usecase/build.gradle.kts index 76a74d878a7..bc413a81117 100644 --- a/stock-usecase/build.gradle.kts +++ b/stock-usecase/build.gradle.kts @@ -2,7 +2,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget plugins { id("com.android.library") - kotlin("android") id("kotlin-parcelize") alias(libs.plugins.kotlin.serialization) alias(libs.plugins.kotlin.compose.compiler) @@ -20,7 +19,6 @@ android { defaultConfig { minSdk = libs.versions.minSdk.get().toInt() testOptions.targetSdk = libs.versions.sdk.get().toInt() - multiDexEnabled = true testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" consumerProguardFiles("consumer-rules.pro") diff --git a/sync/build.gradle.kts b/sync/build.gradle.kts index 4912fafc6f4..75f8fc6f4e2 100644 --- a/sync/build.gradle.kts +++ b/sync/build.gradle.kts @@ -1,10 +1,9 @@ -import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi import org.jetbrains.kotlin.gradle.dsl.JvmTarget plugins { - kotlin("multiplatform") + alias(libs.plugins.kotlin.multiplatform) alias(libs.plugins.compose) - id("com.android.library") + alias(libs.plugins.android.kotlin.multiplatform.library) alias(libs.plugins.kotlin.compose.compiler) alias(libs.plugins.kotlin.serialization) } @@ -13,22 +12,22 @@ kotlin { compilerOptions { freeCompilerArgs.add("-Xcontext-parameters") - @OptIn(ExperimentalKotlinGradlePluginApi::class) freeCompilerArgs.add("-Xexpect-actual-classes") } - androidTarget { - compilations.all { - compileTaskProvider.configure { - compilerOptions { - jvmTarget.set(JvmTarget.JVM_17) - } - } + androidLibrary { + namespace = "org.dhis2.mobile.sync" + compileSdk = libs.versions.sdk.get().toInt() + minSdk = libs.versions.minSdk.get().toInt() + compilerOptions { jvmTarget.set(JvmTarget.JVM_17) } + androidResources { enable = true } + withHostTestBuilder {}.configure {} + withDeviceTestBuilder {}.configure { + instrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } } - jvm("desktop") - + jvm("desktop") sourceSets { @@ -64,20 +63,23 @@ kotlin { implementation(libs.dhis2.android.sdk) api(libs.analytics.timber) implementation(libs.androidx.work) + compileOnly(libs.androidx.compose.preview) + compileOnly(libs.androidx.compose.uitooling) } - androidUnitTest.dependencies { - implementation(kotlin("test")) - implementation(libs.junit.jupiter) - implementation(libs.test.turbine) - implementation(libs.test.kotlinCoroutines) - implementation(libs.test.mockitoKotlin) + getByName("androidHostTest") { + dependencies { + implementation(kotlin("test")) + implementation(libs.junit.jupiter) + implementation(libs.test.turbine) + implementation(libs.test.kotlinCoroutines) + implementation(libs.test.mockitoKotlin) + } } - androidInstrumentedTest.dependencies { + getByName("androidDeviceTest") { dependencies { implementation(libs.test.junit.ext) - } } @@ -95,30 +97,6 @@ compose.resources { generateResClass = always } -android { - namespace = "org.dhis2.mobile.sync" - compileSdk = libs.versions.sdk.get().toInt() - defaultConfig { - minSdk = libs.versions.minSdk.get().toInt() - val bitriseSentryDSN = System.getenv("SENTRY_DSN") ?: "" - buildConfigField("String", "SENTRY_DSN", "\"${bitriseSentryDSN}\"") - } - buildFeatures { - buildConfig = true - } - compileOptions { - isCoreLibraryDesugaringEnabled = true - - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 - } - - dependencies { - coreLibraryDesugaring(libs.desugar) - } -} - dependencies { - debugImplementation(libs.androidx.compose.preview) - debugImplementation(libs.androidx.compose.uitooling) + coreLibraryDesugaring(libs.desugar) } diff --git a/sync/src/androidUnitTest/kotlin/org.dhis2.mobile.sync.data/AndroidSyncRepositoryTest.kt b/sync/src/androidHostTest/kotlin/org/dhis2/mobile/sync/data/AndroidSyncRepositoryTest.kt similarity index 100% rename from sync/src/androidUnitTest/kotlin/org.dhis2.mobile.sync.data/AndroidSyncRepositoryTest.kt rename to sync/src/androidHostTest/kotlin/org/dhis2/mobile/sync/data/AndroidSyncRepositoryTest.kt diff --git a/sync/src/main/res/drawable/ic_sync.xml b/sync/src/androidMain/res/drawable/ic_sync.xml similarity index 100% rename from sync/src/main/res/drawable/ic_sync.xml rename to sync/src/androidMain/res/drawable/ic_sync.xml diff --git a/tracker/build.gradle.kts b/tracker/build.gradle.kts index 9a9ab870e3e..6c026c526b3 100644 --- a/tracker/build.gradle.kts +++ b/tracker/build.gradle.kts @@ -1,14 +1,22 @@ +import org.jetbrains.kotlin.gradle.dsl.JvmTarget + plugins { - kotlin("multiplatform") + alias(libs.plugins.kotlin.multiplatform) alias(libs.plugins.compose) - id("com.android.library") + alias(libs.plugins.android.kotlin.multiplatform.library) alias(libs.plugins.kotlin.compose.compiler) } kotlin { - androidTarget { - compilerOptions { - jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17) + androidLibrary { + namespace = "org.dhis2.mobile.tracker" + compileSdk = libs.versions.sdk.get().toInt() + minSdk = libs.versions.minSdk.get().toInt() + compilerOptions { jvmTarget.set(JvmTarget.JVM_17) } + androidResources { enable = true } + withHostTestBuilder {}.configure {} + withDeviceTestBuilder {}.configure { + instrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } } @@ -62,14 +70,17 @@ kotlin { implementation(libs.koin.androidx.compose) implementation(project(":commons")) implementation(project(":dhis2_android_maps")) + compileOnly(libs.androidx.compose.uitooling) } - androidUnitTest.dependencies { - implementation(kotlin("test")) - implementation(libs.junit.jupiter) - implementation(libs.test.turbine) - implementation(libs.test.kotlinCoroutines) - implementation(libs.test.mockitoKotlin) + getByName("androidHostTest") { + dependencies { + implementation(kotlin("test")) + implementation(libs.junit.jupiter) + implementation(libs.test.turbine) + implementation(libs.test.kotlinCoroutines) + implementation(libs.test.mockitoKotlin) + } } val desktopMain by getting { @@ -86,35 +97,6 @@ compose.resources { generateResClass = always } -android { - namespace = "org.dhis2.mobile.tracker" - compileSdk = libs.versions.sdk.get().toInt() - - sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml") - sourceSets["main"].res.srcDirs("src/androidMain/res") - - defaultConfig { - minSdk = libs.versions.minSdk.get().toInt() - - testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" - consumerProguardFiles("consumer-rules.pro") - } - - compileOptions { - isCoreLibraryDesugaringEnabled = true - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 - } - - dependencies { - coreLibraryDesugaring(libs.desugar) - } -} - - - dependencies { - testImplementation(libs.junit.jupiter) - debugImplementation(libs.androidx.compose.preview) - debugImplementation(libs.androidx.compose.uitooling) -} \ No newline at end of file + coreLibraryDesugaring(libs.desugar) +} diff --git a/tracker/src/androidUnitTest/kotlin/org/dhis2/tracker/relationships/AndroidRelationshipFakeModels.kt b/tracker/src/androidHostTest/kotlin/org/dhis2/tracker/relationships/AndroidRelationshipFakeModels.kt similarity index 100% rename from tracker/src/androidUnitTest/kotlin/org/dhis2/tracker/relationships/AndroidRelationshipFakeModels.kt rename to tracker/src/androidHostTest/kotlin/org/dhis2/tracker/relationships/AndroidRelationshipFakeModels.kt diff --git a/tracker/src/androidUnitTest/kotlin/org/dhis2/tracker/relationships/data/TrackerRelationshipsRepositoryTest.kt b/tracker/src/androidHostTest/kotlin/org/dhis2/tracker/relationships/data/TrackerRelationshipsRepositoryTest.kt similarity index 100% rename from tracker/src/androidUnitTest/kotlin/org/dhis2/tracker/relationships/data/TrackerRelationshipsRepositoryTest.kt rename to tracker/src/androidHostTest/kotlin/org/dhis2/tracker/relationships/data/TrackerRelationshipsRepositoryTest.kt diff --git a/tracker/src/androidUnitTest/kotlin/org/dhis2/tracker/search/data/SearchTrackedEntityRepositoryImplTest.kt b/tracker/src/androidHostTest/kotlin/org/dhis2/tracker/search/data/SearchTrackedEntityRepositoryImplTest.kt similarity index 100% rename from tracker/src/androidUnitTest/kotlin/org/dhis2/tracker/search/data/SearchTrackedEntityRepositoryImplTest.kt rename to tracker/src/androidHostTest/kotlin/org/dhis2/tracker/search/data/SearchTrackedEntityRepositoryImplTest.kt From db30687b4585d0cc1fe9a96efc4f2f57ffd6cde7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manu=20Mu=C3=B1oz?= Date: Fri, 6 Mar 2026 17:34:52 +0100 Subject: [PATCH 080/114] feat: [ANDROAPP-7189] implement InputSegmentedShell on TFA (#4677) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: [ANDROAPP-7189] implement InputSegmentedShell on TFA Signed-off-by: Manu Muñoz * feat: [ANDROAPP-7189] add input style Signed-off-by: Manu Muñoz * feat: [ANDROAPP-7189] add input style Signed-off-by: Manu Muñoz * feat: disable input on loading Signed-off-by: Manu Muñoz * build: update gradle verification metadata with new compose and kotlin library versions * fix: [ANDROAPP-7189] fix tests --------- Signed-off-by: Manu Muñoz Co-authored-by: andresmr Co-authored-by: Xavier Molloy --- .../aggregates/ui/states/InputDataUiState.kt | 2 +- .../ui/provider/inputfield/AgeProviderTest.kt | 15 +- .../CategorySelectorProviderTest.kt | 4 +- .../provider/inputfield/DateProviderTest.kt | 6 +- .../ui/provider/inputfield/FieldProvider.kt | 2 +- .../InputsForTextValueTypeProvider.kt | 2 +- gradle/verification-metadata.xml | 675 ++++++++++++++++++ .../ui/screen/TwoFADisableScreen.kt | 45 +- .../ui/screen/TwoFAToEnableScreen.kt | 40 +- .../provider/ParameterSelectorItemProvider.kt | 4 +- 10 files changed, 735 insertions(+), 60 deletions(-) diff --git a/aggregates/src/commonMain/kotlin/org/dhis2/mobile/aggregates/ui/states/InputDataUiState.kt b/aggregates/src/commonMain/kotlin/org/dhis2/mobile/aggregates/ui/states/InputDataUiState.kt index 0cdcbd9608c..89593684995 100644 --- a/aggregates/src/commonMain/kotlin/org/dhis2/mobile/aggregates/ui/states/InputDataUiState.kt +++ b/aggregates/src/commonMain/kotlin/org/dhis2/mobile/aggregates/ui/states/InputDataUiState.kt @@ -28,7 +28,7 @@ internal sealed class CellSelectionState( val inputType: InputType, private val inputExtra: InputExtra, val inputShellState: InputShellState, - val inputStyle: InputStyle = InputStyle.DataInputStyle(), + val inputStyle: InputStyle = InputStyle.DarkInputStyle(), val supportingText: List?, val legendData: LegendData?, val isRequired: Boolean, diff --git a/form/src/androidTest/kotlin/org/dhis2/form/ui/provider/inputfield/AgeProviderTest.kt b/form/src/androidTest/kotlin/org/dhis2/form/ui/provider/inputfield/AgeProviderTest.kt index 8ca5bc97189..f2435faa967 100644 --- a/form/src/androidTest/kotlin/org/dhis2/form/ui/provider/inputfield/AgeProviderTest.kt +++ b/form/src/androidTest/kotlin/org/dhis2/form/ui/provider/inputfield/AgeProviderTest.kt @@ -53,7 +53,7 @@ class AgeProviderTest { composeTestRule.setContent { ProvideInputAge( modifier = Modifier.testTag(INPUT_AGE_TEST_TAG), - inputStyle = InputStyle.DataInputStyle(), + inputStyle = InputStyle.DarkInputStyle(), fieldUiModel = dateValueTypeFieldUiModel, intentHandler = {}, resources = resourceManager, @@ -72,7 +72,7 @@ class AgeProviderTest { composeTestRule.setContent { ProvideInputAge( modifier = Modifier.testTag(INPUT_AGE_TEST_TAG), - inputStyle = InputStyle.DataInputStyle(), + inputStyle = InputStyle.DarkInputStyle(), fieldUiModel = dateValueTypeFieldUiModel, intentHandler = {}, resources = resourceManager, @@ -91,8 +91,7 @@ class AgeProviderTest { composeTestRule.setContent { ProvideInputAge( modifier = Modifier.testTag(INPUT_AGE_TEST_TAG), - - inputStyle = InputStyle.DataInputStyle(), + inputStyle = InputStyle.DarkInputStyle(), fieldUiModel = dateValueTypeFieldUiModel, intentHandler = {}, resources = resourceManager, @@ -113,7 +112,7 @@ class AgeProviderTest { composeTestRule.setContent { ProvideInputAge( modifier = Modifier.testTag(INPUT_AGE_TEST_TAG), - inputStyle = InputStyle.DataInputStyle(), + inputStyle = InputStyle.DarkInputStyle(), fieldUiModel = dateValueTypeFieldUiModel, intentHandler = {}, resources = resourceManager, @@ -135,7 +134,7 @@ class AgeProviderTest { composeTestRule.setContent { ProvideInputAge( modifier = Modifier.testTag(INPUT_AGE_TEST_TAG), - inputStyle = InputStyle.DataInputStyle(), + inputStyle = InputStyle.DarkInputStyle(), fieldUiModel = dateValueTypeFieldUiModel, intentHandler = {}, resources = resourceManager, @@ -162,7 +161,7 @@ class AgeProviderTest { composeTestRule.setContent { ProvideInputAge( modifier = Modifier.testTag(INPUT_AGE_TEST_TAG), - inputStyle = InputStyle.DataInputStyle(), + inputStyle = InputStyle.DarkInputStyle(), fieldUiModel = dateValueTypeFieldUiModel, intentHandler = {}, resources = resourceManager, @@ -183,7 +182,7 @@ class AgeProviderTest { composeTestRule.setContent { ProvideInputAge( modifier = Modifier.testTag(INPUT_AGE_TEST_TAG), - inputStyle = InputStyle.DataInputStyle(), + inputStyle = InputStyle.DarkInputStyle(), fieldUiModel = dateValueTypeFieldUiModel, intentHandler = {}, resources = resourceManager, diff --git a/form/src/androidTest/kotlin/org/dhis2/form/ui/provider/inputfield/CategorySelectorProviderTest.kt b/form/src/androidTest/kotlin/org/dhis2/form/ui/provider/inputfield/CategorySelectorProviderTest.kt index f9523db29c0..a95b10169b4 100644 --- a/form/src/androidTest/kotlin/org/dhis2/form/ui/provider/inputfield/CategorySelectorProviderTest.kt +++ b/form/src/androidTest/kotlin/org/dhis2/form/ui/provider/inputfield/CategorySelectorProviderTest.kt @@ -63,7 +63,7 @@ class CategorySelectorProviderTest { composeTestRule.setContent { ProvideCategorySelectorInput( fieldUiModel = uiModel, - inputStyle = InputStyle.DataInputStyle(), + inputStyle = InputStyle.DarkInputStyle(), ) } @@ -115,7 +115,7 @@ class CategorySelectorProviderTest { Column { ProvideCategorySelectorInput( fieldUiModel = uiModel, - inputStyle = InputStyle.DataInputStyle(), + inputStyle = InputStyle.DarkInputStyle(), ) } } diff --git a/form/src/androidTest/kotlin/org/dhis2/form/ui/provider/inputfield/DateProviderTest.kt b/form/src/androidTest/kotlin/org/dhis2/form/ui/provider/inputfield/DateProviderTest.kt index a01ca035fd3..f43b1eb108b 100644 --- a/form/src/androidTest/kotlin/org/dhis2/form/ui/provider/inputfield/DateProviderTest.kt +++ b/form/src/androidTest/kotlin/org/dhis2/form/ui/provider/inputfield/DateProviderTest.kt @@ -40,7 +40,7 @@ class DateProviderTest { generateFieldUiModel(FIELD_UI_MODEL_UID, DATE_VALUE, DATE_VALUE, ValueType.DATE) composeTestRule.setContent { ProvideInputDate( - inputStyle = InputStyle.DataInputStyle(), + inputStyle = InputStyle.DarkInputStyle(), modifier = Modifier.testTag(INPUT_DATE_TEST_TAG), fieldUiModel = dateValueTypeFieldUiModel, intentHandler = {}, @@ -65,7 +65,7 @@ class DateProviderTest { ) composeTestRule.setContent { ProvideInputDate( - inputStyle = InputStyle.DataInputStyle(), + inputStyle = InputStyle.DarkInputStyle(), modifier = Modifier.testTag(INPUT_DATE_TEST_TAG), fieldUiModel = dateValueTypeFieldUiModel, intentHandler = {}, @@ -88,7 +88,7 @@ class DateProviderTest { composeTestRule.setContent { ProvideInputDate( modifier = Modifier.testTag(INPUT_DATE_TEST_TAG), - inputStyle = InputStyle.DataInputStyle(), + inputStyle = InputStyle.DarkInputStyle(), fieldUiModel = dateValueTypeFieldUiModel, intentHandler = {}, onNextClicked = {}, diff --git a/form/src/main/java/org/dhis2/form/ui/provider/inputfield/FieldProvider.kt b/form/src/main/java/org/dhis2/form/ui/provider/inputfield/FieldProvider.kt index b04c8cc3728..07b5e50839e 100644 --- a/form/src/main/java/org/dhis2/form/ui/provider/inputfield/FieldProvider.kt +++ b/form/src/main/java/org/dhis2/form/ui/provider/inputfield/FieldProvider.kt @@ -59,7 +59,7 @@ import org.hisp.dhis.mobile.ui.designsystem.component.model.RegExValidations @Composable fun FieldProvider( modifier: Modifier, - inputStyle: InputStyle = InputStyle.DataInputStyle(), + inputStyle: InputStyle = InputStyle.DarkInputStyle(), fieldUiModel: FieldUiModel, uiEventHandler: (RecyclerViewUiEvents) -> Unit, intentHandler: (FormIntent) -> Unit, diff --git a/form/src/main/java/org/dhis2/form/ui/provider/inputfield/InputsForTextValueTypeProvider.kt b/form/src/main/java/org/dhis2/form/ui/provider/inputfield/InputsForTextValueTypeProvider.kt index 8d4d0541424..5fae08416fc 100644 --- a/form/src/main/java/org/dhis2/form/ui/provider/inputfield/InputsForTextValueTypeProvider.kt +++ b/form/src/main/java/org/dhis2/form/ui/provider/inputfield/InputsForTextValueTypeProvider.kt @@ -159,7 +159,7 @@ private fun ProvideQRInput( @Composable private fun ProvideDefaultTextInput( modifier: Modifier, - inputStyle: InputStyle = InputStyle.DataInputStyle(), + inputStyle: InputStyle = InputStyle.DarkInputStyle(), fieldUiModel: FieldUiModel, intentHandler: (FormIntent) -> Unit, focusManager: FocusManager, diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index 575fc7e0c70..2da1716887d 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -777,6 +777,11 @@ + + + + + @@ -847,6 +852,14 @@ + + + + + + + + @@ -855,6 +868,11 @@ + + + + + @@ -902,6 +920,11 @@ + + + + + @@ -962,6 +985,14 @@ + + + + + + + + @@ -1268,6 +1299,14 @@ + + + + + + + + @@ -1321,6 +1360,19 @@ + + + + + + + + + + + + + @@ -1355,6 +1407,14 @@ + + + + + + + + @@ -1395,6 +1455,14 @@ + + + + + + + + @@ -1419,6 +1487,14 @@ + + + + + + + + @@ -1435,6 +1511,19 @@ + + + + + + + + + + + + + @@ -1459,6 +1548,14 @@ + + + + + + + + @@ -1488,6 +1585,14 @@ + + + + + + + + @@ -1496,6 +1601,22 @@ + + + + + + + + + + + + + + + + @@ -1506,6 +1627,14 @@ + + + + + + + + @@ -1574,6 +1703,14 @@ + + + + + + + + @@ -1613,6 +1750,14 @@ + + + + + + + + @@ -1642,6 +1787,11 @@ + + + + + @@ -1687,6 +1837,14 @@ + + + + + + + + @@ -1737,6 +1895,11 @@ + + + + + @@ -1792,6 +1955,14 @@ + + + + + + + + @@ -1847,6 +2018,11 @@ + + + + + @@ -1892,6 +2068,14 @@ + + + + + + + + @@ -1934,6 +2118,11 @@ + + + + + @@ -1963,6 +2152,14 @@ + + + + + + + + @@ -1994,6 +2191,11 @@ + + + + + @@ -2023,6 +2225,14 @@ + + + + + + + + @@ -2060,6 +2270,14 @@ + + + + + + + + @@ -2097,6 +2315,11 @@ + + + + + @@ -2147,6 +2370,14 @@ + + + + + + + + @@ -2194,6 +2425,11 @@ + + + + + @@ -2223,6 +2459,14 @@ + + + + + + + + @@ -2257,6 +2501,11 @@ + + + + + @@ -2286,6 +2535,14 @@ + + + + + + + + @@ -2320,6 +2577,11 @@ + + + + + @@ -2349,6 +2611,14 @@ + + + + + + + + @@ -2391,6 +2661,11 @@ + + + + + @@ -2446,6 +2721,14 @@ + + + + + + + + @@ -2493,6 +2776,11 @@ + + + + + @@ -2540,6 +2828,14 @@ + + + + + + + + @@ -3163,6 +3459,14 @@ + + + + + + + + @@ -4375,6 +4679,22 @@ + + + + + + + + + + + + + + + + @@ -4935,6 +5255,11 @@ + + + + + @@ -12877,6 +13202,14 @@ + + + + + + + + @@ -12901,6 +13234,14 @@ + + + + + + + + @@ -12925,6 +13266,14 @@ + + + + + + + + @@ -12941,6 +13290,14 @@ + + + + + + + + @@ -12962,6 +13319,14 @@ + + + + + + + + @@ -12991,6 +13356,14 @@ + + + + + + + + @@ -13020,6 +13393,14 @@ + + + + + + + + @@ -13036,6 +13417,14 @@ + + + + + + + + @@ -13052,6 +13441,14 @@ + + + + + + + + @@ -13116,6 +13513,11 @@ + + + + + @@ -13132,6 +13534,14 @@ + + + + + + + + @@ -13148,6 +13558,14 @@ + + + + + + + + @@ -13172,6 +13590,14 @@ + + + + + + + + @@ -13188,6 +13614,14 @@ + + + + + + + + @@ -13212,6 +13646,14 @@ + + + + + + + + @@ -13228,6 +13670,11 @@ + + + + + @@ -13244,6 +13691,14 @@ + + + + + + + + @@ -13292,6 +13747,11 @@ + + + + + @@ -13308,6 +13768,14 @@ + + + + + + + + @@ -13356,6 +13824,14 @@ + + + + + + + + @@ -13385,6 +13861,14 @@ + + + + + + + + @@ -13401,6 +13885,14 @@ + + + + + + + + @@ -13430,6 +13922,14 @@ + + + + + + + + @@ -13446,6 +13946,14 @@ + + + + + + + + @@ -13475,6 +13983,14 @@ + + + + + + + + @@ -13515,6 +14031,14 @@ + + + + + + + + @@ -13531,6 +14055,14 @@ + + + + + + + + @@ -13547,6 +14079,14 @@ + + + + + + + + @@ -13576,6 +14116,14 @@ + + + + + + + + @@ -13592,6 +14140,14 @@ + + + + + + + + @@ -13621,6 +14177,14 @@ + + + + + + + + @@ -13637,6 +14201,14 @@ + + + + + + + + @@ -13666,6 +14238,14 @@ + + + + + + + + @@ -13682,6 +14262,11 @@ + + + + + @@ -13698,6 +14283,14 @@ + + + + + + + + @@ -13714,6 +14307,14 @@ + + + + + + + + @@ -13743,6 +14344,14 @@ + + + + + + + + @@ -13772,6 +14381,14 @@ + + + + + + + + @@ -13793,6 +14410,14 @@ + + + + + + + + @@ -13822,6 +14447,14 @@ + + + + + + + + @@ -15006,6 +15639,14 @@ + + + + + + + + @@ -15104,6 +15745,14 @@ + + + + + + + + @@ -15733,6 +16382,11 @@ + + + + + @@ -15749,6 +16403,11 @@ + + + + + @@ -16119,6 +16778,14 @@ + + + + + + + + @@ -16135,6 +16802,14 @@ + + + + + + + + diff --git a/login/src/commonMain/kotlin/org/dhis2/mobile/login/authentication/ui/screen/TwoFADisableScreen.kt b/login/src/commonMain/kotlin/org/dhis2/mobile/login/authentication/ui/screen/TwoFADisableScreen.kt index ad17df82cf1..171f81c9a22 100644 --- a/login/src/commonMain/kotlin/org/dhis2/mobile/login/authentication/ui/screen/TwoFADisableScreen.kt +++ b/login/src/commonMain/kotlin/org/dhis2/mobile/login/authentication/ui/screen/TwoFADisableScreen.kt @@ -19,11 +19,10 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier -import androidx.compose.ui.text.input.TextFieldValue import androidx.compose.ui.unit.dp import org.dhis2.mobile.login.authentication.ui.state.TwoFAUiState import org.dhis2.mobile.login.resources.Res -import org.dhis2.mobile.login.resources.two_fa_code +import org.dhis2.mobile.login.resources.two_fa_authentication_code import org.dhis2.mobile.login.resources.two_fa_disable_button import org.dhis2.mobile.login.resources.two_fa_disable_desc_1 import org.dhis2.mobile.login.resources.two_fa_disable_desc_2 @@ -35,8 +34,9 @@ import org.hisp.dhis.mobile.ui.designsystem.component.Button import org.hisp.dhis.mobile.ui.designsystem.component.ButtonStyle import org.hisp.dhis.mobile.ui.designsystem.component.ColorStyle import org.hisp.dhis.mobile.ui.designsystem.component.InfoBar +import org.hisp.dhis.mobile.ui.designsystem.component.InputSegmentedShell import org.hisp.dhis.mobile.ui.designsystem.component.InputShellState -import org.hisp.dhis.mobile.ui.designsystem.component.InputText +import org.hisp.dhis.mobile.ui.designsystem.component.InputStyle import org.hisp.dhis.mobile.ui.designsystem.component.SupportingTextData import org.hisp.dhis.mobile.ui.designsystem.component.SupportingTextState import org.hisp.dhis.mobile.ui.designsystem.theme.SurfaceColor @@ -49,7 +49,7 @@ fun TwoFADisableScreen( onAuthCodeUpdated: (String) -> Unit, onDisable: (String) -> Unit, ) { - var authCode: TextFieldValue by remember(twoFADisableUiState) { mutableStateOf(TextFieldValue("")) } + var authCode by remember(twoFADisableUiState) { mutableStateOf("") } Column(verticalArrangement = Arrangement.spacedBy(16.dp)) { InfoBar( @@ -77,27 +77,28 @@ fun TwoFADisableScreen( stepNumber = "2.", text = stringResource(Res.string.two_fa_disable_desc_2), ) { - InputText( - inputTextFieldValue = authCode, - onValueChanged = { - it?.let { - authCode = it - onAuthCodeUpdated(it.text) - } - }, - title = stringResource(Res.string.two_fa_code), - state = twoFADisableUiState.state, - supportingText = + Text( + text = stringResource(Res.string.two_fa_authentication_code), + style = MaterialTheme.typography.bodyMedium, + ) + InputSegmentedShell( + segmentCount = 6, + inputStyle = InputStyle.BrightInputStyle(), + enabled = !twoFADisableUiState.isDisabling, + supportingTextData = if (twoFADisableUiState.state == InputShellState.ERROR) { - listOf( - SupportingTextData( - text = stringResource(Res.string.two_fa_disable_error), - state = SupportingTextState.ERROR, - ), + SupportingTextData( + text = stringResource(Res.string.two_fa_disable_error), + state = SupportingTextState.ERROR, ) } else { null }, + initialValue = authCode, + onValueChanged = { + authCode = it.replace("-", "") + onAuthCodeUpdated(authCode) + }, ) Button( modifier = Modifier.fillMaxWidth().padding(top = 8.dp), @@ -108,8 +109,8 @@ fun TwoFADisableScreen( }, colorStyle = ColorStyle.ERROR, style = ButtonStyle.FILLED, - enabled = authCode.text.length >= 6 && twoFADisableUiState.isDisabling.not(), - onClick = { onDisable(authCode.text) }, + enabled = authCode.length >= 6 && twoFADisableUiState.isDisabling.not(), + onClick = { onDisable(authCode) }, icon = { Icon( imageVector = Icons.Outlined.KeyOff, diff --git a/login/src/commonMain/kotlin/org/dhis2/mobile/login/authentication/ui/screen/TwoFAToEnableScreen.kt b/login/src/commonMain/kotlin/org/dhis2/mobile/login/authentication/ui/screen/TwoFAToEnableScreen.kt index 47f548a0a78..b72adec67f8 100644 --- a/login/src/commonMain/kotlin/org/dhis2/mobile/login/authentication/ui/screen/TwoFAToEnableScreen.kt +++ b/login/src/commonMain/kotlin/org/dhis2/mobile/login/authentication/ui/screen/TwoFAToEnableScreen.kt @@ -26,7 +26,6 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.testTag import androidx.compose.ui.text.font.FontWeight -import androidx.compose.ui.text.input.TextFieldValue import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import org.dhis2.mobile.login.authentication.ui.state.TwoFAUiState @@ -51,8 +50,8 @@ import org.hisp.dhis.mobile.ui.designsystem.component.ButtonStyle import org.hisp.dhis.mobile.ui.designsystem.component.IconButton import org.hisp.dhis.mobile.ui.designsystem.component.IconButtonStyle import org.hisp.dhis.mobile.ui.designsystem.component.InfoBar -import org.hisp.dhis.mobile.ui.designsystem.component.InputShellState -import org.hisp.dhis.mobile.ui.designsystem.component.InputText +import org.hisp.dhis.mobile.ui.designsystem.component.InputSegmentedShell +import org.hisp.dhis.mobile.ui.designsystem.component.InputStyle import org.hisp.dhis.mobile.ui.designsystem.component.SupportingTextData import org.hisp.dhis.mobile.ui.designsystem.component.SupportingTextState import org.hisp.dhis.mobile.ui.designsystem.theme.DHIS2Theme @@ -215,8 +214,8 @@ fun TwoFAAuthStepThree( enableUiState: TwoFAUiState.Enable, onEnableButtonClicked: (String) -> Unit, ) { - var textValue by rememberSaveable(stateSaver = TextFieldValue.Saver) { - mutableStateOf(TextFieldValue("")) + var textValue by rememberSaveable { + mutableStateOf("") } Column( @@ -247,24 +246,25 @@ fun TwoFAAuthStepThree( .padding(top = 16.dp), verticalArrangement = spacedBy(12.dp), ) { - InputText( - title = stringResource(Res.string.two_fa_authentication_code), - supportingText = + Text( + text = stringResource(Res.string.two_fa_authentication_code), + style = MaterialTheme.typography.bodyMedium, + ) + InputSegmentedShell( + segmentCount = 6, + inputStyle = InputStyle.BrightInputStyle(), + enabled = !enableUiState.isEnabling, + supportingTextData = enableUiState.enableErrorMessage?.let { - listOf( - SupportingTextData( - text = stringResource(Res.string.two_fa_failed_to_turn_on), - state = SupportingTextState.ERROR, - ), + SupportingTextData( + text = stringResource(Res.string.two_fa_failed_to_turn_on), + state = SupportingTextState.ERROR, ) }, - inputTextFieldValue = textValue, + initialValue = textValue, onValueChanged = { - if (it != null) { - textValue = it - } + textValue = it.replace("-", "") }, - state = InputShellState.FOCUSED, ) Button( @@ -272,7 +272,7 @@ fun TwoFAAuthStepThree( when (enableUiState.isEnabling) { true -> false else -> { - textValue.text.length == 6 + textValue.length == 6 } }, modifier = @@ -297,7 +297,7 @@ fun TwoFAAuthStepThree( contentDescription = "Status Icon", ) }, - onClick = { onEnableButtonClicked(textValue.text) }, + onClick = { onEnableButtonClicked(textValue) }, ) } } diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/ui/provider/ParameterSelectorItemProvider.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/ui/provider/ParameterSelectorItemProvider.kt index f7aa6f5a9ab..b9652e9e481 100644 --- a/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/ui/provider/ParameterSelectorItemProvider.kt +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/search/ui/provider/ParameterSelectorItemProvider.kt @@ -10,7 +10,7 @@ import org.dhis2.tracker.input.model.TrackerInputType import org.dhis2.tracker.input.ui.action.TrackerInputUiEvent import org.dhis2.tracker.input.ui.provider.TrackerInputProvider import org.dhis2.tracker.input.ui.state.TrackerInputUiState -import org.hisp.dhis.mobile.ui.designsystem.component.InputStyle +import org.hisp.dhis.mobile.ui.designsystem.component.parameter.ParameterInputStyle import org.hisp.dhis.mobile.ui.designsystem.component.parameter.model.ParameterSelectorItemModel import org.hisp.dhis.mobile.ui.designsystem.resource.provideDHIS2Icon import org.hisp.dhis.mobile.ui.designsystem.theme.SurfaceColor @@ -38,7 +38,7 @@ fun provideParameterSelectorItem( inputField = { TrackerInputProvider( modifier = Modifier, - inputStyle = InputStyle.ParameterInputStyle(), + inputStyle = ParameterInputStyle(), inputModel = inputModel, onNextClicked = onNextClicked, onUiEvent = onUiEvent, From 821f462239a443d3f15dc8697ca92a059d6d44b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Miguel=20Rubio?= Date: Mon, 9 Mar 2026 14:58:37 +0100 Subject: [PATCH 081/114] build: update dhis2sdk to 1.14.0-SNAPSHOT (#4715) --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 043aeb6f504..ff9b87eaaab 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -11,7 +11,7 @@ kotlin = '2.3.10' dagger = '2.57.2' jacoco = '0.8.14' designSystem = "0.7.0-SNAPSHOT" -dhis2sdk = "1.14.0-20260226.083755-24" +dhis2sdk = "1.14.0-SNAPSHOT" ruleEngine = "3.6.0" expressionParser = "1.3.1" appcompat = "1.7.1" From f9e35a5168589674339bb607492c5d913916eccd Mon Sep 17 00:00:00 2001 From: Xavier Molloy Date: Tue, 10 Mar 2026 08:04:41 +0100 Subject: [PATCH 082/114] fix: [ANDROAPP-7510] Update compose android and multiplatform [skip size] (#4711) * fix: [ANDROAPP-7510] Update compose multiplatform plugin and android compose version * fix: [ANDROAPP-7510] remove design system SNAPSHOTLOCAL from verification metadata file * fix: [ANDROAPP-7510] update verification metadata file * fix: [ANDROAPP-7510] fix tests --- app/build.gradle.kts | 1 + gradle/libs.versions.toml | 4 +- gradle/verification-metadata.xml | 990 ++++++++++++++++++++++++++++++- login/build.gradle.kts | 1 + 4 files changed, 974 insertions(+), 22 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 96701323e44..7b2c4bc3e44 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -352,6 +352,7 @@ dependencies { androidTestImplementation(libs.test.hamcrest) androidTestImplementation(libs.koin.test) androidTestImplementation(libs.koin.test.junit4) + debugImplementation(libs.test.ui.test.manifest) } sentry { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index ff9b87eaaab..7d61b86524a 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -26,8 +26,8 @@ exif = "1.4.2" corektx = "1.17.0" fragmentktx = "1.8.9" recyclerview = "1.4.0" -compose = "1.9.5" -composePluginVersion = "1.9.3" +compose = "1.10.4" +composePluginVersion = "1.10.1" composePaging = "3.4.1" pagingTesting = "3.4.1" composeConstraintLayout = "1.1.1" diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index 2da1716887d..5dadef7326a 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -868,11 +868,6 @@ - - - - - @@ -1051,6 +1046,14 @@ + + + + + + + + @@ -1077,6 +1080,14 @@ + + + + + + + + @@ -1307,6 +1318,14 @@ + + + + + + + + @@ -1368,9 +1387,12 @@ - - - + + + + + + @@ -1415,6 +1437,14 @@ + + + + + + + + @@ -1463,6 +1493,14 @@ + + + + + + + + @@ -1495,6 +1533,14 @@ + + + + + + + + @@ -1520,6 +1566,9 @@ + + + @@ -1556,6 +1605,14 @@ + + + + + + + + @@ -1593,6 +1650,14 @@ + + + + + + + + @@ -1609,6 +1674,14 @@ + + + + + + + + @@ -1635,6 +1708,14 @@ + + + + + + + + @@ -1711,6 +1792,14 @@ + + + + + + + + @@ -1792,6 +1881,14 @@ + + + + + + + + @@ -1845,6 +1942,14 @@ + + + + + + + + @@ -1900,6 +2005,14 @@ + + + + + + + + @@ -1963,6 +2076,14 @@ + + + + + + + + @@ -2023,6 +2144,14 @@ + + + + + + + + @@ -2076,6 +2205,14 @@ + + + + + + + + @@ -2123,6 +2260,14 @@ + + + + + + + + @@ -2160,9 +2305,12 @@ - - - + + + + + + @@ -2196,6 +2344,14 @@ + + + + + + + + @@ -2233,9 +2389,12 @@ - - - + + + + + + @@ -2278,6 +2437,14 @@ + + + + + + + + @@ -2320,6 +2487,14 @@ + + + + + + + + @@ -2378,6 +2553,14 @@ + + + + + + + + @@ -2430,6 +2613,14 @@ + + + + + + + + @@ -2467,9 +2658,12 @@ - - - + + + + + + @@ -2506,6 +2700,14 @@ + + + + + + + + @@ -2543,9 +2745,12 @@ - - - + + + + + + @@ -2582,6 +2787,14 @@ + + + + + + + + @@ -2619,6 +2832,14 @@ + + + + + + + + @@ -2666,6 +2887,14 @@ + + + + + + + + @@ -2729,6 +2958,14 @@ + + + + + + + + @@ -2781,6 +3018,14 @@ + + + + + + + + @@ -2836,6 +3081,14 @@ + + + + + + + + @@ -3740,6 +3993,11 @@ + + + + + @@ -3761,6 +4019,14 @@ + + + + + + + + @@ -4004,6 +4270,11 @@ + + + + + @@ -4107,6 +4378,11 @@ + + + + + @@ -4193,6 +4469,14 @@ + + + + + + + + @@ -4227,6 +4511,11 @@ + + + + + @@ -4251,6 +4540,11 @@ + + + + + @@ -4394,6 +4688,14 @@ + + + + + + + + @@ -4438,6 +4740,14 @@ + + + + + + + + @@ -4466,6 +4776,11 @@ + + + + + @@ -4540,6 +4855,11 @@ + + + + + @@ -4553,6 +4873,14 @@ + + + + + + + + @@ -5213,6 +5541,17 @@ + + + + + + + + + + + @@ -5234,6 +5573,14 @@ + + + + + + + + @@ -5259,6 +5606,9 @@ + + + @@ -5273,6 +5623,19 @@ + + + + + + + + + + + + + @@ -5290,6 +5653,9 @@ + + + @@ -5320,6 +5686,14 @@ + + + + + + + + @@ -11296,6 +11670,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -12796,6 +13196,14 @@ + + + + + + + + @@ -12857,6 +13265,11 @@ + + + + + @@ -12881,6 +13294,11 @@ + + + + + @@ -12905,6 +13323,11 @@ + + + + + @@ -12921,6 +13344,14 @@ + + + + + + + + @@ -12953,6 +13384,11 @@ + + + + + @@ -13025,6 +13461,11 @@ + + + + + @@ -13137,6 +13578,11 @@ + + + + + @@ -13150,6 +13596,11 @@ + + + + + @@ -13163,6 +13614,14 @@ + + + + + + + + @@ -13176,6 +13635,14 @@ + + + + + + + + @@ -13192,6 +13659,11 @@ + + + + + @@ -13218,6 +13690,11 @@ + + + + + @@ -13250,6 +13727,11 @@ + + + + + @@ -13274,6 +13756,19 @@ + + + + + + + + + + + + + @@ -13303,6 +13798,14 @@ + + + + + + + + @@ -13340,6 +13843,11 @@ + + + + + @@ -13377,6 +13885,11 @@ + + + + + @@ -13401,6 +13914,11 @@ + + + + + @@ -13449,6 +13967,14 @@ + + + + + + + + @@ -13465,6 +13991,14 @@ + + + + + + + + @@ -13481,6 +14015,14 @@ + + + + + + + + @@ -13497,6 +14039,14 @@ + + + + + + + + @@ -13517,6 +14067,14 @@ + + + + + + + + @@ -13542,6 +14100,14 @@ + + + + + + + + @@ -13558,6 +14124,16 @@ + + + + + + + + + + @@ -13574,6 +14150,11 @@ + + + + + @@ -13598,6 +14179,14 @@ + + + + + + + + @@ -13630,6 +14219,11 @@ + + + + + @@ -13654,6 +14248,19 @@ + + + + + + + + + + + + + @@ -13670,11 +14277,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -13699,6 +14410,14 @@ + + + + + + + + @@ -13748,10 +14467,23 @@ + + + + + + + + + + + + + @@ -13776,6 +14508,19 @@ + + + + + + + + + + + + + @@ -13792,6 +14537,11 @@ + + + + + @@ -13800,6 +14550,14 @@ + + + + + + + + @@ -13845,6 +14603,14 @@ + + + + + + + + @@ -13869,6 +14635,14 @@ + + + + + + + + @@ -13906,6 +14680,11 @@ + + + + + @@ -13930,6 +14709,14 @@ + + + + + + + + @@ -13967,6 +14754,11 @@ + + + + + @@ -13999,6 +14791,11 @@ + + + + + @@ -14039,6 +14836,19 @@ + + + + + + + + + + + + + @@ -14063,6 +14873,14 @@ + + + + + + + + @@ -14100,6 +14918,11 @@ + + + + + @@ -14124,6 +14947,14 @@ + + + + + + + + @@ -14161,6 +14992,11 @@ + + + + + @@ -14185,6 +15021,19 @@ + + + + + + + + + + + + + @@ -14222,6 +15071,11 @@ + + + + + @@ -14246,6 +15100,19 @@ + + + + + + + + + + + + + @@ -14263,10 +15130,18 @@ + + + + + + + + @@ -14291,6 +15166,14 @@ + + + + + + + + @@ -14365,6 +15248,11 @@ + + + + + @@ -14389,11 +15277,24 @@ + + + + + + + + + + + + + @@ -14431,6 +15332,11 @@ + + + + + @@ -14455,6 +15361,14 @@ + + + + + + + + @@ -16091,6 +17005,9 @@ + + + @@ -16197,6 +17114,9 @@ + + + @@ -16366,6 +17286,14 @@ + + + + + + + + @@ -16386,6 +17314,9 @@ + + + @@ -16404,6 +17335,9 @@ + + + @@ -16810,6 +17744,22 @@ + + + + + + + + + + + + + + + + diff --git a/login/build.gradle.kts b/login/build.gradle.kts index 9bfcdae9e18..18660c8ff9d 100644 --- a/login/build.gradle.kts +++ b/login/build.gradle.kts @@ -18,6 +18,7 @@ kotlin { minSdk = libs.versions.minSdk.get().toInt() enableCoreLibraryDesugaring = true compilerOptions { jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17) } + androidResources { enable = true } packaging { resources { pickFirsts.add("values*/**") From 770148325b8e652d5d7551538e26c45186569204 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Miguel=20Rubio?= Date: Tue, 10 Mar 2026 10:03:10 +0100 Subject: [PATCH 083/114] fix: escape special characters in string resources (#4716) --- .../composeResources/values/strings.xml | 18 +++++++++--------- .../composeResources/values/strings.xml | 4 ++-- .../composeResources/values/strings.xml | 2 +- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/commonskmm/src/commonMain/composeResources/values/strings.xml b/commonskmm/src/commonMain/composeResources/values/strings.xml index 2503658a720..3f0da35116c 100644 --- a/commonskmm/src/commonMain/composeResources/values/strings.xml +++ b/commonskmm/src/commonMain/composeResources/values/strings.xml @@ -30,7 +30,7 @@ Years Months Days - %s can't be parsed as a date + %s can\'t be parsed as a date Polygon Latitude Longitude @@ -95,9 +95,9 @@ Value is neither true or false This field can only be true Invalid character 1 - DataValues can't be saved using these arguments. Use the other one. + DataValues can\'t be saved using these arguments. Use the other one. Leading zero numbers are not allowed - Couldn't retrieve data + Couldn\'t retrieve data Attributes - %s Coordinates for the There are no more reserved values. Contact your system administrator @@ -139,7 +139,7 @@ Search to find more Done Not supported - Password is missing. Please enter password. @@ -165,7 +165,7 @@ Creation aborted. The object already exists. Deletion aborted. The object does not exist. Unable to instantiate keystore. - We couldn´t reserve values for these record. Please contact your admin. + We couldn\'t reserve values for these record. Please contact your admin. Please login to export the database. Exporting an encrypted database is not supported. You are importing an already existing database. @@ -184,15 +184,15 @@ There are no reserved values available. Go to settings and refill values when you have internet connection. The object could not be updated. The object could not be inserted. - You don't have access. + You don\'t have access. The server URL is missing. Please enter URL. The server URL is not well formed. Please check it. This version of the Settings Web App is not supported. The Settings Web App is not installed in the server. The server took too much time to respond. We canceled the request. - The relationship can't be updated. + The relationship can\'t be updated. There are too many periods. - We couldn´t find the URL. Please verify it. + We couldn\'t find the URL. Please verify it. Your user account have been disabled. If this is an error, contact your administrator. Your user account is locked. If this is an error, contact your administrator. The value could not be set. @@ -209,7 +209,7 @@ Invalid file Not in TOTP 2FA enrollment mode Authentication cancelled - OR diff --git a/login/src/commonMain/composeResources/values/strings.xml b/login/src/commonMain/composeResources/values/strings.xml index 12f33c513f6..a663386ac72 100644 --- a/login/src/commonMain/composeResources/values/strings.xml +++ b/login/src/commonMain/composeResources/values/strings.xml @@ -1,8 +1,8 @@ - + Add new account Two factor authentication - Can't connect to network + Can\'t connect to network You need an internet connection to turn two-factor authentication on or off. Try to reconnect Checking status... diff --git a/tracker/src/commonMain/composeResources/values/strings.xml b/tracker/src/commonMain/composeResources/values/strings.xml index e41770e623f..42c4e967930 100644 --- a/tracker/src/commonMain/composeResources/values/strings.xml +++ b/tracker/src/commonMain/composeResources/values/strings.xml @@ -1,6 +1,6 @@ - There are no relationships, click "+" to add a new one. + There are no relationships, click \"+\" to add a new one. Relation created on Remove %1$s? The %1$s will be deleted. This action cannot be undone. From 3c5c8a862008f8db423f740445db688cb3c0c164 Mon Sep 17 00:00:00 2001 From: Pablo Date: Tue, 10 Mar 2026 11:23:14 +0100 Subject: [PATCH 084/114] feat: [ANDROAPP-7507] Support hybrid basemaps (#4708) * feat: [ANDROAPP-7507] Support hybrid basemaps * fix test --- .../maps/attribution/AttributionManager.kt | 4 +- .../dhis2/maps/layer/basemaps/BaseMapStyle.kt | 42 ++++-- .../org/dhis2/maps/managers/MapManager.kt | 10 +- .../maps/usecases/MapStyleConfiguration.kt | 34 ++++- .../java/org/dhis2/maps/usecases/MapMocks.kt | 60 ++++++++ .../maps/usecases/MapSelectorViewModelTest.kt | 21 +-- .../usecases/MapStyleConfigurationTest.kt | 139 +++++++++++++----- 7 files changed, 246 insertions(+), 64 deletions(-) create mode 100644 dhis2_android_maps/src/test/java/org/dhis2/maps/usecases/MapMocks.kt diff --git a/dhis2_android_maps/src/main/java/org/dhis2/maps/attribution/AttributionManager.kt b/dhis2_android_maps/src/main/java/org/dhis2/maps/attribution/AttributionManager.kt index 0caf0c55c9c..26101f2933e 100644 --- a/dhis2_android_maps/src/main/java/org/dhis2/maps/attribution/AttributionManager.kt +++ b/dhis2_android_maps/src/main/java/org/dhis2/maps/attribution/AttributionManager.kt @@ -22,7 +22,7 @@ class AttributionManager( ) : AttributionDialogManager(context, maplibreMap) { override fun showAttributionDialog(attributionTitles: Array) { val attributions: Array = - currentBaseMapStyle.sources.attribution + currentBaseMapStyle.attribution .split(", ") .map { HtmlCompat.fromHtml(it, HtmlCompat.FROM_HTML_MODE_LEGACY).toString() @@ -34,7 +34,7 @@ class AttributionManager( dialog: DialogInterface?, which: Int, ) { - val selectedAttribution = currentBaseMapStyle.sources.attribution.split(", ")[which] + val selectedAttribution = currentBaseMapStyle.attribution.split(", ")[which] val url = HtmlCompat .fromHtml(selectedAttribution, HtmlCompat.FROM_HTML_MODE_LEGACY) diff --git a/dhis2_android_maps/src/main/java/org/dhis2/maps/layer/basemaps/BaseMapStyle.kt b/dhis2_android_maps/src/main/java/org/dhis2/maps/layer/basemaps/BaseMapStyle.kt index 08fd2af2170..c89a1ed5192 100644 --- a/dhis2_android_maps/src/main/java/org/dhis2/maps/layer/basemaps/BaseMapStyle.kt +++ b/dhis2_android_maps/src/main/java/org/dhis2/maps/layer/basemaps/BaseMapStyle.kt @@ -1,25 +1,31 @@ package org.dhis2.maps.layer.basemaps -import com.google.gson.annotations.SerializedName - object BaseMapStyleBuilder { fun build( id: String, tileUrls: List, attribution: String, + overlays: List, isDefault: Boolean, ) = BaseMapStyle( version = 8, sources = - StyleSources( - rasterTiles = + mapOf( + "raster-tiles" to RasterTiles( type = "raster", tiles = tileUrls, tileSize = 256, ), - attribution = attribution, - ), + ) + + overlays.associate { overlay -> + overlay.id to + RasterTiles( + type = "raster", + tiles = overlay.tiles, + tileSize = 256, + ) + }, layers = listOf( StyleLayers( @@ -29,10 +35,23 @@ object BaseMapStyleBuilder { minZoom = 0, maxZoom = 22, ), - ), + ) + + overlays.map { overlay -> + StyleLayers( + id = overlay.id, + type = "raster", + source = overlay.id, + minZoom = 0, + maxZoom = 22, + ) + }, id = id, glyphs = DEFAULT_GLYPH_URL, isDefault = isDefault, + attribution = + (listOf(attribution) + overlays.map { overlay -> overlay.attribution }).joinToString( + separator = ", ", + ), ) fun internalBaseMap(): BaseMapStyle = @@ -47,20 +66,23 @@ object BaseMapStyleBuilder { ), attribution = DEFAULT_ATTRIBUTION, isDefault = true, + overlays = emptyList(), ) } data class BaseMapStyle( val version: Int, - val sources: StyleSources, + val sources: Map, val layers: List, val id: String, var glyphs: String, val isDefault: Boolean, + val attribution: String, ) -data class StyleSources( - @SerializedName("raster-tiles") val rasterTiles: RasterTiles, +data class Overlay( + val id: String, + val tiles: List, val attribution: String, ) diff --git a/dhis2_android_maps/src/main/java/org/dhis2/maps/managers/MapManager.kt b/dhis2_android_maps/src/main/java/org/dhis2/maps/managers/MapManager.kt index 16e88425ca3..4ed02238894 100644 --- a/dhis2_android_maps/src/main/java/org/dhis2/maps/managers/MapManager.kt +++ b/dhis2_android_maps/src/main/java/org/dhis2/maps/managers/MapManager.kt @@ -3,6 +3,7 @@ package org.dhis2.maps.managers import android.annotation.SuppressLint import android.app.Activity import android.os.Bundle +import android.view.Gravity import androidx.core.content.ContextCompat import androidx.core.location.LocationListenerCompat import androidx.lifecycle.Lifecycle @@ -143,6 +144,7 @@ abstract class MapManager( ), ) uiSettings.isLogoEnabled = false + uiSettings.attributionGravity = Gravity.TOP or Gravity.START uiSettings.setAttributionMargins( defaultUiIconLeftMargin, uiSettings.attributionMarginTop, @@ -265,7 +267,9 @@ abstract class MapManager( permissionsManager = PermissionsManager( object : PermissionsListener { - override fun onExplanationNeeded(permissionsToExplain: MutableList?) {} + override fun onExplanationNeeded(permissionsToExplain: MutableList?) { + // no-op + } override fun onPermissionResult(granted: Boolean) { if (granted) { @@ -320,7 +324,9 @@ abstract class MapManager( permissionsManager = PermissionsManager( object : PermissionsListener { - override fun onExplanationNeeded(permissionsToExplain: MutableList?) {} + override fun onExplanationNeeded(permissionsToExplain: MutableList?) { + // no-op + } override fun onPermissionResult(granted: Boolean) { if (granted) { diff --git a/dhis2_android_maps/src/main/java/org/dhis2/maps/usecases/MapStyleConfiguration.kt b/dhis2_android_maps/src/main/java/org/dhis2/maps/usecases/MapStyleConfiguration.kt index 344fa8d6dab..24cdbad8a33 100644 --- a/dhis2_android_maps/src/main/java/org/dhis2/maps/usecases/MapStyleConfiguration.kt +++ b/dhis2_android_maps/src/main/java/org/dhis2/maps/usecases/MapStyleConfiguration.kt @@ -3,9 +3,11 @@ package org.dhis2.maps.usecases import org.dhis2.commons.data.ProgramConfigurationRepository import org.dhis2.maps.layer.basemaps.BaseMapStyle import org.dhis2.maps.layer.basemaps.BaseMapStyleBuilder.build +import org.dhis2.maps.layer.basemaps.Overlay import org.dhis2.maps.model.MapScope import org.hisp.dhis.android.core.D2 import org.hisp.dhis.android.core.map.layer.MapLayerImageryProvider +import org.hisp.dhis.android.core.map.layer.MapLayerPosition const val DEFAULT_FORCED_LOCATION_ACCURACY = -1 @@ -61,6 +63,8 @@ class MapStyleConfiguration( .mapsModule() .mapLayers() .withImageryProviders() + .byMapLayerPosition() + .eq(MapLayerPosition.BASEMAP) .blockingGet() .map { mapLayer -> val id = mapLayer.displayName() @@ -71,7 +75,35 @@ class MapStyleConfiguration( mapLayer.subdomains(), ) val attribution = mapLayer.imageryProviders().mapAttribution() - build(id, tileUrls, attribution, defaultMap == mapLayer.uid()) + + val overlays = + d2 + .mapsModule() + .mapLayers() + .withImageryProviders() + .byLinkedLayerUid() + .eq(mapLayer.uid()) + .byMapLayerPosition() + .eq(MapLayerPosition.OVERLAY) + .blockingGet() + + val basemapOverlays = + overlays.map { overlay -> + val id = overlay.displayName() + val tileUrls = + overlay.imageUrl().mapTileUrls( + overlay.subdomainPlaceholder(), + overlay.subdomains(), + ) + val attribution = overlay.imageryProviders().mapAttribution() + Overlay( + id = id, + tiles = tileUrls, + attribution = attribution, + ) + } + + build(id, tileUrls, attribution, basemapOverlays, defaultMap == mapLayer.uid()) } } diff --git a/dhis2_android_maps/src/test/java/org/dhis2/maps/usecases/MapMocks.kt b/dhis2_android_maps/src/test/java/org/dhis2/maps/usecases/MapMocks.kt new file mode 100644 index 00000000000..3982f0da4db --- /dev/null +++ b/dhis2_android_maps/src/test/java/org/dhis2/maps/usecases/MapMocks.kt @@ -0,0 +1,60 @@ +package org.dhis2.maps.usecases + +import org.hisp.dhis.android.core.D2 +import org.hisp.dhis.android.core.arch.repositories.filters.internal.EnumFilterConnector +import org.hisp.dhis.android.core.arch.repositories.filters.internal.StringFilterConnector +import org.hisp.dhis.android.core.map.layer.MapLayer +import org.hisp.dhis.android.core.map.layer.MapLayerCollectionRepository +import org.hisp.dhis.android.core.map.layer.MapLayerPosition +import org.mockito.kotlin.any +import org.mockito.kotlin.doReturn +import org.mockito.kotlin.mock +import org.mockito.kotlin.whenever + +private val stringFilterConnector: StringFilterConnector = mock() +private val enumFilterConnector: EnumFilterConnector = + mock() + +fun mockBasemaps( + d2: D2, + mockedBasemap: List, +) { + val mockedMapLayerCollectionRepository: MapLayerCollectionRepository = mock() + + whenever(d2.mapsModule().mapLayers()) doReturn mockedMapLayerCollectionRepository + whenever(mockedMapLayerCollectionRepository.withImageryProviders()) doReturn mockedMapLayerCollectionRepository + whenever( + mockedMapLayerCollectionRepository.byMapLayerPosition(), + ) doReturn enumFilterConnector + whenever( + enumFilterConnector.eq(MapLayerPosition.BASEMAP), + ) doReturn mockedMapLayerCollectionRepository + whenever( + mockedMapLayerCollectionRepository.blockingGet(), + ) doReturn mockedBasemap +} + +fun mockOverlays( + d2: D2, + mockedOverlays: List, +) { + val mockedMapLayerCollectionRepository: MapLayerCollectionRepository = mock() + + whenever(d2.mapsModule().mapLayers()) doReturn mockedMapLayerCollectionRepository + whenever(mockedMapLayerCollectionRepository.withImageryProviders()) doReturn mockedMapLayerCollectionRepository + whenever( + mockedMapLayerCollectionRepository.byLinkedLayerUid(), + ) doReturn stringFilterConnector + whenever( + stringFilterConnector.eq(any()), + ) doReturn mockedMapLayerCollectionRepository + whenever( + mockedMapLayerCollectionRepository.byMapLayerPosition(), + ) doReturn enumFilterConnector + whenever( + enumFilterConnector.eq(MapLayerPosition.OVERLAY), + ) doReturn mockedMapLayerCollectionRepository + whenever( + mockedMapLayerCollectionRepository.blockingGet(), + ) doReturn mockedOverlays +} diff --git a/dhis2_android_maps/src/test/java/org/dhis2/maps/usecases/MapSelectorViewModelTest.kt b/dhis2_android_maps/src/test/java/org/dhis2/maps/usecases/MapSelectorViewModelTest.kt index 43c3d378d43..79385c218f8 100644 --- a/dhis2_android_maps/src/test/java/org/dhis2/maps/usecases/MapSelectorViewModelTest.kt +++ b/dhis2_android_maps/src/test/java/org/dhis2/maps/usecases/MapSelectorViewModelTest.kt @@ -25,7 +25,6 @@ import org.hisp.dhis.android.core.D2 import org.hisp.dhis.android.core.common.FeatureType import org.hisp.dhis.android.core.map.layer.MapLayer import org.hisp.dhis.android.core.map.layer.MapLayerPosition -import org.hisp.dhis.android.core.settings.SystemSetting import org.hisp.dhis.mobile.ui.designsystem.component.model.LocationItemModel import org.junit.Assert.assertEquals import org.junit.Assert.assertTrue @@ -133,20 +132,8 @@ class MapSelectorViewModelTest { @Test fun shouldFetchBaseMaps() = runTest { - whenever( - d2 - .settingModule() - .systemSetting() - .defaultBaseMap() - .blockingGet(), - ) doReturn SystemSetting.builder().value("defaultBaseMapUid").build() - whenever( - d2 - .mapsModule() - .mapLayers() - .withImageryProviders() - .blockingGet(), - ) doReturn + mockBasemaps( + d2, listOf( MapLayer .builder() @@ -160,7 +147,9 @@ class MapSelectorViewModelTest { .external(false) .mapLayerPosition(MapLayerPosition.BASEMAP) .build(), - ) + ), + ) + mockOverlays(d2, emptyList()) val baseMaps = mapSelectorViewModel.fetchMapStyles() assertTrue(baseMaps.isNotEmpty()) } diff --git a/dhis2_android_maps/src/test/java/org/dhis2/maps/usecases/MapStyleConfigurationTest.kt b/dhis2_android_maps/src/test/java/org/dhis2/maps/usecases/MapStyleConfigurationTest.kt index e83d7e29b02..2dd2378f71c 100644 --- a/dhis2_android_maps/src/test/java/org/dhis2/maps/usecases/MapStyleConfigurationTest.kt +++ b/dhis2_android_maps/src/test/java/org/dhis2/maps/usecases/MapStyleConfigurationTest.kt @@ -3,7 +3,10 @@ package org.dhis2.maps.usecases import org.dhis2.commons.data.ProgramConfigurationRepository import org.dhis2.maps.model.MapScope import org.hisp.dhis.android.core.D2 +import org.hisp.dhis.android.core.arch.repositories.filters.internal.EnumFilterConnector +import org.hisp.dhis.android.core.arch.repositories.filters.internal.StringFilterConnector import org.hisp.dhis.android.core.map.layer.MapLayer +import org.hisp.dhis.android.core.map.layer.MapLayerCollectionRepository import org.hisp.dhis.android.core.map.layer.MapLayerImageryProvider import org.hisp.dhis.android.core.map.layer.MapLayerPosition import org.hisp.dhis.android.core.settings.DataSetConfigurationSetting @@ -18,7 +21,7 @@ import org.mockito.kotlin.mock import org.mockito.kotlin.whenever class MapStyleConfigurationTest { - private val d2: D2 = Mockito.mock(D2::class.java, Mockito.RETURNS_DEEP_STUBS) + private val d2: D2 = mock(defaultAnswer = Mockito.RETURNS_DEEP_STUBS) private val uid = "uid" private val programConfigurationSetting: ProgramConfigurationSetting = mock() private val dataSetConfigurationSetting: DataSetConfigurationSetting = mock() @@ -35,17 +38,14 @@ class MapStyleConfigurationTest { programConfigurationRepository, ) + private val stringFilterConnector: StringFilterConnector = mock() + private val enumFilterConnector: EnumFilterConnector = + mock() + @Test fun shouldFetchMapStyles() { - whenever(d2.mapsModule().mapLayers()) doReturn mock() - whenever(d2.mapsModule().mapLayers().withImageryProviders()) doReturn mock() - whenever( - d2 - .mapsModule() - .mapLayers() - .withImageryProviders() - .blockingGet(), - ) doReturn + mockBasemaps( + d2, listOf( mockMapLayer( displayName = "basemap 1", @@ -68,36 +68,46 @@ class MapStyleConfigurationTest { mockImaginaryProvider("© Carto"), ), ), - ) + ), + ) + + mockOverlays(d2, emptyList()) mapStyleConfiguration.fetchMapStyles().let { result -> assertTrue(result.size == 2) assertTrue( result[0] - .sources.rasterTiles.tiles.size == 2, + .sources.entries + .first() + .value.tiles.size == 2, + ) + assertTrue( + result[0] + .sources.entries + .first() + .value.tiles[0] == "http://a.test.test/x/y/z", + ) + assertTrue(result[0].attribution == "© Maplibre") + assertTrue( + result[0] + .sources.entries + .first() + .value.tiles[1] == "http://b.test.test/x/y/z", ) - assertTrue(result[0].sources.rasterTiles.tiles[0] == "http://a.test.test/x/y/z") - assertTrue(result[0].sources.attribution == "© Maplibre") - assertTrue(result[0].sources.rasterTiles.tiles[1] == "http://b.test.test/x/y/z") assertTrue( result[1] - .sources.rasterTiles.tiles.size == 1, + .sources.entries + .first() + .value.tiles.size == 1, ) - assertTrue(result[1].sources.attribution == "© Maplibre, © Carto") + assertTrue(result[1].attribution == "© Maplibre, © Carto") } } @Test fun shouldFetchCustomMaps() { - whenever(d2.mapsModule().mapLayers()) doReturn mock() - whenever(d2.mapsModule().mapLayers().withImageryProviders()) doReturn mock() - whenever( - d2 - .mapsModule() - .mapLayers() - .withImageryProviders() - .blockingGet(), - ) doReturn + mockBasemaps( + d2, listOf( mockMapLayer( displayName = "basemap 1", @@ -120,22 +130,85 @@ class MapStyleConfigurationTest { mockImaginaryProvider("© Carto"), ), ), - ) + ), + ) + + mockOverlays(d2, emptyList()) mapStyleConfiguration.fetchMapStyles().let { result -> assertTrue(result.size == 2) assertTrue( result[0] - .sources.rasterTiles.tiles.size == 4, + .sources.entries + .first() + .value.tiles.size == 4, + ) + assertTrue( + result[0] + .sources.entries + .first() + .value.tiles[0] == "http://a.test.test/x/y/z", + ) + assertTrue(result[0].attribution == "© Maplibre") + assertTrue( + result[0] + .sources.entries + .first() + .value.tiles[1] == "http://b.test.test/x/y/z", ) - assertTrue(result[0].sources.rasterTiles.tiles[0] == "http://a.test.test/x/y/z") - assertTrue(result[0].sources.attribution == "© Maplibre") - assertTrue(result[0].sources.rasterTiles.tiles[1] == "http://b.test.test/x/y/z") assertTrue( result[1] - .sources.rasterTiles.tiles.size == 4, + .sources.entries + .first() + .value.tiles.size == 4, + ) + assertTrue(result[1].attribution == "© Maplibre, © Carto") + } + } + + @Test + fun shouldFetchBasemapWithOverlay() { + mockBasemaps( + d2, + listOf( + mockMapLayer( + displayName = "basemap 1", + imageUrl = "http://{s}.test.test/x/y/z", + subDomainPlaceHolder = null, + subdomains = null, + imaginaryProviders = + listOf( + mockImaginaryProvider("© Maplibre"), + ), + ), + ), + ) + + mockOverlays( + d2, + listOf( + mockMapLayer( + displayName = "overlay 1", + imageUrl = "http://{s}.overlay.test/x/y/z", + subdomains = null, + subDomainPlaceHolder = null, + imaginaryProviders = + listOf( + mockImaginaryProvider("© Overlay"), + ), + ), + ), + ) + + mapStyleConfiguration.fetchMapStyles().let { result -> + assertTrue(result[0].sources.size == 2) + assertTrue( + result[0] + .sources.keys + .toList()[1] == "overlay 1", ) - assertTrue(result[1].sources.attribution == "© Maplibre, © Carto") + assertTrue(result[0].sources["overlay 1"]?.tiles[0] == "http://a.overlay.test/x/y/z") + assertEquals("© Maplibre, © Overlay", result[0].attribution) } } From 0d364ddd0be1495bd164da4e045b2fdfb5ca0ae4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Miguel=20Rubio?= Date: Tue, 10 Mar 2026 15:32:51 +0100 Subject: [PATCH 085/114] fix: Wrap OpenID login response handling in IO context in LoginRepositoryImpl.kt (#4720) --- .../login/main/data/LoginRepositoryImpl.kt | 72 ++++++++++--------- 1 file changed, 38 insertions(+), 34 deletions(-) diff --git a/login/src/androidMain/kotlin/org/dhis2/mobile/login/main/data/LoginRepositoryImpl.kt b/login/src/androidMain/kotlin/org/dhis2/mobile/login/main/data/LoginRepositoryImpl.kt index b6ae1019e9c..99e15bb519e 100644 --- a/login/src/androidMain/kotlin/org/dhis2/mobile/login/main/data/LoginRepositoryImpl.kt +++ b/login/src/androidMain/kotlin/org/dhis2/mobile/login/main/data/LoginRepositoryImpl.kt @@ -366,46 +366,50 @@ class LoginRepositoryImpl( ), ) openIdController.handleIntent(intent) { resultIntent -> - val result = - when { - resultIntent.isFailure -> { - kotlin.Result.failure( - resultIntent.exceptionOrNull() - ?: Exception(getString(Res.string.openid_process_cancelled)), - ) - } - - resultIntent.isSuccess and (resultIntent.getOrNull() !is IntentWithRequestCode) -> { - kotlin.Result.failure(Exception(getString(Res.string.openid_invalid_auth_result))) - } + withContext(dispatcher.io) { + val result = + when { + resultIntent.isFailure -> { + kotlin.Result.failure( + resultIntent.exceptionOrNull() + ?: Exception(getString(Res.string.openid_process_cancelled)), + ) + } - else -> { - try { - val intent = resultIntent.getOrNull() as IntentWithRequestCode - d2 - .userModule() - .openIdHandler() - .blockingHandleLogInResponse( - serverUrl = serverUrl, - intent = intent.intent, - requestCode = intent.requestCode, - ) + resultIntent.isSuccess and (resultIntent.getOrNull() !is IntentWithRequestCode) -> { + kotlin.Result.failure(Exception(getString(Res.string.openid_invalid_auth_result))) + } - kotlin.Result.success(Unit) - } catch (e: Exception) { - kotlin.Result.failure( - Exception( - d2ErrorMessageProvider.getErrorMessage( - e, - isNetworkAvailable, + else -> { + try { + val intent = + resultIntent.getOrNull() as IntentWithRequestCode + + d2 + .userModule() + .openIdHandler() + .blockingHandleLogInResponse( + serverUrl = serverUrl, + intent = intent.intent, + requestCode = intent.requestCode, + ) + + kotlin.Result.success(Unit) + } catch (e: Exception) { + kotlin.Result.failure( + Exception( + d2ErrorMessageProvider.getErrorMessage( + e, + isNetworkAvailable, + ), ), - ), - ) + ) + } } } - } - continuation.resume(value = result) { _, _, _ -> } + continuation.resume(value = result) { _, _, _ -> } + } } continuation.invokeOnCancellation { kotlin.Result.failure(Exception("")) From 402f2e22b0c70a3e405e5e39b05e5f102533ef9f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 11 Mar 2026 07:07:39 +0100 Subject: [PATCH 086/114] build(deps): bump actions/upload-artifact from 6.0.0 to 7.0.0 (#4713) Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 6.0.0 to 7.0.0. - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](https://github.com/actions/upload-artifact/compare/v6.0.0...v7.0.0) --- updated-dependencies: - dependency-name: actions/upload-artifact dependency-version: 7.0.0 dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/build-release-candidate.yml | 6 +++--- .github/workflows/continuous-delivery.yml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build-release-candidate.yml b/.github/workflows/build-release-candidate.yml index 3ada0d64493..2255793e356 100644 --- a/.github/workflows/build-release-candidate.yml +++ b/.github/workflows/build-release-candidate.yml @@ -78,21 +78,21 @@ jobs: # Upload DhisRelease APK - name: Upload DhisRelease APK - uses: actions/upload-artifact@v6.0.0 + uses: actions/upload-artifact@v7.0.0 with: name: ${{ env.repository_name }} - DhisRelease APK path: ${{ env.main_project_module }}/build/outputs/apk/dhis2/release/dhis2-v${{ steps.read-version.outputs.vName }}.apk # Upload DhisPlayServicesRelease APK - name: Upload DhisPlayServicesRelease APK - uses: actions/upload-artifact@v6.0.0 + uses: actions/upload-artifact@v7.0.0 with: name: ${{ env.repository_name }} - DhisPlayServicesRelease APK path: ${{ env.main_project_module }}/build/outputs/apk/dhis2PlayServices/release/dhis2-v${{ steps.read-version.outputs.vName }}-googlePlay.apk # Upload Training Release APK - name: Upload Training Release APK - uses: actions/upload-artifact@v6.0.0 + uses: actions/upload-artifact@v7.0.0 with: name: ${{ env.repository_name }} - Training Release APK path: ${{ env.main_project_module }}/build/outputs/apk/dhis2Training/release/dhis2-v${{ steps.read-version.outputs.vName }}-training.apk \ No newline at end of file diff --git a/.github/workflows/continuous-delivery.yml b/.github/workflows/continuous-delivery.yml index 7488214edaa..0915084b71a 100644 --- a/.github/workflows/continuous-delivery.yml +++ b/.github/workflows/continuous-delivery.yml @@ -69,7 +69,7 @@ jobs: # Upload Artifact Build - name: Upload Android artifacts - uses: actions/upload-artifact@v6.0.0 + uses: actions/upload-artifact@v7.0.0 with: name: ${{ env.repository_name }} - Android APK - ${{ steps.date.outputs.date }} path: ${{ steps.apk-path.outputs.apk_path }} From 8abb993a1cd355b1f936151df6ba99b2a94f0fac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Miguel=20Rubio?= Date: Wed, 11 Mar 2026 10:54:24 +0100 Subject: [PATCH 087/114] build: update composePluginVersion to 1.10.2 and refresh verification-metadata.xml (#4721) --- gradle/libs.versions.toml | 2 +- gradle/verification-metadata.xml | 441 +++++++++++++++++++++++++++++++ 2 files changed, 442 insertions(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 7d61b86524a..c83770c603a 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -27,7 +27,7 @@ corektx = "1.17.0" fragmentktx = "1.8.9" recyclerview = "1.4.0" compose = "1.10.4" -composePluginVersion = "1.10.1" +composePluginVersion = "1.10.2" composePaging = "3.4.1" pagingTesting = "3.4.1" composeConstraintLayout = "1.1.1" diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index 5dadef7326a..a55c258636b 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -782,6 +782,11 @@ + + + + + @@ -860,6 +865,14 @@ + + + + + + + + @@ -920,6 +933,11 @@ + + + + + @@ -988,6 +1006,14 @@ + + + + + + + + @@ -1533,6 +1559,14 @@ + + + + + + + + @@ -1565,6 +1599,14 @@ + + + + + + + + @@ -1690,6 +1732,14 @@ + + + + + + + + @@ -1847,6 +1897,14 @@ + + + + + + + + @@ -13643,6 +13701,14 @@ + + + + + + + + @@ -13664,6 +13730,11 @@ + + + + + @@ -13682,6 +13753,14 @@ + + + + + + + + @@ -13719,6 +13798,14 @@ + + + + + + + + @@ -13756,6 +13843,14 @@ + + + + + + + + @@ -13793,6 +13888,14 @@ + + + + + + + + @@ -13830,6 +13933,14 @@ + + + + + + + + @@ -13872,6 +13983,14 @@ + + + + + + + + @@ -13914,6 +14033,14 @@ + + + + + + + + @@ -13943,6 +14070,14 @@ + + + + + + + + @@ -13967,6 +14102,14 @@ + + + + + + + + @@ -13999,6 +14142,14 @@ + + + + + + + + @@ -14023,6 +14174,14 @@ + + + + + + + + @@ -14047,6 +14206,14 @@ + + + + + + + + @@ -14071,6 +14238,14 @@ + + + + + + + + @@ -14100,6 +14275,14 @@ + + + + + + + + @@ -14124,6 +14307,16 @@ + + + + + + + + + + @@ -14142,6 +14335,14 @@ + + + + + + + + @@ -14179,6 +14380,14 @@ + + + + + + + + @@ -14211,6 +14420,14 @@ + + + + + + + + @@ -14248,6 +14465,14 @@ + + + + + + + + @@ -14381,6 +14606,14 @@ + + + + + + + + @@ -14410,6 +14643,14 @@ + + + + + + + + @@ -14474,6 +14715,14 @@ + + + + + + + + @@ -14508,6 +14757,14 @@ + + + + + + + + @@ -14590,6 +14847,14 @@ + + + + + + + + @@ -14635,6 +14900,14 @@ + + + + + + + + @@ -14667,6 +14940,14 @@ + + + + + + + + @@ -14709,6 +14990,14 @@ + + + + + + + + @@ -14741,6 +15030,14 @@ + + + + + + + + @@ -14783,6 +15080,14 @@ + + + + + + + + @@ -14836,6 +15141,14 @@ + + + + + + + + @@ -14873,6 +15186,14 @@ + + + + + + + + @@ -14905,6 +15226,14 @@ + + + + + + + + @@ -14947,6 +15276,14 @@ + + + + + + + + @@ -14979,6 +15316,14 @@ + + + + + + + + @@ -15021,6 +15366,14 @@ + + + + + + + + @@ -15058,6 +15411,14 @@ + + + + + + + + @@ -15100,6 +15461,14 @@ + + + + + + + + @@ -15137,6 +15506,14 @@ + + + + + + + + @@ -15166,6 +15543,14 @@ + + + + + + + + @@ -15198,6 +15583,14 @@ + + + + + + + + @@ -15235,6 +15628,14 @@ + + + + + + + + @@ -15277,6 +15678,14 @@ + + + + + + + + @@ -15319,6 +15728,14 @@ + + + + + + + + @@ -15361,6 +15778,14 @@ + + + + + + + + @@ -17744,6 +18169,22 @@ + + + + + + + + + + + + + + + + From 1f67d3d6b1c340c9d74564a30b6d779d70019699 Mon Sep 17 00:00:00 2001 From: Pablo Date: Wed, 11 Mar 2026 14:07:37 +0100 Subject: [PATCH 088/114] build: [ANDROAPP-7497] Move data sync to sync module [skip size] (#4690) --- .../java/org/dhis2/DBTestLoader.kt | 7 +- app/src/main/java/org/dhis2/AppModule.kt | 8 + .../org/dhis2/data/server/ServerModule.kt | 7 - .../dhis2/data/service/SyncDataWorker.java | 206 ---------- .../data/service/SyncDataWorkerComponent.java | 13 - .../data/service/SyncDataWorkerModule.kt | 35 -- .../data/service/SyncGranularRxModule.kt | 14 +- .../dhis2/data/service/SyncGranularWorker.kt | 4 +- .../org/dhis2/data/service/SyncPresenter.java | 24 -- .../dhis2/data/service/SyncPresenterImpl.kt | 324 +--------------- .../data/service/SyncStatusController.kt | 190 ---------- .../workManager/WorkManagerController.kt | 5 - .../workManager/WorkManagerControllerImpl.kt | 24 +- .../data/service/workManager/WorkerType.kt | 1 - .../org/dhis2/data/user/UserComponent.java | 5 - .../java/org/dhis2/di/KoinInitialization.kt | 4 + .../general/SessionManagerActivity.kt | 24 +- .../org/dhis2/usescases/main/MainActivity.kt | 6 + .../org/dhis2/usescases/main/MainModule.kt | 11 +- .../org/dhis2/usescases/main/MainPresenter.kt | 45 ++- .../usescases/main/data/HomeRepository.kt | 2 - .../usescases/main/data/HomeRepositoryImpl.kt | 8 +- .../main/domain/LaunchInitialSync.kt | 5 +- .../dhis2/usescases/main/domain/LogoutUser.kt | 8 +- .../usescases/main/program/ProgramFragment.kt | 9 +- .../usescases/main/program/ProgramModule.kt | 4 +- .../main/program/ProgramRepository.kt | 2 +- .../main/program/ProgramRepositoryImpl.kt | 2 +- .../dhis2/usescases/main/program/ProgramUi.kt | 2 +- .../main/program/ProgramViewModel.kt | 6 +- .../main/program/ProgramViewModelFactory.kt | 2 +- .../searchTrackEntity/SearchTEActivity.kt | 1 + .../searchTrackEntity/SearchTEModule.java | 9 +- .../searchTrackEntity/SearchTEPresenter.java | 7 +- .../usescases/settings/SyncManagerModule.kt | 3 - .../usescases/settings/domain/LaunchSync.kt | 94 +---- .../TeiProgramListActivity.java | 2 +- .../TeiProgramListInteractor.java | 2 +- .../teiProgramList/TeiProgramListModule.java | 12 +- .../granularsync/GranularSyncPresenter.kt | 10 +- .../dhis2/data/services/SyncPresenterTest.kt | 43 ++- .../dhis2/usescases/main/MainPresenterTest.kt | 5 +- .../main/domain/LaunchInitialSyncTest.kt | 8 + .../usescases/main/domain/LogoutUserTest.kt | 14 +- .../main/program/ProgramRepositoryImplTest.kt | 2 +- .../main/program/ProgramViewModelTest.kt | 4 +- .../SearchTEPresenterTest.kt | 2 +- .../settings/domain/LaunchSyncTest.kt | 51 +-- .../granularsync/GranularSyncPresenterTest.kt | 2 - .../notifications/NotificationManagerImpl.kt | 31 +- .../notifications/NotificationManager.kt | 2 + .../commons/providers/PreferenceConstants.kt | 9 + gradle/libs.versions.toml | 1 + gradle/verification-metadata.xml | 33 ++ sync/build.gradle.kts | 1 + sync/src/androidMain/AndroidManifest.xml | 15 +- .../data/AndroidSyncBackgroundJobAction.kt | 64 +++- .../mobile/sync/data/AndroidSyncRepository.kt | 355 ++++++++++++++++++ .../dhis2/mobile/sync/data/SyncDataWorker.kt | 77 ++++ .../mobile/sync/data/SyncMetadataWorker.kt | 10 +- .../mobile/sync/data/SyncSettingsWorker.kt | 12 +- .../mobile/sync/di/SyncModule.android.kt | 16 + .../composeResources/values/strings.xml | 1 + .../sync/data/SyncBackgroundJobAction.kt | 4 + .../dhis2/mobile/sync/data/SyncRepository.kt | 27 ++ .../org/dhis2/mobile/sync/domain/SyncData.kt | 83 +++- .../sync/domain/SyncStatusController.kt | 154 ++++++++ .../mobile/sync/model/DataSyncProgress.kt | 6 + .../sync/model/DataSyncProgressStatus.kt | 15 + .../dhis2/mobile/sync/model/DataSyncTask.kt | 19 + .../org/dhis2/mobile/sync/model/SyncResult.kt | 11 + .../dhis2/mobile/sync/model/SyncStatusData.kt | 33 ++ 72 files changed, 1175 insertions(+), 1082 deletions(-) delete mode 100644 app/src/main/java/org/dhis2/data/service/SyncDataWorker.java delete mode 100644 app/src/main/java/org/dhis2/data/service/SyncDataWorkerComponent.java delete mode 100644 app/src/main/java/org/dhis2/data/service/SyncDataWorkerModule.kt delete mode 100644 app/src/main/java/org/dhis2/data/service/SyncStatusController.kt create mode 100644 sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/SyncDataWorker.kt create mode 100644 sync/src/commonMain/kotlin/org/dhis2/mobile/sync/domain/SyncStatusController.kt create mode 100644 sync/src/commonMain/kotlin/org/dhis2/mobile/sync/model/DataSyncProgress.kt create mode 100644 sync/src/commonMain/kotlin/org/dhis2/mobile/sync/model/DataSyncProgressStatus.kt create mode 100644 sync/src/commonMain/kotlin/org/dhis2/mobile/sync/model/DataSyncTask.kt create mode 100644 sync/src/commonMain/kotlin/org/dhis2/mobile/sync/model/SyncResult.kt create mode 100644 sync/src/commonMain/kotlin/org/dhis2/mobile/sync/model/SyncStatusData.kt diff --git a/app/src/androidTest/java/org/dhis2/DBTestLoader.kt b/app/src/androidTest/java/org/dhis2/DBTestLoader.kt index cff717391f2..e294aa278cf 100644 --- a/app/src/androidTest/java/org/dhis2/DBTestLoader.kt +++ b/app/src/androidTest/java/org/dhis2/DBTestLoader.kt @@ -23,7 +23,10 @@ class DBTestLoader(private val context: Context) { Timber.tag("RUNNER_LOG").d("Copying database") val input = InstrumentationRegistry.getInstrumentation() .context.assets.open("databases/$DB_NAME_TEST") - val output = FileOutputStream("$databasePath/$DB_NAME") + + file.parentFile?.mkdirs() + + val output = FileOutputStream(file) writeExtractedFileToDisk(input, output) Timber.d("Database copy done") } catch (e: IOException) { @@ -51,4 +54,4 @@ class DBTestLoader(private val context: Context) { const val DB_NAME_TEST = "dhis_test.db" const val DB_NAME = "127-0-0-1-8080_android_unencrypted.db" } -} \ No newline at end of file +} diff --git a/app/src/main/java/org/dhis2/AppModule.kt b/app/src/main/java/org/dhis2/AppModule.kt index 0373cade8fa..32f408bfa99 100644 --- a/app/src/main/java/org/dhis2/AppModule.kt +++ b/app/src/main/java/org/dhis2/AppModule.kt @@ -4,6 +4,9 @@ import android.content.Context import dagger.Module import dagger.Provides import org.dhis2.commons.resources.ColorUtils +import org.dhis2.data.service.SyncGranularWorker +import org.koin.androidx.workmanager.dsl.workerOf +import org.koin.dsl.module import javax.inject.Singleton @Module @@ -18,3 +21,8 @@ class AppModule( @Singleton fun colorUtils(): ColorUtils = ColorUtils() } + +val appModule = + module { + workerOf(::SyncGranularWorker) + } diff --git a/app/src/main/java/org/dhis2/data/server/ServerModule.kt b/app/src/main/java/org/dhis2/data/server/ServerModule.kt index 1021d00743e..8cd45791161 100644 --- a/app/src/main/java/org/dhis2/data/server/ServerModule.kt +++ b/app/src/main/java/org/dhis2/data/server/ServerModule.kt @@ -21,8 +21,6 @@ import org.dhis2.commons.resources.EventResourcesProvider import org.dhis2.commons.resources.MetadataIconProvider import org.dhis2.commons.resources.ResourceManager import org.dhis2.commons.schedulers.SchedulerProvider -import org.dhis2.commons.viewmodel.DispatcherProvider -import org.dhis2.data.service.SyncStatusController import org.dhis2.data.service.VersionRepository import org.dhis2.form.data.OptionsRepository import org.dhis2.form.data.RulesUtilsProvider @@ -123,11 +121,6 @@ class ServerModule { colorUtils, ) - @Provides - @PerServer - fun providesSyncStatusController(dispatcherProvider: DispatcherProvider): SyncStatusController = - SyncStatusController(dispatcherProvider) - @Provides @PerServer fun providesVersionStatusController(d2: D2): VersionRepository = VersionRepository(d2) diff --git a/app/src/main/java/org/dhis2/data/service/SyncDataWorker.java b/app/src/main/java/org/dhis2/data/service/SyncDataWorker.java deleted file mode 100644 index ebb30c9b4e5..00000000000 --- a/app/src/main/java/org/dhis2/data/service/SyncDataWorker.java +++ /dev/null @@ -1,206 +0,0 @@ -package org.dhis2.data.service; - -import static org.dhis2.utils.analytics.AnalyticsConstants.DATA_TIME; - -import android.app.NotificationChannel; -import android.app.NotificationManager; -import android.content.Context; -import android.content.pm.ServiceInfo; -import android.os.Build; - -import androidx.annotation.NonNull; -import androidx.core.app.NotificationCompat; -import androidx.core.app.NotificationManagerCompat; -import androidx.work.Data; -import androidx.work.ForegroundInfo; -import androidx.work.Worker; -import androidx.work.WorkerParameters; - -import org.dhis2.App; -import org.dhis2.R; -import org.dhis2.commons.Constants; -import org.dhis2.commons.date.DateUtils; -import org.dhis2.commons.network.NetworkUtils; -import org.dhis2.commons.prefs.PreferenceProvider; - -import java.util.Calendar; -import java.util.Objects; - -import javax.inject.Inject; - -import timber.log.Timber; - -public class SyncDataWorker extends Worker { - - private static final String DATA_CHANNEL = "sync_data_notification"; - private static final int SYNC_DATA_ID = 8071986; - - @Inject - SyncPresenter presenter; - - @Inject - PreferenceProvider prefs; - - public SyncDataWorker( - @NonNull Context context, - @NonNull WorkerParameters workerParams) { - super(context, workerParams); - } - - @NonNull - @Override - public Result doWork() { - Objects.requireNonNull(((App) getApplicationContext()).userComponent()) - .plus(new SyncDataWorkerModule()) - .inject(this); - - presenter.initSyncControllerMap(); - - triggerNotification( - getApplicationContext().getString(R.string.app_name), - getApplicationContext().getString(R.string.syncing_data), - 0); - - boolean isEventOk = true; - boolean isTeiOk = true; - boolean isDataValue = true; - - long init = System.currentTimeMillis(); - - triggerNotification( - getApplicationContext().getString(R.string.app_name), - getApplicationContext().getString(R.string.syncing_events), - 20); - - try { - presenter.syncAndDownloadEvents(); - } catch (Exception e) { - if (!new NetworkUtils(getApplicationContext()).isOnline()) { - presenter.setNetworkUnavailable(); - } - Timber.e(e); - isEventOk = false; - } - - triggerNotification( - getApplicationContext().getString(R.string.app_name), - getApplicationContext().getString(R.string.syncing_teis), - 40); - - try { - presenter.syncAndDownloadTeis(); - } catch (Exception e) { - if (!new NetworkUtils(getApplicationContext()).isOnline()) { - presenter.setNetworkUnavailable(); - } - Timber.e(e); - isTeiOk = false; - } - - triggerNotification( - getApplicationContext().getString(R.string.app_name), - getApplicationContext().getString(R.string.syncing_data_sets), - 60); - - try { - presenter.syncAndDownloadDataValues(); - } catch (Exception e) { - if (!new NetworkUtils(getApplicationContext()).isOnline()) { - presenter.setNetworkUnavailable(); - } - Timber.e(e); - isDataValue = false; - } - - triggerNotification( - getApplicationContext().getString(R.string.app_name), - getApplicationContext().getString(R.string.syncing_resources), - 80); - - try { - presenter.downloadResources(); - } catch (Exception e) { - Timber.e(e); - } - - triggerNotification( - getApplicationContext().getString(R.string.app_name), - "syncing reserved values", - 95 - - ); - - try { - presenter.syncReservedValues(); - } catch (Exception e) { - Timber.e(e); - } - - triggerNotification( - getApplicationContext().getString(R.string.app_name), - getApplicationContext().getString(R.string.syncing_done), - 100); - - presenter.logTimeToFinish(System.currentTimeMillis() - init, DATA_TIME); - - String lastDataSyncDate = DateUtils.dateTimeFormat().format(Calendar.getInstance().getTime()); - SyncResult syncResult = presenter.checkSyncStatus(); - - prefs.setValue(Constants.LAST_DATA_SYNC, lastDataSyncDate); - prefs.setValue(Constants.LAST_DATA_SYNC_STATUS, isEventOk && isTeiOk && isDataValue && syncResult == SyncResult.SYNC); - prefs.setValue(Constants.SYNC_RESULT, syncResult.name()); - - cancelNotification(); - - presenter.startPeriodicDataWork(); - - presenter.finishSync(); - - return Result.success(createOutputData(true)); - } - - @Override - public void onStopped() { - cancelNotification(); - super.onStopped(); - } - - private Data createOutputData(boolean state) { - return new Data.Builder() - .putBoolean("DATA_STATE", state) - .build(); - } - - private void triggerNotification(String title, String content, int progress) { - NotificationManager notificationManager = (NotificationManager) getApplicationContext().getSystemService(Context.NOTIFICATION_SERVICE); - - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - NotificationChannel mChannel = new NotificationChannel(DATA_CHANNEL, "DataSync", NotificationManager.IMPORTANCE_HIGH); - notificationManager.createNotificationChannel(mChannel); - } - - NotificationCompat.Builder notificationBuilder = - new NotificationCompat.Builder(getApplicationContext(), DATA_CHANNEL) - .setSmallIcon(R.drawable.ic_sync) - .setContentTitle(title) - .setContentText(content) - .setOngoing(true) - .setOnlyAlertOnce(true) - .setAutoCancel(false) - .setProgress(100, progress, false) - .setPriority(NotificationCompat.PRIORITY_DEFAULT); - - setForegroundAsync(new ForegroundInfo( - SyncDataWorker.SYNC_DATA_ID, - notificationBuilder.build(), - Build.VERSION.SDK_INT >= Build.VERSION_CODES.R ? ServiceInfo.FOREGROUND_SERVICE_TYPE_DATA_SYNC : 0 - )); - - } - - private void cancelNotification() { - NotificationManagerCompat notificationManager = - NotificationManagerCompat.from(getApplicationContext()); - notificationManager.cancel(SYNC_DATA_ID); - } -} diff --git a/app/src/main/java/org/dhis2/data/service/SyncDataWorkerComponent.java b/app/src/main/java/org/dhis2/data/service/SyncDataWorkerComponent.java deleted file mode 100644 index 3938520a51d..00000000000 --- a/app/src/main/java/org/dhis2/data/service/SyncDataWorkerComponent.java +++ /dev/null @@ -1,13 +0,0 @@ -package org.dhis2.data.service; - -import androidx.annotation.NonNull; - -import org.dhis2.commons.di.dagger.PerService; - -import dagger.Subcomponent; - -@PerService -@Subcomponent(modules = SyncDataWorkerModule.class) -public interface SyncDataWorkerComponent { - void inject(@NonNull SyncDataWorker syncDataWorker); -} diff --git a/app/src/main/java/org/dhis2/data/service/SyncDataWorkerModule.kt b/app/src/main/java/org/dhis2/data/service/SyncDataWorkerModule.kt deleted file mode 100644 index 66758840961..00000000000 --- a/app/src/main/java/org/dhis2/data/service/SyncDataWorkerModule.kt +++ /dev/null @@ -1,35 +0,0 @@ -package org.dhis2.data.service - -import dagger.Module -import dagger.Provides -import org.dhis2.commons.di.dagger.PerService -import org.dhis2.commons.prefs.PreferenceProvider -import org.dhis2.data.service.workManager.WorkManagerController -import org.dhis2.utils.analytics.AnalyticsHelper -import org.hisp.dhis.android.core.D2 - -@Module -class SyncDataWorkerModule { - @Provides - @PerService - fun syncRepository(d2: D2): SyncRepository = SyncRepositoryImpl(d2) - - @Provides - @PerService - internal fun syncPresenter( - d2: D2, - preferences: PreferenceProvider, - workManagerController: WorkManagerController, - analyticsHelper: AnalyticsHelper, - syncStatusController: SyncStatusController, - syncRepository: SyncRepository, - ): SyncPresenter = - SyncPresenterImpl( - d2, - preferences, - workManagerController, - analyticsHelper, - syncStatusController, - syncRepository, - ) -} diff --git a/app/src/main/java/org/dhis2/data/service/SyncGranularRxModule.kt b/app/src/main/java/org/dhis2/data/service/SyncGranularRxModule.kt index 64dc7834207..3875821b4c7 100644 --- a/app/src/main/java/org/dhis2/data/service/SyncGranularRxModule.kt +++ b/app/src/main/java/org/dhis2/data/service/SyncGranularRxModule.kt @@ -4,12 +4,13 @@ import dagger.Module import dagger.Provides import org.dhis2.commons.di.dagger.PerService import org.dhis2.commons.prefs.PreferenceProvider -import org.dhis2.data.service.workManager.WorkManagerController -import org.dhis2.utils.analytics.AnalyticsHelper +import org.dhis2.mobile.sync.domain.SyncStatusController import org.hisp.dhis.android.core.D2 @Module -class SyncGranularRxModule { +class SyncGranularRxModule( + private val syncStatusController: SyncStatusController, +) { @Provides @PerService fun syncRepository(d2: D2): SyncRepository = SyncRepositoryImpl(d2) @@ -19,17 +20,12 @@ class SyncGranularRxModule { internal fun syncPresenter( d2: D2, preferences: PreferenceProvider, - workManagerController: WorkManagerController, - analyticsHelper: AnalyticsHelper, - syncStatusController: SyncStatusController, syncRepository: SyncRepository, ): SyncPresenter = SyncPresenterImpl( d2, preferences, - workManagerController, - analyticsHelper, - syncStatusController, syncRepository, + syncStatusController, ) } diff --git a/app/src/main/java/org/dhis2/data/service/SyncGranularWorker.kt b/app/src/main/java/org/dhis2/data/service/SyncGranularWorker.kt index e15ffa40ae0..6ce7392a572 100644 --- a/app/src/main/java/org/dhis2/data/service/SyncGranularWorker.kt +++ b/app/src/main/java/org/dhis2/data/service/SyncGranularWorker.kt @@ -44,6 +44,7 @@ import org.dhis2.commons.Constants.ORG_UNIT import org.dhis2.commons.Constants.PERIOD_ID import org.dhis2.commons.Constants.UID import org.dhis2.commons.sync.ConflictType +import org.dhis2.mobile.sync.domain.SyncStatusController import javax.inject.Inject private const val GRANULAR_CHANNEL = "sync_granular_notification" @@ -52,6 +53,7 @@ private const val SYNC_GRANULAR_ID = 8071988 class SyncGranularWorker( context: Context, workerParams: WorkerParameters, + private val syncStatusController: SyncStatusController, ) : Worker(context, workerParams) { @Inject internal lateinit var presenter: SyncPresenter @@ -59,7 +61,7 @@ class SyncGranularWorker( override fun doWork(): Result { (applicationContext as App) .userComponent() - ?.plus(SyncGranularRxModule()) + ?.plus(SyncGranularRxModule(syncStatusController)) ?.inject(this) val uid = inputData.getString(UID) ?: return Result.failure() diff --git a/app/src/main/java/org/dhis2/data/service/SyncPresenter.java b/app/src/main/java/org/dhis2/data/service/SyncPresenter.java index 593091270dc..297ca06c001 100644 --- a/app/src/main/java/org/dhis2/data/service/SyncPresenter.java +++ b/app/src/main/java/org/dhis2/data/service/SyncPresenter.java @@ -10,16 +10,6 @@ import io.reactivex.Observable; interface SyncPresenter { - void syncAndDownloadEvents() throws Exception; - - void syncAndDownloadTeis() throws Exception; - - void syncAndDownloadDataValues() throws Exception; - - void syncReservedValues(); - - SyncResult checkSyncStatus(); - Observable syncGranularEvent(String eventUid); ListenableWorker.Result blockSyncGranularProgram(String programUid); @@ -54,19 +44,5 @@ interface SyncPresenter { List messageTrackerImportConflict(String uid); - void startPeriodicDataWork(); - - void downloadResources(); - ListenableWorker.Result blockSyncGranularDataValues(String dataSetUid, String orgUnitUid, String attrOptionCombo, String periodId, String[] catOptionCombo); - - void logTimeToFinish(long millisToFinish, String eventName); - - void updateProyectAnalytics(); - - void initSyncControllerMap(); - - void finishSync(); - - void setNetworkUnavailable(); } diff --git a/app/src/main/java/org/dhis2/data/service/SyncPresenterImpl.kt b/app/src/main/java/org/dhis2/data/service/SyncPresenterImpl.kt index 7a380dd0ad9..f4df0fcb443 100644 --- a/app/src/main/java/org/dhis2/data/service/SyncPresenterImpl.kt +++ b/app/src/main/java/org/dhis2/data/service/SyncPresenterImpl.kt @@ -2,123 +2,34 @@ package org.dhis2.data.service import androidx.annotation.VisibleForTesting import androidx.work.Data -import androidx.work.ExistingWorkPolicy import androidx.work.ListenableWorker import io.reactivex.Completable import io.reactivex.Observable -import org.dhis2.bindings.toSeconds +import kotlinx.coroutines.runBlocking import org.dhis2.commons.bindings.enrollment import org.dhis2.commons.bindings.program import org.dhis2.commons.date.DateUtils -import org.dhis2.commons.prefs.Preference.Companion.DATA import org.dhis2.commons.prefs.Preference.Companion.EVENT_MAX import org.dhis2.commons.prefs.Preference.Companion.EVENT_MAX_DEFAULT import org.dhis2.commons.prefs.Preference.Companion.LIMIT_BY_ORG_UNIT import org.dhis2.commons.prefs.Preference.Companion.LIMIT_BY_PROGRAM -import org.dhis2.commons.prefs.Preference.Companion.TEI_MAX -import org.dhis2.commons.prefs.Preference.Companion.TEI_MAX_DEFAULT -import org.dhis2.commons.prefs.Preference.Companion.TIME_DAILY -import org.dhis2.commons.prefs.Preference.Companion.TIME_DATA import org.dhis2.commons.prefs.PreferenceProvider -import org.dhis2.data.service.workManager.WorkManagerController -import org.dhis2.data.service.workManager.WorkerItem -import org.dhis2.data.service.workManager.WorkerType -import org.dhis2.utils.analytics.AnalyticsHelper +import org.dhis2.mobile.sync.domain.SyncStatusController import org.hisp.dhis.android.core.D2 import org.hisp.dhis.android.core.arch.call.D2Progress -import org.hisp.dhis.android.core.arch.call.D2ProgressStatus import org.hisp.dhis.android.core.common.State -import org.hisp.dhis.android.core.fileresource.FileResourceDomainType import org.hisp.dhis.android.core.imports.TrackerImportConflict import org.hisp.dhis.android.core.program.ProgramType -import org.hisp.dhis.android.core.settings.GeneralSettings import org.hisp.dhis.android.core.settings.LimitScope import org.hisp.dhis.android.core.settings.ProgramSettings -import org.hisp.dhis.android.core.systeminfo.DHISVersion -import timber.log.Timber import java.util.Calendar class SyncPresenterImpl( private val d2: D2, private val preferences: PreferenceProvider, - private val workManagerController: WorkManagerController, - private val analyticsHelper: AnalyticsHelper, - private val syncStatusController: SyncStatusController, private val syncRepository: SyncRepository, + private val syncStatusController: SyncStatusController, ) : SyncPresenter { - override fun initSyncControllerMap() { - Completable - .fromCallable { - val programMap: Map = - d2 - .programModule() - .programs() - .blockingGetUids() - .map { programUid -> - programUid to D2ProgressStatus(false, null) - }.toMap() - val aggregateMap: Map = - d2.dataSetModule().dataSets().blockingGetUids().associateWith { - D2ProgressStatus(false, null) - } - val allMap = - programMap - .toMutableMap() - .apply { - putAll(aggregateMap) - }.toMap() - syncStatusController.initDownloadProcess(allMap) - }.blockingAwait() - } - - override fun finishSync() { - syncStatusController.finishSync() - } - - override fun setNetworkUnavailable() { - syncStatusController.onNetworkUnavailable() - } - - override fun syncAndDownloadEvents() { - val (eventLimit, limitByOU, limitByProgram) = getDownloadLimits() - val programEventUids = - d2 - .programModule() - .programs() - .byProgramType() - .eq(ProgramType.WITHOUT_REGISTRATION) - .blockingGetUids() - syncStatusController.startDownloadingEvents() - Completable - .fromObservable(d2.eventModule().events().upload()) - .andThen( - Completable - .fromObservable( - d2 - .eventModule() - .eventDownloader() - .limit(eventLimit) - .limitByOrgunit(limitByOU) - .limitByProgram(limitByProgram) - .download() - .doOnNext { d2Progress -> - syncStatusController.updateDownloadProcess( - d2Progress.programs().filter { entry -> - programEventUids.contains(entry.key) - }, - ) - }, - ).doOnError { - Timber.d("error while downloading Events") - }.onErrorComplete() - .doOnComplete { - syncStatusController.finishDownloadingEvents( - programEventUids, - ) - }, - ).blockingAwait() - } - @VisibleForTesting fun getDownloadLimits(): Triple { val programSettings = getProgramSetting() @@ -144,174 +55,6 @@ class SyncPresenterImpl( return Triple(eventLimit, limitByOU, limitByProgram) } - override fun syncAndDownloadTeis() { - val programSettings = getProgramSetting() - val globalProgramSettings = programSettings?.globalSettings() - - val teiLimit = - globalProgramSettings?.teiDownload() ?: preferences.getInt(TEI_MAX, TEI_MAX_DEFAULT) - val limitByOU = - globalProgramSettings?.settingDownload()?.let { - it == LimitScope.PER_ORG_UNIT || it == LimitScope.PER_OU_AND_PROGRAM - } ?: preferences.getBoolean(LIMIT_BY_ORG_UNIT, false) - val limitByProgram = - globalProgramSettings?.settingDownload()?.let { - it == LimitScope.PER_PROGRAM || it == LimitScope.PER_OU_AND_PROGRAM - } ?: preferences.getBoolean(LIMIT_BY_PROGRAM, false) - - val trackerProgramUids = - d2 - .programModule() - .programs() - .byProgramType() - .eq(ProgramType.WITH_REGISTRATION) - .blockingGetUids() - - syncStatusController.startDownloadingTracker() - - Completable - .fromObservable(d2.trackedEntityModule().trackedEntityInstances().upload()) - .andThen( - Completable - .fromObservable( - d2 - .trackedEntityModule() - .trackedEntityInstanceDownloader() - .limit(teiLimit) - .limitByOrgunit(limitByOU) - .limitByProgram(limitByProgram) - .download() - .doOnNext { data -> - val percentage = data.percentage() - val callsDone = data.doneCalls().size - val totalCalls = data.totalCalls() - Timber.d("$percentage% $callsDone/$totalCalls") - syncStatusController.updateDownloadProcess( - data.programs().filter { entry -> - trackerProgramUids.contains(entry.key) - }, - ) - }, - ).doOnError { Timber.d("error while downloading TEIs") } - .onErrorComplete() - .doOnComplete { - syncStatusController.finishDownloadingTracker( - trackerProgramUids, - ) - }, - ).blockingAwait() - } - - override fun syncAndDownloadDataValues() { - val dataSetUids = d2.dataSetModule().dataSets().blockingGetUids() - if (dataSetUids.isNotEmpty()) { - syncStatusController.startDownloadingDataSets() - Completable - .fromObservable(d2.dataValueModule().dataValues().upload()) - .doOnError { Timber.d("error while downloading Datasets") } - .andThen( - Completable.fromObservable( - d2.dataSetModule().dataSetCompleteRegistrations().upload(), - ), - ).doOnError { Timber.d("error while downloading Datasets") } - .andThen( - Completable - .fromObservable( - d2 - .aggregatedModule() - .data() - .download() - .doOnNext { - syncStatusController.updateDownloadProcess(it.dataSets()) - }, - ).doOnError { Timber.d("error while downloading Datasets") } - .onErrorComplete() - .doOnComplete { - syncStatusController.finishDownloadingTracker( - dataSetUids, - ) - }, - ).blockingAwait() - } - } - - override fun downloadResources() { - if (d2.systemInfoModule().versionManager().isGreaterThan(DHISVersion.V2_32)) { - syncStatusController.initDownloadMedia() - Completable - .fromObservable( - d2 - .fileResourceModule() - .fileResourceDownloader() - .byDomainType() - .eq(FileResourceDomainType.DATA_VALUE) - .download(), - ).blockingAwait() - } - } - - override fun syncReservedValues() { - val maxNumberOfValuesToReserve = - getSettings()?.let { - it.reservedValues() ?: 100 - } ?: 100 - Completable - .fromObservable( - d2 - .trackedEntityModule() - .reservedValueManager() - .downloadAllReservedValues(maxNumberOfValuesToReserve), - ).doOnError { - Timber.d("error while downloading reserved values") - }.blockingAwait() - } - - override fun checkSyncStatus(): SyncResult { - val eventsOk = - d2 - .eventModule() - .events() - .byAggregatedSyncState() - .notIn(State.SYNCED) - .blockingGet() - .isEmpty() - val teiOk = - d2 - .trackedEntityModule() - .trackedEntityInstances() - .byAggregatedSyncState() - .notIn(State.SYNCED, State.RELATIONSHIP) - .blockingGet() - .isEmpty() - - if (eventsOk && teiOk) { - return SyncResult.SYNC - } - - val anyEventsToPostOrToUpdate = - d2 - .eventModule() - .events() - .byAggregatedSyncState() - .`in`(State.TO_POST, State.TO_UPDATE) - .blockingGet() - .isNotEmpty() - val anyTeiToPostOrToUpdate = - d2 - .trackedEntityModule() - .trackedEntityInstances() - .byAggregatedSyncState() - .`in`(State.TO_POST, State.TO_UPDATE) - .blockingGet() - .isNotEmpty() - - if (anyEventsToPostOrToUpdate || anyTeiToPostOrToUpdate) { - return SyncResult.INCOMPLETE - } - - return SyncResult.ERROR - } - override fun syncGranularEvent(eventUid: String): Observable { Completable.fromObservable(syncRepository.uploadEvent(eventUid)).blockingAwait() return syncRepository @@ -327,7 +70,9 @@ class SyncPresenterImpl( return if (!checkSyncProgramStatus(programUid)) { ListenableWorker.Result.failure() } else { - syncStatusController.updateSingleProgramToSuccess(programUid) + runBlocking { + syncStatusController.updateSingleProgramToSuccess(programUid) + } ListenableWorker.Result.success() } } @@ -658,7 +403,7 @@ class SyncPresenterImpl( .byTrackedEntityInstanceUid() .eq(uid) .blockingGet() - if (trackerImportConflicts != null && trackerImportConflicts.isNotEmpty()) { + if (!trackerImportConflicts.isNullOrEmpty()) { return trackerImportConflicts } @@ -669,7 +414,7 @@ class SyncPresenterImpl( .byEventUid() .eq(uid) .blockingGet() - if (trackerImportConflicts != null && trackerImportConflicts.isNotEmpty()) { + if (trackerImportConflicts.isNotEmpty()) { return trackerImportConflicts } @@ -680,54 +425,15 @@ class SyncPresenterImpl( .byEnrollmentUid() .eq(uid) .blockingGet() - return if (trackerImportConflicts != null && trackerImportConflicts.isNotEmpty()) { - trackerImportConflicts - } else { + return trackerImportConflicts.ifEmpty { null } } - override fun startPeriodicDataWork() { - val seconds = - getSettings()?.dataSync()?.toSeconds() ?: preferences.getInt(TIME_DATA, TIME_DAILY) - workManagerController.cancelUniqueWork(DATA) - - if (seconds != 0) { - val workerItem = - WorkerItem( - DATA, - WorkerType.DATA, - seconds.toLong(), - policy = ExistingWorkPolicy.REPLACE, - ) - - workManagerController.syncDataForWorker(workerItem) - } - } - - private fun getSettings(): GeneralSettings? = d2.settingModule().generalSetting().blockingGet() - - private fun getProgramSetting(): ProgramSettings? = d2.settingModule().programSetting().blockingGet() - - override fun logTimeToFinish( - millisToFinish: Long, - eventName: String, - ) { - analyticsHelper.setEvent( - eventName, - (millisToFinish / 60000.0).toString(), - eventName, - ) - } - - override fun updateProyectAnalytics() { - getSettings()?.let { - if (it.matomoID() != null && it.matomoURL() != null) { - analyticsHelper.updateMatomoSecondaryTracker( - it.matomoURL()!!, - it.matomoID()!!, - ) - } - } ?: analyticsHelper.clearMatomoSecondaryTracker() - } + private fun getProgramSetting(): ProgramSettings? = + d2 + .settingModule() + .synchronizationSettings() + .blockingGet() + ?.programSettings() } diff --git a/app/src/main/java/org/dhis2/data/service/SyncStatusController.kt b/app/src/main/java/org/dhis2/data/service/SyncStatusController.kt deleted file mode 100644 index 19373e1a7b9..00000000000 --- a/app/src/main/java/org/dhis2/data/service/SyncStatusController.kt +++ /dev/null @@ -1,190 +0,0 @@ -package org.dhis2.data.service - -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.StateFlow -import kotlinx.coroutines.launch -import org.dhis2.commons.viewmodel.DispatcherProvider -import org.hisp.dhis.android.core.arch.call.D2ProgressStatus -import org.hisp.dhis.android.core.arch.call.D2ProgressSyncStatus -import timber.log.Timber - -class SyncStatusController( - private val dispatcher: DispatcherProvider, -) { - private var progressStatusMap: Map = emptyMap() - private val downloadStatus = MutableStateFlow(SyncStatusData(isInitialSync = true)) - - fun observeDownloadProcess(): StateFlow = downloadStatus - - fun initDownloadProcess(programDownload: Map) { - Timber.tag("SYNC").d("INIT DATA SYNC") - progressStatusMap = programDownload - CoroutineScope(dispatcher.io()).launch { - downloadStatus.emit( - SyncStatusData( - running = true, - downloadingEvents = false, - downloadingTracker = false, - downloadingDataSetValues = false, - false, - progressStatusMap, - ), - ) - } - } - - fun updateDownloadProcess(programDownload: Map) { - Timber.tag("SYNC").d("Updating PROGRAM") - progressStatusMap = - progressStatusMap.toMutableMap().also { - it.putAll(programDownload) - } - CoroutineScope(dispatcher.io()).launch { - downloadStatus.emit( - downloadStatus.value.copy(programSyncStatusMap = progressStatusMap), - ) - } - } - - fun finishSync() { - Timber.tag("SYNC").d("FINISH DATA SYNC") - progressStatusMap = progressStatusMap.toMutableMap() - CoroutineScope(dispatcher.io()).launch { - downloadStatus.emit( - downloadStatus.value.copy( - running = false, - programSyncStatusMap = progressStatusMap, - ), - ) - } - } - - fun onNetworkUnavailable() { - progressStatusMap = - progressStatusMap.toMutableMap().mapValues { entry -> - if (entry.value.isComplete) { - entry.value - } else { - entry.value.copy(isComplete = true, D2ProgressSyncStatus.ERROR) - } - } - CoroutineScope(dispatcher.io()).launch { - downloadStatus.emit( - SyncStatusData(true, programSyncStatusMap = progressStatusMap), - ) - } - } - - fun startDownloadingEvents() { - CoroutineScope(dispatcher.io()).launch { - downloadStatus.emit( - downloadStatus.value.copy(running = true, downloadingEvents = true), - ) - } - } - - fun finishDownloadingEvents(eventProgramUids: List) { - Timber.tag("SYNC").d("FINISHED EVENTS") - progressStatusMap = - progressStatusMap.toMutableMap().mapValues { entry -> - if (!eventProgramUids.contains(entry.key) || entry.value.isComplete) { - entry.value - } else { - entry.value.copy(isComplete = true, D2ProgressSyncStatus.ERROR) - } - } - CoroutineScope(dispatcher.io()).launch { - downloadStatus.emit( - downloadStatus.value.copy( - downloadingEvents = false, - programSyncStatusMap = progressStatusMap, - ), - ) - } - } - - fun startDownloadingTracker() { - CoroutineScope(dispatcher.io()).launch { - downloadStatus.emit( - downloadStatus.value.copy(downloadingTracker = true), - ) - } - } - - fun finishDownloadingTracker(trackerProgramUids: List) { - Timber.tag("SYNC").d("FINISHED TRACKER") - - progressStatusMap = - progressStatusMap.toMutableMap().mapValues { entry -> - if (!trackerProgramUids.contains(entry.key) || entry.value.isComplete) { - entry.value - } else { - entry.value.copy(isComplete = true, D2ProgressSyncStatus.ERROR) - } - } - CoroutineScope(dispatcher.io()).launch { - downloadStatus.emit( - downloadStatus.value.copy( - downloadingTracker = false, - programSyncStatusMap = progressStatusMap, - ), - ) - } - } - - fun updateSingleProgramToSuccess(programUid: String) { - progressStatusMap = - progressStatusMap.toMutableMap().mapValues { entry -> - if (programUid != entry.key) { - entry.value - } else { - entry.value.copy(isComplete = true, D2ProgressSyncStatus.SUCCESS) - } - } - CoroutineScope(dispatcher.io()).launch { - downloadStatus.emit( - SyncStatusData(false, programSyncStatusMap = progressStatusMap), - ) - } - } - - fun initDownloadMedia() { - Timber.tag("SYNC").d("INIT FILES") - CoroutineScope(dispatcher.io()).launch { - downloadStatus.emit( - downloadStatus.value.copy(downloadingMedia = true), - ) - } - } - - fun restore() { - CoroutineScope(dispatcher.io()).launch { - downloadStatus.emit(SyncStatusData()) - } - } - - fun startDownloadingDataSets() { - CoroutineScope(dispatcher.io()).launch { - downloadStatus.emit( - downloadStatus.value.copy(downloadingDataSetValues = true), - ) - } - } - - fun finishDownloadingDataSets(dataSetUids: List) { - progressStatusMap = - progressStatusMap.toMutableMap().mapValues { entry -> - if (!dataSetUids.contains(entry.key) || entry.value.isComplete) { - entry.value - } else { - entry.value.copy(isComplete = true, D2ProgressSyncStatus.ERROR) - } - } - CoroutineScope(dispatcher.io()).launch { - downloadStatus.emit( - downloadStatus.value.copy(downloadingDataSetValues = false, programSyncStatusMap = progressStatusMap), - ) - } - } -} diff --git a/app/src/main/java/org/dhis2/data/service/workManager/WorkManagerController.kt b/app/src/main/java/org/dhis2/data/service/workManager/WorkManagerController.kt index 6ef8ddc5a98..f583c04b714 100644 --- a/app/src/main/java/org/dhis2/data/service/workManager/WorkManagerController.kt +++ b/app/src/main/java/org/dhis2/data/service/workManager/WorkManagerController.kt @@ -34,11 +34,6 @@ import androidx.work.WorkInfo interface WorkManagerController { fun syncDataForWorker(workerItem: WorkerItem) - fun syncDataForWorker( - dataWorkerTag: String, - workName: String, - ) - fun beginUniqueWork(workerItem: WorkerItem) fun enqueuePeriodicWork(workerItem: WorkerItem) diff --git a/app/src/main/java/org/dhis2/data/service/workManager/WorkManagerControllerImpl.kt b/app/src/main/java/org/dhis2/data/service/workManager/WorkManagerControllerImpl.kt index 029f9b27af2..ceef5322de2 100644 --- a/app/src/main/java/org/dhis2/data/service/workManager/WorkManagerControllerImpl.kt +++ b/app/src/main/java/org/dhis2/data/service/workManager/WorkManagerControllerImpl.kt @@ -30,14 +30,12 @@ package org.dhis2.data.service.workManager import androidx.lifecycle.LiveData import androidx.lifecycle.MediatorLiveData -import androidx.work.ExistingWorkPolicy import androidx.work.OneTimeWorkRequest import androidx.work.PeriodicWorkRequest import androidx.work.WorkInfo import androidx.work.WorkManager import androidx.work.await import org.dhis2.data.service.CheckVersionWorker -import org.dhis2.data.service.SyncDataWorker import org.dhis2.data.service.SyncGranularWorker import java.util.concurrent.TimeUnit @@ -54,19 +52,6 @@ class WorkManagerControllerImpl( } } - override fun syncDataForWorker( - dataWorkerTag: String, - workName: String, - ) { - val workerTwoBuilder = OneTimeWorkRequest.Builder(SyncDataWorker::class.java) - workerTwoBuilder - .addTag(dataWorkerTag) - - workManager - .beginUniqueWork(workName, ExistingWorkPolicy.KEEP, workerTwoBuilder.build()) - .enqueue() - } - override fun beginUniqueWork(workerItem: WorkerItem) { val request = createOneTimeBuilder(workerItem).build() workerItem.policy?.let { @@ -118,7 +103,6 @@ class WorkManagerControllerImpl( private fun createOneTimeBuilder(workerItem: WorkerItem): OneTimeWorkRequest.Builder { val syncBuilder = when (workerItem.workerType) { - WorkerType.DATA -> OneTimeWorkRequest.Builder(SyncDataWorker::class.java) WorkerType.GRANULAR -> OneTimeWorkRequest.Builder(SyncGranularWorker::class.java) WorkerType.NEW_VERSION -> OneTimeWorkRequest.Builder(CheckVersionWorker::class.java) } @@ -140,13 +124,6 @@ class WorkManagerControllerImpl( val syncBuilder = when (workerItem.workerType) { - WorkerType.DATA -> { - PeriodicWorkRequest.Builder( - SyncDataWorker::class.java, - seconds, - TimeUnit.SECONDS, - ) - } WorkerType.GRANULAR -> { PeriodicWorkRequest.Builder( SyncGranularWorker::class.java, @@ -154,6 +131,7 @@ class WorkManagerControllerImpl( TimeUnit.SECONDS, ) } + WorkerType.NEW_VERSION -> PeriodicWorkRequest.Builder( CheckVersionWorker::class.java, diff --git a/app/src/main/java/org/dhis2/data/service/workManager/WorkerType.kt b/app/src/main/java/org/dhis2/data/service/workManager/WorkerType.kt index 067b2a45e11..050519a6e2c 100644 --- a/app/src/main/java/org/dhis2/data/service/workManager/WorkerType.kt +++ b/app/src/main/java/org/dhis2/data/service/workManager/WorkerType.kt @@ -29,7 +29,6 @@ package org.dhis2.data.service.workManager enum class WorkerType { - DATA, GRANULAR, NEW_VERSION, } diff --git a/app/src/main/java/org/dhis2/data/user/UserComponent.java b/app/src/main/java/org/dhis2/data/user/UserComponent.java index 283f3d9d1e4..945eda6e50d 100644 --- a/app/src/main/java/org/dhis2/data/user/UserComponent.java +++ b/app/src/main/java/org/dhis2/data/user/UserComponent.java @@ -8,8 +8,6 @@ import org.dhis2.commons.featureconfig.di.FeatureConfigActivityComponent; import org.dhis2.commons.featureconfig.di.FeatureConfigActivityModule; import org.dhis2.commons.filters.data.FilterPresenter; -import org.dhis2.data.service.SyncDataWorkerComponent; -import org.dhis2.data.service.SyncDataWorkerModule; import org.dhis2.data.service.SyncGranularRxComponent; import org.dhis2.data.service.SyncGranularRxModule; import org.dhis2.usescases.about.AboutComponent; @@ -129,9 +127,6 @@ public interface UserComponent { @NonNull ReservedValueComponent plus(ReservedValueModule reservedValueModule); - @NonNull - SyncDataWorkerComponent plus(SyncDataWorkerModule syncDataWorkerModule); - @NonNull EventCaptureComponent plus(EventCaptureModule eventCaptureModule); diff --git a/app/src/main/java/org/dhis2/di/KoinInitialization.kt b/app/src/main/java/org/dhis2/di/KoinInitialization.kt index 3eec9f862f9..be3b7cb076c 100644 --- a/app/src/main/java/org/dhis2/di/KoinInitialization.kt +++ b/app/src/main/java/org/dhis2/di/KoinInitialization.kt @@ -3,6 +3,7 @@ package org.dhis2.di import android.app.Application import org.dhis2.BuildConfig import org.dhis2.android.rtsm.di.stockModule +import org.dhis2.appModule import org.dhis2.commons.di.filterModule import org.dhis2.commons.di.resourceManagerModule import org.dhis2.commons.filters.periods.di.filterPeriodsModule @@ -19,6 +20,7 @@ import org.dhis2.utils.analytics.matomo.matomoModule import org.hisp.dhis.android.core.D2Configuration import org.koin.android.ext.koin.androidContext import org.koin.android.ext.koin.androidLogger +import org.koin.androidx.workmanager.koin.workManagerFactory import org.koin.core.context.startKoin object KoinInitialization { @@ -32,7 +34,9 @@ object KoinInitialization { "isTrainingFlavor" to (BuildConfig.FLAVOR == "dhis2Training"), ), ) + workManagerFactory() modules( + appModule, serverModule(d2Configuration), commonsModule, aggregatesModule, diff --git a/app/src/main/java/org/dhis2/usescases/general/SessionManagerActivity.kt b/app/src/main/java/org/dhis2/usescases/general/SessionManagerActivity.kt index 9ccd6cd9450..6e4af775015 100644 --- a/app/src/main/java/org/dhis2/usescases/general/SessionManagerActivity.kt +++ b/app/src/main/java/org/dhis2/usescases/general/SessionManagerActivity.kt @@ -7,9 +7,8 @@ import android.view.WindowManager import androidx.appcompat.app.AppCompatActivity import androidx.core.app.ActivityOptionsCompat import androidx.lifecycle.lifecycleScope -import io.reactivex.Observable import io.reactivex.subjects.BehaviorSubject -import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch import org.dhis2.App import org.dhis2.R import org.dhis2.bindings.app @@ -18,10 +17,9 @@ import org.dhis2.commons.ActivityResultObserver import org.dhis2.commons.locationprovider.LocationProvider import org.dhis2.commons.service.SessionManagerServiceImpl import org.dhis2.commons.ui.extensions.handleInsets -import org.dhis2.commons.viewmodel.DispatcherProvider import org.dhis2.data.server.OpenIdSession.LogOutReason -import org.dhis2.data.service.SyncStatusController import org.dhis2.data.service.workManager.WorkManagerController +import org.dhis2.mobile.sync.domain.SyncStatusController import org.dhis2.usescases.login.LoginActivity import org.dhis2.usescases.login.LoginActivity.Companion.bundle import org.dhis2.usescases.main.MainActivity @@ -32,6 +30,7 @@ import org.dhis2.utils.analytics.CLICK import org.dhis2.utils.analytics.FORGOT_CODE import org.dhis2.utils.session.PIN_DIALOG_TAG import org.dhis2.utils.session.PinDialog +import org.koin.android.ext.android.inject import javax.inject.Inject abstract class SessionManagerActivity : @@ -46,8 +45,6 @@ abstract class SessionManagerActivity : @Inject lateinit var locationProvider: LocationProvider - fun observableLifeCycle(): Observable = lifeCycleObservable - open var handleEdgeToEdge = true @Inject @@ -58,16 +55,7 @@ abstract class SessionManagerActivity : private var lifeCycleObservable: BehaviorSubject = BehaviorSubject.create() - var syncStatusController: SyncStatusController = - SyncStatusController( - object : DispatcherProvider { - override fun io() = Dispatchers.IO - - override fun computation() = Dispatchers.Default - - override fun ui() = Dispatchers.Main - }, - ) + val syncStatusController: SyncStatusController by inject() override fun onCreate(savedInstanceState: Bundle?) { val serverComponent = (applicationContext as App).serverComponent @@ -223,7 +211,9 @@ abstract class SessionManagerActivity : this !is LoginActivity ) { workManagerController.cancelAllWork() - syncStatusController.restore() + lifecycleScope.launch { + syncStatusController.restore() + } } } diff --git a/app/src/main/java/org/dhis2/usescases/main/MainActivity.kt b/app/src/main/java/org/dhis2/usescases/main/MainActivity.kt index 9526973f96b..69801d886e7 100644 --- a/app/src/main/java/org/dhis2/usescases/main/MainActivity.kt +++ b/app/src/main/java/org/dhis2/usescases/main/MainActivity.kt @@ -47,6 +47,7 @@ import org.dhis2.commons.orgunitselector.OUTreeFragment import org.dhis2.commons.sync.OnDismissListener import org.dhis2.commons.sync.SyncContext import org.dhis2.databinding.ActivityMainBinding +import org.dhis2.mobile.sync.data.SyncBackgroundJobAction import org.dhis2.usescases.development.DevelopmentActivity import org.dhis2.usescases.general.ActivityGlobalAbstract import org.dhis2.usescases.login.LoginActivity @@ -60,6 +61,7 @@ import org.dhis2.utils.granularsync.SyncStatusDialog import org.dhis2.utils.session.PIN_DIALOG_TAG import org.dhis2.utils.session.PinDialog import org.hisp.dhis.mobile.ui.designsystem.component.navigationBar.NavigationBar +import org.koin.android.ext.android.inject import java.io.File import javax.inject.Inject @@ -87,6 +89,8 @@ class MainActivity : @Inject lateinit var pageConfigurator: NavigationPageConfigurator + private val syncBackgroundJobAction: SyncBackgroundJobAction by inject() + private val getDevActivityContent = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { // no-op @@ -148,6 +152,8 @@ class MainActivity : it.plus( MainModule( view = this, + syncStatusController = syncStatusController, + syncBackgroundJobAction = syncBackgroundJobAction, forceToNotSynced = intent.getBooleanExtra(AVOID_SYNC, false), ), ) diff --git a/app/src/main/java/org/dhis2/usescases/main/MainModule.kt b/app/src/main/java/org/dhis2/usescases/main/MainModule.kt index 04ce3cab5f2..323fe43e729 100644 --- a/app/src/main/java/org/dhis2/usescases/main/MainModule.kt +++ b/app/src/main/java/org/dhis2/usescases/main/MainModule.kt @@ -15,7 +15,6 @@ import org.dhis2.commons.schedulers.SchedulerProvider import org.dhis2.commons.viewmodel.DispatcherProvider import org.dhis2.data.biometric.CryptographyManager import org.dhis2.data.server.UserManager -import org.dhis2.data.service.SyncStatusController import org.dhis2.data.service.VersionRepository import org.dhis2.data.service.workManager.WorkManagerController import org.dhis2.mobile.commons.biometrics.CryptographicActions @@ -25,6 +24,8 @@ import org.dhis2.mobile.commons.network.NetworkStatusProvider import org.dhis2.mobile.commons.network.NetworkStatusProviderImpl import org.dhis2.mobile.commons.resources.D2ErrorMessageProvider import org.dhis2.mobile.commons.resources.D2ErrorMessageProviderImpl +import org.dhis2.mobile.sync.data.SyncBackgroundJobAction +import org.dhis2.mobile.sync.domain.SyncStatusController import org.dhis2.usescases.login.SyncIsPerformedInteractor import org.dhis2.usescases.main.domain.LogoutUser import org.dhis2.usescases.settings.DeleteUserData @@ -35,6 +36,8 @@ import org.hisp.dhis.android.core.D2 class MainModule( val view: MainView, private val forceToNotSynced: Boolean, + private val syncStatusController: SyncStatusController, + private val syncBackgroundJobAction: SyncBackgroundJobAction, ) { @Provides @PerActivity @@ -49,7 +52,6 @@ class MainModule( userManager: UserManager, deleteUserData: DeleteUserData, syncIsPerformedInteractor: SyncIsPerformedInteractor, - syncStatusController: SyncStatusController, versionRepository: VersionRepository, dispatcherProvider: DispatcherProvider, logoutUser: LogoutUser, @@ -67,6 +69,7 @@ class MainModule( deleteUserData, syncIsPerformedInteractor, syncStatusController, + syncBackgroundJobAction, versionRepository, dispatcherProvider, forceToNotSynced, @@ -77,13 +80,11 @@ class MainModule( @PerActivity fun provideLogoutUser( homeRepository: HomeRepository, - workManagerController: WorkManagerController, - syncStatusController: SyncStatusController, filterManager: FilterManager, ): LogoutUser = LogoutUser( homeRepository, - workManagerController, + syncBackgroundJobAction, syncStatusController, filterManager, ) diff --git a/app/src/main/java/org/dhis2/usescases/main/MainPresenter.kt b/app/src/main/java/org/dhis2/usescases/main/MainPresenter.kt index 4f8396c2463..00b7764dd44 100644 --- a/app/src/main/java/org/dhis2/usescases/main/MainPresenter.kt +++ b/app/src/main/java/org/dhis2/usescases/main/MainPresenter.kt @@ -16,6 +16,7 @@ import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.receiveAsFlow import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext import org.dhis2.BuildConfig import org.dhis2.commons.Constants import org.dhis2.commons.filters.FilterManager @@ -34,13 +35,14 @@ import org.dhis2.commons.prefs.PreferenceProvider import org.dhis2.commons.schedulers.SchedulerProvider import org.dhis2.commons.viewmodel.DispatcherProvider import org.dhis2.data.server.UserManager -import org.dhis2.data.service.SyncStatusController -import org.dhis2.data.service.SyncStatusData import org.dhis2.data.service.VersionRepository import org.dhis2.data.service.workManager.WorkManagerController import org.dhis2.data.service.workManager.WorkerItem import org.dhis2.data.service.workManager.WorkerType import org.dhis2.mobile.commons.domain.invoke +import org.dhis2.mobile.sync.data.SyncBackgroundJobAction +import org.dhis2.mobile.sync.domain.SyncStatusController +import org.dhis2.mobile.sync.model.SyncStatusData import org.dhis2.usescases.login.SyncIsPerformedInteractor import org.dhis2.usescases.main.domain.LogoutUser import org.dhis2.usescases.settings.DeleteUserData @@ -73,6 +75,7 @@ class MainPresenter( private val deleteUserData: DeleteUserData, private val syncIsPerformedInteractor: SyncIsPerformedInteractor, private val syncStatusController: SyncStatusController, + private val syncBackgroundJobAction: SyncBackgroundJobAction, private val versionRepository: VersionRepository, val dispatcherProvider: DispatcherProvider, private val forceToNotSynced: Boolean, @@ -250,21 +253,26 @@ class MainPresenter( fun onDeleteAccount() { view.showProgressDeleteNotification() - try { - repository.checkDeleteBiometricsPermission() - workManagerController.cancelAllWork() - syncStatusController.restore() - deleteUserData.wipeCacheAndPreferences(view.obtainFileView()) - userManager.d2?.wipeModule()?.wipeEverything() - userManager.d2 - ?.userModule() - ?.accountManager() - ?.deleteCurrentAccount() - view.cancelNotifications() - - view.goToLogin(repository.accountsCount(), isDeletion = true) - } catch (exception: Exception) { - Timber.e(exception) + launch(dispatcherProvider.io()) { + try { + repository.checkDeleteBiometricsPermission() + syncBackgroundJobAction.cancelAll() + syncStatusController.restore() + deleteUserData.wipeCacheAndPreferences(view.obtainFileView()) + userManager.d2?.wipeModule()?.wipeEverything() + userManager.d2 + ?.userModule() + ?.accountManager() + ?.deleteCurrentAccount() + + view.cancelNotifications() + + withContext(dispatcherProvider.ui()) { + view.goToLogin(repository.accountsCount(), isDeletion = true) + } + } catch (exception: Exception) { + Timber.e(exception) + } } } @@ -309,8 +317,7 @@ class MainPresenter( fun launchInitialDataSync() { checkVersionUpdate() - workManagerController - .syncDataForWorker(Constants.DATA_NOW, Constants.INITIAL_SYNC) + syncBackgroundJobAction.launchDataSync(0) } fun observeDataSync(): StateFlow = syncStatusController.observeDownloadProcess() diff --git a/app/src/main/java/org/dhis2/usescases/main/data/HomeRepository.kt b/app/src/main/java/org/dhis2/usescases/main/data/HomeRepository.kt index 86b2849f635..5b3f7ec6aa3 100644 --- a/app/src/main/java/org/dhis2/usescases/main/data/HomeRepository.kt +++ b/app/src/main/java/org/dhis2/usescases/main/data/HomeRepository.kt @@ -38,6 +38,4 @@ interface HomeRepository { suspend fun stopBackgroundSync() suspend fun restoreSyncStatus() - - suspend fun syncData() } diff --git a/app/src/main/java/org/dhis2/usescases/main/data/HomeRepositoryImpl.kt b/app/src/main/java/org/dhis2/usescases/main/data/HomeRepositoryImpl.kt index 7408dccbe0f..64ea8dc8aa4 100644 --- a/app/src/main/java/org/dhis2/usescases/main/data/HomeRepositoryImpl.kt +++ b/app/src/main/java/org/dhis2/usescases/main/data/HomeRepositoryImpl.kt @@ -2,18 +2,17 @@ package org.dhis2.usescases.main.data import dhis2.org.analytics.charts.Charts import kotlinx.coroutines.withContext -import org.dhis2.commons.Constants import org.dhis2.commons.bindings.dataSet import org.dhis2.commons.bindings.dataSetInstanceSummaries import org.dhis2.commons.bindings.isStockProgram import org.dhis2.commons.bindings.programs import org.dhis2.commons.prefs.Preference import org.dhis2.commons.prefs.Preference.Companion.PIN -import org.dhis2.data.service.SyncStatusController import org.dhis2.data.service.workManager.WorkManagerController import org.dhis2.mobile.commons.coroutine.Dispatcher import org.dhis2.mobile.commons.error.DomainErrorMapper import org.dhis2.mobile.commons.providers.PreferenceProvider +import org.dhis2.mobile.sync.domain.SyncStatusController import org.dhis2.usescases.main.HomeItemData import org.dhis2.usescases.settings.deleteCache import org.dhis2.usescases.sync.WAS_INITIAL_SYNC_DONE @@ -201,9 +200,4 @@ class HomeRepositoryImpl( override suspend fun restoreSyncStatus() { syncStatusController.restore() } - - override suspend fun syncData() { - workManagerController - .syncDataForWorker(Constants.DATA_NOW, Constants.INITIAL_SYNC) - } } diff --git a/app/src/main/java/org/dhis2/usescases/main/domain/LaunchInitialSync.kt b/app/src/main/java/org/dhis2/usescases/main/domain/LaunchInitialSync.kt index 72db6f550c7..886d645c9ff 100644 --- a/app/src/main/java/org/dhis2/usescases/main/domain/LaunchInitialSync.kt +++ b/app/src/main/java/org/dhis2/usescases/main/domain/LaunchInitialSync.kt @@ -3,12 +3,14 @@ package org.dhis2.usescases.main.domain import org.dhis2.data.service.VersionRepository import org.dhis2.mobile.commons.domain.UseCase import org.dhis2.mobile.commons.error.DomainError +import org.dhis2.mobile.sync.data.SyncBackgroundJobAction import org.dhis2.usescases.main.data.HomeRepository class LaunchInitialSync( private val skipSync: Boolean, private val homeRepository: HomeRepository, private val versionRepository: VersionRepository, + private val syncBackgroundJobAction: SyncBackgroundJobAction, ) : UseCase { override suspend fun invoke(input: Unit): Result = try { @@ -16,8 +18,7 @@ class LaunchInitialSync( Result.success(InitialSyncAction.Skip) } else { versionRepository.checkVersionUpdates() - homeRepository.syncData() - + syncBackgroundJobAction.launchDataSync(0) Result.success(InitialSyncAction.Syncing) } } catch (domainError: DomainError) { diff --git a/app/src/main/java/org/dhis2/usescases/main/domain/LogoutUser.kt b/app/src/main/java/org/dhis2/usescases/main/domain/LogoutUser.kt index 4961f4589d9..7ce9f53b918 100644 --- a/app/src/main/java/org/dhis2/usescases/main/domain/LogoutUser.kt +++ b/app/src/main/java/org/dhis2/usescases/main/domain/LogoutUser.kt @@ -1,21 +1,21 @@ package org.dhis2.usescases.main.domain import org.dhis2.commons.filters.FilterManager -import org.dhis2.data.service.SyncStatusController -import org.dhis2.data.service.workManager.WorkManagerController import org.dhis2.mobile.commons.domain.UseCase +import org.dhis2.mobile.sync.data.SyncBackgroundJobAction +import org.dhis2.mobile.sync.domain.SyncStatusController import org.dhis2.usescases.main.HomeRepository typealias AccountCount = Int class LogoutUser( private val repository: HomeRepository, - private val workManagerController: WorkManagerController, + private val syncBackgroundJobAction: SyncBackgroundJobAction, private val syncStatusController: SyncStatusController, private val filterManager: FilterManager, ) : UseCase { override suspend operator fun invoke(input: Unit): Result { - workManagerController.cancelAllWorkAndWait() + syncBackgroundJobAction.cancelAll() syncStatusController.restore() filterManager.clearAllFilters() diff --git a/app/src/main/java/org/dhis2/usescases/main/program/ProgramFragment.kt b/app/src/main/java/org/dhis2/usescases/main/program/ProgramFragment.kt index 9b3511c0f0b..6340a06b260 100644 --- a/app/src/main/java/org/dhis2/usescases/main/program/ProgramFragment.kt +++ b/app/src/main/java/org/dhis2/usescases/main/program/ProgramFragment.kt @@ -21,6 +21,7 @@ import org.dhis2.App import org.dhis2.R import org.dhis2.commons.sync.OnDismissListener import org.dhis2.commons.sync.SyncContext +import org.dhis2.mobile.sync.domain.SyncStatusController import org.dhis2.usescases.general.FragmentGlobalAbstract import org.dhis2.usescases.main.navigateTo import org.dhis2.usescases.main.toHomeItemData @@ -28,12 +29,15 @@ import org.dhis2.utils.HelpManager import org.dhis2.utils.analytics.SELECT_PROGRAM import org.dhis2.utils.analytics.TYPE_PROGRAM_SELECTED import org.dhis2.utils.granularsync.SyncStatusDialog +import org.koin.android.ext.android.inject import timber.log.Timber import javax.inject.Inject class ProgramFragment : FragmentGlobalAbstract(), ProgramView { + private val syncStatusController: SyncStatusController by inject() + @Inject lateinit var programViewModelFactory: ProgramViewModelFactory @@ -51,7 +55,10 @@ class ProgramFragment : override fun onAttach(context: Context) { super.onAttach(context) activity?.let { - (it.applicationContext as App).userComponent()?.plus(ProgramModule(this))?.inject(this) + (it.applicationContext as App) + .userComponent() + ?.plus(ProgramModule(this, syncStatusController)) + ?.inject(this) } } diff --git a/app/src/main/java/org/dhis2/usescases/main/program/ProgramModule.kt b/app/src/main/java/org/dhis2/usescases/main/program/ProgramModule.kt index f69e5d56660..72536aa84bd 100644 --- a/app/src/main/java/org/dhis2/usescases/main/program/ProgramModule.kt +++ b/app/src/main/java/org/dhis2/usescases/main/program/ProgramModule.kt @@ -13,12 +13,13 @@ import org.dhis2.commons.resources.ResourceManager import org.dhis2.commons.schedulers.SchedulerProvider import org.dhis2.commons.viewmodel.DispatcherProvider import org.dhis2.data.dhislogic.DhisProgramUtils -import org.dhis2.data.service.SyncStatusController +import org.dhis2.mobile.sync.domain.SyncStatusController import org.hisp.dhis.android.core.D2 @Module class ProgramModule( private val view: ProgramView, + private val syncStatusController: SyncStatusController, ) { @Provides @PerFragment @@ -28,7 +29,6 @@ class ProgramModule( featureConfigRepository: FeatureConfigRepository, matomoAnalyticsController: MatomoAnalyticsController, filterManager: FilterManager, - syncStatusController: SyncStatusController, schedulerProvider: SchedulerProvider, ): ProgramViewModelFactory = ProgramViewModelFactory( diff --git a/app/src/main/java/org/dhis2/usescases/main/program/ProgramRepository.kt b/app/src/main/java/org/dhis2/usescases/main/program/ProgramRepository.kt index 8070022df75..e670e95e689 100644 --- a/app/src/main/java/org/dhis2/usescases/main/program/ProgramRepository.kt +++ b/app/src/main/java/org/dhis2/usescases/main/program/ProgramRepository.kt @@ -1,7 +1,7 @@ package org.dhis2.usescases.main.program import io.reactivex.Flowable -import org.dhis2.data.service.SyncStatusData +import org.dhis2.mobile.sync.model.SyncStatusData interface ProgramRepository { fun homeItems(syncStatusData: SyncStatusData): Flowable> diff --git a/app/src/main/java/org/dhis2/usescases/main/program/ProgramRepositoryImpl.kt b/app/src/main/java/org/dhis2/usescases/main/program/ProgramRepositoryImpl.kt index f6bcd648454..fb87f283a06 100644 --- a/app/src/main/java/org/dhis2/usescases/main/program/ProgramRepositoryImpl.kt +++ b/app/src/main/java/org/dhis2/usescases/main/program/ProgramRepositoryImpl.kt @@ -8,7 +8,7 @@ import org.dhis2.commons.resources.MetadataIconProvider import org.dhis2.commons.resources.ResourceManager import org.dhis2.commons.schedulers.SchedulerProvider import org.dhis2.data.dhislogic.DhisProgramUtils -import org.dhis2.data.service.SyncStatusData +import org.dhis2.mobile.sync.model.SyncStatusData import org.hisp.dhis.android.core.D2 import org.hisp.dhis.android.core.common.State import org.hisp.dhis.android.core.program.Program diff --git a/app/src/main/java/org/dhis2/usescases/main/program/ProgramUi.kt b/app/src/main/java/org/dhis2/usescases/main/program/ProgramUi.kt index 65e761d05d2..bbfcca25910 100644 --- a/app/src/main/java/org/dhis2/usescases/main/program/ProgramUi.kt +++ b/app/src/main/java/org/dhis2/usescases/main/program/ProgramUi.kt @@ -57,9 +57,9 @@ import org.dhis2.R import org.dhis2.commons.bindings.addIf import org.dhis2.commons.date.toDateSpan import org.dhis2.commons.ui.icons.toIconData -import org.dhis2.data.service.SyncStatusData import org.dhis2.mobile.commons.extensions.toColorInt import org.dhis2.mobile.commons.model.MetadataIconData +import org.dhis2.mobile.sync.model.SyncStatusData import org.hisp.dhis.android.core.common.State import org.hisp.dhis.mobile.ui.designsystem.component.AdditionalInfoItem import org.hisp.dhis.mobile.ui.designsystem.component.Avatar diff --git a/app/src/main/java/org/dhis2/usescases/main/program/ProgramViewModel.kt b/app/src/main/java/org/dhis2/usescases/main/program/ProgramViewModel.kt index 007acb62cf5..cc0ccd829d6 100644 --- a/app/src/main/java/org/dhis2/usescases/main/program/ProgramViewModel.kt +++ b/app/src/main/java/org/dhis2/usescases/main/program/ProgramViewModel.kt @@ -18,7 +18,8 @@ import org.dhis2.commons.matomo.Labels.Companion.CLICK_ON import org.dhis2.commons.matomo.MatomoAnalyticsController import org.dhis2.commons.schedulers.SchedulerProvider import org.dhis2.commons.viewmodel.DispatcherProvider -import org.dhis2.data.service.SyncStatusController +import org.dhis2.mobile.sync.domain.SyncStatusController +import org.koin.core.component.KoinComponent import timber.log.Timber import java.util.concurrent.TimeUnit @@ -31,7 +32,8 @@ class ProgramViewModel internal constructor( private val filterManager: FilterManager, private val syncStatusController: SyncStatusController, private val schedulerProvider: SchedulerProvider, -) : ViewModel() { +) : ViewModel(), + KoinComponent { private val _programs = MutableLiveData>() val programs: LiveData> = _programs private val refreshData = PublishProcessor.create() diff --git a/app/src/main/java/org/dhis2/usescases/main/program/ProgramViewModelFactory.kt b/app/src/main/java/org/dhis2/usescases/main/program/ProgramViewModelFactory.kt index 1ac164a3b1c..e3b2f78c0ad 100644 --- a/app/src/main/java/org/dhis2/usescases/main/program/ProgramViewModelFactory.kt +++ b/app/src/main/java/org/dhis2/usescases/main/program/ProgramViewModelFactory.kt @@ -7,7 +7,7 @@ import org.dhis2.commons.filters.FilterManager import org.dhis2.commons.matomo.MatomoAnalyticsController import org.dhis2.commons.schedulers.SchedulerProvider import org.dhis2.commons.viewmodel.DispatcherProvider -import org.dhis2.data.service.SyncStatusController +import org.dhis2.mobile.sync.domain.SyncStatusController class ProgramViewModelFactory( private val view: ProgramView, diff --git a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEActivity.kt b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEActivity.kt index 6aa087ef3fa..e91d4083cb6 100644 --- a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEActivity.kt +++ b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEActivity.kt @@ -230,6 +230,7 @@ class SearchTEActivity : initialProgram, context, initialQuery, + syncStatusController, ), ) searchComponent?.inject(this) diff --git a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEModule.java b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEModule.java index 7f7dc950b7c..7289b6ecca1 100644 --- a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEModule.java +++ b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEModule.java @@ -28,7 +28,6 @@ import org.dhis2.data.enrollment.EnrollmentUiDataHelper; import org.dhis2.data.forms.dataentry.SearchTEIRepository; import org.dhis2.data.forms.dataentry.SearchTEIRepositoryImpl; -import org.dhis2.data.service.SyncStatusController; import org.dhis2.data.sorting.SearchSortingValueSetter; import org.dhis2.form.data.metadata.FileResourceConfiguration; import org.dhis2.form.data.metadata.OptionSetConfiguration; @@ -68,6 +67,7 @@ import org.dhis2.mobile.commons.reporting.CrashReportController; import org.dhis2.mobile.commons.resources.D2ErrorMessageProvider; import org.dhis2.mobile.commons.resources.D2ErrorMessageProviderImpl; +import org.dhis2.mobile.sync.domain.SyncStatusController; import org.dhis2.tracker.data.ProfilePictureProvider; import org.dhis2.tracker.search.data.OptionSetRepository; import org.dhis2.tracker.search.data.OptionSetRepositoryImpl; @@ -100,17 +100,21 @@ public class SearchTEModule { private final String initialProgram; private final Context moduleContext; private final Map> initialQuery; + private final SyncStatusController syncStatusController; public SearchTEModule(SearchTEContractsModule.View view, String tEType, String initialProgram, Context context, - Map> initialQuery) { + Map> initialQuery, + SyncStatusController syncStatusController + ) { this.view = view; this.teiType = tEType; this.initialProgram = initialProgram; this.moduleContext = context; this.initialQuery = initialQuery; + this.syncStatusController = syncStatusController; } @Provides @@ -128,7 +132,6 @@ SearchTEContractsModule.Presenter providePresenter(D2 d2, PreferenceProvider preferenceProvider, FilterRepository filterRepository, MatomoAnalyticsController matomoAnalyticsController, - SyncStatusController syncStatusController, ResourceManager resourceManager, ColorUtils colorUtils) { return new SearchTEPresenter(view, d2, searchRepository, schedulerProvider, diff --git a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEPresenter.java b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEPresenter.java index ac7cef1d4e2..f1fc82c79a4 100644 --- a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEPresenter.java +++ b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEPresenter.java @@ -27,7 +27,6 @@ import org.dhis2.commons.filters.data.FilterRepository; import org.dhis2.commons.matomo.MatomoAnalyticsController; import org.dhis2.commons.orgunitselector.OUTreeFragment; -import org.dhis2.mobile.commons.orgunit.OrgUnitSelectorScope; import org.dhis2.commons.prefs.Preference; import org.dhis2.commons.prefs.PreferenceProvider; import org.dhis2.commons.resources.ColorUtils; @@ -36,8 +35,9 @@ import org.dhis2.commons.schedulers.SchedulerProvider; import org.dhis2.commons.schedulers.SingleEventEnforcer; import org.dhis2.commons.schedulers.SingleEventEnforcerImpl; -import org.dhis2.data.service.SyncStatusController; import org.dhis2.maps.model.StageStyle; +import org.dhis2.mobile.commons.orgunit.OrgUnitSelectorScope; +import org.dhis2.mobile.sync.domain.SyncStatusController; import org.dhis2.utils.analytics.AnalyticsHelper; import org.hisp.dhis.android.core.D2; import org.hisp.dhis.android.core.common.FeatureType; @@ -84,7 +84,6 @@ public class SearchTEPresenter implements SearchTEContractsModule.Presenter { private final DisableHomeFiltersFromSettingsApp disableHomeFilters; private final MatomoAnalyticsController matomoAnalyticsController; private final SyncStatusController syncStatusController; - private final ColorUtils colorUtils; public SearchTEPresenter(SearchTEContractsModule.View view, @@ -320,7 +319,7 @@ public void enroll(String programUid, String uid, HashMap> ); } - private void enrollInOrgUnit(String orgUnitUid, String programUid, String uid, HashMap> queryData) { + private void enrollInOrgUnit(String orgUnitUid, String programUid, String uid, HashMap> queryData) { compositeDisposable.add( searchRepository.saveToEnroll(trackedEntity.uid(), orgUnitUid, programUid, uid, queryData, view.fromRelationshipTEI()) .subscribeOn(schedulerProvider.computation()) diff --git a/app/src/main/java/org/dhis2/usescases/settings/SyncManagerModule.kt b/app/src/main/java/org/dhis2/usescases/settings/SyncManagerModule.kt index c690c727e2f..61678bfba2c 100644 --- a/app/src/main/java/org/dhis2/usescases/settings/SyncManagerModule.kt +++ b/app/src/main/java/org/dhis2/usescases/settings/SyncManagerModule.kt @@ -10,7 +10,6 @@ import org.dhis2.commons.prefs.PreferenceProvider import org.dhis2.commons.resources.ResourceManager import org.dhis2.commons.viewmodel.DispatcherProvider import org.dhis2.data.service.VersionRepository -import org.dhis2.data.service.workManager.WorkManagerController import org.dhis2.mobile.commons.files.FileHandlerImpl import org.dhis2.mobile.sync.data.SyncBackgroundJobAction import org.dhis2.usescases.settings.domain.CheckVersionUpdate @@ -153,12 +152,10 @@ class SyncManagerModule( @Provides @PerFragment fun provideLaunchSync( - workManagerController: WorkManagerController, preferenceProvider: PreferenceProvider, analyticsHelper: AnalyticsHelper, ) = LaunchSync( syncBackgroundJobAction, - workManagerController, preferenceProvider, analyticsHelper, ) diff --git a/app/src/main/java/org/dhis2/usescases/settings/domain/LaunchSync.kt b/app/src/main/java/org/dhis2/usescases/settings/domain/LaunchSync.kt index d08e2991053..cf92469b58e 100644 --- a/app/src/main/java/org/dhis2/usescases/settings/domain/LaunchSync.kt +++ b/app/src/main/java/org/dhis2/usescases/settings/domain/LaunchSync.kt @@ -1,9 +1,5 @@ package org.dhis2.usescases.settings.domain -import androidx.lifecycle.asFlow -import androidx.work.ExistingPeriodicWorkPolicy -import androidx.work.ExistingWorkPolicy -import androidx.work.WorkInfo import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.merge @@ -12,9 +8,6 @@ import org.dhis2.commons.Constants import org.dhis2.commons.matomo.Actions import org.dhis2.commons.matomo.Categories import org.dhis2.commons.prefs.PreferenceProvider -import org.dhis2.data.service.workManager.WorkManagerController -import org.dhis2.data.service.workManager.WorkerItem -import org.dhis2.data.service.workManager.WorkerType import org.dhis2.mobile.commons.providers.TIME_DATA import org.dhis2.mobile.commons.providers.TIME_META import org.dhis2.mobile.sync.data.SyncBackgroundJobAction @@ -26,7 +19,6 @@ import org.dhis2.mobile.sync.model.SyncStatus as Status class LaunchSync( private val syncBackgroundJobAction: SyncBackgroundJobAction, - private val workManagerController: WorkManagerController, private val preferenceProvider: PreferenceProvider, private val analyticsHelper: AnalyticsHelper, ) { @@ -48,19 +40,30 @@ class LaunchSync( Status.Running, Status.Blocked, -> syncStatus.update { it.copy(metadataSyncProgress = SyncStatus.InProgress) } + Status.Cancelled -> syncStatus.update { it.copy(metadataSyncProgress = SyncStatus.Cancelled) } + null -> syncStatus.update { it.copy(dataSyncProgress = SyncStatus.None) } else -> syncStatus.update { it.copy(metadataSyncProgress = SyncStatus.Finished) } } syncStatus.value } private val dataWorkInfo = - workManagerController - .getWorkInfosByTagLiveData(Constants.DATA_NOW) - .asFlow() + syncBackgroundJobAction + .observeDataJob() .map { workStatuses -> - var workState: WorkInfo.State? = workStatuses.getOrNull(0)?.state - onWorkStatusesUpdate(workState, Constants.DATA_NOW) + var workState = workStatuses.firstOrNull()?.status + when (workState) { + Status.Enqueue, + Status.Running, + Status.Blocked, + -> syncStatus.update { it.copy(dataSyncProgress = SyncStatus.InProgress) } + + Status.Cancelled -> syncStatus.update { it.copy(dataSyncProgress = SyncStatus.Cancelled) } + null -> syncStatus.update { it.copy(dataSyncProgress = SyncStatus.None) } + else -> syncStatus.update { it.copy(dataSyncProgress = SyncStatus.Finished) } + } + syncStatus.value } val syncWorkInfo = merge(metadataWorkInfo, dataWorkInfo) @@ -111,57 +114,10 @@ class LaunchSync( } } - private fun onWorkStatusesUpdate( - workState: WorkInfo.State?, - workerTag: String, - ): SyncStatusProgress { - if (workState != null) { - when (workState) { - WorkInfo.State.CANCELLED -> - when (workerTag) { - Constants.DATA_NOW -> syncStatus.update { it.copy(dataSyncProgress = SyncStatus.Cancelled) } - else -> syncStatus - } - - WorkInfo.State.ENQUEUED, - WorkInfo.State.RUNNING, - WorkInfo.State.BLOCKED, - -> - when (workerTag) { - Constants.DATA_NOW -> syncStatus.update { it.copy(dataSyncProgress = SyncStatus.InProgress) } - else -> syncStatus - } - - else -> - when (workerTag) { - Constants.DATA_NOW -> syncStatus.update { it.copy(dataSyncProgress = SyncStatus.Finished) } - else -> syncStatus - } - } - } else { - when (workerTag) { - Constants.META_NOW -> syncStatus.update { it.copy(metadataSyncProgress = SyncStatus.Finished) } - Constants.DATA_NOW -> syncStatus.update { it.copy(dataSyncProgress = SyncStatus.Finished) } - else -> syncStatus - } - } - - return syncStatus.value - } - private fun syncData() { analyticsHelper.trackMatomoEvent(Categories.SETTINGS, Actions.SYNC_CONFIG, CLICK) analyticsHelper.setEvent(SYNC_DATA_NOW, CLICK, SYNC_DATA_NOW) - val workerItem = - WorkerItem( - Constants.DATA_NOW, - WorkerType.DATA, - null, - null, - ExistingWorkPolicy.KEEP, - null, - ) - workManagerController.syncDataForWorker(workerItem) + syncBackgroundJobAction.launchDataSync(0) } private fun syncMeta() { @@ -169,12 +125,12 @@ class LaunchSync( syncBackgroundJobAction.launchMetadataSync(0) } - private fun updateSyncDataPeriod(seconds: Int) { + private suspend fun updateSyncDataPeriod(seconds: Int) { if (seconds != Constants.TIME_MANUAL) { syncData(seconds) } else { preferenceProvider.setValue(TIME_DATA, 0) - workManagerController.cancelUniqueWork(Constants.DATA) + syncBackgroundJobAction.cancelDataSync() } } @@ -195,16 +151,6 @@ class LaunchSync( private fun syncData(seconds: Int) { preferenceProvider.setValue(TIME_DATA, seconds) - workManagerController.cancelUniqueWork(Constants.DATA) - val workerItem = - WorkerItem( - Constants.DATA, - WorkerType.DATA, - seconds.toLong(), - null, - null, - ExistingPeriodicWorkPolicy.REPLACE, - ) - workManagerController.enqueuePeriodicWork(workerItem) + syncBackgroundJobAction.launchDataSync(seconds.toLong()) } } diff --git a/app/src/main/java/org/dhis2/usescases/teiDashboard/teiProgramList/TeiProgramListActivity.java b/app/src/main/java/org/dhis2/usescases/teiDashboard/teiProgramList/TeiProgramListActivity.java index d9535cdf9fd..70df38985c7 100644 --- a/app/src/main/java/org/dhis2/usescases/teiDashboard/teiProgramList/TeiProgramListActivity.java +++ b/app/src/main/java/org/dhis2/usescases/teiDashboard/teiProgramList/TeiProgramListActivity.java @@ -34,7 +34,7 @@ public class TeiProgramListActivity extends ActivityGlobalAbstract implements Te @Override public void onCreate(@Nullable Bundle savedInstanceState) { String trackedEntityId = getIntent().getStringExtra("TEI_UID"); - ((App) getApplicationContext()).userComponent().plus(new TeiProgramListModule(this, trackedEntityId)).inject(this); + ((App) getApplicationContext()).userComponent().plus(new TeiProgramListModule(this, trackedEntityId, getSyncStatusController())).inject(this); super.onCreate(savedInstanceState); binding = DataBindingUtil.setContentView(this, R.layout.activity_tei_program_list); binding.setPresenter(presenter); diff --git a/app/src/main/java/org/dhis2/usescases/teiDashboard/teiProgramList/TeiProgramListInteractor.java b/app/src/main/java/org/dhis2/usescases/teiDashboard/teiProgramList/TeiProgramListInteractor.java index 3f389a6a94a..a2d2f905f16 100644 --- a/app/src/main/java/org/dhis2/usescases/teiDashboard/teiProgramList/TeiProgramListInteractor.java +++ b/app/src/main/java/org/dhis2/usescases/teiDashboard/teiProgramList/TeiProgramListInteractor.java @@ -8,7 +8,7 @@ import org.dhis2.commons.dialogs.calendarpicker.OnDatePickerListener; import org.dhis2.commons.orgunitselector.OUTreeFragment; import org.dhis2.mobile.commons.orgunit.OrgUnitSelectorScope; -import org.dhis2.data.service.SyncStatusController; +import org.dhis2.mobile.sync.domain.SyncStatusController; import org.dhis2.usescases.main.program.ProgramDownloadState; import org.dhis2.usescases.main.program.ProgramUiModel; import org.hisp.dhis.android.core.organisationunit.OrganisationUnit; diff --git a/app/src/main/java/org/dhis2/usescases/teiDashboard/teiProgramList/TeiProgramListModule.java b/app/src/main/java/org/dhis2/usescases/teiDashboard/teiProgramList/TeiProgramListModule.java index 91d1b696c16..bd6a5e6c556 100644 --- a/app/src/main/java/org/dhis2/usescases/teiDashboard/teiProgramList/TeiProgramListModule.java +++ b/app/src/main/java/org/dhis2/usescases/teiDashboard/teiProgramList/TeiProgramListModule.java @@ -4,10 +4,8 @@ import org.dhis2.commons.di.dagger.PerActivity; import org.dhis2.commons.prefs.PreferenceProvider; -import org.dhis2.commons.resources.ColorUtils; import org.dhis2.commons.resources.MetadataIconProvider; -import org.dhis2.commons.resources.ResourceManager; -import org.dhis2.data.service.SyncStatusController; +import org.dhis2.mobile.sync.domain.SyncStatusController; import org.dhis2.usescases.main.program.ProgramViewModelMapper; import org.dhis2.utils.analytics.AnalyticsHelper; import org.hisp.dhis.android.core.D2; @@ -22,9 +20,12 @@ public class TeiProgramListModule { private final TeiProgramListContract.View view; private final String teiUid; - TeiProgramListModule(TeiProgramListContract.View view, String teiUid) { + private final SyncStatusController syncStatusController; + + TeiProgramListModule(TeiProgramListContract.View view, String teiUid, SyncStatusController syncStatusController) { this.view = view; this.teiUid = teiUid; + this.syncStatusController = syncStatusController; } @Provides @@ -45,8 +46,7 @@ TeiProgramListContract.Presenter providesPresenter(TeiProgramListContract.Intera @Provides @PerActivity - TeiProgramListContract.Interactor provideInteractor(@NonNull TeiProgramListRepository teiProgramListRepository, - SyncStatusController syncStatusController) { + TeiProgramListContract.Interactor provideInteractor(@NonNull TeiProgramListRepository teiProgramListRepository) { return new TeiProgramListInteractor(teiProgramListRepository, syncStatusController); } diff --git a/app/src/main/java/org/dhis2/utils/granularsync/GranularSyncPresenter.kt b/app/src/main/java/org/dhis2/utils/granularsync/GranularSyncPresenter.kt index 0448e4f7353..cadabacca57 100644 --- a/app/src/main/java/org/dhis2/utils/granularsync/GranularSyncPresenter.kt +++ b/app/src/main/java/org/dhis2/utils/granularsync/GranularSyncPresenter.kt @@ -59,9 +59,12 @@ import org.dhis2.commons.viewmodel.DispatcherProvider import org.dhis2.data.service.workManager.WorkManagerController import org.dhis2.data.service.workManager.WorkerItem import org.dhis2.data.service.workManager.WorkerType +import org.dhis2.mobile.sync.data.SyncBackgroundJobAction import org.dhis2.usescases.sms.SmsSendingService import org.hisp.dhis.android.core.D2 import org.hisp.dhis.android.core.common.State +import org.koin.core.component.KoinComponent +import org.koin.core.component.inject import timber.log.Timber class GranularSyncPresenter( @@ -73,7 +76,8 @@ class GranularSyncPresenter( private val syncContext: SyncContext, private val workManagerController: WorkManagerController, private val smsSyncProvider: SMSSyncProvider, -) : ViewModel() { +) : ViewModel(), + KoinComponent { private val workerName: String private var disposable: CompositeDisposable = CompositeDisposable() private lateinit var states: MutableLiveData> @@ -82,6 +86,8 @@ class GranularSyncPresenter( private val _currentState = MutableStateFlow(null) val currentState: StateFlow = _currentState + private val syncBackgroundJobAction: SyncBackgroundJobAction by inject() + init { workerName = workerName() } @@ -172,7 +178,7 @@ class GranularSyncPresenter( workManagerController.beginUniqueWork(workerItem) } else { - workManagerController.syncDataForWorker(Constants.DATA_NOW, Constants.INITIAL_SYNC) + syncBackgroundJobAction.launchDataSync(0) } } return observeWorkInfo() diff --git a/app/src/test/java/org/dhis2/data/services/SyncPresenterTest.kt b/app/src/test/java/org/dhis2/data/services/SyncPresenterTest.kt index de07880d1f8..32d7b2e1199 100644 --- a/app/src/test/java/org/dhis2/data/services/SyncPresenterTest.kt +++ b/app/src/test/java/org/dhis2/data/services/SyncPresenterTest.kt @@ -6,9 +6,7 @@ import org.dhis2.commons.prefs.PreferenceProvider import org.dhis2.data.service.SyncPresenterImpl import org.dhis2.data.service.SyncRepository import org.dhis2.data.service.SyncResult -import org.dhis2.data.service.SyncStatusController -import org.dhis2.data.service.workManager.WorkManagerController -import org.dhis2.utils.analytics.AnalyticsHelper +import org.dhis2.mobile.sync.domain.SyncStatusController import org.hisp.dhis.android.core.D2 import org.hisp.dhis.android.core.arch.call.D2Progress import org.hisp.dhis.android.core.arch.call.D2ProgressStatus @@ -20,6 +18,7 @@ import org.hisp.dhis.android.core.program.ProgramType import org.hisp.dhis.android.core.settings.LimitScope import org.hisp.dhis.android.core.settings.ProgramSetting import org.hisp.dhis.android.core.settings.ProgramSettings +import org.hisp.dhis.android.core.settings.SynchronizationSettings import org.hisp.dhis.android.core.trackedentity.TrackedEntityInstance import org.hisp.dhis.android.core.tracker.exporter.TrackerD2Progress import org.junit.Assert.assertTrue @@ -35,8 +34,6 @@ class SyncPresenterTest { private val d2: D2 = Mockito.mock(D2::class.java, Mockito.RETURNS_DEEP_STUBS) private val preferences: PreferenceProvider = mock() - private val workManagerController: WorkManagerController = mock() - private val analyticsHelper: AnalyticsHelper = mock() private val syncStatusController: SyncStatusController = mock() private val syncRepository: SyncRepository = mock() @@ -46,10 +43,8 @@ class SyncPresenterTest { SyncPresenterImpl( d2, preferences, - workManagerController, - analyticsHelper, - syncStatusController, syncRepository, + syncStatusController, ) } @@ -61,8 +56,14 @@ class SyncPresenterTest { 200, LimitScope.GLOBAL, ) + val mockedSyncSettings = + mock { + on { programSettings() } doReturn mockedProgramSettings + } - whenever(d2.settingModule().programSetting().blockingGet()) doReturn mockedProgramSettings + whenever( + d2.settingModule().synchronizationSettings().blockingGet(), + ) doReturn mockedSyncSettings val (eventLimit, limitByOU, limitByProgram) = presenter.getDownloadLimits() @@ -78,8 +79,14 @@ class SyncPresenterTest { LimitScope.PER_OU_AND_PROGRAM, ) - whenever(d2.settingModule().programSetting().blockingGet()) doReturn mockedProgramSettings + val mockedSyncSettings = + mock { + on { programSettings() } doReturn mockedProgramSettings + } + whenever( + d2.settingModule().synchronizationSettings().blockingGet(), + ) doReturn mockedSyncSettings val (eventLimit, limitByOU, limitByProgram) = presenter.getDownloadLimits() assertTrue(eventLimit == 200 && limitByOU && limitByProgram) @@ -94,8 +101,14 @@ class SyncPresenterTest { LimitScope.PER_PROGRAM, ) - whenever(d2.settingModule().programSetting().blockingGet()) doReturn mockedProgramSettings + val mockedSyncSettings = + mock { + on { programSettings() } doReturn mockedProgramSettings + } + whenever( + d2.settingModule().synchronizationSettings().blockingGet(), + ) doReturn mockedSyncSettings val (eventLimit, limitByOU, limitByProgram) = presenter.getDownloadLimits() assertTrue(eventLimit == 200 && !limitByOU && limitByProgram) @@ -110,8 +123,14 @@ class SyncPresenterTest { LimitScope.PER_ORG_UNIT, ) - whenever(d2.settingModule().programSetting().blockingGet()) doReturn mockedProgramSettings + val mockedSyncSettings = + mock { + on { programSettings() } doReturn mockedProgramSettings + } + whenever( + d2.settingModule().synchronizationSettings().blockingGet(), + ) doReturn mockedSyncSettings val (eventLimit, limitByOU, limitByProgram) = presenter.getDownloadLimits() assertTrue(eventLimit == 200 && limitByOU && !limitByProgram) diff --git a/app/src/test/java/org/dhis2/usescases/main/MainPresenterTest.kt b/app/src/test/java/org/dhis2/usescases/main/MainPresenterTest.kt index af876ab2d4e..2a717b07015 100644 --- a/app/src/test/java/org/dhis2/usescases/main/MainPresenterTest.kt +++ b/app/src/test/java/org/dhis2/usescases/main/MainPresenterTest.kt @@ -25,10 +25,11 @@ import org.dhis2.commons.schedulers.SchedulerProvider import org.dhis2.commons.viewmodel.DispatcherProvider import org.dhis2.data.schedulers.TrampolineSchedulerProvider import org.dhis2.data.server.UserManager -import org.dhis2.data.service.SyncStatusController import org.dhis2.data.service.VersionRepository import org.dhis2.data.service.workManager.WorkManagerController import org.dhis2.mobile.commons.domain.invoke +import org.dhis2.mobile.sync.data.SyncBackgroundJobAction +import org.dhis2.mobile.sync.domain.SyncStatusController import org.dhis2.usescases.login.SyncIsPerformedInteractor import org.dhis2.usescases.main.domain.LogoutUser import org.dhis2.usescases.settings.DeleteUserData @@ -68,6 +69,7 @@ class MainPresenterTest { private val deleteUserData: DeleteUserData = mock() private val syncIsPerfomedInteractor: SyncIsPerformedInteractor = mock() private val syncStatusController: SyncStatusController = mock() + private val syncBackgroundJobAction: SyncBackgroundJobAction = mock() private val versionRepository: VersionRepository = mock() private val testingDispatcher = UnconfinedTestDispatcher() private val dispatcherProvider: DispatcherProvider = @@ -102,6 +104,7 @@ class MainPresenterTest { deleteUserData, syncIsPerfomedInteractor, syncStatusController, + syncBackgroundJobAction, versionRepository, dispatcherProvider, forceToNotSynced, diff --git a/app/src/test/java/org/dhis2/usescases/main/domain/LaunchInitialSyncTest.kt b/app/src/test/java/org/dhis2/usescases/main/domain/LaunchInitialSyncTest.kt index f217f744cf3..17d861dfa9a 100644 --- a/app/src/test/java/org/dhis2/usescases/main/domain/LaunchInitialSyncTest.kt +++ b/app/src/test/java/org/dhis2/usescases/main/domain/LaunchInitialSyncTest.kt @@ -4,6 +4,7 @@ import kotlinx.coroutines.test.runTest import org.dhis2.data.service.VersionRepository import org.dhis2.mobile.commons.domain.invoke import org.dhis2.mobile.commons.error.DomainError +import org.dhis2.mobile.sync.data.SyncBackgroundJobAction import org.dhis2.usescases.main.data.HomeRepository import org.junit.Assert.assertEquals import org.junit.Assert.assertTrue @@ -18,6 +19,7 @@ import org.mockito.kotlin.whenever class LaunchInitialSyncTest { private val homeRepository: HomeRepository = mock() private val versionRepository: VersionRepository = mock() + private val syncBackgroundJobAction: SyncBackgroundJobAction = mock() private lateinit var launchInitialSync: LaunchInitialSync @Test @@ -28,6 +30,7 @@ class LaunchInitialSyncTest { skipSync = true, homeRepository = homeRepository, versionRepository = versionRepository, + syncBackgroundJobAction = syncBackgroundJobAction, ) val result = launchInitialSync() @@ -47,6 +50,7 @@ class LaunchInitialSyncTest { skipSync = false, homeRepository = homeRepository, versionRepository = versionRepository, + syncBackgroundJobAction = syncBackgroundJobAction, ) val result = launchInitialSync() @@ -65,6 +69,7 @@ class LaunchInitialSyncTest { skipSync = false, homeRepository = homeRepository, versionRepository = versionRepository, + syncBackgroundJobAction = syncBackgroundJobAction, ) val result = launchInitialSync() @@ -83,6 +88,7 @@ class LaunchInitialSyncTest { skipSync = false, homeRepository = homeRepository, versionRepository = versionRepository, + syncBackgroundJobAction = syncBackgroundJobAction, ) val result = launchInitialSync() @@ -106,6 +112,7 @@ class LaunchInitialSyncTest { skipSync = false, homeRepository = homeRepository, versionRepository = versionRepository, + syncBackgroundJobAction = syncBackgroundJobAction, ) val result = launchInitialSync() @@ -126,6 +133,7 @@ class LaunchInitialSyncTest { skipSync = false, homeRepository = homeRepository, versionRepository = versionRepository, + syncBackgroundJobAction = syncBackgroundJobAction, ) val result = launchInitialSync() diff --git a/app/src/test/java/org/dhis2/usescases/main/domain/LogoutUserTest.kt b/app/src/test/java/org/dhis2/usescases/main/domain/LogoutUserTest.kt index 775290b5914..7c3b8170f4f 100644 --- a/app/src/test/java/org/dhis2/usescases/main/domain/LogoutUserTest.kt +++ b/app/src/test/java/org/dhis2/usescases/main/domain/LogoutUserTest.kt @@ -2,10 +2,10 @@ package org.dhis2.usescases.main.domain import kotlinx.coroutines.test.runTest import org.dhis2.commons.filters.FilterManager -import org.dhis2.data.service.SyncStatusController -import org.dhis2.data.service.workManager.WorkManagerController import org.dhis2.mobile.commons.domain.invoke import org.dhis2.mobile.commons.error.DomainError +import org.dhis2.mobile.sync.data.SyncBackgroundJobAction +import org.dhis2.mobile.sync.domain.SyncStatusController import org.dhis2.usescases.main.HomeRepository import org.junit.Assert.assertTrue import org.junit.Assert.fail @@ -19,8 +19,8 @@ import org.mockito.kotlin.whenever class LogoutUserTest { private val repository: HomeRepository = mock() - private val workManagerController: WorkManagerController = mock() private val syncStatusController: SyncStatusController = mock() + private val syncBackgroundJobAction: SyncBackgroundJobAction = mock() private val filterManager: FilterManager = mock() private lateinit var logoutUser: LogoutUser @@ -30,7 +30,7 @@ class LogoutUserTest { logoutUser = LogoutUser( repository, - workManagerController, + syncBackgroundJobAction, syncStatusController, filterManager, ) @@ -42,7 +42,7 @@ class LogoutUserTest { whenever(repository.logOut()) doReturn Result.success(Unit) whenever(repository.accountsCount()) doReturn 1 val result = logoutUser() - verify(workManagerController).cancelAllWorkAndWait() + verify(syncBackgroundJobAction).cancelAll() verify(syncStatusController).restore() verify(filterManager).clearAllFilters() verify(repository).clearSessionLock() @@ -58,7 +58,7 @@ class LogoutUserTest { val testException = DomainError.UnexpectedError("test") whenever(repository.clearSessionLock()) doReturn Result.failure(testException) val result = logoutUser() - verify(workManagerController).cancelAllWorkAndWait() + verify(syncBackgroundJobAction).cancelAll() verify(syncStatusController).restore() verify(filterManager).clearAllFilters() verify(repository).clearSessionLock() @@ -81,7 +81,7 @@ class LogoutUserTest { assertTrue(e == testException) } - verify(workManagerController).cancelAllWorkAndWait() + verify(syncBackgroundJobAction).cancelAll() verify(syncStatusController).restore() verify(filterManager).clearAllFilters() verify(repository).clearSessionLock() diff --git a/app/src/test/java/org/dhis2/usescases/main/program/ProgramRepositoryImplTest.kt b/app/src/test/java/org/dhis2/usescases/main/program/ProgramRepositoryImplTest.kt index ec78a168082..00994f23b3f 100644 --- a/app/src/test/java/org/dhis2/usescases/main/program/ProgramRepositoryImplTest.kt +++ b/app/src/test/java/org/dhis2/usescases/main/program/ProgramRepositoryImplTest.kt @@ -12,8 +12,8 @@ import org.dhis2.commons.resources.MetadataIconProvider import org.dhis2.commons.resources.ResourceManager import org.dhis2.data.dhislogic.DhisProgramUtils import org.dhis2.data.schedulers.TrampolineSchedulerProvider -import org.dhis2.data.service.SyncStatusData import org.dhis2.mobile.commons.model.MetadataIconData +import org.dhis2.mobile.sync.model.SyncStatusData import org.hisp.dhis.android.core.D2 import org.hisp.dhis.android.core.common.Access import org.hisp.dhis.android.core.common.DataAccess diff --git a/app/src/test/java/org/dhis2/usescases/main/program/ProgramViewModelTest.kt b/app/src/test/java/org/dhis2/usescases/main/program/ProgramViewModelTest.kt index 0b3804dde34..5f8271dc73c 100644 --- a/app/src/test/java/org/dhis2/usescases/main/program/ProgramViewModelTest.kt +++ b/app/src/test/java/org/dhis2/usescases/main/program/ProgramViewModelTest.kt @@ -16,10 +16,10 @@ import org.dhis2.commons.filters.FilterManager import org.dhis2.commons.matomo.MatomoAnalyticsController import org.dhis2.commons.viewmodel.DispatcherProvider import org.dhis2.data.schedulers.TestSchedulerProvider -import org.dhis2.data.service.SyncStatusController -import org.dhis2.data.service.SyncStatusData import org.dhis2.mobile.commons.extensions.toColor import org.dhis2.mobile.commons.model.MetadataIconData +import org.dhis2.mobile.sync.domain.SyncStatusController +import org.dhis2.mobile.sync.model.SyncStatusData import org.dhis2.utils.MainCoroutineScopeRule import org.hisp.dhis.android.core.common.State import org.hisp.dhis.mobile.ui.designsystem.component.ImageCardData diff --git a/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchTEPresenterTest.kt b/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchTEPresenterTest.kt index 65283d5003a..449ecab97c9 100644 --- a/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchTEPresenterTest.kt +++ b/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchTEPresenterTest.kt @@ -10,7 +10,7 @@ import org.dhis2.commons.prefs.PreferenceProvider import org.dhis2.commons.resources.ColorUtils import org.dhis2.commons.resources.ResourceManager import org.dhis2.data.schedulers.TestSchedulerProvider -import org.dhis2.data.service.SyncStatusController +import org.dhis2.mobile.sync.domain.SyncStatusController import org.dhis2.utils.analytics.AnalyticsHelper import org.hisp.dhis.android.core.D2 import org.hisp.dhis.android.core.common.ObjectWithUid diff --git a/app/src/test/java/org/dhis2/usescases/settings/domain/LaunchSyncTest.kt b/app/src/test/java/org/dhis2/usescases/settings/domain/LaunchSyncTest.kt index 3efadfffb87..1a8b4951a7d 100644 --- a/app/src/test/java/org/dhis2/usescases/settings/domain/LaunchSyncTest.kt +++ b/app/src/test/java/org/dhis2/usescases/settings/domain/LaunchSyncTest.kt @@ -1,10 +1,6 @@ package org.dhis2.usescases.settings.domain import androidx.arch.core.executor.testing.InstantTaskExecutorRule -import androidx.lifecycle.MutableLiveData -import androidx.work.ExistingPeriodicWorkPolicy -import androidx.work.ExistingWorkPolicy -import androidx.work.WorkInfo import app.cash.turbine.test import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.ExperimentalCoroutinesApi @@ -15,9 +11,6 @@ import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.setMain import org.dhis2.commons.Constants import org.dhis2.commons.prefs.PreferenceProvider -import org.dhis2.data.service.workManager.WorkManagerController -import org.dhis2.data.service.workManager.WorkerItem -import org.dhis2.data.service.workManager.WorkerType import org.dhis2.mobile.sync.data.SyncBackgroundJobAction import org.dhis2.mobile.sync.model.SyncJobStatus import org.dhis2.mobile.sync.model.SyncStatus @@ -43,23 +36,21 @@ class LaunchSyncTest { private val testingDispatcher = UnconfinedTestDispatcher() private lateinit var launchSync: LaunchSync - private val workManagerController: WorkManagerController = mock() private val preferenceProvider: PreferenceProvider = mock() private val analyticsHelper: AnalyticsHelper = mock() private val mockedMetadataWorkInfo = MutableStateFlow>(emptyList()) - private val mockedDataWorkInfo = MutableLiveData>() + private val mockedDataWorkInfo = MutableStateFlow>(emptyList()) private val syncBackgroundJobAction: SyncBackgroundJobAction = mock() @Before fun setUp() { Dispatchers.setMain(testingDispatcher) whenever(syncBackgroundJobAction.observeMetadataJob()) doReturn mockedMetadataWorkInfo - whenever(workManagerController.getWorkInfosByTagLiveData(Constants.DATA_NOW)) doReturn mockedDataWorkInfo + whenever(syncBackgroundJobAction.observeDataJob()) doReturn mockedDataWorkInfo launchSync = LaunchSync( syncBackgroundJobAction = syncBackgroundJobAction, - workManagerController = workManagerController, preferenceProvider = preferenceProvider, analyticsHelper = analyticsHelper, ) @@ -80,36 +71,17 @@ class LaunchSyncTest { @Test fun shouldStartSyncData() = runTest { - val expectedWorkerItem = - WorkerItem( - Constants.DATA_NOW, - WorkerType.DATA, - null, - null, - ExistingWorkPolicy.KEEP, - null, - ) launchSync(LaunchSync.SyncAction.SyncData) - verify(workManagerController, times(1)).syncDataForWorker(expectedWorkerItem) + verify(syncBackgroundJobAction, times(1)).launchDataSync(0) } @Test fun shouldUpdateSyncDataPeriod() = runTest { val newPeriod = 13 - val expectedWorkerItem = - WorkerItem( - Constants.DATA, - WorkerType.DATA, - newPeriod.toLong(), - null, - null, - ExistingPeriodicWorkPolicy.REPLACE, - ) launchSync(LaunchSync.SyncAction.UpdateSyncDataPeriod(newPeriod)) verify(preferenceProvider, times(1)).setValue(Constants.TIME_DATA, newPeriod) - verify(workManagerController, times(1)).cancelUniqueWork(Constants.DATA) - verify(workManagerController, times(1)).enqueuePeriodicWork(expectedWorkerItem) + verify(syncBackgroundJobAction, times(1)).launchDataSync(newPeriod.toLong()) } @Test @@ -126,7 +98,7 @@ class LaunchSyncTest { runTest { launchSync(LaunchSync.SyncAction.UpdateSyncDataPeriod(0)) verify(preferenceProvider, times(1)).setValue(Constants.TIME_DATA, 0) - verify(workManagerController, times(1)).cancelUniqueWork(Constants.DATA) + verify(syncBackgroundJobAction, times(1)).cancelDataSync() } @Test @@ -145,22 +117,23 @@ class LaunchSyncTest { on { status } doReturn SyncStatus.Running } val startedDataWorkInfo = - mock { - on { state } doReturn WorkInfo.State.RUNNING + mock { + on { status } doReturn SyncStatus.Running } val finishedMetadataWorkInfo = mock { on { status } doReturn SyncStatus.Succeed } val finishedDataWorkInfo = - mock { - on { state } doReturn WorkInfo.State.SUCCEEDED + mock { + on { status } doReturn SyncStatus.Succeed } launchSync.syncWorkInfo.test { + awaitItem() awaitItem() mockedMetadataWorkInfo.emit(listOf(startedMetadataWorkInfo)) assertState(awaitItem(), LaunchSync.SyncStatus.InProgress, LaunchSync.SyncStatus.None) - mockedDataWorkInfo.postValue(listOf(startedDataWorkInfo)) + mockedDataWorkInfo.emit(listOf(startedDataWorkInfo)) with(awaitItem()) { assertState( this, @@ -179,7 +152,7 @@ class LaunchSyncTest { ) assertTrue(this.hasSyncFinished(metadataWasRunning = true, dataWasRunning = true)) } - mockedDataWorkInfo.postValue(listOf(finishedDataWorkInfo)) + mockedDataWorkInfo.emit(listOf(finishedDataWorkInfo)) assertState(awaitItem(), LaunchSync.SyncStatus.Finished, LaunchSync.SyncStatus.Finished) cancelAndIgnoreRemainingEvents() } diff --git a/app/src/test/java/org/dhis2/utils/granularsync/GranularSyncPresenterTest.kt b/app/src/test/java/org/dhis2/utils/granularsync/GranularSyncPresenterTest.kt index e1fd0ebf854..ae77334adfb 100644 --- a/app/src/test/java/org/dhis2/utils/granularsync/GranularSyncPresenterTest.kt +++ b/app/src/test/java/org/dhis2/utils/granularsync/GranularSyncPresenterTest.kt @@ -14,7 +14,6 @@ import kotlinx.coroutines.runBlocking import kotlinx.coroutines.test.UnconfinedTestDispatcher import kotlinx.coroutines.test.resetMain import kotlinx.coroutines.test.setMain -import org.dhis2.commons.Constants import org.dhis2.commons.sync.ConflictType import org.dhis2.commons.sync.SyncContext import org.dhis2.commons.viewmodel.DispatcherProvider @@ -512,7 +511,6 @@ class GranularSyncPresenterTest { val resultLiveData = presenter.initGranularSync() resultLiveData.observeForever(workInfoObserver) - verify(workManager).syncDataForWorker(Constants.DATA_NOW, Constants.INITIAL_SYNC) verify(workInfoObserver).onChanged(anyList()) } diff --git a/commonskmm/src/androidMain/kotlin/org/dhis2/mobile/commons/notifications/NotificationManagerImpl.kt b/commonskmm/src/androidMain/kotlin/org/dhis2/mobile/commons/notifications/NotificationManagerImpl.kt index aacb93b5319..483d1a4b107 100644 --- a/commonskmm/src/androidMain/kotlin/org/dhis2/mobile/commons/notifications/NotificationManagerImpl.kt +++ b/commonskmm/src/androidMain/kotlin/org/dhis2/mobile/commons/notifications/NotificationManagerImpl.kt @@ -34,9 +34,17 @@ class NotificationManagerImpl( contentTitle: String, contentText: String, progress: Int, - ): NotificationModel { - TODO("Not yet implemented") - } + ) = WorkerNotificationInfo( + createForegroundInfo( + notificationId = SYNC_DATA_NOTIFICATION_ID, + channelId = SYNC_DATA_CHANNEL_ID, + channelName = SYNC_DATA_CHANNEL_NAME, + smallIcon = smallIcon, + contentTitle = contentTitle, + contentText = contentText, + progress = progress, + ), + ) override fun displayDataSyncNotification( smallIcon: Int, @@ -44,7 +52,18 @@ class NotificationManagerImpl( contentText: String, progress: Int, ) { - TODO("Not yet implemented") + val foregroundInfo = + createForegroundInfo( + notificationId = SYNC_DATA_NOTIFICATION_ID, + channelId = SYNC_DATA_CHANNEL_ID, + channelName = SYNC_DATA_CHANNEL_NAME, + smallIcon = smallIcon, + contentTitle = contentTitle, + contentText = contentText, + progress = progress, + ) + + notify(foregroundInfo) } override fun getMetadataSyncNotification( @@ -126,6 +145,10 @@ class NotificationManagerImpl( notificationManager.cancel(SYNC_SETTINGS_NOTIFICATION_ID) } + override fun cancelDataSyncNotification() { + notificationManager.cancel(SYNC_DATA_NOTIFICATION_ID) + } + private fun createForegroundInfo( notificationId: Int, channelId: String, diff --git a/commonskmm/src/commonMain/kotlin/org/dhis2/mobile/commons/notifications/NotificationManager.kt b/commonskmm/src/commonMain/kotlin/org/dhis2/mobile/commons/notifications/NotificationManager.kt index 178ecef144d..7d6c4951ab7 100644 --- a/commonskmm/src/commonMain/kotlin/org/dhis2/mobile/commons/notifications/NotificationManager.kt +++ b/commonskmm/src/commonMain/kotlin/org/dhis2/mobile/commons/notifications/NotificationManager.kt @@ -44,4 +44,6 @@ interface NotificationManager { fun cancelMetadataSyncNotification() fun cancelSyncSettingsNotification() + + fun cancelDataSyncNotification() } diff --git a/commonskmm/src/commonMain/kotlin/org/dhis2/mobile/commons/providers/PreferenceConstants.kt b/commonskmm/src/commonMain/kotlin/org/dhis2/mobile/commons/providers/PreferenceConstants.kt index 297a5a768c9..4b3694afcb3 100644 --- a/commonskmm/src/commonMain/kotlin/org/dhis2/mobile/commons/providers/PreferenceConstants.kt +++ b/commonskmm/src/commonMain/kotlin/org/dhis2/mobile/commons/providers/PreferenceConstants.kt @@ -10,4 +10,13 @@ const val TIME_META = "timeMeta" const val LAST_META_SYNC_STATUS = "last_meta_sync_status" const val LAST_DATA_SYNC = "last_data_sync" const val TIME_DATA = "timeData" +const val LAST_DATA_SYNC_STATUS = "last_data_sync_status" +const val SYNC_RESULT = "sync_result" const val BIOMETRIC_CREDENTIALS = "biometric_credentials" +const val EVENT_MAX = "EVENT_MAX" +const val EVENT_MAX_DEFAULT = 1000 +const val TEI_MAX = "TEI_MAX" +const val TEI_MAX_DEFAULT = 500 +const val LIMIT_BY_ORG_UNIT = "LIMIT_BY_ORG_UNIT" +const val LIMIT_BY_PROGRAM = "LIMIT_BY_PROGRAM" +const val MAX_RESERVED_VALUES = 100 diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index c83770c603a..0ca11cf5b17 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -212,6 +212,7 @@ koin-android = { group = "io.insert-koin", name = "koin-android", version.ref = koin-androidx-compose = { module = "io.insert-koin:koin-androidx-compose", version.ref = "koin" } koin-compose = { module = "io.insert-koin:koin-compose", version.ref = "koin" } koin-composeVM = { module = "io.insert-koin:koin-compose-viewmodel", version.ref = "koin" } +koin-work = { module = "io.insert-koin:koin-androidx-workmanager", version.ref = "koin" } koin-test = { module = "io.insert-koin:koin-test", version.ref = "koin" } koin-test-junit5 = { module = "io.insert-koin:koin-test-junit5", version.ref = "koin" } koin-test-junit4 = { module = "io.insert-koin:koin-test-junit4", version.ref = "koin" } diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index a55c258636b..38fbff1307e 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -6270,6 +6270,22 @@ + + + + + + + + + + + + + @@ -10636,6 +10652,16 @@ + + + + + + + + @@ -14321,6 +14347,13 @@ + + + + + diff --git a/sync/build.gradle.kts b/sync/build.gradle.kts index 75f8fc6f4e2..ee7b03718fb 100644 --- a/sync/build.gradle.kts +++ b/sync/build.gradle.kts @@ -65,6 +65,7 @@ kotlin { implementation(libs.androidx.work) compileOnly(libs.androidx.compose.preview) compileOnly(libs.androidx.compose.uitooling) + api(libs.koin.work) } getByName("androidHostTest") { diff --git a/sync/src/androidMain/AndroidManifest.xml b/sync/src/androidMain/AndroidManifest.xml index a5918e68abc..628b10ec008 100644 --- a/sync/src/androidMain/AndroidManifest.xml +++ b/sync/src/androidMain/AndroidManifest.xml @@ -1,4 +1,17 @@ - + + + + + + \ No newline at end of file diff --git a/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/AndroidSyncBackgroundJobAction.kt b/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/AndroidSyncBackgroundJobAction.kt index cd2c78a81b2..eb2c8ae402f 100644 --- a/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/AndroidSyncBackgroundJobAction.kt +++ b/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/AndroidSyncBackgroundJobAction.kt @@ -60,7 +60,39 @@ class AndroidSyncBackgroundJobAction( } override fun launchDataSync(syncingPeriod: Long) { - // implement later + if (syncingPeriod == 0L) { + val request = + OneTimeWorkRequest + .Builder( + workerClass = SyncDataWorker::class.java, + ).addTag( + DATA_SYNC_NOW, + ).build() + workManager.enqueueUniqueWork( + uniqueWorkName = DATA_SYNC_NOW, + existingWorkPolicy = ExistingWorkPolicy.KEEP, + request = request, + ) + } else { + val request = + PeriodicWorkRequest + .Builder( + workerClass = SyncDataWorker::class.java, + repeatInterval = syncingPeriod, + repeatIntervalTimeUnit = TimeUnit.SECONDS, + ).addTag( + DATA_SYNC, + ).setInitialDelay( + syncingPeriod, + TimeUnit.SECONDS, + ).build() + + workManager.enqueueUniquePeriodicWork( + uniqueWorkName = DATA_SYNC, + existingPeriodicWorkPolicy = ExistingPeriodicWorkPolicy.CANCEL_AND_REENQUEUE, + request = request, + ) + } } override fun launchSyncSettings() { @@ -107,6 +139,31 @@ class AndroidSyncBackgroundJobAction( } } + override fun observeDataJob() = + workManager + .getWorkInfosFlow( + WorkQuery.fromUniqueWorkNames( + DATA_SYNC, + DATA_SYNC_NOW, + ), + ).map { workInfos -> + workInfos.map { workInfo -> + SyncJobStatus( + tags = workInfo.tags.toList(), + status = + when (workInfo.state) { + WorkInfo.State.ENQUEUED -> SyncStatus.Enqueue + WorkInfo.State.RUNNING -> SyncStatus.Running + WorkInfo.State.SUCCEEDED -> SyncStatus.Succeed + WorkInfo.State.FAILED -> SyncStatus.Failed + WorkInfo.State.BLOCKED -> SyncStatus.Blocked + WorkInfo.State.CANCELLED -> SyncStatus.Cancelled + }, + message = null, + ) + } + } + override suspend fun cancelSyncSettings() { workManager.cancelUniqueWork(SYNC_SETTINGS).await() } @@ -118,4 +175,9 @@ class AndroidSyncBackgroundJobAction( override suspend fun cancelDataSync() { workManager.cancelUniqueWork(DATA_SYNC).await() } + + override suspend fun cancelAll() { + val operation = workManager.cancelAllWork() + operation.await() + } } diff --git a/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/AndroidSyncRepository.kt b/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/AndroidSyncRepository.kt index 9d95846eec5..dc77ae328f5 100644 --- a/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/AndroidSyncRepository.kt +++ b/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/AndroidSyncRepository.kt @@ -1,5 +1,6 @@ package org.dhis2.mobile.sync.data +import kotlinx.coroutines.runBlocking import kotlinx.coroutines.withContext import kotlinx.datetime.TimeZone import kotlinx.datetime.format @@ -7,14 +8,31 @@ import kotlinx.datetime.toLocalDateTime import org.dhis2.mobile.commons.coroutine.Dispatcher import org.dhis2.mobile.commons.dates.dateTimeFormat import org.dhis2.mobile.commons.error.DomainErrorMapper +import org.dhis2.mobile.commons.providers.EVENT_MAX +import org.dhis2.mobile.commons.providers.EVENT_MAX_DEFAULT +import org.dhis2.mobile.commons.providers.LAST_DATA_SYNC +import org.dhis2.mobile.commons.providers.LAST_DATA_SYNC_STATUS import org.dhis2.mobile.commons.providers.LAST_META_SYNC import org.dhis2.mobile.commons.providers.LAST_META_SYNC_STATUS +import org.dhis2.mobile.commons.providers.LIMIT_BY_ORG_UNIT +import org.dhis2.mobile.commons.providers.LIMIT_BY_PROGRAM +import org.dhis2.mobile.commons.providers.MAX_RESERVED_VALUES import org.dhis2.mobile.commons.providers.PreferenceProvider +import org.dhis2.mobile.commons.providers.SYNC_RESULT +import org.dhis2.mobile.commons.providers.TEI_MAX +import org.dhis2.mobile.commons.providers.TEI_MAX_DEFAULT import org.dhis2.mobile.commons.reporting.AnalyticActions +import org.dhis2.mobile.sync.model.DataSyncProgressStatus +import org.dhis2.mobile.sync.model.SyncResult import org.dhis2.mobile.sync.model.toSyncPeriod import org.hisp.dhis.android.core.D2 +import org.hisp.dhis.android.core.arch.call.D2ProgressStatus +import org.hisp.dhis.android.core.arch.call.D2ProgressSyncStatus +import org.hisp.dhis.android.core.common.State import org.hisp.dhis.android.core.fileresource.FileResourceDomainType import org.hisp.dhis.android.core.maintenance.D2Error +import org.hisp.dhis.android.core.program.ProgramType +import org.hisp.dhis.android.core.settings.LimitScope import kotlin.math.ceil import kotlin.time.Clock import kotlin.time.ExperimentalTime @@ -35,6 +53,13 @@ class AndroidSyncRepository( } } + private suspend fun run(block: suspend () -> Result): Result = + try { + block() + } catch (d2Error: D2Error) { + Result.failure(domainErrorMapper.mapToDomainError(d2Error)) + } + override suspend fun currentMetadataSyncPeriod() = withContext(dispatcher.io) { d2 @@ -86,6 +111,130 @@ class AndroidSyncRepository( preferences.setValue(LAST_META_SYNC_STATUS, isSuccess) } + @OptIn(ExperimentalTime::class) + override suspend fun saveDataSyncState(isSuccess: Boolean) = + run { + preferences.setValue( + LAST_DATA_SYNC, + Clock.System + .now() + .toLocalDateTime(TimeZone.currentSystemDefault()) + .format(dateTimeFormat), + ) + val syncResult = syncResult() + preferences.setValue( + LAST_DATA_SYNC_STATUS, + isSuccess && syncResult == SyncResult.Sync, + ) + preferences.setValue( + SYNC_RESULT, + syncResult.name, + ) + Result.success(Unit) + } + + override suspend fun getAllProgramsInitialStatus() = + run { + val programMap = + d2 + .programModule() + .programs() + .blockingGetUids() + .associateWith { + DataSyncProgressStatus.None + } + val aggregateMap = + d2.dataSetModule().dataSets().blockingGetUids().associateWith { + DataSyncProgressStatus.None + } + + Result.success(programMap + aggregateMap) + } + + override suspend fun getAllEventPrograms() = + run { + val uids = + d2 + .programModule() + .programs() + .byProgramType() + .eq(ProgramType.WITHOUT_REGISTRATION) + .blockingGetUids() + Result.success(uids) + } + + override suspend fun getAllTrackerPrograms() = + run { + val uids = + d2 + .programModule() + .programs() + .byProgramType() + .eq(ProgramType.WITH_REGISTRATION) + .blockingGetUids() + Result.success(uids) + } + + override suspend fun getAllDataSets() = + run { + val uids = + d2 + .dataSetModule() + .dataSets() + .blockingGetUids() + Result.success(uids) + } + + private suspend fun syncResult(): SyncResult { + val eventsOk = + d2 + .eventModule() + .events() + .byAggregatedSyncState() + .notIn(State.SYNCED) + .blockingGet() + .isEmpty() + val teiOk = + d2 + .trackedEntityModule() + .trackedEntityInstances() + .byAggregatedSyncState() + .notIn( + State.SYNCED, + State.RELATIONSHIP, + ).blockingGet() + .isEmpty() + + if (eventsOk && teiOk) { + return SyncResult.Sync + } + + val anyEventsToPostOrToUpdate = + d2 + .eventModule() + .events() + .byAggregatedSyncState() + .`in`( + State.TO_POST, + State.TO_UPDATE, + ).blockingGet() + .isNotEmpty() + val anyTeiToPostOrToUpdate = + d2 + .trackedEntityModule() + .trackedEntityInstances() + .byAggregatedSyncState() + .`in`(State.TO_POST, State.TO_UPDATE) + .blockingGet() + .isNotEmpty() + + if (anyEventsToPostOrToUpdate || anyTeiToPostOrToUpdate) { + return SyncResult.Incomplete + } + + return SyncResult.Error + } + override suspend fun downloadMapMetadata(): Result = execute { d2 @@ -155,4 +304,210 @@ class AndroidSyncRepository( } Result.success(Unit) } + + override suspend fun uploadEvents(): Result = + run { + d2.eventModule().events().blockingUpload() + Result.success(Unit) + } + + override suspend fun uploadTEIs(): Result = + run { + d2.trackedEntityModule().trackedEntityInstances().blockingUpload() + Result.success(Unit) + } + + override suspend fun uploadDataValues(): Result = + run { + d2.dataValueModule().dataValues().blockingUpload() + d2.dataSetModule().dataSetCompleteRegistrations().blockingUpload() + Result.success(Unit) + } + + override suspend fun downloadEvents( + onProgressUpdate: suspend (progressData: Map) -> Unit, + ): Result = + run { + val eventProgramUids = + d2 + .programModule() + .programs() + .byProgramType() + .eq(ProgramType.WITHOUT_REGISTRATION) + .blockingGetUids() + + val globalSettings = + d2 + .settingModule() + .synchronizationSettings() + .blockingGet() + ?.programSettings() + ?.globalSettings() + + val eventLimit = + globalSettings?.eventsDownload() ?: preferences.getInt( + EVENT_MAX, + EVENT_MAX_DEFAULT, + ) + + val limitByOrgUnit = + globalSettings?.settingDownload()?.let { + it == LimitScope.PER_ORG_UNIT || it == LimitScope.PER_OU_AND_PROGRAM + } ?: preferences.getBoolean( + LIMIT_BY_ORG_UNIT, + false, + ) + + val limitByProgram = + globalSettings?.settingDownload()?.let { + it == LimitScope.PER_PROGRAM || it == LimitScope.PER_OU_AND_PROGRAM + } ?: preferences.getBoolean( + LIMIT_BY_PROGRAM, + false, + ) + + d2 + .eventModule() + .eventDownloader() + .limit(eventLimit) + .limitByOrgunit(limitByOrgUnit) + .limitByProgram(limitByProgram) + .download() + .blockingForEach { progress -> + val progressData = + progress + .programs() + .filter { entry -> + eventProgramUids.contains(entry.key) + }.mapValues { (_, programProgress) -> + programProgress.toSycStatus() + } + runBlocking { + onProgressUpdate(progressData) + } + } + + Result.success(Unit) + } + + override suspend fun downloadTEIs(onProgressUpdate: suspend (progressData: Map) -> Unit): Result = + run { + val trackerProgramUids = + d2 + .programModule() + .programs() + .byProgramType() + .eq(ProgramType.WITH_REGISTRATION) + .blockingGetUids() + + val globalSettings = + d2 + .settingModule() + .synchronizationSettings() + .blockingGet() + ?.programSettings() + ?.globalSettings() + + val teiLimit = + globalSettings?.teiDownload() ?: preferences.getInt( + TEI_MAX, + TEI_MAX_DEFAULT, + ) + + val limitByOrgUnit = + globalSettings?.settingDownload()?.let { + it == LimitScope.PER_ORG_UNIT || it == LimitScope.PER_OU_AND_PROGRAM + } ?: preferences.getBoolean( + LIMIT_BY_ORG_UNIT, + false, + ) + + val limitByProgram = + globalSettings?.settingDownload()?.let { + it == LimitScope.PER_PROGRAM || it == LimitScope.PER_OU_AND_PROGRAM + } ?: preferences.getBoolean( + LIMIT_BY_PROGRAM, + false, + ) + + d2 + .trackedEntityModule() + .trackedEntityInstanceDownloader() + .limit(teiLimit) + .limitByOrgunit(limitByOrgUnit) + .limitByProgram(limitByProgram) + .download() + .blockingForEach { progress -> + val progressData = + progress + .programs() + .filter { entry -> + trackerProgramUids.contains(entry.key) + }.mapValues { (_, programProgress) -> + programProgress.toSycStatus() + } + runBlocking { + onProgressUpdate(progressData) + } + } + Result.success(Unit) + } + + override suspend fun downloadDataValues(onProgressUpdate: (progressData: Map) -> Unit): Result = + run { + d2 + .aggregatedModule() + .data() + .download() + .blockingForEach { progress -> + val progressData = + progress.dataSets().mapValues { (_, dataSetProgress) -> + dataSetProgress.toSycStatus() + } + onProgressUpdate(progressData) + } + Result.success(Unit) + } + + override suspend fun downloadDataFileResources(onProgressUpdate: (progress: Double?) -> Unit): Result = + run { + d2 + .fileResourceModule() + .fileResourceDownloader() + .byDomainType() + .eq(FileResourceDomainType.DATA_VALUE) + .download() + .blockingForEach { progress -> + onProgressUpdate(progress.percentage()) + } + Result.success(Unit) + } + + override suspend fun downloadReservedValues(onProgressUpdate: (progress: Double?) -> Unit): Result = + run { + val maxNumberOfValuesToFillUp = + d2 + .settingModule() + .generalSetting() + .blockingGet() + ?.reservedValues() ?: MAX_RESERVED_VALUES + + d2 + .trackedEntityModule() + .reservedValueManager() + .downloadAllReservedValues(maxNumberOfValuesToFillUp) + .blockingForEach { progress -> + onProgressUpdate(progress.percentage()) + } + Result.success(Unit) + } + + private fun D2ProgressStatus.toSycStatus() = + when { + isComplete.not() -> DataSyncProgressStatus.InProgress + syncStatus == D2ProgressSyncStatus.SUCCESS -> DataSyncProgressStatus.Success + syncStatus == D2ProgressSyncStatus.ERROR -> DataSyncProgressStatus.Failed + syncStatus == D2ProgressSyncStatus.PARTIAL_ERROR -> DataSyncProgressStatus.PartiallyFailed + else -> DataSyncProgressStatus.None + } } diff --git a/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/SyncDataWorker.kt b/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/SyncDataWorker.kt new file mode 100644 index 00000000000..0d828dc9548 --- /dev/null +++ b/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/SyncDataWorker.kt @@ -0,0 +1,77 @@ +package org.dhis2.mobile.sync.data + +import android.content.Context +import androidx.work.CoroutineWorker +import androidx.work.ForegroundInfo +import androidx.work.WorkerParameters +import org.dhis2.mobile.commons.notifications.NotificationManager +import org.dhis2.mobile.commons.notifications.WorkerNotificationInfo +import org.dhis2.mobile.sync.R +import org.dhis2.mobile.sync.domain.SyncData +import org.dhis2.mobile.sync.model.DataSyncTask +import org.dhis2.mobile.sync.resources.Res +import org.dhis2.mobile.sync.resources.app_name +import org.dhis2.mobile.sync.resources.syncing_data +import org.jetbrains.compose.resources.getString + +class SyncDataWorker( + context: Context, + workerParams: WorkerParameters, + private val syncData: SyncData, + private val notificationManager: NotificationManager, +) : CoroutineWorker(context, workerParams) { + override suspend fun doWork(): Result { + setForegroundAsync(getForegroundInfo()) + + val notificationTitle = getString(Res.string.app_name) + val notificationText = getString(Res.string.syncing_data) + + notificationManager.displayDataSyncNotification( + smallIcon = R.drawable.ic_sync, + contentTitle = notificationTitle, + contentText = notificationText, + 0, + ) + + val result = + syncData { progressData -> + notificationManager.displayDataSyncNotification( + smallIcon = R.drawable.ic_sync, + contentTitle = notificationTitle, + contentText = + when (progressData.dataSyncTask) { + DataSyncTask.DownloadDataValue -> "Downloading data values" + DataSyncTask.DownloadEvent -> "Downloading events" + DataSyncTask.DownloadFileResource -> "Downloading file resources" + DataSyncTask.DownloadTEI -> "Downloading TEIs" + DataSyncTask.SyncReservedValues -> "Downloading reserved values" + DataSyncTask.UploadDataValue -> "Uploading data values" + DataSyncTask.UploadEvent -> "Uploading events" + DataSyncTask.UploadTEI -> "Uploading TEIs" + }, + progress = progressData.progress?.toInt() ?: -1, + ) + } + notificationManager.cancelDataSyncNotification() + return when { + result.isSuccess -> Result.success() + else -> Result.failure() + } + } + + override suspend fun getForegroundInfo(): ForegroundInfo { + val notificationModel = + notificationManager.getDataSyncNotification( + smallIcon = R.drawable.ic_sync, + contentTitle = getString(Res.string.app_name), + contentText = getString(Res.string.syncing_data), + progress = -1, + ) + val notificationInfo = + notificationModel as? WorkerNotificationInfo + ?: throw IllegalStateException( + "Expected WorkerNotificationInfo but got ${notificationModel::class.qualifiedName}", + ) + return notificationInfo.foregroundInfo + } +} diff --git a/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/SyncMetadataWorker.kt b/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/SyncMetadataWorker.kt index 5ff78101410..07edcda20ae 100644 --- a/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/SyncMetadataWorker.kt +++ b/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/SyncMetadataWorker.kt @@ -13,19 +13,15 @@ import org.dhis2.mobile.sync.resources.Res import org.dhis2.mobile.sync.resources.app_name import org.dhis2.mobile.sync.resources.syncing_configuration import org.jetbrains.compose.resources.getString -import org.koin.core.component.KoinComponent -import org.koin.core.component.inject const val METADATA_MESSAGE = "METADATA_MESSAGE" class SyncMetadataWorker( context: Context, workerParams: WorkerParameters, -) : CoroutineWorker(context, workerParams), - KoinComponent { - private val syncMetadata: SyncMetadata by inject() - private val notificationManager: NotificationManager by inject() - + private val syncMetadata: SyncMetadata, + private val notificationManager: NotificationManager, +) : CoroutineWorker(context, workerParams) { override suspend fun doWork(): Result { setForegroundAsync(getForegroundInfo()) diff --git a/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/SyncSettingsWorker.kt b/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/SyncSettingsWorker.kt index bb0b9c33c93..4f4a897fcea 100644 --- a/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/SyncSettingsWorker.kt +++ b/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/SyncSettingsWorker.kt @@ -13,17 +13,13 @@ import org.dhis2.mobile.sync.resources.Res import org.dhis2.mobile.sync.resources.app_name import org.dhis2.mobile.sync.resources.syncing_settings import org.jetbrains.compose.resources.getString -import org.koin.core.component.KoinComponent -import org.koin.core.component.inject class SyncSettingsWorker( - private val context: Context, + context: Context, workerParams: WorkerParameters, -) : CoroutineWorker(context, workerParams), - KoinComponent { - private val syncSettings: SyncSettings by inject() - private val notificationManager: NotificationManager by inject() - + private val syncSettings: SyncSettings, + private val notificationManager: NotificationManager, +) : CoroutineWorker(context, workerParams) { override suspend fun doWork(): Result { setForegroundAsync(getForegroundInfo()) notificationManager.displaySyncSettingsNotification( diff --git a/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/di/SyncModule.android.kt b/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/di/SyncModule.android.kt index fedff786cb3..d35a2be4aec 100644 --- a/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/di/SyncModule.android.kt +++ b/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/di/SyncModule.android.kt @@ -4,14 +4,24 @@ import androidx.work.WorkManager import org.dhis2.mobile.sync.data.AndroidSyncBackgroundJobAction import org.dhis2.mobile.sync.data.AndroidSyncRepository import org.dhis2.mobile.sync.data.SyncBackgroundJobAction +import org.dhis2.mobile.sync.data.SyncDataWorker +import org.dhis2.mobile.sync.data.SyncMetadataWorker import org.dhis2.mobile.sync.data.SyncRepository +import org.dhis2.mobile.sync.data.SyncSettingsWorker +import org.dhis2.mobile.sync.domain.SyncData import org.dhis2.mobile.sync.domain.SyncMetadata import org.dhis2.mobile.sync.domain.SyncSettings +import org.dhis2.mobile.sync.domain.SyncStatusController +import org.koin.androidx.workmanager.dsl.workerOf import org.koin.core.module.dsl.factoryOf +import org.koin.core.module.dsl.singleOf import org.koin.dsl.module actual val syncModule = module { + + singleOf(::SyncStatusController) + factory { WorkManager.getInstance(get()) } @@ -27,5 +37,11 @@ actual val syncModule = factoryOf(::SyncMetadata) + factoryOf(::SyncData) + factoryOf(::SyncSettings) + + workerOf(::SyncDataWorker) + workerOf(::SyncMetadataWorker) + workerOf(::SyncSettingsWorker) } diff --git a/sync/src/commonMain/composeResources/values/strings.xml b/sync/src/commonMain/composeResources/values/strings.xml index 7fee4c96904..3ec3434da4f 100644 --- a/sync/src/commonMain/composeResources/values/strings.xml +++ b/sync/src/commonMain/composeResources/values/strings.xml @@ -4,5 +4,6 @@ Dhis2 Checking web settings Syncing your configuration + Syncing your data diff --git a/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/data/SyncBackgroundJobAction.kt b/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/data/SyncBackgroundJobAction.kt index a429afecf1e..74c15de185a 100644 --- a/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/data/SyncBackgroundJobAction.kt +++ b/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/data/SyncBackgroundJobAction.kt @@ -12,9 +12,13 @@ interface SyncBackgroundJobAction { fun observeMetadataJob(): Flow> + fun observeDataJob(): Flow> + suspend fun cancelSyncSettings() suspend fun cancelMetadataSync() suspend fun cancelDataSync() + + suspend fun cancelAll() } diff --git a/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/data/SyncRepository.kt b/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/data/SyncRepository.kt index 1f8f7db3bc9..a403d6044f7 100644 --- a/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/data/SyncRepository.kt +++ b/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/data/SyncRepository.kt @@ -1,5 +1,6 @@ package org.dhis2.mobile.sync.data +import org.dhis2.mobile.sync.model.DataSyncProgressStatus import org.dhis2.mobile.sync.model.SyncPeriod interface SyncRepository { @@ -20,4 +21,30 @@ interface SyncRepository { suspend fun downloadFileResources(): Result suspend fun saveMetadataSyncState(isSuccess: Boolean) + + suspend fun uploadEvents(): Result + + suspend fun downloadEvents(onProgressUpdate: suspend (progressData: Map) -> Unit): Result + + suspend fun uploadTEIs(): Result + + suspend fun downloadTEIs(onProgressUpdate: suspend (progressData: Map) -> Unit): Result + + suspend fun uploadDataValues(): Result + + suspend fun downloadDataValues(onProgressUpdate: (progressData: Map) -> Unit): Result + + suspend fun downloadDataFileResources(onProgressUpdate: (progress: Double?) -> Unit): Result + + suspend fun downloadReservedValues(onProgressUpdate: (progress: Double?) -> Unit): Result + + suspend fun saveDataSyncState(isSuccess: Boolean): Result + + suspend fun getAllProgramsInitialStatus(): Result> + + suspend fun getAllEventPrograms(): Result> + + suspend fun getAllTrackerPrograms(): Result> + + suspend fun getAllDataSets(): Result> } diff --git a/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/domain/SyncData.kt b/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/domain/SyncData.kt index 31a78c2eb08..d01f2af3031 100644 --- a/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/domain/SyncData.kt +++ b/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/domain/SyncData.kt @@ -1,17 +1,86 @@ package org.dhis2.mobile.sync.domain import org.dhis2.mobile.commons.domain.UseCase -import org.dhis2.mobile.sync.data.SyncBackgroundJobAction +import org.dhis2.mobile.commons.error.DomainError import org.dhis2.mobile.sync.data.SyncRepository +import org.dhis2.mobile.sync.model.DataSyncProgress +import org.dhis2.mobile.sync.model.DataSyncTask class SyncData( private val repository: SyncRepository, - private val syncBackgroundJobAction: SyncBackgroundJobAction, -) : UseCase<(progress: Int) -> Unit, Unit> { - override suspend fun invoke(input: (progress: Int) -> Unit): Result = + private val syncStatusController: SyncStatusController, +) : UseCase<(progress: DataSyncProgress) -> Unit, Unit> { + override suspend fun invoke(input: (progress: DataSyncProgress) -> Unit): Result = try { - TODO("Not yet implemented") - } catch (e: Exception) { - Result.failure(e) + syncStatusController.initDownloadProcess( + repository.getAllProgramsInitialStatus().getOrNull() ?: emptyMap(), + ) + input(DataSyncProgress(DataSyncTask.UploadEvent, null)) + val uploadEventResult = repository.uploadEvents() + syncStatusController.startDownloadingEvents() + val downloadEventResult = + repository.downloadEvents { progressData -> + val done = progressData.count { (_, value) -> value.isComplete() } + val progress = 100.0 * done / progressData.size + input(DataSyncProgress(DataSyncTask.DownloadEvent, progress)) + syncStatusController.updateDownloadProcess(progressData) + } + syncStatusController.finishDownloadingEvents( + repository.getAllEventPrograms().getOrNull() ?: emptyList(), + ) + + input(DataSyncProgress(DataSyncTask.UploadTEI, null)) + val uploadTEIResult = repository.uploadTEIs() + syncStatusController.startDownloadingTracker() + val downloadTEIResult = + repository.downloadTEIs { progressData -> + val done = progressData.count { (_, value) -> value.isComplete() } + val progress = 100.0 * done / progressData.size + input(DataSyncProgress(DataSyncTask.DownloadTEI, progress)) + syncStatusController.updateDownloadProcess(progressData) + } + syncStatusController.finishDownloadingTracker( + repository.getAllTrackerPrograms().getOrNull() ?: emptyList(), + ) + + input(DataSyncProgress(DataSyncTask.UploadDataValue, null)) + val uploadDataValueResult = repository.uploadDataValues() + syncStatusController.startDownloadingDataSets() + val downloadDataValueResult = + repository.downloadDataValues { progressData -> + val done = progressData.count { (_, value) -> value.isComplete() } + val progress = 100.0 * done / progressData.size + input(DataSyncProgress(DataSyncTask.DownloadDataValue, progress)) + } + syncStatusController.finishDownloadingDataSets( + repository.getAllDataSets().getOrNull() ?: emptyList(), + ) + + syncStatusController.initDownloadMedia() + repository.downloadDataFileResources { progress -> + input(DataSyncProgress(DataSyncTask.DownloadFileResource, progress)) + } + + repository.downloadReservedValues { progress -> + input(DataSyncProgress(DataSyncTask.SyncReservedValues, progress)) + } + + val isSuccess = + uploadEventResult.isSuccess && + downloadEventResult.isSuccess && + uploadTEIResult.isSuccess && + downloadTEIResult.isSuccess && + uploadDataValueResult.isSuccess && + downloadDataValueResult.isSuccess + + repository.saveDataSyncState(isSuccess) + + syncStatusController.finishSync() + Result.success(Unit) + } catch (domainError: DomainError) { + if (domainError is DomainError.NetworkError) { + syncStatusController.onNetworkUnavailable() + } + Result.failure(domainError) } } diff --git a/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/domain/SyncStatusController.kt b/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/domain/SyncStatusController.kt new file mode 100644 index 00000000000..7f8db975878 --- /dev/null +++ b/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/domain/SyncStatusController.kt @@ -0,0 +1,154 @@ +package org.dhis2.mobile.sync.domain + +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.asStateFlow +import org.dhis2.mobile.sync.model.DataSyncProgressStatus +import org.dhis2.mobile.sync.model.SyncStatusData + +class SyncStatusController { + private var progressStatusMap: Map = emptyMap() + private val downloadStatus = MutableStateFlow(SyncStatusData(isInitialSync = true)) + + fun observeDownloadProcess() = downloadStatus.asStateFlow() + + suspend fun initDownloadProcess(programDownload: Map) { + progressStatusMap = programDownload + downloadStatus.emit( + SyncStatusData( + running = true, + downloadingEvents = false, + downloadingTracker = false, + downloadingDataSetValues = false, + false, + progressStatusMap, + ), + ) + } + + suspend fun updateDownloadProcess(programDownload: Map) { + progressStatusMap = + progressStatusMap.toMutableMap().also { + it.putAll(programDownload) + } + downloadStatus.emit( + downloadStatus.value.copy(programSyncStatusMap = progressStatusMap), + ) + } + + suspend fun finishSync() { + progressStatusMap = progressStatusMap.toMutableMap() + downloadStatus.emit( + downloadStatus.value.copy( + running = false, + programSyncStatusMap = progressStatusMap, + ), + ) + } + + suspend fun startDownloadingEvents() { + downloadStatus.emit( + downloadStatus.value.copy(running = true, downloadingEvents = true), + ) + } + + suspend fun finishDownloadingEvents(eventProgramUids: List) { + progressStatusMap = + progressStatusMap.toMutableMap().mapValues { entry -> + if (!eventProgramUids.contains(entry.key) || entry.value.isComplete()) { + entry.value + } else { + DataSyncProgressStatus.Failed + } + } + downloadStatus.emit( + downloadStatus.value.copy( + downloadingEvents = false, + programSyncStatusMap = progressStatusMap, + ), + ) + } + + suspend fun startDownloadingTracker() { + downloadStatus.emit( + downloadStatus.value.copy(downloadingTracker = true), + ) + } + + suspend fun finishDownloadingTracker(trackerProgramUids: List) { + progressStatusMap = + progressStatusMap.toMutableMap().mapValues { entry -> + if (!trackerProgramUids.contains(entry.key) || entry.value.isComplete()) { + entry.value + } else { + DataSyncProgressStatus.Failed + } + } + downloadStatus.emit( + downloadStatus.value.copy( + downloadingTracker = false, + programSyncStatusMap = progressStatusMap, + ), + ) + } + + suspend fun startDownloadingDataSets() { + downloadStatus.emit( + downloadStatus.value.copy(downloadingDataSetValues = true), + ) + } + + suspend fun finishDownloadingDataSets(dataSetUids: List) { + progressStatusMap = + progressStatusMap.toMutableMap().mapValues { entry -> + if (!dataSetUids.contains(entry.key) || entry.value.isComplete()) { + entry.value + } else { + DataSyncProgressStatus.Failed + } + } + downloadStatus.emit( + downloadStatus.value.copy( + downloadingDataSetValues = false, + programSyncStatusMap = progressStatusMap, + ), + ) + } + + suspend fun initDownloadMedia() { + downloadStatus.emit( + downloadStatus.value.copy(downloadingMedia = true), + ) + } + + suspend fun restore() { + downloadStatus.emit(SyncStatusData()) + } + + suspend fun onNetworkUnavailable() { + progressStatusMap = + progressStatusMap.toMutableMap().mapValues { entry -> + if (entry.value.isComplete()) { + entry.value + } else { + DataSyncProgressStatus.Failed + } + } + downloadStatus.emit( + SyncStatusData(true, programSyncStatusMap = progressStatusMap), + ) + } + + suspend fun updateSingleProgramToSuccess(programUid: String) { + progressStatusMap = + progressStatusMap.toMutableMap().mapValues { entry -> + if (programUid != entry.key) { + entry.value + } else { + DataSyncProgressStatus.Success + } + } + downloadStatus.emit( + SyncStatusData(false, programSyncStatusMap = progressStatusMap), + ) + } +} diff --git a/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/model/DataSyncProgress.kt b/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/model/DataSyncProgress.kt new file mode 100644 index 00000000000..1f5f61fafe4 --- /dev/null +++ b/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/model/DataSyncProgress.kt @@ -0,0 +1,6 @@ +package org.dhis2.mobile.sync.model + +data class DataSyncProgress( + val dataSyncTask: DataSyncTask, + val progress: Double?, +) diff --git a/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/model/DataSyncProgressStatus.kt b/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/model/DataSyncProgressStatus.kt new file mode 100644 index 00000000000..d233e0e5b51 --- /dev/null +++ b/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/model/DataSyncProgressStatus.kt @@ -0,0 +1,15 @@ +package org.dhis2.mobile.sync.model + +sealed interface DataSyncProgressStatus { + data object InProgress : DataSyncProgressStatus + + data object Success : DataSyncProgressStatus + + data object Failed : DataSyncProgressStatus + + data object PartiallyFailed : DataSyncProgressStatus + + data object None : DataSyncProgressStatus + + fun isComplete() = this == Success || this == Failed || this == PartiallyFailed +} diff --git a/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/model/DataSyncTask.kt b/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/model/DataSyncTask.kt new file mode 100644 index 00000000000..c7b4729747f --- /dev/null +++ b/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/model/DataSyncTask.kt @@ -0,0 +1,19 @@ +package org.dhis2.mobile.sync.model + +sealed interface DataSyncTask { + data object UploadEvent : DataSyncTask + + data object DownloadEvent : DataSyncTask + + data object UploadTEI : DataSyncTask + + data object DownloadTEI : DataSyncTask + + data object UploadDataValue : DataSyncTask + + data object DownloadDataValue : DataSyncTask + + data object DownloadFileResource : DataSyncTask + + data object SyncReservedValues : DataSyncTask +} diff --git a/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/model/SyncResult.kt b/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/model/SyncResult.kt new file mode 100644 index 00000000000..1fc194ceec2 --- /dev/null +++ b/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/model/SyncResult.kt @@ -0,0 +1,11 @@ +package org.dhis2.mobile.sync.model + +sealed class SyncResult( + val name: String, +) { + data object Sync : SyncResult("SYNC") + + data object Incomplete : SyncResult("INCOMPLETE") + + data object Error : SyncResult("ERROR") +} diff --git a/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/model/SyncStatusData.kt b/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/model/SyncStatusData.kt new file mode 100644 index 00000000000..bede24b66fb --- /dev/null +++ b/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/model/SyncStatusData.kt @@ -0,0 +1,33 @@ +package org.dhis2.mobile.sync.model + +data class SyncStatusData( + val running: Boolean? = null, + val downloadingEvents: Boolean = false, + val downloadingTracker: Boolean = false, + val downloadingDataSetValues: Boolean = false, + val downloadingMedia: Boolean = false, + val programSyncStatusMap: Map = emptyMap(), + val isInitialSync: Boolean = false, +) { + fun isProgramDownloading(uid: String): Boolean = programSyncStatusMap.isNotEmpty() && programSyncStatusMap[uid]?.isComplete() == false + + fun hasDownloadError(uid: String): Boolean = + programSyncStatusMap.isNotEmpty() && + ( + programSyncStatusMap[uid] is DataSyncProgressStatus.Failed || + programSyncStatusMap[uid] is DataSyncProgressStatus.PartiallyFailed + ) + + fun isProgramDownloaded(uid: String): Boolean = programSyncStatusMap[uid]?.isComplete() == true && running == true + + fun canDisplayMessage() = + when { + running == false or + downloadingEvents or + downloadingTracker or + downloadingDataSetValues or + downloadingMedia -> true + + else -> false + } +} From 5ea695eecff7baa81ac557720d3278f492c81f11 Mon Sep 17 00:00:00 2001 From: rohit Date: Wed, 11 Mar 2026 19:22:11 +0530 Subject: [PATCH 089/114] test: update testing DB to include search operators --- .../androidTest/assets/databases/dhis_test.db | Bin 10506240 -> 10883072 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/app/src/androidTest/assets/databases/dhis_test.db b/app/src/androidTest/assets/databases/dhis_test.db index 3e6c7f617d0e09beb7a55ca8f443c3643e189b42..401d0461abfe0eb72283da3c987662293c88d92d 100644 GIT binary patch literal 10883072 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�&MF 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

7W_=$fHJc1z$Xa=OYMian=4w@GjYixD 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

>Gf+O8`=Nw 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

_~7u>+7&?y!Qyk`34I8n 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

ll5mkUvk&a1OnurVPEO4+dkXjn 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

)boZz*?!&@j#qutI< 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

YDw%xOtuDxS<33i$|Q&Y-u3 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

vERhcuZe!N5R7NdWxS)kiKlSestrdZnunND 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

_8=bln3 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%0De|v-i|P%^FH1l*$}dSk)ygkQ zKndj+B%rwR^Ab=@`8f%wO8MEn=<1bU*;`a+P<}=Ns!@Jg0;*R2vjmh-eo6w0D?cd# z#gzXf0aYnKu@_yP@?Z8A)f$u^mw;-N7bKu+WnThHD7Ph`xbkBXP)zwz38+f>4|~zo zD*thBQH??QcM?#I@*@&ZweoKzpoH?n5>QGRJ0zfLLgRVn{;FS@w$EqjZCc>5Cxs7Cq65>U1BbrMiQ`C17mu6&II6jQ!h0;*EJYA?E& z^7VU*!V36G38+T-3JIuM`Em&;q5MM$D6V`Nvi~2O`tsCzco(pI5R>m=|-Mo(D)Z4G+HPzPl%T$tQ(`4w4xkTUWSO!e;Q zqkK7oz_cYoP3b+1M$>gb$7=Lkgdp%z7=EfFMtxzqG+jSvIr)etdw2CAlg=>MPcox+ zF>KDE&UT@5^gR(15FM}+IgNv@_@D*lqnhYFvA+hW4zhdm=19Gkqmrqx7JA3gGlpso zhFl1u10NM%YLp=<6!`w+$PDuP7Q=%azKVSG=XGUX-r0Td>YO==&1%qbY#v+&kmnG%|6Dp5>@G#YNSFWZH#=3Z>Tcp9G0$J0+obHznK1nhpTz*7RnaKkdlaHn!mXx`X zC8ZXi(jk|Z_8Ae1;9vvygOLA_;N7*ErE?&!A@&+x?bCqI^n>;`#p-QyaIe|H|5X*KS7swL5RUJl1?8h!>uvTSEys~z z#(9npH`7|$VT(r~r3mB)8AWtd4I=t2i)bFClzbd>pkufL*g4QKq!M_r6!aB5T@xS( zDiH`$GK%HM-c?lG2xsCkd=FPaKI&}G+=qM~#~yxoXIGxmr3}SP)f@sH0|XR-XAJfI z)FWdA$f+iu45ml*PoaI@@ZOVK=XDvQnV{WM1tQ?=47npl#~{Ns_yUU0x^t{U5)ITR z4G4J(H;H#;8`{Q>5q2e-kxyu)=k7lN5jwo5(DtY^zOFx|YGi;&&^ zCeb;ZLYa&A&?d8{d~(XLdAbdz-(d4p)se{(W2bc05)c9!B*-cuO^l$B*+ak~O3O#O z)C=}E(HIP)X5<21BN@^$z`%oTfPldp0l#05kX4&sQQzg|4W zU8f||5iYKa2u*`w=lBBo}M78k*;qL~04v;9o!f_6c zF0%{;fv-jB**Xs@o%nQi;0M8f^`z^eCNReArK0(=@zkdP|G`yi@ZYF{a zGSt-;U;&2w0`QCxw7V_|c8jxQI?ICE1oV_>GF7QEBx%{Xu5~$e<&%`@5&aurnw3i8 zCt9+B^@9QAwvK>`w;|TNkBC}O2c7_%SSuiyRCm5&>n1yQy=BnK$N z+637GMupDqIPg`0{h;9jk$;d<@{uIruzx)uIXLWdl!MgfINTe8T|Hz9fM*OzarTc2 zZh^h+-MIp%s>9cjPr%dRcy|m47##217*|(U)VR9T0z{C&9G8Qms3Sg8mo6b6xrabE zeH49+L)~%#QXoRnc8r#H`m_3 z`h(SFg=ytim%p-n!%}cDzwjGy`v1|~ZL>2or>CDf^_s`|>_6V&6M!e$)`6Ku`SV>{V9ICi{-aZ0n3?W^_@Qgv_ z{H1WG<;zmAqk?Nk@Qi()qbn?;VuT3c3mv6FW=;9zJhK<>8_?GPmoh|2p0(+@Xb2M9 z!&M@K_>7Tr@mhN+lJ;M2_pL3TtY@6Rsjo+51$#Sbd#zfPH&BnN>IE;51q&3!?i-c# z2oYg8hBIt4Q-+*xbdDy|WpE>5knJLa;Yb=iW5};7pQK*_^^*pc(SiCY6^NIDCAEty<$)MjMj<%g zp~k4r35O6_)#Q`$XfN7Vqmdb=KC;CKjWggT%sDhNu;4=EzC#g$oVbLK6|K6LSzSJ1 zzue3933TIjnA_E!;p=v{+ft9h5g%mCxQH1Z3`G%v#0W%QtkYExFK9zCwosrXV;q%7 zE8Uf9M?R%pn2GqvOtf1xd37MHDKUOP4rU@`uo)e|0i|a)8MY2O9V!E26vZxqOq#od z$*d-yj9=>6`xuZh@EBohJ`M}#0~x{wxWGJwBr{TE?8x-70UMzM4UoKw@=19ZH2&QtRNrt4ovuSBNM)m#Mhh$$c?Q#1l^<#=t zCr_S)ljro*R4X2j5|vue>C;6xl82~3Jhk^P1Ga#P0K@N9YwyL>=Ts^cfHh|^)mhLz zV#K|K=3cet9HzzddR58F#exQgnPvJ>#i?6Pof3P?g$s^sKB7z5(_X(N5;FS2&>6$$ zDDYv+j{J4dA?Tf_L zLu%x&hv^H)NBjDGrtgKmZn*^}74%iMJG~kYR?fy!5l5r|zJzdA8T|h+y{HVMy?m}W z-S;R?ZQO^FwZPns6;vrt)~w0K-FO6f05W0#PS~+l;T#11ftk)EIAEbZi(zNMB?Eo? zDwrJSFf|6?agm@=!OSq237f7{?NS~(JlngW?^c|;Z-7Loo4AUF2_01fR~3_lAt4h*|j4Ihf(9EPg_Jo@qI?U(cGka)s?w2M8D=7qMY7U_yTr zz$0iZ^b~z72nVZG6b=QGq2#u*8W-7&q#`8KMJW}|fa5!; zbbc68<}-#()l$-#(j&^?`~cqKqsN|czhz+hB`%CyX8j2?OaPCP_MD!v{}eby4Dut| z<5^8A(CXIHH6RL35y+!_7 z1_LMu!9yLMG2%u(p&ZLmaD_qCZGue*<>&+xQGsI{`NAe_WEvcNUn~bo&BdN{vuzOKBLwq}G!m>CxKf=d z&{Pg4DZ?_tMJCZng+~T59ui?Adaqz(6NsAt9;NyJ^a}kaA)1E+9140dU6k{fkp%)Y zVdEOCDogV$gT@h**62PH7@v1#x92}*r5Tdy0s4|_ZCTfh9ki#am^FP2-VpZ1zcy!0Pb6gu+YrpwW zAA-YPd*XyRH+?b8>+2eGfw(nlk3wSDEGhnZm>$LtYv1Tu`Vh|b$Rm%4UDVWRn=?gN zgIp!5H^A?v5i(QP!2koX^lmMnm>|n69?~1wDEu zv!91A63k`0CZ#d_UB=H%s`Hf7S z0~eiu)&%eM{70VtW(BJX`5xcAT;~P?n&r{Vv;K z+RLms0p$tcQA%D29-=}5&!LB?H>rxV!A>To0nTHB<`cl9 z1pQX;NWTc*gxf6&q$c4cs!5{jYr6m+6?!&fyCbnHmq;Y1F7bLo{}aHYXuSw#3_UVq z;M?qwB-v_2pijU`CBIQ;amMV@BspVbSDk?Q1n?+9F95&(Jj|GZUw^t`Q>jChL<`9s6@1MQ zOTtUl3xlE9GiCOFKLLXY;8Db$4^ufeGL@4ld)64MB)fGSkV2D2wHer*B75=L@AZWK zCxA!M`pw>%J_S>G5OUt@kER^Pg5Ju6qAE4~!j2a#4&aHAY1ApS@>gjNWyOU2WgR99 z*2|1&bymejKrA2HGA|yp09(sWhNqK+l13J~QfEBERMY zyeEK1$$8!b{S0V(2ey!`!Pp9R5?r7Jkp@~c__&}ypdAg;@WYK7u(YW3_i7C1G+JB$ zkD7Kg>T?8+r(^zH%wphOwg6aK(jz-Y($03>xn{u**_>mMMw2Wz#6O`WnS0W&gZ_<# zE(A?6XvN#kCYxzTeXb@GF-IC)NjwplNjk&wn@%1n$@xj}L!p6OUQ@xZ{qU zWg<`_+FYs$vEL(J)EnGC7FAv&f0ypiUw~t0%kFh%W*;Sy2cD@qdTu0~^zredVeB2SFYQmKo5a z+bZ^YwdHn1Eo3AVat|J8U&@>}0X$-Zn}4YP)DbJ6S6?VM>n2wkoGU^hi+A^r2~AA^ zkMuB??mwV7bwW4~0RiT4j*t2TIh(K{j#-#Koc%os63h!?n;d?4|1fC(ifXs&AW@)`4o=Wn_&gBUZsyHd|}$UxLdxq|3B1Caw) zqpuueq^H$Y?m<3#Ue-`3l4W@!2%vrf69e>(-;GXg5uXjvKpwgPtVz<_9q*eV6P* zrsClV)7*8j?JU(Q@RevX3TC|q+1dHuq52p*VgB1g{f9@6fDX>>FbAXIWU3GinT)BpE!w1}Fip0t_|Ko71(eA5xy34C*_EUhly zu{omUIZ)fQVE6}Wn-Ee86-xFDWr>D&yp+O_>RXHrZmfXiK0{7|Lw5(BgyZ(ce}yQG zO+aH1tlHHo*a&?JTws$??|64!nt`pJzfmuDknwp(lXQ?Whd~chkDgz@17VdLfZkw9 zP5JG$I`8-AvH`nkr)xK012HI&Ym;3#tC~1k@KHhT9X?hF+sJG>k+z@7%Bgc0^vAjT z?T7o2WA<9%^bH5Jnz>TccjF8m3L33Dm>4-Sy=ko=jV{GY!4A{=xNGjWAX+5kjNS2& zJaLCpM;MA#TJI^PqKt5L7;MLo?V7Cb|4$JEa1<5X%yIZ;K{g0ZtT5?D!J2bgy*8C8 z$IU(*(*>xxTrQ_e8+bDN&_JEAqHs=Kn1099(km4Dncr5tOmUau`nhk;d_*xn{dX%r zTK~P3udIB0_9-jxUwPBqKd;}u@`o$GF?;LEBP->V2WDTh;+p=&`p4#ewm!4oSurfV zc}2N$e06SRVfn|)k1hY>@?S6i`SQz`e{=bl6&IE(%TJxVf7!i!@AB4$dijRgw=XX) z{rl2aA(P*ubKDZM^x%?b>521-rMs6-%!HPfAgABg7XL}{<;4#!zGd;1GpfZGEdI(O zyZE%3^+oUElV*&Ir>DQOc;n*o%+J@qu<+CMBMV<&_~gQe*8gzaiZ zPXEjFJJ#Plli4`6(3}1ALUop3cxb^ld(X^kR~-xYt?CxeEZnsE2kY^flM5^J|1tlK z`A^LSR*%j9&HUTeZS$|1f6@H;)#7|@{^|4nxmV9WdH(F&GiJUGIRL*kw>tM*8{ggd z{KiLDlN;|^fA+@f6+hf~>Bg^bv^S<9b7E}6I`gd6=g!nu@0|I|na|9w&8BBxJo}$> z=jLvi`|#XftUf${^U^1lKCt%vwJ(CN#e3G?u=e|F&spoP(QAn{`9?LQ0Nf;I$mk0^ncKQk07TSz zN6Zw?JDgi51wbwyaPwUsu5v%&#Uj9(4mHd1LdSNJ698JZ)9EEETqLS{nE;3;ttnok zE4ItZKNJ9Y%p5J`YMwlEk46CO2CGw^5=-EIOr@>T-P(gk{}BLz zbei^&nkdsfy(L!BSktOTJMZ&q-y#5v87ijd*?QJ;`pp6$8V>Ub;8?|V*AoSRzGltU zSlrN2-*rv^RKVxjL?^@c?#dShKwhh+G~JrM61Y7mwxLqxh=48_v|?f}q&iuS8u%iW zTl|1nMIY36HFcZKjlEw07+c+%Ef@`T>)1mAz}`ye)sQd3=f^w(pc1M%a%n>|T|XnT zFyaGQY|E5_8P&6e5+vNQGGonT(tG(H$ zjR#Y3NhNUIXLqXb#&E+P#R^BY0>DnUG`Krf3&zj=u>eSf>$w)zEmwl)UM&DBe6m#2 zXc&9T9ghqdEO4 z0br^byCJPX<6v=d7~BrBnG-i<7XcMFZPdE)K=3++2%tKC2WfYxGzd*0RI)7Sos07$f0YZq)Oy1=UV?I-wLt`gI!V(qz;VhNV6)l&&NQ9Rie z0cMS{?a*X0&bc)aU}&f6sdy)mKl)k$5HEzXu1>+Fj^0`n0fuTG*urO@OS>V-0 zh4{@y;*6HzFmoWY{CS~7#Nn;fQc-QbbK+S7Ae?A3?iijcQp^7(0vryLflkL9rd!2s zL*<55jXHLp=n5r*IakLQsN-4h;!zQh4)eJr)-JKPib5$Ei-RKBS$9_Ee^)G_%SFkO zy3S~B6z6Fms^f6R!594ah z^1q6JAX&_KjB%%P{mBBr+lgfS5TU=Ooq0?IupXPm>!_BQn=Xg|(ohN*a~)gw=7I=_ zM=IVz!A9p7KO+D8gH(aIUc|#w(ef=v9&Q@UvSJlq$z1mZ zolJH8RU*I^^<=tLzfQgMun52%{=BUOwx{b}DFEDgXVHac8%^^}QUpZxHdC?Hv=BFn z^3?6KCejA7h=&x<6-v0O9SctfOPu?*st9o9v97PwV4HV}UzC%#T1q@!vzu=gsdbiU zV+E@;tJRHwP{pb4I#OX{GhICOJ^|q1u%x?g&}ps5{#pQN3iY5BcRH)~J4Fd&!R;1Z zOp^@N?tHmWqENxYc*R#KL}%h6Ae(8HEg8MPIQwF;(ONvC(dw8?_T+~|0N5y+`f4~} zn0~qlfHRjr>uQ=q$A2II?5$w2Xh0|8*;Ehfh5 z^>-rIh{C{D^cxbqC+gST{#LO>E*CKeRLz=qL;a9Ss!LMd@Hkt1N|5B9J4l|2Lt8 z#o?`*)kHY#xG5(9%nV!wsN|9r*R+V3vFq};!dlX7oO`BF!r0QlHA$MRMNWu9$yhfh z!i2VAPA-URl##P`m{_0@(#<8rDiJI~MT+`BWl2QL=(UoGcE}nIoe(!92Cv%@EVAK9 z{3h|6Gw5ii!w@I%_VVk5HuNc~6%Kehwv0lYL3;4^io5uBG%$aSP(qjRQDA2)yK6_p zB}o_Ib(jvf1v*P23w5@pE?$KUz`kSR{zGfg5HW4A?FlWXg*LPpEY9XeN#mHGT`x>o zq)cOnfeDRntO2BO;yTB7N$;YR|1358lZ)?98iR-PdO%rSeD={7yF zqu&<*_H?GJvzNiDW_W=B@MOJye>ql5I}HyAfQ&a->O`q%y=jOF01Jm%y1XS&Od2!- zAdyU|m~00lJo@hlfLy#&c3V>)a(QVeu!3wSy#a5b+ zhKabVL7DX8r=IlEY@EnP)r?MTBhMvEQGdu%)agDV_TsPRA}PBDH|fM}PpsCc=H2xu zd{v@Askr=lf7ey_*)+EcRVvnGNYgYYf}PD9MSwmRDi>|#NKVxd0AP%CIciRf-806I-l-G<-JR~KF)0$lk-%b+P~+NVD! z0vwqT9jMqU#EC@_U{6+q9c>h=o)u9qv|>1=&eyx{yFMtCFdJfams?wi>$PD45VYsI zsXA&v)~M; zindCSc&dm;H`MObb9Bo~JV^kU>~u62OX>>+LfoGQwS+2bF$Yq4-EqJ{0uPGR+wfdB zrZH+off6>vjSa1njn)ir6B>=^nYLPEA{;91c>!RrcM>&Yl{04y?-c+!O}ESvNq>`B z5{ELUZoBd^XNGq!yMz){mBi_6qwG%KC4Qz<(i@jEC@$RW04H-Ss>XV5o7HLMM}BmW~R5bT!`0o3Uahsd$YD$nh;5 zMVFhd4e@l6PP7wIucjFCoLxZn|MjWwOs&6t?bE9tRJ?5^z1&?Q7k%?TnODp$%q~uU z5MKT-`RPS2979&=VRR`zTgv6zzF@ePim9~ldoZ=R=-v*_sW%SQ9k)^1pl4u5cxy@9iE5NDDP7_TOlAF zvEYCvrAg#VT9>Xuqw<;XXT8FOYsapA1tZ-`wVP?!1L2rT1HT6o4{)`q+#);3UkUu1 zKt(?Q3_Vt^P($)*{p0iD3)jGapI<&dh~*h@Ol&jaae3rZ(e0SCn zONPEX<&4H?iw6pIrUmQ((E=eIuMkTlh0IlLUOr>~q?f(0hQ!U#U!fR+y&mqaYa`&) zriR~xu>~SrHU(kB@DSOfKJbe}f+yYJuTV4c>3sEh|Akc~YUa<+i%V-6D@L4ZOG`&L z0Xq;ia692Z6JUQz0TjowOW?Xj@O>Q_QDEchrMSP*})}i$wr1&Swi3>tOgMSK{u}mJ0u0nRcu^7Q(n_c zU4TTfM|#)xP{=PZcIQlfcPE>sv-u);BE#>&STfNe`|?|mPu(ldTQ3M%V;}DAB;3lB z%w(pR@iX=^AO=DO0)QT9$S2Y#PoDgbbSs~cuUeV?+o_LCzheg3yVstx_|w@>&pvbU zN%OV!KSh>r#hnYETz>iNYmohW{$|Co^>=TyK`-#Lxo;}^i+{BAf$6_f`~d9RZ=d_; z<;u#Jm+wUu?zvlL`SmZ%e0$;RYu$}^ZM<~xLvyd5`>l1&jB4%~bKGojj+{9;vpyG? zyMN|0U@iadhIRD^i#IC%Z1J?>y=&UVudlv$>G`XFw*1uDdzOE5<$bGvu<`oU=dRJS zFJ66kae1}4^zUn5Tumw-p1pO^yS%vkkE@PV9oWn7RLrg0)<3p-Z1!7g+pBYHN7rv( zKeF=1m6uJwW075Y#qte`FReTeycvE;p<8+sc`vMfY4#}_A6@_6`pjy7#kFEs{FT`? z@F{rO+8dA;!^*`SLF>y?NQa@Y9X! zHm2v!t^NMMgJJ3P(v9l{@Co?!M++}p=q*%{U&6wD$RAy3)yFCvfwIP{Lnff@P-Bk!r;vmf(ZVxHUm^s)ip6ZFF*a zkEzj#fnCob0y27wF=SxlUg9PJ&~~`2Ev%HRgm6Le>j|=IRomv$mTWf&>M~ETOs2i@ zU|b(xI4krLjJ8Xh&y}%ij|m1nPY@^KIMHok;Tr^%tS7*gGj4AvfOFRhCN57Pr_s3@ z*@%n0L9m>70;v?|qQe+%xOqirG+?xHNuR?XG2JQ{IXnR^UZbs)y<}PWnt*B7kn~bz zO}16J?b8CF5%I)hZciu^yR9#@;r2%Yg@B_*Wp#oL&|^)OTE!q1PTJLiF3_X3MO*q> zCg5qPKQ2@uEFRYD$>-}0Oi=uKEKV$)i&SH=rY0`*($S@I?grl}bTHB4S=SbWKAPhj z+9!Nd#KXjg6E5~|d4hC;}c(d0wN zRs}#^U&D%KohoNMHaGt&DZM7^ttPQt%^!)L$_tGe5~{SD_F-7*=sN{~Q}3V+y1Ld# zAAP+52!i3DDdmtZwPYq(pjY}_dz z)?tF_Kr+K?1J}Gt1b8Ai>RdVLC%jQhVNo=s)tPub6f5JH_c~$Hx$72{*`7A3 zFx?TGP=ycRMXy;?aP!kO5ukBrylR~`pq}~%5kO=#iEh|z$}WgnZO-Vnq_ws#?_Ct_ zX0=+ol(P7#j`ljS+gi0#GIeWIg}+X;XjL(ub9Bi>$Tl4n8m(fE8Xsvg?%dk12>`aC z&iG@I2(O;{qzG_WyjUGKwW%Y*q;oTH8?97Nn@gG1%;F0q#?}+{m||p=V+~+Y_4bcQ<7E2U8oPqUHn0G-C zIi657n$PkEqc*%KNGVS!=&NX2?jq^F4il@mDjFSSc4Sq@Ux)ziDvRZsXZYDLph z6Ylt_sg{?xIoZ2@DZFKA2REqGsw4C-&gc2AY zD#h`7z@szpLJ5}A1hZV-jVBEv`Pyi@sZM7gU9tX8g(@~mr}Y)_v?`%52mq5El>C9b zuF}@41b{V}jMeiL)uJ^YTKwcigDpsUH=he+%t;&OZQmgx;s`g1c(%|{7w`BT0g-04 z9=6y@RX%)2VrluJMucuKTczbPs~SZ2j*~(a*2`35)~?2?yZxCTHRc2HH9|4-K5K!wpe}IX>mGuJ9fCy$_2I6YZk;3tl! z708rz@j(%ww^AXesZ;UKiC?8XQ>bOCWnb4fn-xmf&2G*d^TuiW;`;@F)gMS|`A(S9 zE{hAW6*INE2~8{&UlJBAkHxBEOC;qeXy#7~6Ud?~RJgp_R1e=RG-3AXxvGb+M(O#N z2mlk!F+MHDxXW|m=VDAy{x5u z>~PmZ7+%ra*of+eO`(cY(+Gv?x)RqsE>1DM*Jx-kMrSZ|z0j?ji&|BNTAVCfPY4pn zT}}G36|71JJtqX)wFjIJ8*1>jY_v{@8-pND@@=N<=4)r)Ec6m^o1A%Fi1Fvo3hSQ7 zWsH}i6*d>G+z=5;XsuC~rsHPG!Wed=0C3ke2A7-9cEibYH;P+H z18ayo@N&~YFMUX;WAJ&oZZemR5%ZrH0D1!QSh|Zgp1fAax#nVr)r|c1>8-J?fA-<>~s> zVaL)lgc1ZB%~etztP)#%f&jqTa@%dsQR(d3-w6OLmuXwQv1Yro^kD&D>Bid~x)HM1 zZW3pV#o_eYt5H8zyzwWfguBZ%*sRBH=;(E#)Yh?1OQ>tpshs!B2yGZmg?P%SPgE<{ zerN6bQUe2?AO5bdl?_+$UlXdhw0ydamtEb!t%4=m<7}6WS&Ockaoj4dV(NU*%0uWd zysi^IF?Z9Ka+sneQ<=U++|;n1h)Y$^WRm%t9}^n&lsR{? z?Sa~n>xC-D5ZmFSS=@uoiCj0jonE%#j9N7F7F5FB%DJpzMq4q4Pl_euJY71`x0ln7{@9{NS4o6sTi+QhG7OI#S4`T{Z zUQ_(!bA@i%E@3Ps!mLw|l?4D7x2PNiXM#0g!cyST)8<^xo=iGBCxzwJ-LRze1zWk? zEFAxPp;1eBE7m-@vs5q1T1xq{2(OP}t?!OYMbWK4ocnm~r%<;D%`~Sw& zN2b=ly?*oB+Nw?Q@XGHkKXWO+c=y7Q`I*^o&%AZ|Gw}NV`#MZ$S41-&7@F0!Q&Q(r`eX>s!0?~?D9hRofKww7*z5uZaq*Q=cuW9+3o%i)( z7a*1UNc7)K!ld#sT)7G|9r5Gf>;Og#A~%3l0RlHyNO1SPy!!Gfd;59ff{?qN?$P2< zH%n2rlB=ej&LW^?K+l1PT8g%D)!*(kfJq~9A@p(WO+MS+bN^ViY!J6SA z?OHv}W56;EdM=Y~RY-$KF?sZz?6DkN)z;;+<=r4Sge>$!!I89NlATtvOp_L1i5fkZ z$(Diakl@MHYFa)+-UajI>b&8?t%xmbj}-Lbo#Z-92JS2Yvi{*hK7&zbqnnKS2{nLG177;u;D7;t(fR~6MG zep}HC#GtAAU~}yr-pepcC#U7Tt=msuj2syF@63R6IitmTMNv*E+%U^?ll-P*(!SV? zJ5q}C-q6>^+XoaF-!nTTHn-rx=7`-E3HvUBynSzLt(?9HPMh02V>fL~dculeL6e8$ zDwL>syH&1ttBC)QyeaQ)X-*%5rfgn6yK3sBw4gSy)(n?S+O~YiZC&+XSLi2>nqR*ICDk0+rd?joZ7ct1d7+C9ean7CJw1&ays7G zGMzq(=;+*(7&R7Uu%70UD%?KZJWvVe#Kd1;=d$s&O2b6$OWi5ooyl!d!^{} zlq6C=Z0=OTHW6jp%wjAGrV0D+;NcZcPRiR+{J%JU$(Z1Wi*H|e75~M&r_4L&?w>Wy zoHO;V$@?el@K671e^}9J5mJ~~E5=PgB@I*dD3-;^aNaEvL%<~NKVa(XBy>v!mw zt!NRNV@XdX2TrjVf-Q0X!B$^%^^CnnD2$x6PqUuWj|bA&MfS|aR>o$ck#>gV#b^x( zgHTM|e<;=$Y1`+sej>BOl}}FXrV`x@v>E5i-naMh3x8+0pP38EG0WdCtgU({~1 zd6;Q-)bhxw`y>qI_Qlej>7rt@+oWriTF9-2W)ZrgcBkzMv%T(27$Id3zkTOax{~$>`eX7o{VRLj>Gti`p;m|+Lq17H z;$2yGuGFGXC&*88rz!TO2wkn(XL5REqR0vR7^Gk+GzoT6urYPjv64v@U8(|*1&)@e ze@6>L*ftZ>?N$w~XmUdS4UUq&8WGYtN?Pl%XkF1&ryLF|7m2`$67}yyVF=kY92ho+ zQZ6|a9|hewxkEQrlJ-(qn#d{}NH@Si67}yOVW{Zo4h^knazY+})vv1%A)VDPe*|bB8aZtrfh6mdh_=q^SF`3UryVAZ+@J!=&`fiHsRquh z-&*>@PRGM6ot%~r^B}r^@#HmQaIfE|r`|R7%BiPMm8R~T(ocz}E`jg=e=+&h$&XI{ z)8yYwo|?=|dL~s%KU#Wl>4QseSbF}_-Ei8Sed)%fE0>l8e-M0E@L9oo1g{c2OHdU& zQD78E1&h&Po|bn# z?-*}#{-^U_n*Z?po916Mf8Ts^-Z_8s{MGZ1nR|Hddvl+k`{%jW&OK+YF&COM&oOhC z&+%t}GyBciPtLw`_7$^#HCvp$eO5Osgfj%EW_~vFm6-=--aPXX*o&W(lR_e*N@wr<>E^Y0I=?`o#3&)bA#*nLIM_mx&)vY)pIr_Vqu1;_iv)gl*!6 zi7O@q-!uNI@n?=##_#%Hn>zWQ*zhA$Cyq>PyYay-RfwriccBuQm@;5c z5v9kVLTcswsT1ezC|4q*Y~8O)m6R5PGSo5#l~WoFDx=gGR7%131CMB$L@J?f#h_y9 z77Qw)ZpNTO>Zb0dNhw|Ts}d!3BL-!t8!)JxQesdUrNE$4iou`~O5TM^6(Z_W7*t4o zva1nN1-0J&Dx;)6jzJmfV;EFU{Tl|AQ6I&iQtAN=Dxp4tLB-UEF{p_85C#=e|JvO& zhWbSJt8yjv0SwAe@5i8W>R&LZjQVE`Dy80sK_%3CF{qe&4+a%c@5Z1)>RsJUlT#n; zepRNV-hn|G>g^a*PQ49-%BZ(uP$~5m3@V}i34@BMH)Bu{^^X`-NWH1MX)@}a-LHbd zcq0a7s5f9xIraA#R7SlXgG#B_VNeP6S_~?tUV}kJ)T=S5ka|^j)1=ftbiWD)Y+>bV$HOg#sKim1QFphD`|-AxlyFYbO-q@S-8MLOm6Oim9hyP!aWH3@W5fbvI2!J*)dwp^|E0P=>l6gUYGEsTu}VP*n^nrz#j!MwKzBlqz9R z301_PVyb{aMN}Sx3aMOI)4*WVyI)l(sSE~Xs5AzZQz;B8qmmd@N+mF;goh;K@2LV0vJ?AJrRRSsk<4=6;lojDx%gfsF1REH%(6YyI%!w z#EL-~%7Q`Vlo^A{s8tLqrA!!9LK)lZ|6{)y6TE5h9ShIrr+8P)PtN{e=Ht^(oqF|T zZ9)hC^gr*1HJ`p2azX4QJIN*J0}fk8>VYpXqmZ1JLJCdVe+q3sr_%JZba-f@$+Jjb zg%yvRP;#xa;!%mmtlFfpT1}ULOh~SA$Hw%v;;|Q@du7^2CW@S}udpXiKLHVTN9ztw z1B*#Xt`GLS;Z+xR*5rqeedbttt;TpNwGf>rFd3`*~2SJ;*2E)!!%O|JiLC_s$hwiM%ToSpf(o_^y zffi(824G^Yg?n0ieDpGO5#$7Iu$t3yL{OvE;B-fuN-za!W5q3619HG!lJxH`_0XOD zt~?%wRB{^E*%PN_h(=$_$I)2JIhnAnkSK-G5CkWQyCnOdMt+-(!p``kkU~z=X&8>u z9m6qRsW^kCS|k}m^B}lJ+%?(V6n(!Yk zoj0Lz(YbWqxK^z)l4vc{th>=Bvi?25y$-b=WLe~$_f6Jx+K5KPI6Kab2wkWWR<6Z! zYB)++yTl+RAQw&$55JOJX ze}Z1E?9i)VC2tf(oGNK41SCO#A?rWD*qf-HamJ`5k<;~EnCErKs&(f1WIC*i<=_J% zJ8TJ;frBIK-^1CPuKh+GhbWw!)bGH@30kCsosSbd*}OGju|{-o!-oiNCV*#vQ^j5} z$OwgzllE;GxXU{Ru3NcmQRo=6BUJ{%AQa&)7wF65+*=bjEgUu?8I>e*y1vy)p4K1- z?DE#-+=LKSr=1!@Bv^LAWPpDA*0A1d0D~)uytQ9qS5B*ua@^Cphih#qt#$^gT9+dP zrx3xt2Jj51z58^%4o5CImEVBX5EY`bvl?PZX==fg(vypz^G5mla+hts;{kf@#w7G&xm_!3ey$ObjawoVP{cDY6%gq)Lr&Fyp!i=fc5+Pc(BelIPVwVB$Gl?pPqUXz zKRmTD`HYF!xDozwY>d6^v=1@rYPmSI%Qbw}X0RGB*5Lde21Y2;{|JpH>TpmC9Qsr$ z2g-0qX`t9Ro(m=;Avj%ao8!=}b;FlI&g5_4h$AnesB^?o+8eLRg9eSk4ELHdFfy6` zM`kaIHr)gaKf@J3PR_4Ee>^+%Cn7d7VWmPMi8_H87?Di>BeEAcJxAm4WspDSuiiX?>741_&Q|6xxriuN1u9Ew|qTlK;l`*(nLBc-SFGu-mYsrfN%ezPEI zI-B2IE~!|iSEco~IM4!)kGy}!XE$p0>-3CVBsqaUf*liPL||w0TdcxF*4#3OS^^1k zxV##k1Do+}wg@|o4_yQ~K|h4Sx4L8Ssil5wRP zGg@$XBDRVx2`(L+RtnD}l;O5OwsFVy>jJi06KsDUxCr7dJvqtVayp6{SZP(bTup5y zsV@bDuCx?36T>N{@Emu+S-6ot z*%JIY{)&Xr%Ot080wSXbqOgE?+aL!)fyGRP?!hjdpM zQPfFyrTp1^D#?_cJ_FDLHWf}&U2b2RF*JULD}bDwv6kg@2!)N)tuuFC2N_X5&DuOubq7Gh zDw&*)Ke5xNpNQzVv2`OiCE2x_u+3(bTbE&Lo&rKbMUSX$PdYYTFANvMD3+Xvhe0py z+MyTv)r8y>b}nnnu#Tbt=R@&G=c9kqu*W9`!z!7ajz7Y#lsgd}on0yMvMb?Btd^Y& z9OSA1S4Ghy^xIP}w!3LNoSa>*aT=j8a?<`A@+)^B(mMGSi%%E{MdNm%!UlwabE4=G z?(Iq1HroR4VusZ43MVJ!4=}K9-!ZT>L1jKC&1=dsINnVG?uepC2(~9Fn-&Jo$dF1V zr{njn;OX0t19Gf&j5D}p72HvqGOZbq1H!=X?heS7_tEzHcTemOrWEp4{v0A5KkD>O zq*E+sbP}7}>S<`9a^RFOJ)Dxh+qqBoWb`u0Df}%L|Nj7;|NohV=kQ<8`}F)nbDx-f z-OTONw@h6<$shm3*bn*&tIzV6;4+yC8W5eRKW9PrHk(`-x6BP^GsDr$=3F^f3^hV< zGgUDWjud-@EijpE-V(8OA>P4@AnwPL^Dq?3JBEVOV9La_E1E>G42@Hw=b$azIS$%! z|2DcXSH2yBOmYg(frz$*DC|VEYZ|LcVQ!iWr3BE2)I@f03b#$KU32TO1(1`o1jnZq z5jmaXQ*D}>XLVWQbNh5aj1)ZwCueh-#V|9((#dHNfX)&@>Q=b$ZeJh&)U#skW<8mftcMf5LFIkOdhb-9CkFhx1WPk zv}vF4{2bVY*xGT65kO8352At0j%c82NM>WwK%NN}AWsXwyGH}~q(2zwN8}|-gDHi$ zl~?_x3DzMl(b1O{5Xwn6<*2uB~aw~A79z2g|XU~P5u1V;Ce^1=BlXI=e=@e?( z#jT6EaL#L5mDNNtm(s3>WS}7U zRcA`kP{B&A5;j~Z7GMOzaje4qR(GQZ&N=P~naMcP! z)^G)olQRttY#fo(abOcMO}*mGt*J7|GC&GiDIMH;6^5B1mQGH~6c_(rGbZ@W;(so@ zng43u-_1XNE-?Fo8SnJb$+u2a#%~?F=1geMp1VGY80_R7RT_8QmzMjj2?#IYIy`vx zGsX6G1jFWCtwSxGoWILh(fR};rIW!f+nkAtbhS{9BT^tPf=lT3ky+@Alub9JOUp(n zjGVN`vdsE8BCWIUG$mRSMJq~=*J%R6AZmhp=mt$%&md~F^2n*Xlnt$q0d?##_Do_o z8*8BgDX zqP5Po%WBh_L%o)A#mr$hQoVg?-qyNjg#0hbTXQZP4SP3IgwD~h%MMwpk~Ec?(FRlq zCP|1s_c4;TwP*kN=#hycC+tGF`|U}Hu+H6YnH6UwSq(&xlPZRDjNlXP zE;$uP+40j&Lr9 z8KpFG+Rle76l;jK&h?u9qQ)m$RoK!lCs2lF6w)bW#|PWkX?JKvlM`|t45{jlAr*>S z<++g1FH9o40?vtOzq#Bqp8!UBrf`QWz~hnRwIqUyqskT-s-ESw9!C+S!d!Hd{Qa_0@*1x$G80?hc+Exw}mN3-0(Vbi07# z)kr)6i}vlU=iQUq=w*`k#&ztm^>Yw~oh9f*$}TaxbosasloB#{@C-MDH*5jq16N%ku{}H>ekpjSs(_yfuUybhFUr~E!VU{>jFeeXRDX9mdPtDva&tl0!qL? zfR9nS{DZFLf$h^D){qaP6!K=$tag17HM6srTnfisnWR&yG$YFbbN?g0Fd2e%!Sk~7 zW17*3B`1<%FI!(gM0OUFQ;B*rnhR^!65t8Iw=M7t)W+ah8@dc~imnDT%tsV;%&@;; zP)0;5uSg5Y3;4DLp24jZ;Q1M@0CI9pLh_b}$mt|+v(~jlwqR^XqDi+Hz661%+urPF z7yEWo^vL0a+hsOddF0ex2`eb`h`P=SO3Gf(z)c_JtP*yZ!B-*h9E`f2@%<1BCnx0! zmcKrSNa=hkV>HL3@utexh`<&q_%;NdgORd(q(7{Z$>}%&Ix@RMNA$^T+9j0b3?*O#blc#(_xbZF8_D zdgLO>3A~&=x;~8v>>O93(guCLN=75D!}d-1W(1yt5xC9r;Mp2#`Q+3bZ#CDaP`X{z z5^+h!nBO9iMJ1uE6zmULQ0qy|BfcW&W1V8~C6c%P7>fTF#$GkHbgn?SxXk|p?+x>! z*=NnDrXHSr+r+K#4~PA8>f-fFL33F55 z7d>8%7bB7DYVk-U4d1r6{fEsI!9I8N?_6KV^(O=4pq%wJB-bA$n_0gEbs)!q=T^iaJE#1oNxuZvVJkL>i3-aw-{CwSEzzvev3`x|>cnBPO|fdD)Wz8fEAi z8kM^`rH3JuoJ2Y3z@>lY$h>S52E z?QGU-6_o;0jjoh|MhSX`M&)(~xbLYB=jlBfDoNf+Qns{y6m=5CQk>DyXsmLz)?Hj{ znxTWl=owlk^`7wXy>S-RhMaZ@YhJ$q(cZbTIZ>{BJ>Q8_N{3T&+%c2 zCMQ%3cKgTx?RqKxR^N`wfzM~FTt!jr$ldd$-A}?wz zrnNm+n=os(2Q7lUf!DWE>yJSV>|A1^cgqu6xF@%)vO(h%=;`jxt_Jq=wavgvB5&^F zx%mHCV}f5TzHgz)KQhnG8D=k-{`%Ct6Tck)&DgU>8UC}8bqd+|i`g?@IW^+Cvcz8# zYvT~wz@AZf24Ir3ag$+sk&?Ta!~7)4SDw zkC%&;Pzqg}SPf+NNKhQ2aB^L=vRAK*(a5~3br&}yxC-@L%p`WC)GEmR!0!M?W*^y~ zkqIK_YWb9MU4#@c$L2V$N@j^7Bvx4yA_vqTTy97fAKd)+!Pdai8;`OIlXsr^6n|Za zI#0!_xX!D4T?uboUkt86Xeox+Ts(-hM_--S+wbfSM$guok$1-`&GU$;Y-Rk@H!YAiS-Yeo1g~4Xf?wespF2H!_ssZ|ck$veu!*4A%89d#Xh9oJD|Z)h!O&#Ki5J#-S}A|!*zMfB*X-mXt~ ze0Fx#hn#vhB$1Vf`c4wrsjJmvMXxHXgRMvsh}R^8$UF3+zE`&45QUSI>S9gn3PkES zJATIS7>dS%Hlv9c;d>MbU`Gg*H_RJz2qHuCj9jC5Ymm^XGY=G0zSS2itIn=2}7Ofs3uVJWe1L5R|_1zvV zH6`z^HTIr$8R{+xE8)7UloBV@2BE!fQ9xHgo?sv=Q$5B&?r&JKi|m=3J$xQ*C@x-3JDqkQ9|FaJ>{#yA+O3Ha&-Ne!Rbu(%)Y^Cu;lFtDnz5xH zEj_sO!KF7WJ%8z*rPz{v>BglimzD&75PVngS;2b*uNFK@P!&8;U=&CNj}^=<{%Y}S ziyvQn+v3X>pR$-+^et)@uUkC2IKJ?cg)c6AXyG3gUbt}YLVRIu;Ry>@Eu72$BmW`( z=lJjAzlQ&8evKdCoA`46aXydtYu-0_pWwZn_j2A-d3oM#JT32f-Z9?f{7>h

lG zH_g9j{{H#oymS8M`K#w2GxzY^_vSu7_s?^$n|sb&V=gpjo@3@NpX1N|X7-!2pPGH= z>?>yfYPL9g`>bwOID66T)XdLkzB2Q`%$sLkGSiw#&A4W6nW1LRpZ@do52n|r-#`8O z>E}*2r^C~hY31~Z>BXtvO?`Xn(^K!7dgav9r%F?IPU)w_QtCJs{{HMvk znLIU_neP^5(NDynLi(=rr%s&r zh;r$8_p4$heFp|*=-V-1a*X%PmM z&_WC6hNdy7oTf0SjJ_I!O6ijrR6<{cLB;fy z7*s@GfkB1ziSDK`^tIiu%9Zrx7?h!pV^BGL83vWnkHw%;`ce!kp)bLpV)|kXDxxpK zphEgschltbg(N26H?#ndR3}aQvZQL71UQTsGRx=29;4? z#-LK_OBhr_eG!9-sV`tq5%nMj6;c~rO_M6AuXVqwP*SHcC_{Z7gUYGTVNenJw8MGE2okB3%o#H$f!eu)N~&O`vmF-d&WdV~=efeL^>hUh-PwA&CJQPI z;$l>ygLJzLwn4}Su?=FAS6KVmh3L)IA#57)@asTMafp5Fx(;oH=o~Cx^Jaabe6Zp( z!ZH#19l%zI-up~OA%mPD@2Tt8wMYpg?3vHXv-NURWl_ghjX9_~Y>JQ$VpBwKjtCcj zx>qwFJ#{7TvcReF^<~s$414AZvXa!x1Wis)#-W4mg6$E~L2QrMtIK*X0Ac#(?5h-c zCp;1MuxU^yboQ{Rh1s}ADPB!A;b0&sY?P1=Vxz>Kov^hCgkk)UYd}u#U94+ejp*gG zd~SWS>U7)Px`NlV2H)LDVatSc5E~cvqIYv<#Bh6<;>n4<6ZBTKLvJ&36&zJ4H3bYv zXVH{6{5kR3<2`p!9Ci)J>AmBWZ2eY5Z;Cy0yp2mAwbsQ=w*>7ml!9L;9mF<@z4Uf) zUtc_`s!QH+x1X9_zXf&NP3%pa!AaMAwz|_OtE(aEk-~-w=^%D5?A39-CsnM2esrXxoP{$Xg2Ic!TZ{cg!7Ik|DrU(*i#jTY2iw?}S>B_Q6HwVwgx!S~kRo>9MS5P63K)q$Mi7@U1%L=<<< zK1$hFs)a;M$y9?tFbwA2aXj^9v($*v# zMPW>;3lu?TA#fN(+<;H^46|%)6I1@*XOvUhQ#g1${hT%h!OipKs)vmjN&eoG!PvUgg zmrGgVR;||?g|%2Ya8? zzvtQJHfFD$5kUOUPMkMZ9aj8*>ezZ5b-0zaax;durj^MdgO|5}p;N%fR1l3!=&MjJ zolcY>oZoihUmz5M%i*&S*AH$?p5+xJSBWRX37j$1Ia?=iHZ)>uxy-07aI&oeMx%mg zH163s1mo~*sR=pVr@(uP0^M8QQ(dJDxymcycmfil3P`mmh*B+k)4fN64ysPeG8|y*TRoAm;ZnurNO0{Ulo({ql)e;72@o?36ujK{JN1C&CFg&9PyqZh54vmA!g!xBwS=-r^FckR$querLcSgsWO zvJ{XBsTO7ssg_=Z_Dr`NrgU;zpLFWF^*a%*AvVP6X)u+ENdt~(J`0gN1A!ew6xeM= zb+tq}e!Lg0gA4H%?9vI_#-r#%Si>Y z;T@@o9ozFu=+C;X?vMqL>(q1E^VUm<97D^%83Da1nG6LyCXEGrWhK~FrS$l6F;R^a zhr`SeODCu0IqbRXMMTR=>&$gChMar3;H^81AxL^D!8R(l*~Z%f*~T5mbJ64Fcrg;W zt`?6((x5>*G-Eq^+sz&}5FKLSxOPFL29R&z5PN-M(fX|EEJO-k`` zSGJUogc8vN+OHD|Rq}ysc^}je4mmuFXHjj)X@53**?J!7V&|*|S9vvSTK1cCO4wqh zgrt*FG*J76Cv)gB$SHajnD`u`sAJ*-NtGTppNY~|$b~2&oum{F&Whpr8Lj|wa-PXf ztY=Z8NZC?y!?rF~nXIZ{-egDlVfZE4;|wHhja8WOVA$u1<>Q;_`{9&I&cgkt&RfqQ z<7HsaOmqRWI4$%?#Lb!uDho*=1yNFH4;}`V3Obu>N8T+@heMUps9QRRDg|q{K*P4G zNIJF9C6EA85anC;?3UgO7~L-1Sy2sgqW=mq?kQvlBG5isFOW@S0_mM|G~DdaDF|b-MktG1RsN1;HpUQTnO24~RXTlK zmanA^2~Qm8V$gFi%Jw;bj#wT!buWj||2{-rC-hJH)!|^Gkg(UAK${#r2c)jYj5y4~ z$w_$`%U{12k)mp;IDK+2NBo&kHdw59fDjpa4o1qZbKKBMCa2@2pd`m)WLd2C?C2nvf!!chX7V#%nj6j+gJqIJMx3R{PH)@gO1ipkl zy52+tcDBM;Em>p85i8~zW*`qvaTAITNZ^*q#Vl71E@UB92)`s5G5qpScWSIO?DEN( zc?Qh$HKZ<`c|I0Yts3QwR9AxiI7&p#Hf|2G?$KqghgLE<9WQ{qauw0h$tyb~D-}`P zr7kAXiU;IQmD`f1`=x_Zn62d!ys8XW0696&XEW;+AcsA{p5Ue}bHgWfF_Chhy(R$} zC8hk3mV+?Lb+%N6obczN_+K#gqp_u{1y?R!!v87nWAhKpeQfrDnU_vCrrrf#0T|#P z|400=w{0vT)#@A~>};q4D{%9w+--GB#o!T%`*u&twcK^+@^|Fy!4*P_(}F z3=(&N^zl$5l#Y=76?q$8!Ctz-N8RpdIk;9>g-kJO3oZMNV2VVLfE4W~0lC?Z{pB5p zE`pq(zh|%9;30x;Yu&~Xw3ZMj8)2c_5-b2YkZu(1C*8P3Q18ICYnmU87;>Us-@0#O z9uXyLojEQi?vUq|rf|^WgFKoDl8d7KBp0_4wPj&3tPH$NatdD8YHZ9Q3a)RR+45hs zuekIXuPGDrLGvM%DB4ddaf^aYTZw7^U<)K~{A;2AXLs~}F%U2pM1DzQH3kib#Gz@)+xPAy$)SoTC-$w7lRpocuTD2zxpF~%i3dD9GNU~%HG0K8;?Ph-PO8_n-=Ru>x#H4i+fyqD5CySi2 zH?xk7bC9j;94un8q>ExlT~#P3fG!9E#C-<=eNnd0aNsbdlhgW-T>M`j6MTE|&zlvv}g&K^iIFE45>)C3LBn& zeW1PWdEC7xyKTo|NG0#Se`8G>SEEtUImtL}kTsJ+wMcDY_|4bPxx-0$RnSdz)< z{3xtBo@C=Hm-6#6t%OI!dBcMxH?$9NhIqfi;t)ffQ`)4nFE*DOevU}lGVku}@CpxS=y#n$)Y?Sp~Hrvhw}<&XrE zlldXmzHtJ`+`34%=2*45#YulP0&WsYE%cvT*o(~G69S&lz7rb*7fw#Apyx+kjk<;}-uzZ*AuzY2y&|=X!%EhJw zsDcQm|JAa+8nHP!;JNBM$9MoSK2#YfzGr=+dE}LJt{I`0dy3 z?V2MUL>c5Qd^@Y$xD2U6=kxXq6U^De0j0-SfvSO<58p-fY1?;goAK@t=@5jHllafD5^*Uav9q=s5_$Du zL%N`V`!u9*EfhS1AaToVV;CE<1af-b$Ho5-j4hqN`2B@<@^9nu=Dt4r?wO}g%O`(4 z@yGG+j6JYDYCkLgA9`56qlZ&YxlnFvXmeh$qH>s>;rjYMZOpD$L~M00cBUD&1o9qU zhg}ykL{Deeg|``xs2E#<@kfCgn2q5s`UBF_a~2+I@#MsuZlyP*X!bqPI`gfOOD!_# zYN{2z2euVJ2-|lAyVqr-11yTXy&r=;01~7Kojm|PlSybwc$>a8u!L|kJv{v?!d@-j z-;{hfa>=Ru9BbVW1C{JFJI&3^F`Lw`kE&g|P8`joTkr!PF=r4r_5Sc(!Ht^uf(-L5wd!Hr{MM;rahBzBN9YT z)~8{2#^aGq>l`t!YdT|LVcHT7K_m*ds>3t50l52`4A#FoG|}XQehPMHT!#qV+MQut z4U44>r&tP~o54-z@C=U7-jf8L)WZ}{PV6UP_54~itUJ3i0xCxr|9^k_V^go3T$@-N`^i}u^AlAHKDpJPLD2c+))r6HQ!$f1RP?x|aOVd+{Tk$6 zH&FC+1cokxTp7Lz2}d;|sFQGX=rc9FyJD0uDIf=20JsvP&#N&9w zT?9En|IzYp+>EC5rPdNRrK_1pFjoyXdRLMUZ4Q-zVmwc*6lBwH%e*bw0(uWapMVywnD4G(N z`f|wO$@|XX?M7Q~8{M6G8nr}n`o0Xy3O6G9I?D?AL{x1qh$|jDd>k!DL+XHIYR7ld z7_Np{JUKC6VwW~{XH}m}S=D8bY$EQC(^}yu&C*CrCH~iy%e%O;6cGN3( zw9Z_VY)A-K^zu;ERE2|w;Z7WQcJ;M@(5(%fVB8*Y0nq;ZkkQB?=l-XV$Fw1;I(ba9 zqgs!oMXQD)d}Rjr)WAbdRd3bpo;gM*i=48bu=5*MMA=#qcwng2~DFF*~_oL1c6;;nJ4!x}w>hsiCik;qDlC$jR8<#~4Pb z~$Nfh>TF{%mutLhd+`{ z$eSSpL^TTVC=|PU6nhSkefkn36Gcwg58&KV6C$j0ZmFeMvbfZ4b+TjuvcQW_?CwSE zNmy?q41bQXGoutoPTcn)&M_k5I&scw)1kB#6~=fT4#-zPYEH3xYHn}h_DIMLuWWKk zz6X}bfGFwAPOiAD&NSs7cgzoTKpIZ5dm3&}N;VBLUTcO^FgY0ywVt@4M=7_Xt)tvj zU1I9uimU8!x@wS*gx_6_@|F*{$8FyODTKU@Uxggf3hMAq4#_L@gr(-RFPut4-B9jz zcW1ZnR_@R39koPq`o0Sv0qYQbosWPM(TZ=)WoJ}qp_M^8G5{sn>v+O$6MPs_$!Yu! zWdF5@#?HDX=>YKYOIy$}pI#mw%$>prxwr+Ykf5#$7Yn?1U*j0o!7<>FbDS|!MmFw(?%ulpH6s$~BjTD;krTRQaQ6{BJ1%3vog>)eBUAi+ zfBSd!&W>u3E6*R{V7@!ixau6t7iusKe`IAjQz`?=BJ>P_=-#g3A;=`B@V_AgdGin78k6F@5SaIPy7GDVxE?1n+Bi z=Zj1D2D0Jf+hbZV+>b~(mIhJ?c^iM$a&6p(6r^+TY|fr=>dfJUJPZLn+@1u_PDh%% zGHBa%rH^P~G@1x)-Kl=CKPPY4?^>Y^KWf;q)-f(Vh%eV_a%R<+YJ%?!_aMQuN5i;I z?0wnMKuRHR=5OKFR3B<)=hjqT(j;dL@Ob!^{v%C#U7VTDNVu5iRGo z&gE!{=2XFyTkCClazF{>Kb4QjfA%z&xC!#WC6G7oSL{t2F4VlvwVv8++2F4Gaxp7v z9%L((;vM&+4cMCC`53iGasqz|2NyXJft`bkR^2PB@_;4a2tw8pE}4U8pf&~1*wAH= zQ}hckyADKA$L#9T{-9UsHapX6Ko6R=goCpzcz%W}fSjD4w^ldSkjpvQn&j+DIT;Gu zgvFJnya4H4_}%HVY;(h)rCYg#Zcp<7e@fn-|Kvfy{^H4N#+H7x^x)D5m)@}Sf~9+w zVoUa=8<(zJS`z$0@Lj=Y1@9HSTJS7ERq#ZCQ6LpORxr2ttHrM`ethw5i!WPz%3^NO zx2RdXZt>{i#KKP&zPRwAg@0Ih;ljNO@rAX8CoG&?IG6uN{zLrF@!!XP4gcBv8b82a z<;(fU`8?jQdEelDg7oH`{$GM&iR|? zubzL*+{1Ij+wiBjz9aG*>BB$YWAJ8ubBO-+2ZW&v$|Q~ z>_xNFGe4jC%FF{ZZ=QL{Olu}J04o_RBmD4At z7pHzV_3f!oPrYmEl~YfjDo@=xrJoW{T{1N@`HRV~PJVRqpCqw+#F2@J%g-o7X)n_dxfz9&{sRV;(7(r^V)}O&R7C$4g9_>2oIiEqyhli*|J?m5 zqon@}gEI85FsPjVB?gtzzrdhU`sWx_LjMedis_$XP!atT3@W65+}$*W{&n}OawYvk z49d_yz@T#a`xsP4e-DF7>4z|=g#J$qDyF}SK}Ga;FsP9Jc6Za{^pCnC+fgLVq5Eis{c`P!av_7*t4qw!3Lk`itGKN|f}cF(^ZS3WLh&PhwCR z{Rs>zr9X~ACG^KIsF?mY3@V~Oia~|+1KmxN(4XmkRji~xj6oUtLl{&}|0@QS(I3R1 zQu+fJR6@TWgNo^Y!Js1gpE0PAeqVRf#PmnHUll3o_h3+lem4e{)9=EdGWwkuR7$@C zgG%VPV^A^uHVi7F--UveKRMM}(pbGlc7*tNb3WLh%|A#@P^eZu_gnk7E z71Mu*K}Gb-F{qG!Sy$6w277Jys|qFkw-}V6{|1A~>6c(o8U11mDy3h9K_&DHF{qe+ z0R|P(&&Qxb`gz?=Q_wH%eigit=U`BV{%Z^>r=N{MW%RQ!sFZ#t29?myz@TFK=@?W* z{}l!m(ogGd8bd#~`&H=6r(jTqeliA?)2A?~jAk*Ylx|^A34K2X71Q@&P!WAE1{Kox zbT>^-KehW+@J615K^eMTa5hzPtNX z@J0$4l%ew&R8HqGsEp2HP$`|kpb|QbLB(_mgNo=R1{KnY?xsoUV)v`yjl?i0Lq{>F zoQ_~n868IJ{|jT!923+QZ&;Y*eQZ87`>mO8O}}gE$&=TOzZ?ExbU*OrKnmrZI$sWG zjPj=4>5~PQ^KKd3V++p#mqNELcI~yTcSLfCvo=@HvZakAP{mU0nfs&sMQcUtGb>l+ zF`!9;o`F%defcmK3RUufZ25RDy36g0xP0DORU2~JXW$N!1fsoj2Z^tii;5y%H3NHy zWN?2jJOiVhU_Z%WN++jv8uqNm(ZKKQS+6SnQdwywzhYhkN?{ubT!?GkL-Tqpa_zWs zcH1U4ysC~$6ggp2U@2oeETu1{4f=f5q9f`6vS8B)+{Zg8!g}r%8I2rrswP`^Z$weP zUec0q`FfqRqF%A5Rc3n#_SV4f0f~x~%Ed$=i*BC{WD}V{dI&`lxBukt+50vk$YjY_ z8P|SeA!`jNZAq0b12t8mXV47n+^@X%l+m?a@+_EBAPzhmp=|KvZB8o~O&p;#a@zh3Iv3cX zbJ1L?T!_bQNrek2gK$N7&~T+|Zn^e&&$wm80?Eny)2Zo=CnB48BYPuf6TKRvHEnc8 zeam_v4gwhAK?4{Jc>{=K&dO?$cf`Xe{^yTJ#{~be_|}EHct7Kf&Ao1RdHMrW7fk#M z!2kC%5C-5@rYchRS$39F_fpwY$ayr;Tq)_6!R4s%9K^)-b)n_%7WWW^6RYmkk6}F< z6-4SHyU3C1_pCPJIa#n4ZUUiTfZ<}(14Kc6k=oN9AFh0IYR^4&Vxx?x^|3yV+DgqF zjW;tHO(P1lf_aAPPKQnH0Ic<+p_b&`bk3>CjS}i6C9CARsbDKdjcQ3)nlnNdK|V@+ zpnOzcBcOMnfz7d;jkO~0h9&lnjUwuX^VsvaZph`lMq|ZRsnzVz1(3fIA1JBRUpH(8 zBY4gay9(q43&7GBc3ApmGA;}nYwA@yL?~j&;)oBF#_5aT&FK@*?xD&jr*^TG+{mN+ z*yXLuIo)kqRWZ3W9#;snkVb^xgV_0Pnb*OUMBds7HnWjKigbcKbLEfKycUl;g!W}! z4k`%QFwsG?VOvW~`Nd0Gk(5*#Mt3IOfNsH=c0Im8#rb~3tOxHF-x8@WKdn1uUPSren z`9>O1UmoiiKw{+&%FW{?!xZneWehapvD<-Z}G{ z$;Am3|LDx~Vefu^>W4FTO*}kfnYoE~`^>cqsi_6tg_EzJxtKRQ!<+uY!vT6=FdHMvc#i!A6fc2Upe*e z$y?_intPDnOK)0w=~Qv)=}Yyc*wo{f+*2=H(oVi-_IFFtr4zIBOOKhl zbZK1h3&A%9|1S7|;2#Aq6FfuE82=AJT;LJt1Tw)Dg7YRqf{DdnPP};WTYTf<=N3P> z_~wbPF1~#6nf%)po0DIe`0-+5(K{hrTp54gqI~hnsV`3j7SCTWEGXa$i3=8{`M>6W zm%q;cF#oN*4gM?nf6c##pPu>s-0J*=Qy-t7o%`+FLld7weZut;Bqh$7JTcKIN{wc- z++dEyMK5auK}*P8lIr}b6;Y@SWa7&Shb5{i>P1(z0kuWFoQ{cA@x}!;4v>f4HlNw% z2wp$k22`nF!ps;V!RTcy2N<#r+gi<{T@!O}6sqcyC0VG*q{0W=Z>$;P!E8{WwN-@g z=L)qqr8P%J;_*K=(gw0+eJrk0Rw`@47qtPKTUQQP?B;O&DmMpM@=PLPON11QuWti6 zT~HEnC{#*^=vQq(6V(VavYJxAeB~7!Aj>D^23>Yldy;Fd+QCGZecnt|vGAq#8+iu4 z4wj}=_BG*38z=!;elvOyAe zq*djh@Z`;HKogB*(n4jZ>bmIuHV_s$0$S6m+?%;B&HYKVR9@CJ70d1`k{sa5iI*+S zNK!EoXak|xS~;(+`GnPL-_Qm;eq%urFBW9XwJ+s>0OMK7+ay}|wa;z?Zm&(_6I+zI zz_r)6fp{pRS+*wf716av+rV;Grgf|IUR6x^{5DXq3k``CWhS7#hU*ut(qB<3vTK=& z@cZpIw32W#qHtLo*(*QZ2HYlRELF-`LL&NuZ6Kx079=`RWyMXOY6CG>)|Zho6+?u+ zge$`rip!KaTSY@paDd6-S89B9nVJ9cHc-q|y*?)BEmSE^9irlZ-sF_~BYDc&e#296 z2V(AsVYN(|+dy1bmiTL8ZQM^$T%l!kQkN^H3)%U68wiV5mf@f_FXKJ=qc)&ZxC8Rc zs>ky$3i|bpq%xsZ7w0$~3wl#4b+fDL6fQlr{UE<8Iv%V-p&Cc7Yt&XBqLsIwgG=ZZgGpft9jSleH`G* z+C`C~EaaNFw+;BBA*rZg@#j3pI6izLt<+s=sKlY^r?lVjnvJ-uUO*%O;{DH zMuhs%1#f8so;8b2TdvB=)^lFM0rq;aoNbyt?js*=1MYZCRV=EMk?=)xZNQbUMbmam zd|7*8h65OBL1uENM4`t#tqnMRQuV^jh&n9H(}vt|`vR*AlK1r@1%8 zCh5vb##NP^|ARJQOUPGL4P)7(=6g6Gs`s12&17j!z$wg1a>bTai0Uf4@OSMulBu3(Bcs=4uSt>Hm1vx-ymkDzWQ&G-d&;|^iH9sTw)V+=? zf6f82R4VLIxD3t7V{Jgcvg&a9^D5tpNYw^bnxU1nCEiqqk7zicpwR>?sp?wuoSQiy zYg>+qG`V_XntLN&ONE6EVI>I_nNZY@CIXwOaIaa%n7qOZ*GK4?vooF5L`CIDkh6N ze$`)dfHPS(cmg(e=?Et!Y}AU(4O6+{y!5p&U4COAdHl1okaqjEflMIg&qVFg8^+s! zIwuar>^f7^seDEo2rG1HjjP&}Ta+BjCari?7-i~Cm4Z`4k1}r&8rRHOyMh}q?zK?X zDfR@+amDd=8KI&oXNf!F5v}3~CnX+gu0@J@SB&{e8?ac-;;6Z#7nK;!8n|?IpGh39 z$^%Ta{f2I>640sSO}K-YoA~|0nyr~C#bPODvHeEaX=u1=R)f|f|0Y*xfN2VsbtPL) zzR(5&<*-2?mx;=H*+<$ys3Z?K($z}VE8{F%*`xJ1Y_X(xS;mRAB+MnVf6d9{Wy|e9 z(KLmUv_U8-sbxpofN3p~aOJ!?gWED})VpU6JZNO#=n2MEhQJRvxrVWIJ zMW*RYmWpA?ooygz6sdfrSU_!)aDy%%uO;LS$(lYYxu*R_xlng%1Bt3py=dTod^u5< z>#Et*#XsbLOx9Y}mE(#Wj~nY{UrZ%RtQ1ylm;Zr#LnqOxoEEXsInLFztWFmty5&`| z^87z@Z^&cGdc)Ri6lrc+FICKbg=r($u9UNj8LzRZ^*-)Z?LR36<2qN<6bRZE zALanNT<6im)b)ViZVp(DML zFR5^bvSF1*%r(xfRLC;&l6^HOKEM5jO`^~SOO=eLeEd`!uvX%wh}Nv~L>IZfwXOwM zV@`XhBD^%my68?-;T@t;E1C|RRiN%tWGuM5J10;%A){v;=ZG1@^u+-Dln9kAE z33;5OY*`kErLtroFFbEzY4XH)!y>NvJ)wYWMSENOFN!t8nl6{kBxSsR-~jV#Dxylo zmJ5Oe2dp$qu;Z&H)h}k-K%pU75gFuRrR@CgaX?1P6s?lHJuvlb4oK(>5^r5%NKbv1 z16D$CW`oM6Q=LE42J)_~UoO+f)+~?VCg8j=r|~n1Rh#XczvJEz=^QSZ$}O}leXtGW zDmsP1rDU3wV?hqErcKLHzs<0E#LfYFW7?E26*4-(A2~oL@d}sWQZLUqH;d&IVuLo6 zH6=tBKh%CBn^AbB_LRbwS6G^NFUv z!~rU=kr7!^68-tyyq~T)?rBKdsK1?iLOuLyCW6^l7rCmmBrBE-p zoVL35BF+(rY0`CNTpW>zFX0p>CNuex%K?+I!24PIPa?T6IA`8`$~Jck2LyyJk4UCr zDuPQmz@(GP6Dd<7Jt^h@u|DNCDzhH(*uS=caL#WHO7;4tW`ZL*RASUlzqII6o%@IO z`v2I&V}jQ$Uco=bi_AZE_Vmo1Q=guE@`MK9|It6J=D~54AnF`HYVZk-HP5n31LfIz(73rK)193hxkz#XFM(rl@7t+|Rh2QMT#hQ0HXsi+GDr@z zk)a2HJ-06$hE#GIFFv)jaWBxwYS}XvFRj*H_NL5`@flzpOM-OqK${kN(73;)9_$L@ z*;_aAF1d)!ZQO&p^&QG)Ik#V%r|5jh0>Lml#M~B2|5TiF^CVelc2BG_nyzX9pJOBO5`1IKJ5Rh zp$_Qm^i`FG9(i4D6*iFZfIv-rpg^s^4%nLAFl-;Hd~#~fjtO3{IKzLK_ojL0 z?3ZS4nEK)5D<;fiUwpKN|7_{O1*9;Y@8iv?gm0xH*7_7Ww+t?yf#)D5H69668|b62 zGpB{0IdB<;_rXeO-xrRYRka~krmI==gM37LXSbJ8TUMvcrKoom_G!X3+wcsP_FhBu z&_t6HdXimvkOzde?rGh_xdtmPx!hz7i5)dat4Q0=FbUmsLc0x~^gt<{y~fXOa>=Q@ z3UqURhi;mx;bdUVu4u^PKqVwuqz6i}?A4^6nU+HnO-|^Qr;a^1hX}Q@R!%p=)nr_6 z%4bw^Gmr`C7U}oRGIm)v)@6K$Jbh=YGNw=rdNjmkOZhEF?x?4g>lXK1^gfuzl zJVJ<>GbWg1FcugL7%;(@3?>P~ryFHtDevX?* z5AStXc&qBGuipB)YACs75TSdZxg7BV@^745I?a`7)HoM97ud!zc|{dnN|loOC};!pmWj&o%Sk>5QgrW%!m$Y`t*%U6MTkYI?Rl#qesZ%%{U zOdn$I{As-zEcoOW3+~ku$(9U)z*=yW2LWOXF_bJah}MlsiJQ~I%9=l+r#n+C6G)c1 zr+p7=B-}o2C8V{sQu+`mTkv-n-(p*BYroRv&%}v~f|YU9weIb#Un}h(dzhr>$Nu z_=psQKiN02>;KBgLUP_cHzNE?!7bAlr|z8i+W0fa7Dp=kv;Mz$&B`^Xfz2H=+rS!g z$e)pm#eO%e&ZRKgq(hCiQZSjR2buLbTz~{?@(o~pnLhlWJKE*r-yI~K`pOB^H0L|# z*`_gCL@BRRS|}Mz&@3?aq(hCpjh29+v`y3Ob_gD=^6;l#+_A45N7Qeg5mC#w!YMo> z!JR-mh$qsa#FHIRzv(yjnz}>GoIj~}$GCDeB6YMg%J%0-)n%3Y2tVE`1ECWwHUm4{PGv`n0g^M?? zT!l#O?*IAX{)9~Kayi0oAQb%Y;T-Y7r0#)~a^#E1zk%-TJhE~nYM}1^UpB84$qmkC zMh6GYp#AINHn0abQ2$Ahb3uCKip0MG&Ud^kSD*&y?*AFRVyQJshCKEPkPm{&aK{wv zpaC|gMsBu;l2nGxpFg$BV9^)1SahGuAWza3rM6ZFT0vA9?u69ARoj>#xp^H*Rv9XD z{-k1^D^?beu%c~iS+B!jj-?#liUYp60F?^<4kN7e*Qxe3asHevT|Bljk2;#ZvwmNx z28U1j2p=v{BjpYjeQ;az5JyV&XJz;$-%&0d|7JOd*8g)OxsiqM&A)c;A>oe%v6-_| zKbU;|gaXe0dl&q}p8n~mSI$5uXg}P3m>n3^W-wo?(q@wkwk1gD2;@)$K9+1mBWT56 zt^_N|d@fjOF6Be1Xt=U@LIbCrIh1VqH`~3Pk(HZ~g(2G{OJp%BPfD96iK3PCpta&q zOGWm+WFTtGb<+EiD1Q!!i{mS&kwxjAex~yq^md9UmkO}WA_I#e8_J?^voO3RIf|v? z-wgM3!YfOt8LsQB-{bD7*D?~fA(PZWaHk9;BiT@r(RR(y-zV-}ZXbnG@Td84@RiLe zWIDTF+4wDbhtHeyX-g`g7!CP-81nT_qu`$~sLN3E$XWk4#7R8{2}3Bttoxw3SLgG)OnH zp`?>-$sQos97eAEX_SElzHW;J_E@sAdcL71QQV7+`3Z;;Tm&&l)WnU*_5y%^|A!|7;BDTC25i^cj5lGEEU7jJ+|b`BuzS?*>>iB3a6Xes zmO<9ICCs0T$6uUX z!Jq?m(3Ij{f7wo8bKaneR;e&CCjWM*qz7W**&ocK`IxxX=1WC;d+grhY#4-O1UF zll$2-`==g6=k-r5Pn|?(^iO_o;{Vw5`8Q7IpL}TaJ&QkF{OaWS?&^en2; zsr!pp^`5wY>3RF;wEg+7vnTDNbN1(3=!E@wEjnF){_6Shx&NK}#@s*8{oTaJ=H4{- z=X1}Rdw4E2=bzKfk#o1s9iN++{n6|36T#L@`pD0ZP(cK9XcTU_mF^6ta82=L7sPL}w z*NndqZZ9Y^H!R#YegW=Um>>Jq*uRf`dHt;aKOKAOSY<2>cQVMwL>o6WjQ$HW8GHUe z+&pbEORQN^EyJEPGBWlao?^xCU;8}+hsOXqq_nDc84`M@qY-Z1#hhzeRry?Ig*-3y zEAL`Xg{~@<38hl)Gv*C6b9ihe3U0WXw#7mw`ZY`%L{vtUH9C7POEYIrSM^1@5OCS4 zfSnGbCn{A{SYsDyTrDm2BL*lI z#scwTHJ7ie9GN?rQ`0M@aM)CoiAa*TgE@M;QnE`+grsTKTc*yjuNd_$vqOZ7oEIKt z0ZmF|Y#9`?q>wq07LKJ>mi1NAue1rTWS%HCvdx-BnyxEuxQhV_%~DaND8!`l=|vXE zG*u0KsD%gacoz#;8})=UCp9W>Wpl}vB375kVXJy3Sc0;VEaiwxWRldG&oHlK<>d@z z37ci!=@+a6UaKY^4TT$GdL57i%Vvi&Lr=Yy0WuYt#u~I4nrbm~dV3|43TRykdo&`N zCDE21o}*=0H)YqLTuO1ypsK zQbo*B$>NJxfC$!eWisLuNk7g2sa8E~DQL`imS7W2Rh8CM#i%9SH{Q=a0r#`!71~rI zcKlf^5RTYHC2dPqJoh;k2$5Es)Z8q)uVNWX8EDE&z-1Vc>D$;RWJE|?k}7oJ1?D{B zO0sS!HDZdq&UNKD^F*=~QKTak(i}U@oD^J1X0!2nPH$4%u3`yFW+ef&3%4XgqPMcI zcw;qOLkH;M2y+T_CF!->QVkPc%Svx#pU~ss3}wjZ^y0U$0A=v|)8!atlsuOOWH}nw zdNrcJX(0n7in&^abksDaG3H$4N+R!d>8!rA*mC|8>=V+Auj!BK0zUEoFhD#RHEXP{ zqO3a392{MV`%H>bC25HSu5YkUnB97pL*yuG1Z=_L#z;h2CUr{HRc~URh&6*Yw?1mH zD{p5BibbV#+U#;kEhpGv8Vk~@hS5~8$WO5C64Mopc)S|&7|*ax8KY9IqEQj92XB8L zlW4RlA#rQjm$Y7coCQ+eX1S(}T16*MBA{xB^I~cM_{)>IWtV=~z@tjC;?1k$9F zwq(r~>)G{e>5R_rR7nh~YnW5itNLug5;N%>PM4U?MX&YSt0`Sr)ja<^CJkN1UazT5 za*1j2F&6My8#o!j>l*9|2GCaVdR`H(m`!tEWdSXEG_y+GMvp zjRl-me=A&#()MeM44{U?+?{EyOh=t%4o$DBb%l&760_#Q=b5V1&dm5o%6R zI*U;xwoC24tC;~*RcS;q9c^x!v-3>LRaHuDfz(Bls{FE#c}1DCM?`J+B!m$ z(in)c^u~2S=95<&blhP+#^$0>i*@m$zTQ&a{6;2G1?iNTboRQ_F#TQzkS9!8aWWw; zs876(1&pP*SfNkjo(bk0@hWYvH1v9RQDhOmoq2*Px9W{pHLDNa^5b!e=>}i!sM{6#cu3N>Y*=#Ahg9tTk%7XGXwq4+)|Dv&$F}q_J%PD1u zR>*KHUe=s=Je#Oo>!}B21;797AFu$OZ3HyQLS1&6F(_4v64yg9v!X@az#MR1rN~w? zgBt?j)WRzB3Yird@)e0mB)g8WxK+3`O028;BB8(y%&jd|Qf(!JhGwciyxO!92!NC`+cS!MY<)+)zx4 z+|z93h;Uv>(4n%|BOsYq2u0GOb-Hs6`NuD2PY;sj1j=>@6#-!7Ea*at;tcTArZ60xmoc}fh;9AOGP^;sVVfs}J zAgcIev0Ne_&5!3;pqN*ceBMe{Bz_4Cs4_$`0k2L>QWju4O6eU_|c|~EVp48||f-kdxt0hTF z%ap$<`~?eGNJl+f^V;%vex3oEb+6i2ad={yJKw+pW;2~oR8@h@b;nr1P;Z6AX}8yL za)ALF4Sl`ZiZ^x26YNab$dCzpvXzdzMt{gY5i=LfsaRHPyxqbA$~f+bmm^x^tqBIG z=jC!`GoL9nj(vm$(lwvYS$0SC!Vj~6uT`sEQ${FK4I}_H@{zi~g$fWUG+UygFRyd|>5<1WASF(UCXcnci<);7S zGg&|?*S0FoV5D{aKNz6ea5nQ6byBXLV%w!!HA?Xqp{>+Typ4UL)Fd6He9hv#ju{@6 zY9JiZdHk_Pt(!TMtzZvi+$Jwr|$WXWk*2dWWlTSGopqcR}&Dz0M#E7(D zJII)4G7EGP}~99{D2 zHAbLMf`0o#;dZmsHvOA>qB_cj0Bi(R!O**DB`3)jZ9E|}S{q~3M%_S6~Rpc z6>KSIO9KakIGfQ?G3dOdkQT{{+gBCw~ebfRC{5+wu`sESFKo#PX__ z&VpPCf430Gbv5v%HQ`psVa{K_b!cP7j&>;aCt?0vINFb_+>5%Cq`iJ=TDFh~DHY<1 zQw5$ojmWs9(7bk3dc2>#Pm(_Y_jhJj9*+o+x7WWyvx*A|Tot7C0Ym_3wDct+?T!gx zJH_S>40m_freNRgWD%$Ujf<8Y^wttb2RigJ@Tb@h zJ0_1qJ+8ZBVzg02&`Vm9rUuXpiWn{3(@iA~{`NNm{^a;N$5!q}S@1OU~eoXj5!SiPPQ@@&QPUyyO9Q}`x z#|~*p4#$!@khSO@hTc%%rl3kMHYXGw84j_x_}0w^UXDR9vlMQIGts5~u5(Xg9%knJ z+d9`dzhXy2AlweKCOB%3(7C*s@R}Szs0{tK_z^>qy5&Ry4hjz{EB=IKJGZUa5Md9r zA7BYf(yolrsY=qmCXfaC4!#Ha&PFfnC+i$cKK!Z5K;N=%>031y=}P;Pg<6vWnn2CL z_dw0rq^hrob6{EVCoJ80bj5-!oU|il`<7ZI_gRxFi%Wy78)!H99%wh4gzb%FbM(r@ zzX?(u|B4wk!D45TZGuv~?r-SS6@M@b^n+4^?}1XY*#!M(8IGmsp%;KZxyg=X#e@t( zvYlL?Y#M=}wwzaZH5I5A=rZ^o=rWg(J3x*($lUnTmH<0y++s(IVcKMCNXj{D3Mc~= z2HyikWRteO;>&?$#hTEIa{@ zywM|5);;njrE7W`6>Cf{4nkpR^xFp>whxcm#&zTfH#xE;f0`p8S!~0}uV+wOtTTIwf1)vxfG@?CN zW%STIU}bagdGe<)%$)x>LX9k3oPX}zox+a^?wWqu)U6Yr98ZmY2jFf0Ts*h(0P5in zb{=G>cWsXH5R$N7Uv_$AVlX)3VGT~DoMeXecm8;$h9v4jOCM*69cqihmB zrg*(6Axe2F69>;u48}@4tg+fbBMh)zhh7B!1lJ)zIe-Z61}LkNb|PAhY4C6h$OW}V zJgi!?BZ4R!$3aP#L+Z4LUae@ovDYFs6aw;ZyFz@HI=x+5M|-PsYfeN~@BF9Lsp zs~0b<_z=O-PL!Qao%(pt*-Sd!ngEasYLIwXHE2f!?~O|IyHi&FO;&+3{k^Ekx@Y=d za)<{s7pO<#Vb!A@H5m_8>4+ALe`Azk!R0}X(OqzPRE3m6Rq%*NA2bB0P2yqIrkyp$ z02S&el!8CaC71`?Tjl{}!|!gTrHX$seh=-M1c0}{W6w9fZ9(ob@6I^T;R$NHU zx~;u_q@c={bys~ciL4BsIucEXS8+DPzdcQif1P8U=86+_stcV9?A)hR_@v1~CF7ME zpp3AT#D`rH0O z|FgkBXKp2dMy9f@WP7Ql*%DRjl5oBl^}r22m)(=IjsAIQc;97_{^4K=7H7$D`h2wj zALUiUX(WEsg1LQ6nt#V>T|B-LN2Au*S-((2r)maOVg(sd>Y&6hY9+&t+HD!xlQDdx zi^soVE_SjjG1M?;I%n99>L)!Vt<9^bkVMX9pDjKCAEmnNo53-TM3%`hZSe~khwRK%uz2P|K@per@9hE z&4YE;&qB$i^~FRrt`#ZD&@`yO4=cpT~BRH#5x z5zYBPaF@VpRWj^ywIA^Vq?W_Wn?I#b0=xa-7Q21PfucYs2rQCe1(rUPZcKlivdST4 z%%9AMJ4-81L`ybr+spP(oj>nzq{K;m!Ujqe{2fwE*@0GdAer#zsKD<3KWAj&_4B6L zPY9Q0J~7>xIz924@$u2`k345%@q1AJg)O`?vMAjxJWVv!N)>EW%x?9_q|p7P!*>5c zS2b=%VRMdx!_A+6LqE53Vx@!zgSl;9U!~;D9&y&q|Uu^dVh!~+N zOvJm{)R$*745xI<0!V6w&#;%>Zmz5}N$J0pbAL7WCv#7pOUyau z9tU^rT`~L1+3(DLX7)X^uY!B_>a)RFwQ)DapBv9FBSfwupkTw)xrzH z>xAQi{}g;d@Ik>F1TPdkDo6=jg2xMP7hE;-tC@eB`RAGU&b)f&xiig~@QiteoH;!+ zJN=XCuT6hq`t8#%n|}IqY5ED%nrRW-N;om~UsGS4`q0!HryiSXPo<~aQ}<5YF?IFi zZzjJt`MJrzoqWyY^Cnx9kx9!WJ$Ytwe&S~n-{%6#~vPwjoHTT8oLGVOZfTd zH%I?z^lwIAG5XBW>ga<9rJMXdp95gv_{5pxV^Md2q{A5>*~C4x1jnAofr_x_UOjQ< z*k#XRFYbL*Ok>aHKq>5594LwX5eF*6p2>kqv1f3g1om_eRDwN?0~KR`$bsV6Q#nu( z_6NNc7GuxpeH5p$4hKqMZ4Q*gp2C63utzyiDfVOzl)xV0Kqc6dI8ZV6Fb9fbEe=$K zHG3*)sg1I?RG3Mexam>kqiZDlSg-PrQy^qRh%*KI|n3V&SVHOTlikUf30yA--63obf ziZKHRieq{XRD|hzt0u$jy^l(1Ov8ban3@BXVJZ$(iYYlz0#k6H5=_p4in04RP#n9L z0~KM9@2#2?)Al|}(AeWRP!hYF1C?QSaiCI+=0FLI;y@)B$$^S783&4EQVvvv5xrF- zuzPwRmC%@&10^w>1C?PS4pfR=;6MrNP7YLpo##Ns*fIx-V;Bc2!tUs;ngo;dJ_3_Ht#O0iowPy#!{fl9EOIZ!cnnghkLB@R@Co$9Ty7(3VdDEKHh za-bA;0|!cCCpl0Vc0C6w#jfK(3G7-9RDxZ@fr_yc94L+*=Rif+)x8zQv734y1s~-q z4wS;K8sGl;e# zGf7)frBz2j+$Z|-W#~^|*ppL1yt(WMfx-aI?2t0%FY5dm1kpZ%$m|Bu2C62vE#)re z(r_j=IuvKLXxp-#fVI;`s3g>Iuf+dub>0wVu3ZWCyVM8YdHPfzxCyrW)_|yNV5Yg5| z^milLAdoGokJjY44G!j#LimJq*zk!#^bZK2INbdCQ~N?VBe;R6?Vb^w$Md>I%V5qF z>p&~A&--nlH-iOxgD4I$bN;0M3G~4Wu~S z{P|P+0yr|OhN$fxnPtnU9C@v{+9dNpD}+)=hYh6|OzqwTQ~Zt;lz(GA|Kj*c6*U&! zS-%k6l?+JA4xP_O!3VigG<6OePBFN#cmz}&#ZvKahChY_Cn~5Jx`$@f$!cCs8DuIE z94jq_WubJ~kcu5N!+-_ip%;Na!OvsY|Gyboc=p_nXWuBy2+mHwcj~su8^=FA)*SiG z!L9!fC#Oz*Re-uzH?G*J2^6JdUS>B#bQ=kyoE&zP$C3>=wGe{f%avdyna>4F&82)O z6%ALwFN>DSdAQgQ{#GmHWF)!-SBTc4i6q=fu+5!mN2@&iJKkS*?5i_~`mXoZ$orzo z7*!AX;bQ?3Mm9O@$nH!1fH8fDne!+0)g9yNG$M7hGrAsC>@X@E1!*o*0`H9k;fEYH zNU9&HeZ`-{%9%f%uj)*#P9Xv4p7uQ~ohe1xYzsF$4P(J0gSFeROE+#6ZNJjx&%}!^ zF0M|Zj-~FXSteA3uPbUMhM>gy?GTdD3iNtes%f`P+{-P6Koj^@;W9LS; zNec2@*<=Yc-HjqN2M9Z|VTB#;CK)ho^{#}EMmhLX{fdrqbsVVP)YF@3I#-lv@T%4W zG$TW>KbByCbaNQF@~83ToqJZt5RK(_neDN$uvL|6xWZnO94M5c-;jzrcaQBS(;Rq~ z{0V#+^uy6D{m_!IsN^Y0LKSlYc_7XV{gvf*1oo9=4kK6oH2(R;EiKkn3s0)E03avIomnA?qwL1Mupd3urM|jmSaPI zvcFx!@K}l+owD$!{3Y!A|9c|~56)i!_y08nlhdgwAFThsGFBb=-r=mu_aoPfg4L^0 z*Xo|uTh37tQ9PJ5CSkl&%x|}I4}=nIp5X^>&t=#0@^D=_zbv74tqLDV!T5K&w{*g* z$53Nzp4RJgl76R-By%9HQZUY`UCS;5>&#<>AB9rzr}@p`Z(Rj6Z~9xgs!^p4NmB&} zxU3XNEYz+gmccX+5LOO6Oa27DsY9+_i3rTLv+R5%$4P}P7Yvt@a0@8~atgI;Ib|S$ zeMOXm&5u8IZ|p3rUV)?&b$eYfD5w9xlpaXReUbbB3YKhx&V$SW^iv$}|k zp1HGr0E;aw^LXeaUbCs7$RMGR!%8UIbHZaT>Rrbl?eg(&nm2Uvs|%=Ux_)P}87sOC ziIzQ&BvaH|_piI|T247SW#LcxUx89Rk0|dd)kbGUTCVZ~-~ZWP20GWRE+NZpZClqhucFfz6S*plI;@3hu-vqC$+oem>T`bp zt84{xk)=y}{g!VX%J4c|Ef9>wlHsLbI1CX7xyrt0z`u9?ZRgnPDMXIGt!K%p>rBNY zZOluY5hyoUW13h}m6Ek+X@8j6$JF`L^1hB>^(I8iz3qEhTD(oGL!_3Qyhd1;(qL8T zORVbs!CdnJ6j`!^0Q^h44y;r;`pW(!%%6<+cG9aiqABKd=QK-(*_TM9?D}9;?*Sq} zOrph0ZqVkU;bbg{VsXOZY9W}b?2wYnrkkA(Gj8^dNJ;q9{hrRL)f-UXbGO$|%WTLs zinPyHGvwf$DH=p28sAfU#ZBbC=fR(%cY{eki74utbY(K0_7hoSGhqgLU`a`f_ReZ? z^RvGh@F(Y8?bhn`NEpJ~>))gJOCG%=n{?PpF3{89?{3#AK)~i01&ei=48Qj&@~{10 zUmRb(4jHR%Sh3xh3)@u+vrP^v0|h=YwQCV*K>hbb`ZfYYLS5F}7;_W!wGc6@k(M#lItr|pdQm`DLcCDxkq;7lp<^VI} zPukm{za8Jw-;`FHNRt=UBx&$TC|D*?yB2K*lGazMIoSO8Q}hC81YT_m1e>i3wy%zql&!4ty^-eUM&$egT{+eoPGNHVW@JA9J2snnQ zUq!XN>2q)Yu`k@w7%f*y$sk0-mzILLWHy)?@^${a{C(%b>Uq?qqU|VKFMZD8GsK;= zJMV^4(dai!&9=_Ua6o>SqUGKd`T^#}pR!NDC|uq$3dZ7ti|9C3p$=(naF%_7hyL%$)Z+fa}=yVw3D&YzTzb!J!Z zK%~gqa+VZbGD8=tiMn3n145+eHykP3&U^coGJiV$0s6?fEq%nIQo6G8rrKGn0~G}N z4M#`68Erok=TFK|*n(ZTzSj|EE{SK|G282k^Z#YseRm8TMY48v@OwK`O z$Dg>5Ky1)$h`4Snwj-^RQXazOjcb84G5QThTz_NDP2NFg$)CUvcdl8z6%n|3pN>uM zNNBS*x)cNQaP%9Jz)h3Q&DOrA&!3tPfu%aT#Zo0)HfyBrr7UGH(1M)8p}fM)aDHxH z_Ahb%q<~6} zI6Bi&C5pf%o=;E@|j4X zD2uqr7LWrnDZU$-bd#X|cA0~ugUE(IQJ-r+x++CPN!wC(JSg%lYfj@T2J0YE;2?_P zyU{H#A!^gYa@Z79?U!8OB)8tRVXF6wA#fSobd;N@E zb4x-H8LOQ1TcP^kGUGdTnPGozlY(8Ung@{!f0{ns!B%lZQ?MOmhl!E&#BxQGvt&T? z4Y-|Tn9M*8I0=#+&*^>W+33?8-0Wxa{E7KC^c(G#e$%YT;;BZ{)@qi36mTFU zJ9Z%Y5YyM4*zX+p)AOy)y{j5TPqkfL?>BC7lQdde4S5!*0p~)pW9Om|J-c)@4n9x* z6n?X#T~#9rA89|rQm9jiZ3?;(llma~Ndk_CWXFz29}0Q6A%~MMe=5JxIlZbvRC?Q9 zmda4TlW!UlDWeAsRB%cpJN6#>QMtMHCa*IWCNA=aJDyG*YK6lmL&?!1_K`~ovRU>H(5Tv?FgPO-K=iFYiW?TFC+_Py8PI@Ij>6Z;j|61W$cukMyWwVCo)^c7Rw zm;zG4kr(gSk>44yo7SF##RJQWKV|>YIk)|Vx@SxOGCCU)Srjk0a8QiJ;75pe?C|f1tiG=Q!R5uDvM;gg z|2K>*yl?)=b1$7O3so~eoPOn0bJ8<$e(bBGkBz+H(3k%k1!yN$J!p16)jq`z1&<@v zGJ1R>vlo_g(6~Ep+wDGt1|}0|IO)}mdUE#$zl-W(D+{so1kCBg zj_36LwcXuxei*s(r}2N_G#3}pxOvKu&gHa|6ShE^iNdL)u773ZH!u$eizyJzrkx zJ53)*HvEbD&yIf8hKPE!{U|%_g+x9}xGB+?DsmtRWIAHUGTorQv`ek-kTT{^=6}Gg zGgcsT^VXSIMpsl?ad$Be;t2uEJ7UKg!5}jGPY9ga${}XXpVWVc?N?D{`7vhaD>|JTC#f1j9n<#cuG=7}$i ze|PNDqi-HbZ7jcs{Vz0EcuR8?JsQ2tV8p$3Xet@Z6mX%!4g*}-FI&Kg zx}gyHa!?YlsHwOr1k}LPD%LR0CP_8HbznthZqYqLlt zUbTmW_2`b5ql2zX-NU5#*Y|&6WBx(Z5xN`mCK>KE)1GticQ6_8C+imw1N{U7Z^P03f(N+a>G z3qmHO;PAuk^Lt0^=2XGW;(_JGpRyl=CG>8wgqnh)Ue0@5a#0cJf<=II$BTf$gS+o? z;D9pXPu7o^_5bLJk%bS>|JB@MvriV@E0~#Co}Qij_QYf3jxikm>Hot&aJWwab)n6} zeX^x^N!;>KMwlDWdTHkirheCbY;>MpZ)1Pc=iOn>&B6D*c|=Y3``&_xEQn~o&L=Yh zE#PPDJPxBDHGMsdeb0hFL9?K9{uM+?i7PIb$VT=gU*pZeG{->5l8fO_baS!8LqXJBau)Us6#_)$T2nGv(|l0 zoE74m`4ck=K@<^0OgD%k0Jo>v8(C?h&;U}v;g;=K z%-fEbT{_zboFRYm;M;$6{{Kry7QQzBqB;L;RhSUCXKtAK_sOq91i(LzJvN$we>|i= zZPV(Lk-stCUjMMo6qfs>S_`3)BZF_%_f8=Gukz>miq37TkD!kFK>Go9 zvJ6#X4$9!tWkRr%0hj;4k8h23=Up63KK!Y=4rI?KA*#Bvry(J&7*aIR%79M+7xci7 zKUMu#eZBL+!R5uDvTNZ|z=siK-Ae(J{;;YL%9o8nL>KrHa0$+KO7Vd4GQf-2r-b>F zaSfa;+(Kk@&ldKj^>!i^mE)8OhyecqZnoh~#`d1Wex%Buh7-^ynp^sWJz3LNJmq4` z6$T2xXMl@pc+=3=TiBl922!$Nkhy!!{v^zwj4Rs@tyYj@drkWq))Ij+&glrMP{`&%WrV-m8s$x| zww|mcmbTX!_aqVib({iasEiuCs|>j$(o$8DjE3`Q`wX02a(icY$FWOzwyn5mV6P<~o@GTP$3Enzkop}7j`H34QW+#3z zS(tqO36Ja;xA zc(NcXc*5wrXYL;Vzwz&ne{uX{dpyJ7yl3eAU!FQ_C}Nn>{ggQb-FwC%k4#IQ4wNwR7K` z{rjo*RAK7DskNz(PCst;+0)o`e)^Avk4&#le`KLGf9uR0({G=dSsa_Yb>WRu-<|*S z@!-tL{KK=8FZ~2 z6MTF6mBMQ#ezEw~nd|0`FMewAZ^w&^(&?wnr6yjm_-6|rSbWAraqi8F&4rgPd}i^M z#l)hQVgIJFdBI&14{b6%GIGWEnXy2|886YsgjDLk1!DkT(Vnp8auuEP__J9clrvMs zTq2yCcp(Gi-0_%76K%QllIs~Dq6$0U|uHEh1Dv9_C$#V!VRO$=b_w+W1nFGN2=zMg>}xtQiBCVR==`L`=o`N zKhFSxd_EX7Wn^;t(O)aWdUo- zA8h7~nZ`B0VE}(E>Q^L+62C?CIu^(%a4FRccnvqReE1^`lRr~4lV;*2=!u}bRV3A< z*d=RBw;4bda5m!dQqx6F{1FQ%^4XkBr8Ooe6$~H}1@b1h$gI;(E+HV$vSUL{oA!#nruSxP(<96SAvg`a8K_kQ_BksH1XFUgi|}S7!WS?= zPEoZQNtG%YBLeIbQM*@T3E5-1tJpNMIe)(8iUquyV@kH+vRV(VC{p%(U>0ZI$x?+% z$Q+4A>L(vq2Q-zs*()E)B`i@8Ys zEZb0#nk%H0N>q4u?l|*ABq>fxLS!mny@6nXh|8yog^F7I&KI$Owd|8C%wf6djGG1I zMX6g}Ea#c$C4@t1J*y(*`ZwD3#7?SU~Q|hICCl zM@iU%a^mx^X90`ZqO%n0*~-k@86X-Ki;IL$*Pw5C zIs@cG)j}*)tjdk^EQNWCO)DiErb6=s$v#0+X-l}_$Oabwj0JF0q2@3pi0V}`2FNvJ z%~nDk$W>1~!~&IkK9Q}5iE77>BRBC8L0rLXeaq|^-ETt-%5}B(OnOCA2rNoxa z1~S@f*dbQ*!rfWYNYh?D%@S0!T8n9`hYDoJzs4w)wJa?= z^&J+_8f{)rL`Bt;g74`9`*Gx28h|}A&0^*QxI2wlmRLcl|GVo86 zk}fi&2JwQqVb|via^gnD!~_*Y&|=RNszK}NpEGGxoly}jA!u{u#7kK~ZM0}}lA1Dk z;#&+5muA&D5nfT_lMk{0uFi*>S}~=*EyBK%HWXWpx>YQ{fi-0DY_MjISX_oKbnz|1f|;5*L|+L9>XGMO~#_q$Er=-H1jiPF$n3>uvyZMc~o4n?gkfDreLT(Bd5~r_WUP)I} z4Ux&zuvKrlgH6<_;$*1b%=Q)60jJosaQQKC4RyHMLiwG zK%%oAuDx+F?p_L6tSw0dqaY|Crq+LNNYf(y0wZfQfNUb{QyO~#7i4v@1$yP9Y z?nw+#s7ex1SF{Y`^Lv6l};IxOHiVU1TxBkOk_I| zWnPh6iq@vfOln={{+f9uVl-8>QiV5HCO^agMYAETjoU2Z8qS)WQp#hkCul01r;1D( zl+}Z4Bjse!PUTo2XDT@Z(xhH2urq12Bu$qusf!pjw|s#CO4h2{Z>CMM__-f2uPF4P zVvSB}txf8E41n7Twv@A`t%>fCGq1!QCb>bHF$SzO+fP#=e{|WzFEp8=Pqi^<4(2n%uUOyO>KG?_ei-zt!R)-~ z*=%DTm!2#dT@d&3YUUMjIur1S(q)>YU&iFp2-fgi!`zVAk3V%THFD*aT|wp*c_L|2 z6wGmT>#ivVkohEJjm$_YRq%qJec3C_6cnWNX}c9p%q6quXXoC0*&}SK#RT0{7}VL^ zdBfa~MkHJE9sGZovR5b>A!${#COiK9`Qse91X^{cB4vylYtEV1&+E9Js5MG*N7)jK zmhQxuf=NwXr56%A_=MyGx z-X3zAGU_`SlN*%fg6UM9FzCeBeqlj25*tjxuum`)79zDMWzjoKp$k7+NOF`kNag~@ zCT&)mvlqU|wp=J?&*urLE_NZf@KTOf0<{vEmIksdZ4@78UZI<~qfm~e3boUZEPR0L zl|~|1l}k#r!gcer7XD}C=Khsq5~W~WP?iM)ip1%cFW$nLsJ2yi>AZ9;a%F>g1*Qg* zJzbz{*3)lU^zJAZNiZ1nkuqbbaKk@9p+s#=Oh;J-_k>43ebG%T}6_xC>r<)HH6FTbN>)I@$V6wgbopC*^uUef|pQ%YgQN`%DD+(^T zkz<&5`B&+-c5qFIs?^o_(jn z+R?5FP$j#c+Nb2Um^qPxW=liaMCjM2lA-2OESSkG#Y*`ss#GYN%*B@~iBi6vV?nl> zn-xAEDFxx*YSBazF1SNxV$1$eFdPPxlB*n6zWk{?+kR+mX3M@%VAHenpe>W_cTCv8 zwO}r?bm>MkY@z1Lg?y>9w8095mF__z{Ofpq+r2i8y31^P{c!DUN?wPRTgDN9Fh;ob z8Gc)Lzt}5}FPRlCt6?mb40r1{z^cBUO(n?e=4u6-T5spm8j_G~Vs6RF@pL%7Eo zegi7THe&w^oA)FY{?)v>L#|DtYG&J6wwjHWU+<^%x{w_rYv5*P_-(nFIaDq0WNzo~ zz+2AuDWkF88x?S{`SGXjbmzLY2}GT>ZDpy`;LV0Ts`u;Ua5W|k+oH5|$+oe(-^ULc zf~)<_fIm4)onvd`h#Y-e&yr&j`_ojikPqdM&4N%Rnpjemk~Q!aFR=xed5A+WvyZ9s zr{z@p{-rT7{}Xh!HK`Piw->$3bVwpTHYCr`ARgf!&jaqaMNucVsHG9vzSe zp++>mr#6L~v3<{jKSeimu3LQ+QPefN6=PFO<`S}y3r)%pdPIx%&a!axv%eYeC+DPa z^e;vp8-3QudoT=>Ppw-!FV@a~0IE<9_Yw(!t`aY43ldSQ0{C-YyM z|HS;;=l^{EY4gST`{&j3qWSCRC+7ZZ?u&CDn)~ayKb?b}?>X1py>sX0j?Mmh_Peml z{=V72oPF+Wb2dC{nWbiLo}Cl^RQPq_KMLO=e3|g+!jkX-p;m|sPYNdmKNNgP@L|Cl z1&;~Zf{ef;xKD70;Od#*%zSU=b2EQC^O~9G%{)94ow3f)GiPSzVgLOb)1RDv=k&{` zpE+HDxCGs_c>0Fvsj2^-`tsCArrtF5;;D;M*(vXods zDeRRTD2e?A2P(r}!GTJ#mvf*5_A(Asg8exMD#l*Qf#TRpI8YJxXT23Buvhm!Dxt9# zaiA3T7zavXf69T%uorTmQtVGSPy%}a2P(myzqm5OaWu;1&%zKUmT%`kCCj&QpyK6Q zIZ%B0EC(uDzNHtX=;fO^P-^)!2TCq4aiFs0Qyi#t`6dpOSiX@1l`P-Dfr^(;a-jI~ z^&F^Z`MS%ygI7c?pXq&+q?fPZK&j;u94NVboCB3DU(JC^mydCv#PU@fsATy{4ph8+ z1qX^RFLI!w<%Qk~lgrokJ}RS^=QvPmd6okumxUatY+1m8N|$FiP-1zS1C=aKaiHSm zNe&cWp5Q=5%j3NjhA5QYN2T=gC;;P%-vt4iv{e#es^jf9kC;j;-}RDx$G}_Z%=2>W1fg+66I8Xw6JqIemUdMrovDd=#XPI*e!~rtj|BvD$i-HB%fSwc2%7se7%=G7{-ZuH# ziC2z4GUkGR{QaLz20(B-xkYeG5jF`$1p;0l1T^5VRgIHN){R((d~9jZ5t5gx*$@g5 zOlGpMd%1)@@5)zU<1SZ;hNEahb2A#^AoAd^DUqGCYu6)+y4S=tlnogzwo!g>5{eG7 zAGnMkMO!wD2N8Qf+3+Vy);Ya)9U`iG=XoOQFlmi0bt7+q(o4~AIHF*~YzH*$eb^=k+ z{iM(Cwq;#TpTuNE#f3N_T)bygl$H|7$`Y8JQa+PGfhpxmJ`77fb-)|ov7VfJBFf`@HWo&H*L9O)LEq2Xi*D6SnzjA&P1x6FZINF zf`7z@cl88ybz?w#W0>|nMgFzFrJY^73U!?B%{pE zrpkMg4*#lZA)fsXRMl=gdm&nlO2jouJrIRz!c;Hm2D%JW&*2l{Ur9|{v373u%&~_b zW?R!}3x$%FpwyiMGXVW~>)HZ(Y&2Sd?@}&RaeAk2p0Dw*#a$3LcspvUZrosrbmDj| zqx01DP#SPc#Pk+_ma`^(Bdv!{fq(T>?c~~RsCuW`r`To+*}M%)GFHe+p(l#L2@z9+ zt9QAH?rk{mx%Ma_{*_g>i)*){%HGz#jje12w=@&_P}#0RZ3zyDc&p^d*_J!j7WXhQ z{*_j=wQFZ*&m4br{nGn%GOw!DJh&%|stc}&c&miiTjecUVfUYTzsSET^0spA7O2XG zMbTKYqMWi~v$*O|8gMMcTlKeYS-Uo6qbjgi=>8+m*Z5cCzP5Ai4C;muZpU`RaHwo_ z1XXrT2vq{K1@Z1RvrFqU#M}I{*VhQhUT*!OlX%a*x)NIZdGjW(&As` zdphH5OQ_1-qhFm)k}{hMQEed$)dhb{yjA|%NqcT_-l5%lKSSAZ%$^h83^xFtnifsrlgkqq#_t<5j%wh6 z-aoJ>^*F?6cTcJqb@);ZjlZk{-52iZfZvvHce-ErU$Qm~#!Ja?HB+gUKm*`lmeauO zPrCeB^uZqG-H3|r9%V@z(voSVte!wrfXhmd{pAmSJnVg<{7LY_GUYBrLU)?1b!+PmzZ11bdel|4Mt>=`|Wv`gHp=>tK~thK8Zg)Da3dR2XI#Lb~yB z(a<&Cqm=kp*9{Ueg{s??h{LTC982c*d39hx30MOVJiPcqG@OLt&ou`2JVE}Icflwp zw~X>Uo$=Y|ycm6FM-i}6AS6Q@JeY1SQ#$t{QT`-2+YhhF5DDGgzN{n_)g~QTLsSg} zz>0zxp!9Mz^JN~@RW)w=%Y_c3hXBTwcMXoi&{-)2L88xh@ z#i$E(*VDPQT3HB@A_5NUpd`$1pw+vCkPXT%;e*r3lMHqqcbzJK8Z7Nc)^J3Fq%C15 zdS%ews_3+3IKvod02fa(z#H3jY4;&X{sfp|-(Q3X=mt8doJzu_cUuS}m;wp7cam*9 zGCmdGtEBi>*aRDU7f^+}8+&1C*hpEdO*khJDhsZigv%l0Q``FaSSi)%TuDirpqk*;N%*^Uy@c#>a{Mc9fKh#Z%c%BNG7-EK^an%`fh$3Ff3Qo} zTfxhW{blaVo+rtl06lyD-*-nAe!4I}f79Hl|Hs~2z_)Rv@8h^wxYzliM_GY|M&MfpZC4y z_3Z5XJTp7<&O5U+-0e8?*h^U&rkt^mz86hS-JQbe_;T{#|Noc7c>oC__2J8If=ic4DwS*^**7KM@DQf<2i?WJx~b4|S~@8gB39*D3hfe+K!Q5QW`| z%!s1aHW?#g=dj12kK|n7)GM18ehg#g_#yD~XXpXs$%#NHwHJ}oil)0Osz|`5)5bj( zAP3xjhF0ju5DVo3S$|Gjh0qVU2kT7hjt?1vnKVqbl!C=L3>0vjVZ6b?Oyxu#tq-ET z22|*+Xs_8Y&{x(-lR8NVpu#Xfv0;aOL)dW#0<)7Zc`5=B2ht-dTG8HuxL;P)`uxcu z2hadR0mTM}0_1p@`Ao@^;D>0h4w2A`_F5w$wWUxsySoEG01O8d1U@`D@H3YgdC-SK z^rr`bZoTqGmp2!471Kj8*w9sh-g!J%o*d#C%85MOLm=AQjo`MTz0N{4q!XuVeYG?| zg<*k${ICFzlo`*EJotm*E!VE~mM8RsW|<=!bt>U2Mg_Qx3SyUWVpS_1$n_5nW+7AZ zBpd|M-u)2?t!S^!nh2ZIp{yid1_Hn-R1o-V8^OQ~=SUv@f$+ZXx7PbU>>5ZorAfb` z0Lu&&;Pxrjar-s`_6+4j9_|4U?cEo_ZAE(vgFR(g(KccbLu_9Gj-8_21=|R$Gm#B> zphKgKRr?^w(rqTZ2!so&+4fjf_8vDR7-G68hLTWgQ@!rFi}(QdRGb^G{loz0hL zD_`I}NjyHF-jc z(9?MkA+4USY^mri8h?B^0r7nmsu8ev^4g!71K`QEf#@s>!~@z3yPby_&XGL)0>F2# z1wWaxCDI9bq^}oxIu$gDs!6UME__tf2r3Z`?eJ$fNAmFVu(o*+!Edc??veE?`t?KR zktB?6Rp9KYWK$~r3Ha-l^hVrG9##(G`U417E3O~*jtr@b&f!P~mTRcMeN(lZt@So> z6R@)JU}8xr3(H?i!30_q2j70KRikGzJMzG@qq0>l1Uz1kk56dy^~Zbsj=Vk&3$j$; zxT(P1n!?+R1$)ut>5W(bifd>2u5VzHWP1rv-Ok1rDG} zJSEyD>dSO#n#J77(~=%_ta5_8ILaJlVznvmDF#PUd8ycd!s76Y>n`F3KG&{Fp>QD{ zO@q&n&BIwP`8cd0h`?Lbnp}Vd1)>f4lz-vF$#WWnO@bV#stYhh8teoB#$9aR1&7H?1-q=)K#G-_G(qR;&9jlB!Qc%Y`Ljx ze_A`EEY12e$WxRU6|U+-6zS`F?ETawhDZEviMB5~0Q8_2be-_wj8Zded6TDP7$&T2 zh?3TXRjpL>R()<;Kx_s&z@1gL#}{XmkJ-tXJQ?xPtyftQ8Lh=#?nF7`RlBk&PYH+s z=Tv-k= z%J9ElUKK@Aoz^A<@lua_DBZ0Z41vQ34zIeaFOwc0jkivWYHdQ$9J?2**)R;#ie2S6 z%+RHFFTiLX+o)j8yj&@rNWmzVeJ&HVGby!FhLWH%JM>_g) zvAlDnci009Y}DYTs9PRHn@85FVsP%?RDx;i)U27#k~{%_8{K?W5D{Rk8?hSG9o7cy zPLsWowgGtXL12_Hl@aGu18VC~F?*SlC*`R6QL6%ol-9APeHoQGZWkN;1E@xT7XphU zra}r)G-*7jwhk9Fo+o(Fph8mz9L4h0ZgTLtLPP49SB(4E9Vs7=dr?nV8XA^g2bk&!8Rw z;K=8i^|04E+-%b4k*BT(Ba(vG#@}~Sodq4QH&~2!?2G;pTZX;ay8O)44=G18Kssm7UfDRLD zA+^0`r7=^~524K(;N)MpaH_*>`R{8*uK$_`lP9w>x^UGHBJ+^?AsCqFA(#cyd?Kl&dcogSl=@L!}y&sm%e~Dm%5m; zbLUQwWU4=P^QsZ_0(aIsG5%9xi?3SFR*Pk|8;)Cq(-yVkXLNTJGhG!wtgR2i8x0%W z`%48ho(!SGztMjn_pVS1q+p^3R?CvVlRQBu!oa42YSWs5jmz3IQ0WgUYjQA1gD#SI zL~EVZy@rQb$dWt(XOGfXl@S4Z)%U`RGn%v8Glhg*H(~@!QIV=i6M(f~rF1q^3Fl!N zWGxbABU|!BoCT|+N{EQo>L|}ZRo7FJg>$7ckf1^rX(F1ymlP85!VG0Y9_X2)+*L&c zR9n|#CGPSSJl%;QuRi7l>y+ps4K$vPB>hEyAQ|q$UV0R18ZZ8ZvzIe@I?jL(9}9?% z)`yS5Y+Rg(>H>iTDt86CNYfGYr!%k*YQ8Jsulf@+m=$@zr`P?f@(6Hio6m%zke6l$ zhVwNuScsZEIcdNJIN&6Z@x$&rGmr^+kf*`&-W&qiTEy=Sd%GJoJ|r+{Fuo{7J-?Q}L1d5}kVbbYT?N!UoVP{8m7 z(!EZXBauwyVNDa-j6s7pR%l=U4&m+sE5F1$ zj(b1nJ@%*U%~eTq) zfQvGC1F+9ATr*Azu_L?*A4ZDsf7V?NtYAWzQ~b!meNCv7AW7&%@^IxS8rx}%z5 zH#ic||8F2nj5RLJ)g;wvCMR$8IrV6Rf(o_e0a;TaMNy`ZOYI@B0s_LYtMW7~CyoNo zOg`kHURKXEIuX>??(vzD-=21;%LA1tz=Y5*>}otMsOyXO&RkyPAzxazH#!hxdYz8d z%BrNG9SAt&5}44}!12CtO%HN=WS9KCXcyHj ztByd>T61inOxP66X>1ak0bqfL3y0!P3)&j@mF%75;amujs>2bSR-~$!k6UdrdrGB8 z)f0SEIEHpwaEKkxnaYVg+za4q!^05V*4Ku2zKXM|8Ps7uT6oxP2_pFFhl>VvDQ2pYG}#kz%{Gh#># znajFT5MY5P2gk!stAeiMrft;i&+UWV|K>B_W1LTSQ~#tq z1AqA6&ulUks8b_hW52WpjwI|c3fG!?1)q1pWJncRB@M7&*$iLvBPqql(5H^l~QZ<0FZvP2WE-7*bs^64&&g zoAhzyiMxGtuz}7l9_5aXw`vi&O;=NdhLpYF?85G+aBTwOi2Lfl^zr10y=`=#M)Qp1 zLVbLyCREg!v>Kn>*$tj29ES?mCLnfguV9lul01R8Lc7>JbGg+nmNW9KE>}(u77%&h zO2DD2v;Ru3>wo+O4<%3HEu;H2n&&x}>Lsjm2^&39dm-Lu(Llr(j%$T$6Og!$r?csw zNuI)+>$L`)3f*?Lz01%SjAYZjK~DgpcknyI@w=JNkv#g#N0&7CsAFw?1!t6cqej2M zUGk#%C3q-si0n+qFWcwOnz57SGOoAhzyiMwHR%LW$_XQ^ATrpl5`CC#Q>uOx?FG6=iDskAd))7m3*vzk45Vy++E ztHD9UG=1xire^&SXKbZF`Sq^nP_d~seKNOeAlV0Sp-Yg%xs%g{yuLPnX7eKt{js{I(L8*( z6@Rz&SYsNwvFggh&=O8XglqcH+gt68yPrI?N9#v4x=^XMz6vq)TaCefb5v1;6((@j zAzagkwt;qc#30HT@G{}t!fBW0 z+7XtG&4E0;2jG3&9#z)X`&bGvR+2d0AU{ z*i)6tYdtw24%N=Kl}oc$GdJLt|MfPIr}$2KM@MG|2V@83CE*{!e+YjPt`>eN{8;#| z@Gar%!WV^43m+BUFT7KDv+!Es<-!YvXA4gi9xtp54-=Mz8DU%)6dok>2%SQUP%qq1 zs1eG9ON6@%cM@(d+)^kMvV~N^pMrl1eiD2u_+0Rz;BCPQ!K;Gj1y2ed7ThbiU2vn| zYQd#~^95%LP8J+1I7(0z6a*p}|4shO{Ac-(^B?5j&A*j@J^xDn#r$*mr}IzbAI(34U*YHY z34WM=2;awd@ojt~U(4T%ui!7^FXS)a&*N{+-<;3o(|P~p{m%P^_Z{y`-p9Omd2jJv z=e@{#n)fL0e%_tDn|asrF6UjyJDYbZ?|5FFcNnk4%kbj7Anzcahv(#3czWJ`JPl9A zTf*C&w-axB-j+NekIkcU|K$FY`xEzD?&sVOxo>k(ZqBWo>p53)F6NxeIh}JN=V;CmoC+t$NpQlP zLpVN;i(}&$Ial`*-#)?C;oLvOi|O%YKXfI{QWT z)9gpt_p|S0-^{+2eL4F=_Sx)H*~i1erNh`Ic7`2i2iXU)J!~i2!q&6*V{6zl_7e8) z?48)#v$tdm*=#nI^(X6}te;rlvOZ^h$awMOk ztdm*CvW{X^Sp`;#6=nHZ2e1ZNc2+N|hqVt&#gecVvvy_8XKl-x!{W1;tWM@1%)c{# zV1CW~l=(ih!F-eXGV@vHVl7 zT}&I($ka0TVk(%+m?0co7BGcXn&{uK>M2Z zDeZk)gZ3uvW!kf}$7v7J?xx*JyPkF>?PA)ww9{!P(vGGbL95Vmv;-|oJA~$=xo9?; zk*1~XMN`n0(H7Dc(B{#$rfp8+&QOT&f7$$xf&Ve^KL-BC!2cx%C@yd3|UOyM)8P^>F^0ey$AWyx{ z1oD*YWFSwzZU>MjU5A)C@!A~78+)d`TbtC9U9S0f86S0f8cS0f7xS5-jfuR`4Bu0r`|uR<1P zuG$u4>dM1GCa(;EOk8OJIeeu8Wc*6RKH*9JwWzfhU|1+ zS_A30GzhZqQZq=~rRXWvOA%7@rKqHOFF{C6mkfY3UV_TeaLEFY`b&5qdoD(Hc3*rT zNbSX_EcU-x1aiNNQCaMB(Gei`ya?4I%|)mz)E6xSsk&%Okje`Y5Aq8U57G;5ASD-~ zr;9H{b$Ho@=;=!@K=v=W0M%j91<3wI7a)uaFF^V4asE*tcRwH1rQOa)WwGn|dxG5M zd}QIy=W{{sbRH^;`R7GI&N~m~v%`6)zHNWrZXmZiPY80GbITyNKKEddTb*kFx#hW1 zkaN%79^{;JQJvZ1oWnqFehzw;@EnvL*ykYrS!W}3 zjI*sEX=kH4Mm>86kez3vTGVkCpzHkaSzvkRpJ(k0^519e0`iZuz^cyQ&n$ub?aTu} z{_{+DO6Nb$1a3QjJ##ydznsYi`STfIdFM}O0RNpoo&lD3et!nM#hu@s0sM4+dj{Ch z`OWDukYAr}2l>_MDv)2E-UafD)1el1es)?O81DS|G^oj)ADzYn`N65k z!uL*vx1jUgQ}+h>&Z)p#=i8?u3&&1@((i1X0`F1hTc_*;a^)$&eCLW&XdvG>IR*0d zlLtV)b}~Zu%E{>7mrq9bzH}1Qz0Ma;Iuzs!C+R>we-g6%*^>kypFR;;_0)+_|2v;N z5&iXv6QSHYA3t#`kdK}KWzqS_34V|dp8&P4^Pv+EGY_6H2jm0CL;KKq-|=3M_a2XU zyZd-3ozApE{e4*m7!{Emn)7zoL_znditfuY!330qY)<;AC1cN!lMx< z7aY9{$n%dze4aO21bNOVypNq{k0Q3u8eI(X%u!_d8Fgg&sddE3DRqSF#QGwTC)5!q z$D`_STm;0i{UDCffH=Af>QU#Lbf^&>bdT^~!e52o3%?S6B79G{O8AEGCE+u|$Ak|E z?-Jf3yiRz9@FL+k!qbE&K%nq&VOf|J4huuVgN0sUztAc)2=^E6DU=JB3ilB1EZjl3 zm2fj5M@SR=NAR2AXTfU07lMxj?+8{3UK6|^cuMey;6A|}f|~@_2rd&`AUI2Kir_fG z-vl*5QIHnI1OdT;0=K{+Fbi~oeFbWPR3H-UCg>7uCzvY`2v`CN|KI$7@PFig!~cx` z0e_6Yoc{{{IsOy;hxqsKZ{y#t=@bmm6Kf*thKg1v4_wh~q zZvNhUC11>6#NUO#BYzwI7JMF`!SCSxi}x$wQx3g_RPe{g=}e8c&S^8sg! zvz+q^=Q++3oQF8~aBkz=z`2TZ3Fkb{8Jv?i$8e71jBxUtBqzc-lrzK`;Pi1!oNmtE z93@B0S;X0evm<94&K4XVhr#J!|BL-A`+N3R>`&P5u~)I*V86tEhW!}(0rp+&TiDmJ zuV7!qK8Jl8`vmqV`*3!don;TRL+pduUUom*$~Lg~XYa|DvzM~>VDHS{fxQ)bGd71! zWBrHq8|!D*YStI5k67=pRHi**X?IM&}-HCB<8 zX2nL0_b_i`-oU(yc?t78<{8YBn8z@WWR5WN%p^0yJd`=a9ANe_P0ViQ-b^J^ z%v{9Wg}Ebh8|D^F9+ScBVEl{mE8}~{SBy^>?=e;}-eA1Mc!u#9;{nE9j9VDjF|J@- z#5jj>8sh}UDC2NOnUQ4-GeV4m8D2&|!^$u)_Gj$LkTaGt_F(MH*nzPXV>1SaL8JeN z{u`{NSxx_f{t^8h`bzq1^cUz)(I27TN56x96a5w!@FF#p9{`8X)&>PU+`fe|fE5AdQulQ~YkjuYAmcO|gS@p(h zgz@#&zyR&l)eexatVTJ%yjlwKrPV0s7gmEiKzsgM=cj&|SIA&~ceJqYsd zuc1Su-Ssu%?ar^k5un}i^_C!S`x@LU+O1z9M7Ml}___Hj#Nka}p}TJU3Nd-ZSNnmy z{wwIHY1e%PT_Ww;uMqRse1+J!>dP|7E5Af{UGXI<$IHJ2cY}7>mnh|>Uv3NX;x8E> zFZu$pap4!ps`I~afjsvMR0`*Ofp|Fk3&g`&UqEL|JM;4+L7wq>8szDp9|H2U&ut)2 z`5d}*+R2|U0eRBrsANz49NZb&37?_#$A5;{JMJ^Y&#|8kfIQ|i6UfoeQ0de^TL$u| z&vpTMD5$f`%h^x}4h^ykKD1H7@4#?am=vmoM z(6iE?AS|g*P;E(mf-FpY(hYL>6I3p-Phhw}i+-{h$neL9gA9EP4g@XuF~T1B7^U=o zECG4w$0+3?AEOdH_~TBH2Yr+TdB8^pfE@Y=+2i|21Je5uxM?)cN2tcSKSE_a_+cL8 zz=w!`*M}%)=Z8HY9Ur3lZ~qYC?fVdwwe>@k-ts{Sr1^s|$lebSOQsJ{dcy~(6!af- zfz*9~nCW>R+1&j;vPAnnDuw;uw}ag8{ry4i`~EVJd%urLVXya5P1y6jBS5O(OMz6q zcMwSBdx#Uod;5TtzXz@sP4?anASLgyL5klkfL!)2vV7^g$nqucqFO3?7g@6S-JL-$ zdY1=s;X753yT60j+wC22cxk)5qXW6%9fWb`caY6Hy@P5_*W0Lc=D!UtByHZ?DCG`s z8$fRVHY&~S-rg1Dwr_6%a+@)fa_cd0Cuv)a4S}3HhHA^4F;vgD7(-9rd<^BeSpz*? z*g$Wwpn*z+*FbL{x1j>bY%BoDXv_skZ=koBwrT_kox0Fbno{ofl2CjD`Oy6uLS0)->&Qj`OQkePW^i2o*=(miE{X2C0I-S zeC5_4KU)dhQa@b@^^N-RiZaNLRse6*4^}`~Q{P_!?=tnh6;L;*@2&v$sPC*;2=eU} zP=eI46;MN{jTPwLRm+PY-&&5IzH&Kw`ikY~>C2Y`pVT*&?+fzvGjGB>LVfy8sL9kP--Mb> zef&*mwWyE1kq7zc8;Gk%-q;J|!*A>X@}W28fPCO}#LWG#BSiPTejvzuUx!ko-t)Q! zo&3cMZE%U(gHeCaFOfV|`tl;)zBGaxT~8Ci0{%cxw= ze;Jj?IWMD{aQ4eAkY~MwcsS#w5XjSCLj0fhk{aZxFQM`}qco-G(X)!rAzX#$(6jQ-A!c&Vp%P3#hsrMXEc8dz z02zN4)sX1343Lp$khS4wkR_pK_5m4uW(ml^GhHD4&ujtm&}Zl%4|%!*@}Q?tZU;V% zavORY-Y=@}X?PQ<-ltI-&r_&02cJTzPjrCPJ&y2pKaQ;3|8bPVevj`2a-YXh zJ=yy)RNwY`%nNeQ$GSmk9$O4j{n)l3RgY0X${$5J$R0&GNFUuBq~y_EK`wh#0CMRg z2;-7R4hAWD!~}BjBglqDkDwg(c=!mAyFHBly350;rY(3_0&?evQ4Q&O7-5|M5UQ*5 z9y$Qz4iBMPwB17}hix80wQ=i*Xdt(G5ZSrqgDB112YW!yc@UNC77wD5-Rwccr0@Y$ zs|61rHuw)%LGm8h7bNEaRKDy7wgkz#AKAmWKLV0|KSD&iAC(~Wew2oCKT6YiKSJGc zUmOA||Gf{&h4SZpkcRT_`+ynBANK*blz-g^X(+$n3-zD!+r991Q~r4`)LY6w?gh&! zf4>)M0_B%`Hv{?eJx783=^m8w$9qt2KimWD2Ic#Epp+@!-2-nu<=eZ_U%$EA1M=&; zp-xi1x*Hg#e0eu8O!?xjD#*|8IuzumcUeGwau;w&`RFcW$%l8M{6Dxe3iACs9U$Mi z6UvD4_MN+d9J>?R4NBuq;E=NFjvUCh?trqOthl2OR88lomX^FZ-o)h6O5Z+gmWY#1|yoiVHR_9`X4ZB`8xeUn58_GUV&Lj3(Vf%FSrtB z>q~+|V0K<6m?vQJf8xIfCdodnk-@<=h>)Y|bw*ll?sBPMEnqmXm>*>K@J#7@Jbqt6?nq z1p6i!dmhP-!B}%|m|xzU^#{x+zs`CP=8sQhRbal@!cxKrk;D8IMuaag?}8EFam*}p zh{9*;m`h=dM`5h)e3=rW^ikB5ohfH@{P0*AoYA|ovwfxST^k!m~nlcb{Fju+HtfjZHT6$Ev0Qk zqfl2v{9{+4Q1H9plg^Vmi=Dvy#{bNvEto?I4-Tm`!K7DJm3X95(W6_^7Hqk;Qlb#u zI$0}Lh_0Hfl}JQ4;%LR98zw(YEV_PjQn5yK9gbElx)w*P5?zC%Rf?{jtd)vIcTYA! zBD!mGQi(=%CyrJvx&ue665WoYRf=w#td*)n58-H)q6cxb3ef{NTDj={$y%92^f-=I zEP4z_D-%75qm_!Dn52c(uOjhe%4DJ!pbkQt`@bI?1}3p6m8nF};%JqkXK=I%(bG6u zx#+1$S_#zB9vrP&)QzK6iL^LcrD%T~twOXPj#e((7e^}-?SrG0iuT6QN<@3%XvLyE zC)F`%M0AsrLd&4W(W*r%9IZ;E#L+563LLFMB*)RpMKT<%OeDq8N=1@MTB%qrx)Mh# z6J3F$m5MIM(Mm*@;b_I8ODAb18ja{;9IaY(5sp?Rx)4XJ6kUL$Rfx{V(aJ^V;b>)| zb8)m%(K$F;iRf$`typx{j=<51MTbuYtP&kJIjK@3s^MtWqAHG7B^treDn%6>twL1B z(aJ?79IZ@L#L-Gc1sttJl*iGEMY+jEYCsk-f862%zl*ZAjL@6AtQk2BeDntn! ztz0yWqm_x`I9jPFhNG2;qBvTyC^8waLX@4HRIU+)aI|Vs5J#&L1#q-Vksn8^5FLu6 zm5UC+(aJ;z<7lO#gK)GG(SbNxvFL!wfaRj_c`PaL{1#7Smc-tSSA{poK&h2_2FpMA{&lYC9>jZl_Cp{Rv|Lu zXyu|_9IZ@b!qG}aMjWj~WWdpiMf%Brr6N0cfDpmiR6mmplLEbu;AqvNhjFwr(S0~t zspwuDtweOsWUWLlx&=oo6WxrXm5OeHz*5KDjzovBTW~J_Cf>6!Pp#pMvY&(%+h*p) zFb~S7%V`Hw6O{8h-|pN35|aO^FKDRX^pXP(z`o_Es0#X2Qdu_jz+S>C_{s=QWgP$h zGM>l((7#XLGsR@&zlc~-?`bH(%)<`D%uIC~Ww8NySm`dpv*9B=RqKor_~0a(&y--J zg0>UQ{kX=Hyp24J<#kO%0Wfmo+lCaX;b71j3JvOElWG-w?W%$^MErSwFjgwY3&klR znC2bijeoQ5Y{=19Q_MOOD}|nfyxZzDYb@v#NELj|s+x4lNF^4BGv%85BcfBM;EW%C zG9HZ;(LW;jOsWe?X8b$7jkuXSs5fBq3mF2{+WevtvZ`D~O>YW)zp8@oS5@%+YA{&J zqGOfd0HO(l+Y1N#O0JL%2jh`AoK}Hf-3l|A7kS99*ZUh%^hIlHqg#tM71P2#~bP zn2d*DvzhiYD7)5MGSj_-?ypQ|ryECjRteykR00~SxxUd*OtelQufYf#9$Tv>lGj2&{jz8XK(l;n+l z7B)ZG12yce%}-pt<+5zBG#IwKz*NL^+ujmT?Sq*V+8875Pj*G(BjM1J3Tn+KN+p&><)!U4uzD(5&h9!U>)6U_R6QZ{!S*H)K=k zEoLSk@=%|GcWc+ScPrj64vlz&Bc@OmKtfld5OX6dbf7>3B+Sk z9F0rzVgF3$M;`k7P(=-ERnc0%KPT1}Yo(|K%v7LjI?%y22#vQQ;e5H-qF{h$AQ$p5 z-vj4Vk6^Z((?}|uDMSnIl&l*d%F#6)m{6YKaIsmsF$e%w{MC)mfjqo->+yyT!JA*7 zk2N&D0hPvORcJL14;Usx*R^q~oH+m4*gX#xi zV7v34{BX=xwV6qg zjF+K;W0iW7Jcm40Z`Z?(Zba4g_3bgL;>H14(is?xCQ!pBLDzJs%7+UO%Ssnf%hpEJ z3}r(e=ooZC+O{sp)9;kK(>|ycA+Qa3KGSf0L|vF8H~o9a185x4*q^&#bCn7!rb4vr z?v)J3lQ3`9>yGE6@pM;jAqn-d(6z_lQrFUjxJr1wdWl%FM4}#$$oG_s_mqm4$~9_G zYnF)BOQezkiEK}?YEOk^sZ6Y?rcK4FRp$fPMDC3~=j9$wDpa8?;K@ z#&w_7osYwOPHd756MFJy{1R;J3s%gVhgs2+4h05-;gR90+1=-kLxbDrPfh&)be}J2rt#^mh;aUmK>F(O28%DNeKXl{iuKw_NJCKPi z+;9r=rv2n^>4zu9K$=CI${JM4_KTp^Rdz=+v7l9Ln3+O@N zBa|(;Ptg16T6U6hv)~rio^&yNzQ8~i(Eel}KwB+1iS{n-CD_sI2G*Sd5C13D3flRU zDE}kAmrLiL%%{?hqqu1$4xJWaZNt7C_BHF~*Mv7SucS$6UCc9Rn^8vCPYOq<|AjpT z=P>VL{hj*>^?U03)K@643MkZvsW(wCq@KV%oTFy%LFwdd#aB`*LOC@;9i+(lM)qmk z%LE@X)09Uj3n(X2;d>Z?g1R%y()lBID;ATxJM$m>$2f;GKNnogT*-WzwUF}(>k6)# zbvplb){&gsxxKK5-GQv9*vna;b$%%PLHL32RoEHtSN5lzUe0B(SKkwyU${fuQ@OYE zeukX}-+*rQ z?ivrlY(`zMwjL=A<%G}KQ|gzyjJpMzDZECTwCc}@^CnHBsp#+3iuJDGfHSio)l}G$ zN$)_vycmcqEjJYkd(`Z$WYTfTeC!sdQmS@pefoleb!jt&eQ2OZY*SV9J#%YF0TXKm zS1qPf`KM%8O@-5<4*8?K@=9^eflUPr ztO5#25~8W|#;_EHfttl%Naqc6F@l_4abeimXLFRhgeZlf&~H-cM&v1c?4w@aRP^=hqP^z+VR1jp+f>*z5rZwJvh_PUUur6><$hmY zm*@$ksefRKl-Dy{8}Sd;1a(XyF?$k@s8!szm8q$)q)g7R&s27#nK4YE3x{%XvA9xT z{e~&TzW89zkSA859Mn{pRjzoxtj{Tp{FOrLf=**^(5g^{%YByap=JV8Mp4l#G9HU# zivp%ddo!M)kWF0P_SvSw=<(P~!KzbXr7j;=$fKG{xFT2YuzgcukV=Prdbu%a=+re8 z`n1{W6o&@~jkF^%g~Dy^tGMFc810*;qQ?~MmAdt+fO1>xvE3GRE)cNgOCtVeXnQd6PG_UjAw zbV46syoxEpc16PO$rqj5zJn=@$ym*53hP7LtD6d0T49bFjc$)~E=G{7cO<6Nn7aFH ztV%P5H0g5}D{@=Fy_o@1XsQW~#oQZr&9P$&RV8Ti)k0Ot)~7WU5^XOeu!ucDO17yG zmy9`CNny_V=U`P`+&!304`{2-409ezVW@f4j$|>|8<$Y;#uVzX-CW2Ii(Tv>rclI& z90OXtBS&ezrG}ccuj2NZ`u&QnxXl#RqQmDc>iQ#DM$9l(X^fVbw@)HNP#EWjWC2&<4w1xs5T5rI0y#bZ)C8 zl@a=yic&S(rw>}=LowEqn8H#HbgO&)fdFGQrZBp?jaG5loY?HTrlMHM*=nwGF{WWJ z!4#QjAZu4DRZ&*+{W282PHoU13s$U~U*9yeC=U(}1WG!SS=+p$kS@3&1Zr_rsb{i} z=zwqj*8HFZ#;8ImcgItfw3)e0QxUO7lR;A=Z?W$BepBJ-&G%SSC7(H{YPL3pvOA&* zD$6}~or=;-(d+eUl{sTZCRLo?RG9p-R8FJM8vXKnn+kKrRv1ad995mXuc>eiW%9M0 zr8=Tzt{7LO)kc3M(r>0?x41kh$&k#N@@G0vX{P9pX7id@E*0@mFTfOGvA8toOSzrf zU({3>bgqypG-UNz7hstV^ojH3o|GXuK;NaALRm}pX!;K11~7#*n-0XolA4~1HI(i_kIkhl8d5&SNzD|4J>r3(q^VarLJwmK ziCF7#d53xic39L@bO*$Vs9Rg{8<#P$Oa~&K%AiJ9)yzE=OHm#0m4~9;I{$9zroyW) z_og+abX-m6G!^EoQzMqT%Dv@f%_?V%>SIM&wFVsr8*AgET1~$%qm8O1yM5Ta#TFTf zm(zAnI;gt3sepG+6P1+2KI0aTBZZ+hq6^(a5e0DR13SJAR)$Npo#mc5aY4vzz zW$%zAw(Kj;P{-zLst^2EGlfIy(~A?nP)W7y>88TiZRx2Q6It`{vSx>FDCSkRA$8VW zi7z|2nW7g?OS9^`jRF52$2S$8kYdPDsTBjcJ@#)Zh7uKHE$z?i-5tMS3j2U;!02@h z)HcJ~AAP!zQYyrTXmEJES)3Rz(WKh|8O<6g|qG!mf8UQ`q!zZ7|^< zEcNVqNK@fg87;06OJu-5&%ikq2b`hg9x9Jil&X=$F84QYaaltuy{x3Ms&~1Azbnoy zMt`qn#4d?@!p6C~HgEBW{jRdk>9^~5-x7Ols@KsiO_?PF?CmgxzhKUVJ;i{W@@G>q z5Rc>n-DZh-WcTl}6jiq*Q3%$Cy6InGwCjBGLfj{FJMxRL7P{Z(l=zey&ro!cta(p= zRPA;Y6B&Pb5oXAsQfV;5}T*j8tEO@EF5dz5*Ut{)C&-SNW3vb45DY;@Al~t{i&EKr4a2P$sU}Q*sR-&y z<(zXcHK3lKXetzgGUZ^Yrp{USXp(BE$g4TM+H3IZr292fm}`9rXR=_nC#6^y7Ey)BP32ByO9iqBFr23pFhy@c8unEShU!kucHO9#OJWYIqZX|!(4!QF z!a&&Xw3@_*wDewn9IsyXY0LVGJ)lbZcE|cwyWgUf$Nb)Sa1qvS>3V}XPiDxc8{GL= z!J~M2m@L77+ae8X9E);I!*p4*D%0=itp<0xsi}}SrH+s*r4YF(?E3bW0V_f#YfyJxrNt8FN{`V7&&OvE$18}@oQbB>bK<9Dh; zYDx1JmCck9XKT@DQiOG5-Qm2+-K~jN+>0^qY|ZJRi?LSPY}BeGG5b(7vl#PN)NzGN z)|-`eSJhaxba`_zS1~;l^DpjcK1CT;8gemxpC_swf);af`)Mc*cwM!k$2MY9N1C@d zdi!I>ltYt`EW-SNlEa-dSxV+&O?`edg-ji=MPpivPpkf0Qz7loXN_jJyq1s^n+kbE z87Ri%WxGj+xz%<#fZ|Yw##(|k8|lZO+_)& zr_}UDh6>gtuQoI7O%`0SNcVs`zXU@ompO_SdEDqTFTwg(xmYWaI1_e?T?^^B+oU7RStR=_Hqf~c#Ih=YVREy-|xT!~h;H2>UO z_l?rvO#aM9t^~0a0(E=H<)_ij8$*Z&W8H|+kR1vsED@u#YAXQ+h>G!foQ!q zGbcb#pl&DS$5DI32c(SBN9hH4nC=Ca!C0*PtkN3io6DdqENyjIc$Wux<=`?Fu6Cfv0w-fR`tf2EC zLRu^6EGlE(W*V?KgD{sag{dg%_*4{mLa^znnaPI$6M?!N>UZ_Nh8wMNrq{<`CwDdC zGzA>)KzSIJLBTKH)Z&!ZQfp%uk;kDL*REsrvO4?n@CUjsDEJl*x zE=HOXCfv12Gn*d)Mgny^^lwKy8v_Wssy;piX|hCYX-{G#?#uyfSgIt!U8*!i=tL`* zW+77ov;^vQ625`;fi6TsYkgoiVF_g|HG3+V2LfOzlLU7u(-cX-RyJ*P76eEL)a?Mj zh9l7X5x~|F=%I=)+n>}$)P2x8NnoLq1b3m+6aj8{-P5dQPrv|yx}BJ>p!z%4s{ZL% zEmJGSbB5spkb=m;UBEO&Vu)5n%|fOGXbIHqBz#$~HXMkAW%XrPXYQ)%drWG3e<2M0 zmIQof3GO1PDUyKaHqUT|1SkpA?cl!{Wj5>x{66*ZB@kv4%&aKF#bQqufP=>@!Cm<@ zRq({l^6cbGfSEwuPQ~Y=`bHn3;;{Po_sPXzX{4rCR+Axc>LlPNOK=xHO_d7LF7jXU zSOUff)a^um27^%>BC<6Y%~jC8`{@ddQ@D|6{dW(%~0z@9M40>=l znbO|;GAA;5oqwnlMj!tMVe}s_pap=HcrgYG1L4b-QXz(x$Ooz-SQR+_X-_y`$fQMG zShqeq`4Z4epl)aVzoYv#Vu*@Tef+b%zN}MUh?PuXHLR?cL0=DtO3pA98+HIT{WA%; zB2c$e_@B|mjVPkfUmyPhuP;*QmX@N0TrCLnfma}#IDme}Y7>#Gu&JIzzzc!8ovuGe z7c?S>E??b;`41UYxLWv$NV?^pxG9Tn#7!PeUe~=@+v=?0#&*hY_$tpl&DakI_sc1f-4bI=U-Xx6Cn^ ztn43FYr_>F415xqbjC>|?Wp|!#})!^3DoVB|7&zfBZ%s0us*&!Kt|DD?HTc>&E4P; z%fNe)NoJaILYHQfJ&J%C0(CoKzk~A;K!ml15MikumZ`a8c0rU-Ivyn?iw-wbI18B)pe0bZlkksGZsQO{g0`;3+T*@# zu{YYAFIjaNAOPZp((!m9c@i);d(9%|iO(HpD`x`S1nPD={tjXPgApCAuz$><=}(NP zl|4>ywxuxckd8+V$hS}L+~d57Tz7)6`VKNC$o-Wp3FFjUZPzTVUWtXn$zTk=k62GUh16{X%n+#C2wNnq z&ufeTjKT32%%+pN6n=ki-sb=a;6}iX6YGJ2xdai~G;Fwh&16OZqg7e=9zpg*5SyUC%|6s0U0kH9|y)royln!yx^wUfP*z-$6_ zI~q#8&?uwVbzyxW)}jqav_@DKo(`cgs~kFX`FMvuZ9KR=`Ap_UfR8}k4x3j$qESMy zWpx<_8@{%atGnePOMe_7Ll-U|@4`vIChEIqJWB$k1nPDIxUly`5fRXGQbVcXAwx0k zFAqlnJapRf@lKlr0a$Onkr@!6AW*l11_0s_}s0pu%dMm)pbjJ^P${>q`7mXCMS zB*1OBf1bt63D6U$+eu+VmCvtL<>L}lO_i<;dex}PL&q#1@0dxDLewMAc$Nf63DoTb zuXYb8~+ zI);D(7?{h)N9JT`ARRCJ3m!_q7J<5*M0)+GMjDZ*s4FlMZC-^VI8rHDOg118{7m_{ zpGks5!U)*R=ShH-K;2FO4Z6-0qF_zesjZgmJ<9HK8FsgkgO4g7_fbhufH|-mnE?R` z0(Cn$YJH@UMBZ&{9fU6A&-KZz0|^8S#ph=>iZ|mK5`ZL7w_#uS&(WP42~@D2x(BP< zZj)KjFO}zQ2`E?@_`)*H%%aD2kvG9Z2-qM{w~@4{6Xpen5lO9i!MHbVij=&)?jD%e zmx1Rjo7e$h#wNOm9O_N=Bm!Ot)a`V2VEg~Q*&+D5U=csXyMg;ESHy|JdGFh?j%U8c zc#|=g9;V$!{gmpUT-dp~GuH9uMh60BH-q||F#(LvEf(w*ah6NN1Dd=c=YUwB3YrMm zV||_R`FMl@YuVQOX97YA)a^X)Qtue!!>$mT@h=~SBBpMSE@3Lf!P!T@>lzgZ!|phE zT7riWsM~GWroM2D2h>b#S(_QM_l#IgmV(s-kAl_%b}e6r8n6Pl37Be10;>qr?Z)n0 zmyL13*okd{!{Gr>$P=nms}3*}-eTB^9M4#yS8-a&3G5?Kx0}6FT{y-8vyBscm9|@jKpl&y*t8N@)gGomng}o6bab~2VG1*IgRP3nk z;Z-xV#qWkT$|HFrfz1T!b|~|qQn1=8MJ?~hdu1|{%i;nUFhW#L3f(r@B^v!rD>;FE z1nPFPcdRcSV}jWeTf+2MB7?4sx|~$`z+@QLDaXfkYeJt*v+>qXOgSlmT?FcObLZ7H zV+=5N;^+`tVt6o`>b9#Y(19w!#ZpfCJP9+GcpbxZ?;x;}K;3Tq4)y979rgb$2hp$A z8e`@xY{r0ER2W6Uw*Po7M}hPRX@)Z-KuMr(2fuw?F-C)uOQo<^y(o8S5}ILc-cSYD zF!q5X1Mr{|j%%iup1?u^b-Ur)L95_)YoJOIydtj}K0 z9|@jKpl&y5+qz(k0zLMGNyasww?dE~e%Cc<&1}Vb|48s?0(HAZ{JLta6G+Nru+mL? zY(;C2&m3?{rs1nPFvx2|i)I>7X56*JwdFqW+rPqxQi z2D70zhh6*EV>(f%PUbEGYYEitAhv?3pQ8Z8#MDp4rObG&1Cm4!bfOCA+ZB`g_ICcU zE`Gyl2rMB`w;Ko}!^V-Q?c>+^7|#O(BUQJ})t&B!MJ@_t=A^#9-NX%d`5SjX0R{qf zJG8lVZR3cx3S={=RFPi0Ic$VUTLpR@*YiH2UBU5pz9n-Pfwctcb`W#mOs>NL#6-tB zI8Z9s3;DPv(F*{;4}g;(*7FwNxdYR^gTP7xb-VFf)Qye9!1xI_GTdhjWUW^DP#%Jl z3h)Zx{D<`!PwX6!yph0W0(Co-&0#TE4ZSC=#b7ykETGelWTkyQ00evlI4@#-U`V?P zvy(3YW&(9P6`P^)|J;t#JA^%gZhoEj8gCA_n{zY!NA`ZK`&m4uhOrCXMmvsrFXau& zuAKvraCU#7pV+zWH8=YsVR_!_9v*@j5H)mh>PcN3);B~-`84bdoDbvnb7bx!Adf)Z z&Z)X?8`}w0uhtPmI*-@n)AS7Z+z_WzLwBd1)ZI;jLDc7wzLmgo0(CneRekrdE+~~l z4#9erKL2phAkPH!8dM_C@u??ue3Rf{z26iQ64*qbZZ}m~_m9m-+_#Q`(V8UwfXona zXR}}^bb;zgUEm~RH{1`-Kqdre2-NK$6;Q!;T&seWz3yIdOqMH0!B9vdjzYs zTp{gENv(PlY(#?^0O&5&le){vut@irvzR#ndIEJjDU!NyW_)3u@G`Od5nw0)!37 zr*KCvabHJj_s8};UXcOD}A@Vl<}){OBJ=?NZ4pl-KgL4C>C z)<9V}jP;DwSTNP2v&XX~D1Q~a9I8qF%J^(UsqJ{s@w0HIo|eEe0(HB=OCW}@6&O4b zL&*1qQW2HiW78wnz%zkEnAdT9#|_4cdh&wrY2H9!BZ0czbP>$#Yzd}M%3Vbk>QA+VG{-40;)`VnKBq58jOsjAFSsDwQ!XFd() zgLeQ&jT1m1?Gwy+mIO!%)a?Z92Gb=%D8Y%SP9PDDqzcNs2d(2&p?+YJA243&2z&qO z-a%j`fx6xJUD5b|i%v#|FeJF0znphBcRA<3oL$%o*58=dGFCE{(vP5BLp_mlOXvHL z=>ORtaNL{c&9@x)NX<~|3uqk5L9a&w;eNQVIy`>z5VoC05k5`8PGTw);Y<#~IO9g$ zO;Cyi>h{7l*DYhs6X#o>0u1+hbOSvBTTnLykmTr^3M`z~k@TGeb`z-E;q=yhV{n>$ z+rqYT)DTnkX$o^vY}eh88nT^ zf&fg4t|@^d+osNP{sbHlsN1PA)(6MLsNA`AE=G-3mn{V4l4N;g1Za_{w|k7I9ka>$?=2*n%*M+HE^pbpMUni4Q9 zzC4}O1lAF#+l|)N6Jv`|dF)i*2{YRk(JFmTRVtf@0KW$OKFy>dAAWgkcmz08IT7F@ zP`AU~AFAKNwW?ocxL|hXwege}rpq)iB-BhA65_)p8X<1n{R9{Y)a}srgDBn}2wE$O zrww@fh7tpoq8?VBXkf?)2Y64Z0^;~c8*wjz?F8y}Nc+|g8rvN~YHgGmGHK(UP_fV)OskbO^T;g!rfOp5k?JkLEnV zevtJuOT!#tT*;u(duXRn|3me_NdT3OYyOH505sC3wHj%iKLXQgK3Pep_DEpEe7GtsQ6jxIreF!VFGs zI6jIPnx?5Ni!8}vOwvTm%u18=xU^+XnQ6h&mu6%#tx_ZbzrpKCm*qrHD7K?_4Q^Jeh&;sT*!V3 zAKFZ9xaaM_XsE@y`{*g5fLMCW58ltGvxFexCw zUU-}f(A^uKAgE%cx}kQ3WZZLBaS0dDop^>qk)*-{YJB<>g2NWineS_f*@FLCT<@eXzR!v0H}es1&Rl?gV9$7f9iN_DvEPtqO2C@aIg&KGqU z@PQA#hzj9~z@!8xbiWXCz2E)Xt)^_pv@X_}x$y&h1qo#pxF>;k6ZXr2us~pvoP)jW zI2Uu>fAWiSi>BpsZ3H?N8@EIa{|&w?)l+uG4wMO@g1{uhb@;py;;r}3r8i85u*~UH zD3S^IWoQMxRq0)>)+rpR{=SYqZ-CPtokm>Z~9He2Lyy=UnaOHW>EEZw!Vu_Rx*Y-x7!H;dm~{P^PA z7GJpd*u~;va8b9&ES|qOvGDVSuPuCN;q?p8UbuH5wcuKKD8#WpbNaA=G!x$oO#F0i)S7` zQ=Ykf#xNtExoAc({mbd&(;u0Bg)X&zQJ-B0gcC&`cbgSRDVu_;<%YJ^nA_FB^a2cy0U< z|A^I+|NG6;V}Wx8$IhJ~-W|V8C1-A@pfct*3Myqn6jZ_lDX5qUoFh1P_9?%{L z&1_Im6=SBLO2$M%6^xOB${7O%l`(n>DrMFwsD#l`P%*PMC|JQ*2eZmG%)=?Dnz@yN zs+fmSP$hE<1ywK)rJ!==W(q1}9zsE-jD~_r7&QeIGpa$saz;CtRin1affn<%K15m8VH!%$E$vpOhP#wZ7~N;S+46jaSzPeE18bre*| zTuVU}%rz8L&Rk7FWz1C+RLUHqpc3Xv3Myu<7!)jJZXC=i(J+@&P&IQI1ywPZQcxvx z2?bR!7gJCBK7AdHNS)ia|W`0nxm^pVKt5l<5<|wF|nWdmAW`=?)nQ02D zV5TUjoDon^88b;irOX5cl`!KJRLqPG2!^*+IG9zfS^XOYRj>Y)f~r>kLP3?Qf2N>{ z)jv^C`RX4jsBHDWDX4Vy4-{0g`g;m0Uj5ymVD;+%3}#hnR)0f5)vLdzpsLmXqM*vv z|D>Rb)n8Fi`RXqzsBHBY6jZwUa|$Y1{TT%nul{sUuxj8-=U!5)o%|9R<8bJFsnkd`b`R|Ui}6I zRjr<&pvu)93aVJ$rl9iG;}lf3`gIB_UHuvbm8^c1f{ItaGALNF`mMpNa?R?OD5!e% zixgC~`UMKAT>U%+RjhuFg34DvOF?C;pP``A)lXAU$?B&lsCf00gM#I&UmnaV)2x2H zd;WiHZEX3LrOM(n7Jj;L`TQe<56u17?C)pZJN>??PYS*;`O%4Aj{go$|F6;KRqVr$ zhhT-UceP8?;@xb=?U||@mPuea{p4yow|NNLUG>^ZF~MCkUrWKU&}3>QQcric=(|_X z*DCcW_YwbSrI6(g1SV#3H^kvU9~XW8?+5y-3VY5Hk>%^&bsz()h;Zp;_ZZkvI;hKv zM^zJ|3xP?wMYevt8yUWT({z1ZXDq2q@iez*33p^d8c8m;@OY%vAqo+g6kcGR$GZ{W zXV@A3;AY6Hc4;;o{+fkrt*{mep(00l&ivx!Aqpex5ttN}-otCjBf=&qq&ieZ~Cj9O%M$`vJiT46ydbZ+9Rt9 zQHH>z;0$~B@oqqP2`k|RcRVRaXH%{8wBQI8gldE|nqd5_*iqMr=tN*retJuDyc;gQ z$ez3oZo{J}n?q@1t>yvgu>T8z4o7<4BX12q$Ulf!34uxDrP${2Zb*5CW%#yJg-f)3 z7Nt&ag3WUXp9pCrjpjTuc?l>v7K-UQl*bALY_y5HXs0tig<3c)F# zP1yPD9SyV8lA)wRzNU7h;YY!%?8Ob-wT<|9W>o)i_%aAn1SSQU?0>#twd5scz00R6$ABbwbG`6-DAE1>wnJBeC_!LSU>KUz z2GOJ%*@m@X&2CCnRgeb$SuaQ)Di8C-Ml6VMMqpCPU2yow3{rZBkKDC_H{M+deeNX5egw(5tx*4CpZ5;Z(KdLTwnUw;^!AHTBy!{Y<^tWnEUwLm9wv% zy=W#mU7C9D)ER<1CtonRIC1;f@Z)m1CyRN4ZgA6)tiX^)EtB^e0`6*2@8ih8Fwnb-w|gwV z+sF=ZXa7j05Vi+cp1m~#W+FnS57RCDagXcwkaeR5G>hUi0JQue)YF;x{@Bm5RYQ+^Hpj;J1(ln-w~j93nHq4S`9@_dsWu z0Ls12(CM|RYdT-qP-y~Pm?rju*pmGZKL^DAg8V81lVl#*Iv$7NR&sKsCzmNF;t{XJ z6@oXC`;RbQtrCa*gHsXYHxQWo=@NUz@fg@48032dg8_CptmRyN1Fq14__L5s`E}}8 zdyrfR8w4gvb|At?6iD_Wj6`&WlD`2Lb2q&}5Qf@bXxHw;;!K2pdUW8d2rmRC>9*OK z;}M{H>&XS{h_2{qIsG}07REJ*?FwnYru;aI`~mq*1SYApz=sb5m7WjZFl&wKPEu(r z!p0BW;00-b%Kr1K5egw(5tx+Fgol3@@$lm@Lra^EYs@w7!NVZi3vx<4d~A$8a8`sD z0+Vzb;Jw}nbbAx=b-%A(-iUVmHtxZ5Z}X`yFEx7U!LlKI5SXM{hfmEP0W^Czljy3N za;Pk>2MVyd3^7R|4K$2B#@AtTBkT~EBwb_6$M4{V*K65p`R>ZBXt`R7f-$0nr7(yg z3Tcq`$fN5KR)(lUU{Z7yoXp$dN%iI#9m`rcTnH4^<^afr!L=8ilW70w*n0512r~pG z30I)|yA25Ux<7+K<;XhQ8(~i!$imRt3$IBK=0{fK56EvKFiEA%&HtCi$`Jo=@nZ|l z`Ag=0H~YZMqo-R_X2DgH*G-hip9z0F%70sz9`D8|akFl|g_?BosM)b$YRF4|30xNm zi40=dwL!5EU&+NA@!U$SxDqaOCyCH2jNEQd`%fUIM_}@aJe$4k_&wY!d?tG)Z=iKm zRiUufL)N$!j05c%u7|YOQt`@4BAmOty9W?p<+bUA}ZU3SYx*roj&cKS8;&o^HTh z6Wl?TOg&%X{%^Vf&9xb>!J~?X>s21g)GO^3ewm||3Kv#lm147SvS76y$;T_zbP;x; zj<`ZZBm$G#AGdYI@ou=3e%x7`)zcJvO^OD@-IGA%NJvMkp6WtB2tR^Y1A$2+J$>uO z<8AJ>?Z=(X#p@P(%&IUz3^NHttb}ybM#2`$9;{zN?1I3gxt_K)bG*fws~>{L?p;%N zDw#qg8Ua&*D+s|bkMxZ?c@Ow$su$6Wz@#ajx^?UECTEH|Tjx9cqGqktY=jyaCv^A_ zp%csrPtve84KW9p59UA+>hp+O6E=l<8{tlLH6XLMr=(Rx75v%s2=<;h)4?QsLe%NBz-V`1+fPLlV*C-mgIPi zGgFdHo_sM4`buM?7>HV7Sp_1YLOOCY;fIeN#2-VfgTSQGp14&!UIn9VUA=WRZ#1Vo zVb{CtVNZZ_YPj|#J#wRsJQ4Wc!v(P|0+S|x!WMJ9!nM;V8|6)I$-By?L`2hw)WF;@ zV}LlWN8J0NQ;P@frx42^Fln%V0_UU58LaPoI5V}iO4aDpLx463#G8e5)CS|HE2pPk zL^A@Drg(h+{=Z9?OpDot&iqG(KNOxlm!190?9BAvrWI2i!Mi8FHF@jABga2FF8c@F z|2MzQMfK?2Qs!tk70!I5X)n6`61emc(u$V|r^C&PS66s@qklqdgTSQ8{+V6ahKL-GH0)=1cEifFo6R^}#f!cEhWs!BlYCypDz?u6^Ynr~*K=BR zI}%8Hjb`{kn4CfMLt?pL7bEICYqlDU{b;>Sk?ACNa#i4GAcIJ?Wo)A;r72E<{_j#B+$I+ zAqyZJ5tyX@a#p`B1nT$P!}oytT2XBGJMhyaLr8m3$35K9${~yqm=yA|t*Pxf z?)|u#y_uI1&B>HDlS-+K!lyG3*$~oRQbzVWPfN9kVgx1)@lsa1Jqu5?ci1SE(`92> zu}|jZx?*r3As!+AKB2zgD5Vg#2uzB233SFYAfne9N0LpQBp25^Yv3b5{6a{3h~WK& zeX}4u5SXO*V)m--Y496*M~kvJp|T_V5SXO>d^W#5!9A1y2W#4J+H4M}-IibqNP}+z!4D7iO!oIvj;ty~83L1n zp9hU_d{-lk*C8}y)~yuVV4#7>ijWQ{81rBbSplK~fk|=CWu4n&oVfmHMImiW5^G3; z(Kt*)Aoe1p1B#>hHisyTut#80)cx$8$M54r!T)&opzQWhA+5N%`vS5nk#_esfo5TKrBo?q z;?Y_>#_hs#>j2$-)d+{7GsYvU2{AVUlTYFO;81g6EqV@hLai!#+g`24r2(NTE)6TT z+n0}64q=SIq>%Tq_iZ2J-WUa|;NO^p&K|JmeDz2@0y30b8dl1_z58jX6VZymqzT>& zP4`O91pTI)NW@HOcS~IDWI(=xOT(G~>F) zNAlvl8>Gs)G^||82yi5|AbJp(l=*J9yuHH7>>sStwQ~Wr-s21C%^*?6rJ-e_GvTAG z3{i)`r09Ryx@r4zPIR0-8QC>Ln77S*~#_l3YJ7;nJ`s!{*mVR~4cRfl0ydgrVzFV(3b@lfkgcE;p6xAXUtz zVdZvb;v<$r7$Yz#GRl3^WY+9RwzS{Yu z204W?#Tz+jMuZarlT_abyL#sW)!we2wNa>)6ZQ;5-2|F2^MnYDgPWdv%rb||k1#}F zlK30g`t~{82-v@Y$rkA(^SOrFA`Jj-Sn7cAj1=ml`UOW@9ik9{N#U<&CEI7i6YG62 zQVOVKi8Wc!x&{Y?A?zX~ifn9bA1XJ(4uMJ1ujA(bXO1PumM>lkFW$fK%K3t@Irr4r z7tcIz`m?JW7FQgELk3?Izr(^+oD z9!`eSg(_SXSXqIW@8lexA3}=V$$WLMh<-;`6=FaHChhu}tsA$yAtd_8fn8Zy(b~yX z#VT09fB=7xh7>&N3-X}-5@HtwCe8I}HoYz9+Q;SWGN}sYrm&;a-{luRQRDwAS4l(Ol?$@UGL?EV)8Cb`(VVawTVDOfIps|q0vFMDLi@Im}B z#5xE}8tp@Dar=7CXjiknFAD53_j;gIO+@lwFwWT+*4seCI38tPh&BW!C4UeGvg?R} ztQ}3dY9)O$C~g2j@DL&H;;_8{?<9^`5aEo#q?8Y^%I#~xPwX9YY}A9*M!+5@uX|u^ z82;mg9DEmd=mH2u1SXlkoegha!?nBf+4K3%Smz3u(^7xhXysB zUuJWQ3z2xO8IQyN?JX)`&h2Ta6nQuZOg^)3uy<_hxrW)lB6Oo2Xonk(O*^+G2e;Tm zI)o8;m-oJbYd zFlm?_X#P6RF#YDQlUTAwo1^2faLpeaVz`ce^yZJb#;2iDL@ff7M%ZTC+iRQ=ZenlZ zTZb#`>)6w!mbAgO3~-X+div3gKy#OmxI#oF0+Zs8Z_R9LIr05Z*E+RG(9|p#+VKzw z2ge!is6T{w+=V_p^&*-Pm^8)LxAfZ&=S*=odvYU9S4dj5rMxVg1m6N~z=w1gQ;h6Z z|3iKju^0lAhWy&ry#)otWGw=@hp{qcYATTNLE39<;7I4LT2gO^8P*IZe z*pvYatU1Gf`^+hJZNLnf9ifN7Bdr$XvJsSL^>(SJMXhL98>K9?> z;~~V(hsV0!vgX$l_GA-8a$@&epglz>@2ZYc3So=Dq=+xDcW-OB=hY896O*wiO< z2^SPWX-k@eJHw@LqcxSulo|bA6#RyCq;^)x0dx_57zaf`LG}5M{83Yr66A9N= z<4+WI5=SY8uti`}#LwUxQV)peeM8#lBx*KSE9;cQ2nDxZL)t?G@8a#71>u3fB)y-q z58rl!3)ee3;E0yi8rFE&*o5gnbVo4nCEpo{JW=bOr-7{>=wu7ke7eeAF1QklH`38K zyhxjR*cu(B6han(Ne$nE4497|9U;0boa&AZ?$;B2ckF+{OAp(=ae*~Wd?v6ATNt&{* zs@JM$a*d7?56hH8x7U;R_#LJ&!XAN1Q9s<8+qQEqK|k20yIc%zXi6$;3-)HJWUlNsu7qp#t)!rZ*s=yH|>@u7D2 zjURP=h(-h^rGHZh)B5L5o-?-m)8(%$e_;8am!GwK&vJ6vxqS2T)yvCEe_Zs?p;VNxE3C|aLvLQ^M9KE{`}|X-#h=x`KQb`=fm@sdByzY^K-)A2)`x#gz)Xc z7YQFHED1xxb)iUjfpB8(7js{q`|#Ww=AJWm-&}gmJ$K98wR30A{$=)uvtO8f-|VYq zpE}!`jm%nSm9s0e^E1Dj`S#2wXWlXM;+e}PerF}Q|hTJrxpai7ko$XDZx7hFA@Bc zpdz?kU=&CM7Yn8)e>J&1`O(QYO+I&$oy<=9CLca|!{j*=f1CL6#Fr-ib>cM>PoL;a z#3$?%nu%i*i{pP7|L*vwAx7d$$Dc4>8-K(RubKQ`bq|UK&J`RxcY=6J{0fQ92#%e7N)60k2D3^v%zsi)HS;S9s$zagL6yueD5!$@IR%w7Kck>B=BE@? z%KU_aN|+y0P%-nPLBUeyzXr2PG|UeusG9jc1ywQMqo7LWKPaez`7Q;OGvA@0GUnS9 zRLXpdf=ZZgQcyATjX}W@=7)n>#TsUZf~uKq3aVm`Q&1)IbqcCrzD7ai%vUL>jQI)$ zl`>zZpc3Xw6jaQ7aZs?BIWdq`uF)``r=V))a}-p?e3pVLna@yA1@mbNDrY`LL1oM* zDX5hB1O=5aAE%&V=79mhat-r^!K_LR^DzplWGpkO8Q?}J$t8s@zeRL#7Hf~uHzQ&1)IFBDY4yo-X$nRil9 z8S@SbDrMeIK_$%FD5#iu>!4r-^S;5X@Z8@_LDkHgD5#2gBL!75Z=j$G=Jga*&b*F- z%9wwqpi<_w6jZ{zhJuQjR}Tu7GjAEpD$_8pq@Zf%6%5Kp$vlUGDwt(%%do%lDUt9DwumIsGPZn zg36djQcx*#HwBe29SSOD+Jl0{%%cag%3vIBQcyM1pr9(IPC=DSje;teDg~7@6$&b2 z$`n+}lqjf#DN;}|Qy35o-BW8Yt6Ib4D5#prQcx9>p`c18O+gh*ih|0SBn6c*2?{D@ z;uKWE#3-nki4F=@Gx@=+Dh(5+plaqW3aVo6q@YUX5#0X&Ib#nSTh=daExvA1xL}-r zs_<_@^IUG$Hj|rv{?rEqpBG#N_x~5hKQVqjWZd-+?ibH;3n%^i#mj5ecr+1i=sNHj z7sRTAw0nK4P%M;+&3FaQ;6v~;*p@67;j(^oCGSwhk@XJ*CMJA0j|Rh+x4hxA_)Bt66qZ(yUwH#(uJeiaM|UCeNKqa2I*kJ_%nLLi4n}+b{n(?b3DJeXq})G4^Na0je%3W_!me&5 zEo`6jFGvRzIP$*e>HY=84hT$|=MQiJ_+6ZN`nS+$;^K^A zO}eJC!Vx)$(*@~Z=0W|XLso#OKwwhb?_s#$qPq8ni*07c?^65=sbFu(!Ljm5A;uPxX?FwO zC4qNx_RWIuKwy&If5B8M#C0D1saCKpF-Xi+nV|sVp#nS`#VMZ6E`s~JGlwdUC_rFR z*ndLP2@*{wop2|_=91Frg+qc0?j^+E!d326Yb@Tq+N2tUU=9|I?=6*GI)$G>H*JlJ%znZ#0;GBHa#0$s&bNq71HpD+T4t_5frFT@hBK9a! z37OIFgs;sYEFGlX?^ADCAQx^H^4t;uwMQGJ6k-PiCd_l=IWS?phkNV#6IQFzA4w_G zYxz8^1VE5FNc+mb`nQpbBFqt(6m&M+fci*yD!m&}Yqhc_=XcBOS?E9@U>&4=!RECHah;oEa>G3E{X#ali2r5C;ATTNNOlV-8 zT@B0J4pLJ5v&&+xhTRMfk{DUz~#nmXkfj|jrD#@M{n3DyEecF zgs^sy_LW2H5l1S9@I_!!#xm>P?#8E|W9Rs(jMw9kHl!7WHN?I6Fjs?Mb-Nr|O5@w( zaO+`8Bm5DVl(n>V=5{yMypc8Xvclek-<+veDkTRd))`H9#8Ga{T2n4~(-UbbC>IhfziH^|LROU~#q@Vp2!1SSd3z(>?2ZrJaC^B)NnyrpV78dDm8F8DSOvF-rR zVSo4LXzD>UAuuU*8k$^@liF``IdM~-w{$96HT13!_72iPq+(9aVM-(X5tx)U#agxt zoUCznobR}@in!XAh&%LYSn+~@caRPui{|W%S`y)nz@!`jtWD-QIsLUslT4v$C5xV{ zi+e)g??9Nk12o7zT%JQ#fT%!VQrzU$`P(^8oQ<{d&#LUtM8ysW;_0t}Fz|X*r+7W| zF1$Lj<8ylJM{Iz=q-iGj`~N~?%dw^QVrt>s`LVe_&i-`f@0Cc@9%bKb&it3YH;SO9ls1BWXmSAB_EEa(uH`X zz1LO$hpz&$5dxE@yK3v=oo;aT{%%Jxm2LXG(O7Il1LCAyI-tN&+tq3R1;h>rOq%By z8{Apg)uY%$hK9pqsa4xbFpY#u2Qv@mS|7FoLN~id-ypz|P8uX9r zRQao z%h=@33}=qMlb!X18?ive=d$a;6fiG<=w7>gn&HjCFNPjXJ%}a*CZ%4wb@|RTC)LY( z`6q9Q1X=;FO_6a~K_<*6AgI_OrS3o1IQ_qY*aCq`6I}u?M>ni}|K*4~Qdyf@wV|-Y zz&zmPLcp>^nh2YtoUWP?-3UyY2==*TqFv?&>$Vw9JIO3 z>8KUai@>BAF4{VCXOc5Re?e5ASJlIo&49+pb(t{lfxu~pY!!RViB4nXhB-UWmKQ{ANbpd?GTtW=>=PhJL6nC)3G|< zq~?aI9ktmLdKugx0pZ~w9oD3npM3hNMwBBkX^`__a313f(jT1HG6A1jR&kXpoHGh* z)S6R#=-~%vehK?%>OnLiFe&vs_JZyEV1?Ux@=#n$*-7QZ0jWM(f`xeaZ})TW`P=<{ z@cnZjBoLV7CgkS-XN}!8w#+QK7NZMqp8xXvgz)yc=ghulrarwj^XUOvGk)&gTr)|E$N7HU>-1w$dvpfw4G8VmMC%|K#wwS|L)#v0jg)F~m z;r4&vzuh9}yFUlahR{J^lI03(+v&zD?;r8>r_2eB*(YDiaC=nTR?aD&9-S%G!5g_K z!W@A~K{v4eowK=@rT!9;Gb64jT*mOu_%0N3{0iR9G zZHArVvthLNch!!nCPWtklX9VKXc&Pr&dw*TZ63XetMw?HPgrf%# z{0`D^QfXb$;p;%OATTM>z~*;u;u>@Ra&4VAoUTf09dB?GVF{=k z6~4a&WHN<}axuhT%7Z_}tt!K^@=)f&HcpPJB19DelVWu+JgtJq+xv>Hu(9qmNd5VE zpaC*r5(TrUp``LN!BI*fY!R3gv3BpyjW7>Xsrc5tQP62(CXY3db^5u+EnP9eia$59 z_J>g_i2M=)lLVCPwL3R}6?0BBAgJIr224} z;#^Nmabku*La8k%qRt@Dgt;4R7g4BUGqquIBkT~EBz-HpxWmOO*X#Kw94m*i#*Sat zUQYpGaH8NV4hm_07KZ-~`DFwq2|bL}??BY?esrmnS+A=!ESr9D707@)1UDT~2<`9m zj8+a|jKHLjTc9~yLo|m*NiL2#6Xv?s1|qoDtDp(N+?Qc;BkT~EB>hnK`kkwRbok_O z<}7A?>v40~o(KS8a8V%Q5XJg5N93S65mpFHlD(N#?OX+9dmnEb>*LfqBpP%TL9sRz$EpDu+5!goTt=}tYEfhd}U2S87oA9IM=sQI#-y%5a&rSbTPY0ZQZbD-KWO8BLw*^7NkS@a{(t7!m&caRU6L=}yYR00j|rbK_oCT% z%{(yu(WyU8%?qxX%uRf7{HKuR|1bZx&fe)pk2kYsemF9iYf8h0E>q0;{4xm02Wds$ zD&>mZSZLg7gG#*wUme6(iiwp-F`eV?9vJ-{Ii0m5j}(E)Cmmv)JKfmv{a7T8O^++< zu9u@}7^NXVAEf=wg1$kAD2%X2U{X{NMw&HZq%oRvRd*_}=22Hb4!lngi*Mg2&A(j- z&55u=V3KTrRqklP5AKaLC1+w|L#sCDTChj~qoRCey|;|ClBg8(EA-PaC)b?7kr}c8 zLJ@&U=2qBHye?T-NQW~@Vz0j-jE_Ozx=3bLUbW8Dc1`w^26ZO=>=f5dfeHHV^e2@>zZT` zoDb5lVtIdlv~mbz1SW-e*!y;F;k+OPtKj?lqAlrEHyj)5Mc6NekbIDam9qa#;OOf_ zv?4HR0yi|>ZjAJP(>23htD;@D*s2DQ5Ay_woHu0C#pV!4RTH8Mfl0Y8HoDV|n0_I9 zA^*gqlIWT}WQ~`zIgrZrr9<|OFy7ZH@pz5@v?-lTHN)+rsRhx4z@$tkTi$sH*RZc; zujOUh{S`y0no%eeEg%PT69~FDaDf9>{L)0NKDcZ4h(@rH5!w3-=E-DBqiDz~`f?e}1)d!Q#2eCN zsGoOaRUyg{m=wGTLzjvex;nOE)0LBkZJ{hk1+Nd{;teU6_W?&MhcHH9QizR}?kK?{ z?9F0LmUK-kDXyh6Zdloc|AtxH9WpyY4}nS6TKKYC!Szf1FS`TUCjNr4vFPn2^4`}>KtW}s8Eucuu>=y+w|Aj#Cj3B>%sqp1hcgutZK z4dKi~$KF5wsj->4*^f^D_w072(r!SrsPW^G}$5UUQdSL2ZQ?HtO*20V7L!t7_jWd6ky?Hsg_@-swvVK{=N_`CT)cYm zoC)m|v+#w*$?;Du{CfPv!gmGX<hlOtyzEt?s`7a9Z5$1%q z2{(iq;dOHs;rYVp*{{s~ZtnYYU!MEO+}q|}HutpI8|JQ`yI^i+_V*LwiOVOJ1P;Ni z0+HZS!NTO9Cw~f206#JL?#b6oK4Zwbn=BMma51aYn%vWbV25|~sG4qU>N6i#x9x-Fv zXG!IZ$zv0ls;yb*NY>oSu=Ig0kXE>9<+^{XrFA})r5wv;MTIWV5NE=rd?u{WJVe+9 zS~7V@tlmf@eWGK0j;aeBCWmDsJADBMWL4QfL*iH0*Me7OdBCbErdw+Yae;Xr4=Btb zk2$VvxK=*Wt%Js~?Wy}afvWVLZV|o05HcAQhGh8yh6g0AhD%yWcEaa9tqZKT#mSl^ z*@`>Q*x-SpO&UqpWf}AG(|I5xi`nd+QWh=`-~pr2k@~adP<<#$aU@e^4&}U-S=0)l*pliBfPPs(h_MZK19*C6;Dt9!atuk9YAUAni z+M37Yy!^F1AT`<@$&j~W7=Hy1h?N;vDIu0r&RgpOYo(S+nn;(WDfPp7z-!Z}TRxpH zG3DZc&8BT#W%dS4LOl;?Ha6F^>j`!2>X-0<)S&fBWon;mrO^enwzetgRJ66WW2-zM ztp(P?n;DB$q3Z&ga@r&h$t=qJs8y!gt#TwWDd&Np)MC;XZJof(Q+U9Uh^V6( zZ_R(!6S{ypwpr7voDy^GZ2ni&-axgwu8tW^m!IHsILq#ovY9uA&I|K^J)|h)YTl0Z zyjB-bwY0^ep5`^cuuERV7b)n<$#7CHZ{Kt^4|q3Zj#AR8Oy8(I z3CP-&j#w6pUHvEy$Rr}(Vjv-}*K6{67f5zAs;H^yGOWo3-694}D!dWc3@Y4LXifqV zl~U8mYc1-Zbc<9yVo$OPdl+HGG@oNLAE^5ycBMi5As(<4?U`o1n##?8vst$okYQ(i|HoM=5u)L5lhRV3l?U& zR?lS2hIMf^wVAI8zQpHHuZKz&W8SX3?max9=oDJH%%)O$-n+U$Iwsa-d@_Y@^TO^+ zm`Ph6FZ2Xslvnj+qb))zn71>%kJT3VaU7wXf;c_12+g=_^&EqC>Ac_6eNE9q6S z+}iowZY$GH=?k`!-QsVIeW9Bp7c(S_sa(Oiaoq#6v#@kd{^N3F%{sN%vbLdWYnO^V zpxVe9WYTqMN$l(brb1vnp*M*w@vFCaAS+D=)6QzvbH0%WQp)JM2|iDfUG*j&u$iq6 znanKHU)z0@S!2oR)JvsRM||pMwOBpwFv4qdC@bYdQdFw{LQn3}v zk_)<8GVM&ppWDdPtX|QRXMZr37_8{1kuHyTxa1C%0y&dk{rN6aMaZ;~ON31-x8|?& zPoX_1Wv5)|tXEC(<~7|nJF9F)%@Vn#RA0ONH@w;7z|nRXQm?vPcYdQvxsyzQ^2beg2LsA_j}Gzu}DQk>t|l&F8%1v<&KWYU_|Np*@~ z7idT1(Q?)t^Y~Oh?be|*)g&6bsqVM; z-F=ih*I(SyM zgU!ma;ZDe|%^TFB@oo{>y4h1p+YIjJSt=e_a~INTRZ$_o;5j@XkE^W(g`#7+Zn+Cc zEqX<>rE_QUQho%I6xu3N+z`?lul!Xvha}r7x+|7U#(o|@s!LpwL|x+#cr4fRKP#@f zCAxqnv}s|w{a999w8=}=;ASi%(RAw&r^_lsOzLUYFL?nE_}0`lajU3yj{OG*WI9ES z!ea5Jlldtn4$~l#ZuyyKwK8HOUjVtsft>%L6c$?{%!l8mj z8%ej$H+OTiJ1(~?k~SAz7sVC?2YCr0IzcOH3K*I>hm!5q(JT+0~lZX8ZegrBcoFTV2X5z73aE#8YpXQi09# zW?i~I-sbC2>uZjrMw1gyy|4>ZL(!&OtZ+&5;$|0UNDUc<%q1^vUenSG07wKOuz4~V!Fv;AmkjL-dn0qS^NY!bd!fUms&-@(^NPN}`H1=ry>~8;&sif96 zW9^vV8M^qY#SX=$S+R93Q+J9TrIzO9iys)14cQfTe>U$m1l-l4-X~klElnJ#!4y>? zpRKYMi#x>pi!4#go2iIQZ!@VEmRkp_BNjJHLWQ6|ug>#4O3t`CSx-kQ>h24asYJ5{ z_{PK)4^8rqp`v#-4T(*4dVNCMEmF=qYHK?6Mys=A;sL29Y2Gx*Q^h6zL6zD%tz2A4 z6xA2<&$bjd8KbR^tF6E0(r%GbB=2)&B+i)f%x+uHlwiQsYE+(BXz?w44oP0APnQ(= z*20ZEAkLJPmO!{+y6jn9pqQI-z)@WYIcLw=f+vG}V+P2)(ue(L^QIj;CErxuh@iTcKR5oRrT1#u=qHd3y z$-6V2qTiPFXRdhq^0&skLq7fevv+^Cu^!e(9dgfla#8|C20fHaBd)6YG)+xgd#$m1 z{(tO_vE^%*9N*lTwD zu)NhfcIS--<&H!!W68j#A#BSi@x9q(xVjQ;=U^KK!qOcyBeLFsz~nMW1UAQg+=@?s zb9}?*)v0CcC4~w0kRUJ}q=T`gE@mB~Fv1>zNl`iWwjD1g>P+@bekr}J(D>SIu|Hmi zbzulj2kD@qum!Bc)_~|hU{YR|RqS|R6}We`gidKnZ0Ka3ToKOFz`iu3gNoxfE{DsH zFhpRIcm}?Bc5~0A|HX4{E$R+w4Zig%T)Y55>L4AI`u-c0M^_i34S`9?X=sYBT}{!K zGip0-*=9@b1i7$534!L&lNw}ifW~||bPb3O1SaLBSoe;Tlh?oFxDJj}Af_v7^<38h z>uV5j?tt=W8?6av>lI;e@zjm1M(fha*>QeX^*5*sm;I4hgZa5<MUv8gYHqF)0-9YrmO z9t0+3J_4GVaaS|5m^G4MHSZ~SLm-iRo%em8aqnpKvIutsCMDeg2Q>`P%z9@Gy$*XY zydlwV__-zqUJ=B(+qap~{GrjxA&e226mmQ3-O+Q;rXPJVt}~~kK}*~afukAzGCT;g|E(kM)<|K&&|Gj=J@nir@k?@AUHO8 z&iF^+&;M)wZ7uI4xCfzUPkw9Wi$==2uqvM6&cs1nE=YKr8t8+;8>!YS=?>gg7mIW8 zBdc%{5cgD1U){*FLSXU{K61;p!^J$`n%tT^c^Xoz3>In~SxW8!bASU2VYkrN>|iDt z*{}VF{WM}Z1SSo7_tyMQjB8{4o1z_Bbs_65E9Bh8h!779(jg6sdcmiwW<)mvlji8K z@tr7Vj*Hog`S#^eG%R(qx$dqxz!cyfLy)k;wJ+XlK9Xt>MF>m^ZL`)Lh|hlZ--CTR z*Vm)PY|0*Nz=9s1wnOz@!Npu;6wl_tN&)e(PS(hEy4_`PN}j zfS72IMmGWP`X9CiLkb0+A2 z6K${OEp@-u>)NP+e3*1VbhVLN25mBOwDlnx5tx)-*_zt9jgx*edo$nP>uc&nPQDiN zRAG_=G29>>LOSjipO$J7#RyCqqP(Ts32}yKvu)lG#C|^*0X$-e$2NK!7}**ANBk;c zF9asdSb~^JLC%c*m`a|UC8$xxqn!xX!Ga&G+QSdtZx}^g;L}hkq85QkBNSmE4RA*2 z52Q)gX2(?0HGCZ(7y!Iq)gIpOen#LO-^12`=s;jnUO_nilCk^8pD-r)mf#bDw+mh* zc$}alxJ{rJ+$6YAFgf{)$*)g-c=8Q!>ixdS%%o@XVap#_{^#XqE*5O*AG26k3@olKGK=Rg zjxYRd;j3_t|8)z`TDWH+x!_!Q=)yG%XUzX;{`>Qvn}5&zE9Rd(-;%%>8`sYjYo(d;Q$A=kA?L&$;JrnY(uG%-KKB z{$Td=v+tdK#TBiWmY)z+nI08d}8M9GcTHX{7iY~wi*4*O*0qHOiuq| z`s>plo_@ph{nL+{&P;ozA2xm6^jTAXnfl?>7pC4f{sj2C;i*%tsmPRdN;!Gmvf_OB3rAG85!EeWhJtH*KkN!WHdBBb;vFQGD1;@@k#kd;L6Dg=#^aKj368#ee zRf--zfGQLc(HsR8i)IIiDHNi!2D8dFqG<}M7EMu5l}JEAm7+-sst`?3P`PNFg33f= z6jaLm4+WJlf1{vc=C6Z-<)WFvtTGMrX9}uj{zO4l%pWPJlKF26s$l*=LFLTvm%lQ$ zcDR;5P_I&>5Iv59%0-W*pfb^8D5zBQXbLJ3ZBbCMh#f@L8qs|eR4uxff~rLKP*A1l zkrY%Rx|@Q^MI8z%6SXO*RMeuN5>bgGR)t3N2nwne-9bTBqT4B`Qgj;yRfs|q zR4xiqP?;z|L8T%;1(k?=6jUto4hmL??i|bt-M^cHszojesuDRVs8ZyhpbC+lg33jk z6jUa%QBbMKN!K^SWNhzpWB%z=xk(h!iMK@7Ug-Ap}JYr3Mv*|HYivnx^6Hl3`>_#P_^h{3aS!aL_w9J3n{2VbO8mGi_WK@GSPVy zR4O``f=Wc^P*Abx>_Ndw(WQe~p`o8iLDix&D5y%bOhJ{RB?_t#EmBaqXn}&tMDr9> zDiVTkyLwRnws-!2>CcP5T=?w#_k~}d`^xN}X2UbDn0_go0Jv6=nSAcV-zK!Pd;dg*j1&L#q5IcY7ieB z5=Nfi0o(iU2m=Hri9HF?TmkawG~ZA> zsg06Z?ekc;i+UhdHYAKZZO3Ss+z2}aCQ1Jjd+SaaNH?22X?M)&t4fmA&2>2B36ZTK zp``J>o)HQmToIU*@OaqJEOGBae?!xqiL~Gggj{fbciy%A^n56$$=wb^%zt_b!GfAbX z?KI`MJ+PIqE&m0v)J5@b1u&RD&o&U{dI#wl3XCb3)y$o9`^E zW?j~}CP^wC@F|xXye9P?r-BY7bbsgSwEqNR2?Qn$bRWDHsa>x{)DVld*4>4m5SB@H3E~yxEGE$BspXBk2jQRYtrJns~|~3=m#~7PwG8R3LVH8 zH0SR$REnrYVA2Tp@bmwVj4ex+Ru*jwPn`dt@LNLFTyFLavuDp_rk_9cIKkT{e?EEX z#6!lPG4_#zt|~m3`B=+|1@1A9v*Y|rZ!$a5mPE=LwdeeD2xAY48_A1s&_BLXE3TyA zdSB+`!HoDyCSF7P@{vm-mPcUnfxLpf`oui=OLyGCi&@*;(6%ztXrvwiAu2BIC#KsM zA21)n2!TnWFK6#OA>{1dk3^^U$~OvXOV%s30Zk>B_M^IQZ+ZlEAX*TZl=w1eT64Ra z)_OSG%BE~pc?njpAlN*l{Ujp&;m9Qs-Uv*}c`2(sF$+zr7fZ~VUvK3Cs&Y;q1R<~_ z2f^g`c~2<)*+``jwg^m$cnRw~F~dER{!JZDxU6r@>y-N~CXgWG(!Mg#>Fr?(BkU2F z6!qe*2*PV11!}l7c z_|@=(^UbUVL7}vV>hi^-P%qx)ri3R#Vy)%RzDd#XK>AazrP~{5SZlk zRQ8q=6JWr4ogW#qy8cD2@S_?o?a7QbX&s>q!W4l?0ncNNC&od*efRMK3}Sb{?`{;= z^Hm@ZehP$D-^;YPn=)cSgfjw@Ql85mJ23`QdOJJ0byH-+*bJ9!TpIx|1wyOuEroYd z4wMbygTN%s`{Ck>`?yY|e{qGo9E=qMW$6a2?#m(cI;4Gw?(d=;x(Y-I0+Rxt!y0$) zC7M*CsL?c&fnZGyt}ldIhqRA8%sm;gAi^1eNh!~U)#`gdN^iB=C$}o=_Vv8V9RnHM zh9Nl_8|-+f5j;jIgm6V*Qo^%f*XEI2bL;Qg~I zmYoh~kp6VjW6y_!Vp-JhNq{lHFAMa7SQL(!W4MxtwSy39ncaiCW8P2(u=Kn~NY}4FwyqhAn}xL|~HqyI9GI%Yb}u zH@IT)YYV}Gx4c;f;xJS}WIm*o(Eson&_ zFf>858H_YOCXG-C;flbdgmEkd z1SYAz8M?pofoiY&>sWF@Pa{)x1UZ_}e?!oD3e|xP6aLzSp>iYa5SS$WCU)_}c|f`s zdD&8Su4~0cnIzf)!Z5f)7Q9^tgnD;lrDckg*J<=bTp1t( zLpp?-rx4nII3KMX!We-`A#Z@@a1PNNY#FgOTPY_D0a&_(5cQB~Laq9gmFe&}Dtn9=Y@YH(2{px08&{@xzqU$i$L5O-tw5Ns+(?exP_#rS!`!&!} zE(7geN9lDKtA%_h7nSRPG7QlWhMw|f@WV6yH{_QQm?ZRS_Pi5IFgDxm`~pNEnGV{T z=1QrQg++7tZx@|`&E0)7AQTXoWcGY;sTaXiJ(s%CwENcAtS)nj+q8kfP_lc>9^ghD zzegy9a7AEJ!YjG?{~2SQv1QxRM;CV%K0V(NCg&ov-WmC{W$IyqnD&#Cxm_{j}XHZC248=-3oh+XWNM|FO~V>Obz~p^LHjA>nIJIvs6N4FPe?d}^@BV|0ydXeQBO4^u-dDD zS3w~e(qL$3b5u1Ux)7L@`*BuxLJTig@ABZaU_{r*xXZq334}sFq!14&mhYlQDu(d= z|JZvEFiEcJYd+ci_%*{P$M4zut--?!fTAirC6`@C=6x^-?k2Z3oCA7lMn z%)V`=wsq^OIiYgro$vt!PeZ<+2H&((dDyE0O@6P5$6DQRa`{lTRt{z1Us7?1S2^hY z2n7VDnY{}}b@mo9)JAAfrxXW428Ylk`02`NusAiu%jPRWrgHfoVD3 z1E1p?i5&drIH=Cq+VZw0X*Yrt;6cMyuEE+D=TQ%(8iWx7(?s9RPHjDeI=)?R$yG7= zx}~_`hxG*byKjDgUl2k60r^P;rY-qrmf1QDLzcbc+XaWK-AJm}S2tkl1WuAe5w=Cp z(e2@4#5M$`O@1f0|6et-yts7p;_V9$o3G40Y4&9^Kbm>ebZ#m+`SgiTjsJH1lCjk2 zb4R{BqT(k3*ekZyKy#Oi8@lVA&P_*lt&mWq0>uAOuILK+Y6wQ^jZ`(cl57gv1k@XEr(r!*p9$7r7yrXXFWWHy=~5pgw3f{gpDZ(fGUSfeozjvPVjN`a~EPQ z0@Eb^4{U$ck++xM{_3#Wy*ZP|nU%nT1?297awrXK?9lhEh~)@O6Z$5sZ>_>p*<0Vz zW;Zoae^M`#!1gZ4)(7QKI-K`^#0wFd5STXg8*FGxOSI?Ho)v0sxh!XDnCezAl(g@| zn(vvF!#(&RRD!TUV4CFDp@BVWUjx&bZB4y5u1JuLU67Fv%ArpL^TPYS6|o$FX+mFv z`Jy|h`JzbK5n6Sc^69m8paLEh<+}P&Ajyr(lH+Hk8$4E1_~MbS#x3Y!R3i;mfd(>)}KMet)Q~ zYSY#;6}7%x0b9XCg(P@~HB!_E?f+iHb_Av=eF?ht+o^6ntj^R6tL070Y8A+Uj|rLZ z4kN^Qkw?4`u?c}`Q@_Z{w;l#Q%U-@%i?bb($87TWW(y{h;qQKD_>jehUavg^kr z9nuodtZ;r&U$-IlA}~$kv+TWFO7hHPtc-hRx=^mI)wbHcpc_blmjwCrdLweU&ouNZ z5vB-C3-B3ew2FO=HY2WhB)Sbv&;f2De7!wwq0KZys03kyz%=3g-Ptl1~cM5dclsmbWXUyVO~tP215 zf7_qVom(V9d*?*w1lP4?%F&j;7_Bq|wSWQ+y+Bzpr66zswBcGLb7m!ziezF@$iCSC z50v~zI9092@?`zC5&@4il7tL{;TAZm+;^!MD_6*=hrV|#{K+jq8W#f7ZSLPYS8jEa z!8_UAEj<=hQWMRZ0^W!iq?M2|9CmHy zvpx_7VTeHD;fT}qyN6mE!ViII+TUk4wjkB~Np_iC=4cmfMRU~F49g5KTL?bx{;5;$ zEh57{IzMzOAIhgl_|TPHERux(j=)BVc%e+vvkh7SLIQzlZd)++?Pi$g$G-VoNs)H@ znkF*rgSehh_Du};%udjwKZZ&Xwg^m%@LgD)>E@8|0_%}AOWhbu2DfSfC-VN1)L#Z*xgB2S{0mA@@Ejpka+_+#k z^&p%On5O!j&UIThLe-e1aW)V^_>Xfe z-6rGz<&nJl7Ny@=`vOh1hOg0WvWVK+ba^V))nQXyQ| zST{ii1u6YVfqeRhS{uR-foaALxY4GyVK(OQ!P17RIdmXp#CZGlhx&}u?> zAuvt%H*9OGo0^+pncW6oFt{9YSt-2c0ID)l`l5?YH4eK%ge3ygo70)S zMK#C<(`FD6uMg?4PxElALl`13P5hUzY~D@j%`clbC24=%ZMCG~pq&C@=RxU*I5z>- z|GkLq2uxG@1smOhRNW{4xH;2fGHs^CX3tvM2{U}~cNlYgL#hTLgupbS zmUdM*_34hfxxst zKP2P-6C-OQ%V(FAi{^#<=U+MZ;#vQUb=omyo)k|w$1P*d(R)XJ1()D|*xR;9YOl!d zLHJVKw~B3hHwn`BH=&0#lsN%(9bPB$?MEcIO+k zNmDMNmR4c!5||2Z2?Uus&s@$^6vmNXL}1#G8P>5?B3>Zx*cNj|PtlXNH+3-Hhp`ZB zi7nSEuy^3hO0oOD-3 z_In8T(#_Y!hkI$%HrEQ99#bV&29vx9lk8nvc_IQIaJiyV6l$_kRAzC50N}$x zEUo@U;2gJst3a3_FimixbLkdj4ZD=JvR2MpGnWc7tIwIumf?c}al4=lK=5!E?O3Zv z6hL5Fm~m+S-K1lD^RLzwT4THF2}Ro=3ixFZ*{lC2k2zzN&MX+`-#33^ zEPCa zrp>;FeZ=-8n7x;5YQ0@`uE#U0g^C$WhW-u0uL(VMkP%H~(Z@ZAr3g$DxSG9ko1`1t zi_l?E`NXQ@An{59<1g2?R2E(0hzA}Ee6NOohQKunGK_}6TsV<_ zx2+yatq5NPre%P5np-5R+1_ZNGtoD+1FLE@7|S zBH7ILx?fjHCJu$tWoLkNz2G%K&@7Y!=PMj`1!4sP)5e{wZ#@ni1ZH>pS#ZN=4v6(y zO$@f4fWrK%!Y$Su0FYlmVETur+3U9M0aXG4&X=-z!o@&!T^bL$;a8xAL(HpPRrVH& z1cpCHxCpTYfoT&@Kw^M4n7Ef1z^agKr~+$kn-O{v$Y2HKd=s%j%TcdHtU_Sg*o$B# zs|CjHtz<>C1(heemX=!rU?{XS$Vhdbp4_Kh7)O2)foVgQAvb3e4B2y+R!u?ix_Yx_ z_rRwd@>4-M-;l#U;=SL4Scp_WRyDZu?x){ALS~<8U&_|T!3JBH8657 z7+$+%EJa(9TtP;98Pd(1*Ux|lfzR;va4}*V0@EhX!}0s{raU({`stBpkG^DN^d%FYoOsK`3n%WMC{5fsu{Oa>Ts1K< z{?qYqjDKkS_2bVTf5Lcr+&lir<<~4fWBK0Y#IkGo_T?LwmzRFK^qr;8F1=&vrAvRe zR9|}Rl4VK0bnVj2;x87r7eBuErp4zkK5?m!|KWUYizAUo|~3_0y?uOnqqT^;6HDdcstC z$~$$()GbpdC;u?{{mCy*zI*Z&lTV#&O-4rFK53s+jo& zt+B|MeM~iW{n-5IuSXx4ynb?i;@1-oEdOx%E6eX2{hQJ1=wpPYNqWUDoj85z81=*g zDzQZLA9m5KgA0F{cKCxA*s&lNz$ zqURiFV=9^G9}iwC)`*@ZfT~5$6hKv?X9%E5(ccT83enRAP`T)70;o*%Q~^{fddl+q zMmCP4jUV_mwNk=dBY=vTs}G_I4RfUcs%EYbKvm4;0;rO?OaN6dmkOYA<`Mx^#+(#D zrOd?wsDwEofQp%m4m1+Ag1PG8rE(3kB!H@!MFCXBEC`@VW?leQFmnQ^oS79sWz38K zDrKexPzf_7fQp&PgM{VG^1(}G8fIJoRWoA(sEQdCK$Xmh0ICrEuK+3+{f_`D6a7H| zm5P2ZfJ#LFEr5zezdJ}+#!MW%RH706mjJ33{igt`68%O1Rf>KsfGR}45B)uOiv zpeoT@1yH5vEdr=Q^kxB6E_#yyDigg?0F{dVSpb!Y{z(88i{5aMutM}N2QQUtM6VM- z)uPu5peoU81W={u)dHwO^eO>VE_$T^Diggz0F{bfE`UlzFB3q;qL&^dEEl~VT-(*b z+*`8#e{$rFBTL_fF}r3VJl~l6*zC_{A2QQ{G4o|pvy%^-xM%#WV_zSWkLKXAKlvY4 zvwaQBDwRsRQ(xucrm^5nHq+UFf~=98AErMSf;@o`4VuIS%L=Y2_j(61tAfDP(EW@Q zR;ftx?!8s2TrlI4q|~j9W(^F7x#jcY@}FlsHqqSIZHT=HOw*9C*KLy|-g~q7)~Z5d zu~wpO&n8fSS?BX3^q)tAn}R;VMTjj3Oq(cXH@B}OGkJVCxp1|qHOT9$k~S-&$8C-%SaO&Wk4p@LbKh*wtPZnK+ z?(aUtVg#m%+zMSaNprr}Rktc~EoA9z7!y_?0n5|&qRaMpp=y59)%Wml0s+3ue;%!29IvjLpcg5&M`UqwTNX1OdEV7 zo7i3=&w-CHW)u4irdGusav8u}=w=|&{Sg|~;cm)s>OnXmFirI#(Bu~PH93br=;4En!QXg|EUIw}wu^)kHTBqUjzd&g5pMPgC9nNbF zl~CIbl)!&McG{lTEeN?W{oaY#jleXW8^B?nCvp+r1cTrw*G@m9dG@J1_(?` zv%2uxGBgH3Nk8sn2JAE|INp*E?rQhOi_oj&v>`~8d> z1gwOOjQK*o9?KVUg<1uoRaRn<7L$C&xDNsSkD+okSuQ}X%*ya;LTDi{%~sYqxlJ+@ zvu4)Jy~yU+YI9v}j~dnrU?6zDs{NjC|9k~!=8m&=gg*k)vOJ=5YP*|fn2#xwmFd$l zi9#DtLQ7VG53SnoLk}Vg=4c=LPasMlFfGu-+17S9^Duu3K4g|eRSJ71uYeFuD)O2P z>pj^`el_e05tax{lfS(q*?tIlX%cK=_oWd#${9_ht&PHfRt28DYQJYcNb5M<{l9=e zhNy$Uv}g~5SL!qojen)mO_{tcR$Jl;KL`e61l9gA!XTny1Bqk*2}B75rUlY;F5SL? z2*igS(Pkprk`E$EXvnt$MjI-A&u`Z~A4DLbA<3~;k0^k^v@q(<>Fw)@Fq`b|W@tmj zx2fOQG}xkW>=aTyL)qur4J& zGV13a|8F2#ATTYF0$hV@iA20>5R6CiB=%Y?36nu87zL>Ij{*jfh#Mgcxk7{`0@LK> z>_ywBV5Zx=>rFROL7zw2(x%Gb6p+6Uvb^%(|BC!L0@F6#Ove8gkK8k|d}2wwXk4(& z-#_=F+4s-R&-kZXQ^CpB#4E=?J+?h|)2IzD8txy~zTHg;&8N5z+rtI3e!T&~G6D)n ziv@-1x+7d9yg!BvD94Ibm@I&p0RmI&ecy_RhQPFz9yYMuP4B$OE^?jhdLa-NHx2%J z9KJ=6;tI;q2w`6TVD}>&5SXUsW+mGs&2uWn5!3k{CQrQJZ@9pjhh$Yyjz)}|V(;Z@ z#5x3~jdrn_?T3-hh99j56`^E3tWxT;u>1vyr=T3o?8E)+Vbz52LSUNiIyAp-o@l=L zX|>9##;6WP>af2Al1M>08ePmo9_)UE0|L|3AW`IYH$OBVc*UJGg$?D9-nB-aB)Gqj zy6KM-xDV1*2>G`C-;3Cez%(TXd)Ky#G)_LGQ@+*=IfJq_YYVnAL2@T3N2G*%r2|)i zFhO9NpuKbTb~it?i*<3GhOMD11fZaZ-4T*e*w_}foXYcu;9|o z9?dVf)GV23Q)i3EqYy0uk}g3xnmni{IA8?`3k0UgS>babr#=^TbtLVSs$&LU6=;Ez z2WgLv^yE1Yu9vG3>kybW+QN#rW#FFeedFA&L^2pKWpx=CA;Gts{&Yhx0%?DD!|w{L zS@d=_VjKd~Hb0WRb6ZM!krV80rebrgk}68WWeP7S`7n)ba8Cy%*cL#YN~gupaW zJ-97r2~pl{@g;LIolK#1g?vB~JTW!xi5*T9u876B1+io*k!*xoL#P5_g1|IE9Sj=I z5Q6-m!N2P8hun3yR0VO2)!>(@X}|0U1abFlST!NM5SXUBO2+>ejXY{(IkV@!Js=DJQVSvLoi5PAv9 z5mF_hdAlEMN6GP3jVOn}w4jlWb(>^6?u>SJw*@QQU;R~bDxi^VuUpU(_)0!$aXg`@|EnB zoI8|~sYA77IJD|^fe>O+1{0&}a1W&xgbxDKG#|?vw$0#(@9noun(KCj#F$FMEIRC2 zK7Thd1jWr)S0FWVIbY$n2NvPP&+dOFL*?R1HWsSKDt+IGn2f+Q6E9oZCdrD~o7kIn z{nuF0>?kM<4Tl`;A$%YmMj>Af!Jd#ts+wFmDjOkBeVCOY>=2kH{TTM1?QS|@2`k}9 zCpV0RjYtLZn7Dzknv{M?BNL-TuMy#iz%>24U>dHQJeZ$`+l)k&7OOZUm8=4F6)FAF z@A~xv-j8rVV4B*aJImW^q&f2mrnE(WNUtjzton7Jr6i?aYKMCJ$5=PQ9f4^{?u5p! zCz9}u-BC~KiyB{jGfd=AkkYRt$QWSgH6lC_n5G|OE899kpAQ6Xcdr#?CZkzaAw4ze z@fe}MY6L$4BHiomo0e)w44K?LAGmXV0f z)vAY!m5dL_lRg9zTl6OY=gSUuKf(clX=*<9hV4g!7klTO+>?#_T85C`U(@7ZI+?6( zA7uvoh?gPeATVvEnH&G_j4b_O@fQnUp8xUOw`adKJ2PXPe$13?(lC)2f5O-kM?W&M zgAD)wykQtGbu(u3<0apk$sP&$b&jefpoB?%C@XqMpqEdTd$EM zClOMRWG_@ro~_ox=Zo{T@D7}#6 ze9YeOK`cdJnn0OtY(qBeOIbc^U|45e57ah;;wUj694Xiw)5CK*+?O0~eF#Scrm2^p ziFOlY^G(#FuGGs;gF$N518wjh;dERN)G?oN7_}gL5SXS}gmtQJ+G~EDD&ts}{Sv9|YSyB7-vV0?A^4LHo@b4h2O%GC`KHX5NK^P%0O*9LiARqM!a>-JShS{Qb z8pA*lyf{dF(*sS;bL;&c#8L#N31nFBHYAEZ$@1xos(xKKk~S$#WE>CulYEeg)d6ou z2p}-c>uwlfc=nAj3fWpzU#~a439=jkGmwx`XRTQ*RBGkeO0}?iDvkI;^sdSWS)ZXV zg8?2SC>ws22vY>61xR(Kx7|blJ}YI(peg80A%&`121~&Qgj7BQ34qN>9#6dpX9T9D zNP@57B2w_ahHG7G(%CdBx0kHdfvW{6e+H6*^Bsp#3&ID1X_^Vxc(zVx@*B_MI+s7T zW^_wD;PpdtAt-~H_3V$>GcQd_F?h*;O>TFs1xCez_bKW zZv6kbk>%4%rN!qiJa2wu&NutmnFy@^w)Y9Q)1K_{it}ya)Pw*1_S+Zgy_| z@TI3AsTn2qTCNBS6mZN5%HfVkrIE_zU`F6bG7hQKuC4n%ayfV;Z4!mL+SJ*Ax9 zmWot?EV!$1W~f)foX^_ljfl+%OjBW5{dO9r8TUe!84Kw~t{jLuobc@6Q-{x+#0%MM zp+P3T;t*>CCc41++neg@_ddj61g3e^pcQsgX7jDkVlt~&Q;k?EmbG7hQKuC`(VdpH@P*xV=_@Nw1W1XTp_{|fobyhzz(2prfhx(kf#+1wyJHF(pv}O z;9|neLVx6ie9IwLhOk3mnsgid>TaHF-mhM*Y?K4(%{8loJaL!~g#f30lE!C7hhHbc z6@h69TAfF1he@J8*4&D zKz?IQTw-nO#lS?xke9axX;>0-n* z1g0%c!%4lzkVnCv)C(J3(ww!ZXxlSj19+yen2$Y*16B*VqXSleus~p%Ty+kH&L187 z(a7@X(tj*Hu=Kg5_b$DD>G?~4v(#EjE(MkhONyn3ES+2$Tm1Rrw-!IY_`bzAEWTjz zZx`E(sl|;&Gn($Hx~JezEZFg)c0;f8n1NUbygg3->If$HNPo3#J7X5I{zdaoo)FDHZay;~oHvg@YhFEn)BI)glaTH2J9A%}`{3Lg z=UzPX;kl>G-8=r@bJ@8&=PYxYxtr%MpZUt%)aa+1%`- z$6d45*@w;EGJD1B^vrK&zPtRh<#WrQU4GB_wac$t{)gqiUT#9ZLjUsGvV8gU^2IZ6 zp83a_r_J0qlb^W@G6dc}bL-5NGc(iwIsLuquTFntVtwKiWD0!g^wX!GFkP5_%(Q*_ z;nTN4w!qn`|C;*#)YqmyI`;diw@$rm>hH%tF~v?5Cl;peo^nh*V(QG))#I-m`_a_g zY)WlzmGZW>B(D)Dc<}&`@{|;G!i^flnwb%U~@tSt6kqSNRsxDync&!@0 z(Gg#J*hK_rwVj&FR6d*f@4J9MkaXD{ z8DCkZzNri7y=8H&R#z02>Qh}n;&(M-=IExcuKHOQkjvqycWiY{B~kvk3wUFz`bw}a z%e0gq?*b}GLmH1;6o!`a4PC%l4VA+wpCh!YOmVj~#HO-*BV4R0e$xdUYDklvGw2ji z#hbf;YfZJ$TrK;HK1IF@Y?wU0kS3n@HWcYDph?suDt~3I*p@$stE26U_-vK3EhX=C z0c*khlKg!Q(M zaez(k2u2juLiUP47jRW|jzm~34$5Y4-~fp>nh2>?RLy1;r)rKtNO>y^TZS{HEU z%!$ORT_ShQ+{^(9qdMC%`7-jww{bu;sxnxmW~-Qa9tW89s)pCN7En(9iUYI>r8AjS zi}SbqM;CBtOOc8pP|nM4+u{ICq>wRtJZ8-eAMOJ7w#Q$KCoOW%yom#v^}>26ov5ZS z-r;~k!=06e?7_@g6$iNTK6^6jQKaT9yMVH&mX{M|%c(2}IE__bYQ1JGUF6^Zy+&HF zMAoX7%b&&pIR+q-qk(?x0zWfdjh|6W_azLe*ia3F6(UwjTQQP91 z6K~?Kh>ABf<&f6aTIL$A&8BH(%5_(?CE4VzP?lUJi#Wrpngf){fHPKfOPg1HzYAD4#0qmRlJ=`cxH>G>4S!-i z>GXR~eUQ6C=a-4&n)Ouk<_!*zxjiAf)2%Mv)aU}{cC2WWCt7*A=$jnSDmd!Fwc1AW z+J|vKO;9ZV=^9FoLov&$L;M%DA7s11JtILUZIJtx5TSmU@ez5v@&s-E-Aj112RU3X)Uj)#;<=Q2gGGDb5>&x zITyoSK%YyQOX-rVEWVs;bb4JyRabbuYvyV07QN0MjcimK8?jT|qtsQh)oNRAXlieI zYPSwuHd+gm+lAD|!Z$b|0iECaMt(DMost9WaaX0fp)DsKI?Vw_h0>b0#@w6p+-s^c z)RJvEJwk^(-J5zO5FZ(11)B;|OT&c*_PyQ_jj+`ZzDgIp1(hgKO`4@QmVeCsmq z3QbO0&>LM!kLAQ{_ZH2DA!hKG{qp)npW^^q(^quI8)d~U+;>hRwk;L|t==mBx55BwgaVV0BDq z&qZ`rU1j!#-AdKLw8dmMCkjsS%Q-;WsHtoXb9Hm+NnJoy73XAaZ8>1SZ5J?=^&Y=o z8{Rzm)9w|@NFwF4I}EbQbr0+U`VFZ$71A5#@8tk%!Q^W@3z7KsG7d1Vt=1J0jaGUi z_i0qh66RzqC9~u%KheEHp_3W(rL;O3y_S1&@_I~{k+(}O{nR_USIBF=Pz+8N1#G9T z=K!Baw;^|UGrr3fx`3=5GDW0tFhjHOSPn?SDo5HY^q47j=MtAPIzu|y2y{uSm zY}PWDzn=qEEe^XYR7>Qq<9ZnJs$T0U+N0{g$^Yf9kb7(Hf@^&vcTtA`t#-p$X|$9^ zm+6M?E7od9j0w9k-*W5c*SRa~F-bIHC|hkK-EUN@ZFGcfrI@1VpYJ}GRx9Rmtj2Rr zRbsU3DzsYupw*_S#X`-6FLvu_IigLQC8S6huAkrllUQxfXVjIog<=NQKG zVr@8O>(_sn11j>WrfR9FqbIwaL91TU8_J4Q$y}RwD0f9Dm`#{;X?gXUT|jLOw{3=O z%zo{B_ljEBn^5YLRz>6TZqshn+#$IstTBas*L{k+!fLXYE6tS2x9};>+0>QLY6?Q0+*L;}(ZL>G#lB89ZTzj1B zVa(8#Zrajzlkt)}yH}W+rlP#*w>69>f*eo`r9GyI#ArBiIR|(p=42pUmsBr$JO@}~ z1(!YMSxqzNIKX0cWpnz~s^rpD4$$WuGBxFzd>fuHV9i!~OHDjm`K?H~b6jzV0O0a}RA zV$rZ`M0g@FP5)^S=AlLC^I;wm8jCED%1Tm7*ti2xSD*|;A73^)riu~P2uzFd)Q)kx zNyNC9y_b6>qP|F8Vt2RFnFa^}Ye$gRWRSMd_X5(N=64az5SW(oDV@pf29ff1_I6H6 zy-gztE1YsEga=nbdKD;xNQo{b9ZR(cV+5v!crtus>qH3tBWtv0vm0Kwyc&*!2(X?6 znN$X7Q{1A`;B_Ee5SXU;cdUB51}jT@se#)zeyRqBI`9{z$FI@sa~yiV12GbTY1^Lw zTeGX=@$g%-v+{V(?bjtU7GgTAF+nmE?C}WOFSyV&j9L&r2u#!b8#cFHAv903r*}X0 zb*Vd345l;nEKr0UPmtH7SDM&fr=eAaFhgLP@L$75!!oteu(+Ds$e3cebwd=Wk|*11 ztK3a^((jFk%?M0W`74NdP$JKck9iO@WdfV7cyX-?n>tkB!$Pi+UZ36Jj_Wa0im*js zT7>(d0T=f*;E2&&SZy2Y>NMG04Bjea5$RO~%takqRR}W#rU^d@POudSVg3Z0J*+IN zO~ryN2nRPI@d%Wj2@5%+L#YN~gupb>Cqg8XJR!76L< zb`G;PgdYOawEwa@{vW+$Wa+nyzhAt0;ja1goMQHoGrsBQ)ZH-tf7$qZ#z)3Z!3F;p z{pn2ZbTgLnPGd8fSYNHxH>)vSKm}1bprB1bXtbUWRcmF~wAlz%W021fa~hAQTBH>q zFx@y_#@@ZNK;8-7X-v1$=|I+!uG)Mcf|!&+gy=erL#PAcg1|Jzm$K@edCF{0L6hzK7fU9f*+#Oxyl!HnP)AYsx!~RYxx5k~*d71Pp8-fd&-x@$gRL zKKlio#$nWg@Ihdj=1bVz&g{N#u3e>WJDN$8PXkUPq}71ZGfm8C99mTfGX$myznC@d z%ur6Ff4wTJY!=li2^_73WE)U=rpwKN_IV>>GXm38Uep=gnI_MUcNzm811#L7y>fC6 z6H;(M>6y&oPUA6Dim*jsT7(xu1D@K~fX#B1w;@d>3K59$0f{-F^eh7AG!CsQgc$wzC60NgNZL--*uP5U1@lAUovn?Gh*w{AN1wXDjcD*|O0 z2|?nGo@w_zD|rEb3{eMxY0;j?7IwynX#4@UP)Qo`1}mwOZW9C}Uu@i~#J<*;D>=lv z5N-%eQ+_Ud$VRCTS*X#F*PlIhsaSL+Djb*Z2&W*2S{ouF0@K>Q z1%}Vp5Ze6kId09T)T^3g+Ta1o3Q~?v8*%uCPzS;VfoY0wW&=A{6N-HN&W6jUC`fXy z#(Ey;$w@gnMFAIY!21yn2uxFZ6F9L~5o){>tCg5T2DMYKapi!PjFcXzp)-NQsRm($ zz%_(ltW?JM%26JO*sikDJeY=?bnUFAisj>fxxs(|ICJVt{^g9&hDmA z4o0Ki4O2W^GQy0YtXqyQ6Xv)~Wdq%e7>~d- zr+;KyJC~AH$NOk-kf0q}H94%CEwD*LO8=~ce6(R#h_FOpn*8fJ<2#oS^1P20Ddkh% zTB<19XajLIDT9zle6(Y!72%7(v<$BWKjI{jf%hYdv4pYS31B1ix(6l9dZ22w(! zk9{qBcSU&!bs$_2n5Oue&gDB76N>x>$-KC{z9~yKv?a3S0v;k{mKcEIp;Ly(TtA`# z0@KpG8eW1E`(A>W$KYOXxt%Gc6=VS~5;9B-APweM9!ISRUj(LQcolok&P7B9euLzi zUn)-e-8xe^0TO_x37IAakU_}z9CnQePXwmvzp^vCvrOpo8zdue*tG4Cq)b}!9RNoS zGENLaANNm>sbYjR0@Gr=qGQ}yB4Y3xB!ls0Q(dp*$|mwb1dkQ6Knx;A-#+Z0=64az z5SW(o<>dVTbH*!wEZ+;K2dua5(*cV*bD9zdQf=`FGC0Z2rmfjrq{LbzU*QGCv3B{m;#PV(!gzFPMAMTyZWq zr=MfyuACd6{mJatXFoXmy4h#V-Zz_?^~^qU_U74(XMR8Py_qk}yldv=Gf$am&V*;| zGpd>EXXdAWJ^jG+C*jQg3#ad&E=@mr+AuAK^ZFB0Kb`u<)Q6^CKlSXXCro9gd{cK! z-79NJp{~Z1H=%+{DKKhc;zZtELK4zd zsGNC=04ihNEPzUxHwmB;=8XcVnEB^}gk{V-4_+$OFmDh*)y(S!P!;n!0aVGnRsdBn zuMt4y%&P@Z8S^RuRLZBdKqbt50;rgI{P~1|8}nBOFO_SU#|fZn<{kl5 z#k2)bCDRf>6--kAl`{VH=%wQVsG5lhpeiORfGU}Y z0IFcZ0;rq`37|6Ou>z=+xmy60Fpm*H#mrp?2}_y8!Aqf+zEc2IGeH4V#cT?oN@ha< zRWJboRL=MXP#NPBK&6aV0F^Kv0aVPm4-%Fzk3M)Q^wR4BsG4yKpen{8fGQcg0IFbY z0;rs^3ZOE^B7jO6vj8e#OaiEwF&-o=W?Tm@RYO;{CV;9Ly#T6WbONZ7SrtGPj8*`Z zGmjELWy~D{sFZo604iY~A%KdRhaVuU)-Z;Hmje1Q0aVRs1W*;D7C@DZN&rQ>MhP(jiu zC@b1XBo&Q8Htp<6r52ADA|Wm`G9Ag@sQOj}&$?6x24iMV^g8mvZkAuL}!1c^W z+0u@P$i{~s_Nvs9yj<&VC%hmTELuY5sGem*7cYlc8Nv>MY0@8ItvhE4=}~r+YbzG3 z*Q&_Itt~681423~D7};BmNWak6R{hCX*wTfZ`e5lM-=!(qRmvJTuek91xEnRU%|O4 zU;fZtGe^7(F$aNZEB}SH@7zX2A7{ro(W|XSU~Qx7_QwtI>o6}1iKdQVso;`i-?t)` zBQQMywhKnj)gD^mH|19Rkxvzn{(Q+)SRw_3ZUr154Z1P4%Y6 z8c9MINjY2G864zqV40)2IPdielCYWAnfO`?!5tyd*9`>%C z8wsV8>`9K2b;DDQHze(B&INQ}c}^}n+S9^!{|{aT!UTb7g75BJz4H)4kWZ?nEviad z*+xCD+yHXmf61jsB-r=j+HwB^q5}fc^1O@P+&N9;`D2W5waV{^#$a*Q4AOv~C6^pc z9@MuQumXey0@LK)37?A_sLzGRyAjf_6?Ln+RiFjllw5o?YMckv%hiZ=2uvIO4))fa z>%nV^M7Z~{oVQq_T9-8Jhn+)YTjNppvGs5%Vip3^*1n$g?W~aY!-xC#1~*&zy2j&b zK$Kq@cuz9TQ7snqpa!}fVSvCivA4tCrRxYWe(zGG63fchLQR_j+*cWRQ8M+>iD919 z;B_Ee5SXU;HrO+HEwyLTZELJK%~em>9RzaVP03V8C&+nJz21RXiNLh+ZzbdZ6C;ls zS)N|HX7QGV8|FQ8kDYDIymR_D)AN((CVn=tG=AgQ&7(26WaxijhxMaK+u(Ot2PA2q z!Yj6$TJX_?Lp4x#r3?LWWS@j_Jjq%{Qq=An)t}kTUHiwuP&XZIWk}T^Y9cT#^4Hiq zcJ6={(r9pfk-L;^q%={xe+}Mi2u%c~Cz@O%>EkBERs^Ogd=>VgK9W2uejjSe8&F6R zI&awz%^b2?LFtLa;ZFFFD@0f#Firj|&`=+-uc10+60^-{v&SKcvI^3cK`ak+c{_RgjqqN^b=5eRIRA3E_pnG~F+DZrOPlp?f!bH`n#Vl7`f} ztC003U=9PaP(kU9Zr{%P1^OXG6$GZm`U0ES(Gamtv8On(!m?nirV3K0M@y z>ZS3cuKaN7K{z2WP4)BeK~hs6q)<3(R?DL@sU!>}!J~)dP`wc49Q!_QLTp7~n!@MU zhwZ4qzpw13S6geD%d6gIttBPXyYRQy3En<#LCi#8+WHT{7ez_h8t?k(gJzY!p@P)A zO|S&~0!Rtf^SpeGnh5UtK0~SoVT8am(a*rCcLgEJpL%abv?|kDKpl#@!8-8q6zblI zV&j0})rD|FV4Cu$VfjH$DD%q?iDIZJHae@7H4D%Me@~(6oigY2^?N5`Hv-diJ_Y9w zWP}cX2*;8TXG+CJEtAy(74ZBN%HHW5?*1J|tq5NPre*jfG-T<%hFnfWA`XqhVsXbn z0@CI5+~=HG!5qQi)rD|FV4CtL;Dab3l=%ef!f!#cIIfmDKd4n*zU3A?t%G?i>!aI)ott)5JeU#{bJB zZyH&?ekr$DT(HmmVD^JEub#et%020ukdL1lV@CfH{`t@64=f%y$&=z24>l{VLcLsV zI=t(U4-33B2)%61CquhS{e}2SA_Q$N6gJXGx#oh(~bkY zvAcJDbf4MO^jqwnRWqD3hsexO4kg5SU`M}QDkcqmwLbAz||45R#nrJOXfJmqwJDbXr6NlL>!DFFvHQAlX+5Mu|!j)<$ zABn-F&9G`hXdy7o_8Xm(J2ukR%&eK~6$*Mwy%g}3EFQuZyflcXJRH7)leWiMJHj7< zX<7cYb85#*Wbv>bPL`la>4vN>&gdF^1|ftWHE%@ch=VwCQidjwkc)b()guZZFfGguL~k(=Vg4As zWz!!;`7+S<*iPBM>zam=<}fbKQ=fv_&85<6csyB<8lOp}$E5Kw$9ARg$5J zjLxne|8F2#ATTY_{{h!PM=%{w?CYt8h9H(inq!h2V66>xAZ03ik&`{_hFInn`;bN@P z-Odjq`goxbh0$cKLI#lq7&De@k-dL|exaBuhpL5gi%hRYsz-?!cwv7Jc`yh}Kd)cI z=l(H7I{tI-s)g%q)4D%dfsJMmOB%{BrNey13-K$69tcd!^efn|co&h0->w)+RdpGy z-C6L$TAoHu$}nXT@)(c%7Z4o~n3m_4urB;)A`ibVobr288(vr1DuL-vh+7S1sPf_f5LFPE7V8(C#Lk@{R_9b_cU?H*k{VNDy|pEQX)1_z4P~fe_3b_WdDwwyiomqg zKkwYQ6C~~OPWDdj!%!_JO0|5Up?AYz24ZAG8K%^z4|zd;22lioX`%juy>Dle2&G^Z zoKS6ZJ61Hx6RkYy+rW*45ZTl$_@G}<&XXK|od{P1rX~0pd&SNMIFl~dt_#tWB$Y8u zIpG5r0;V9*TAZ6hsxcE)C21UAPBxJBxyd3B<7&@eJf%) z0@H;4oz?BQp@H3V5BJ(fO*M%lG9+9+jE;~a+1G7|y$DRx_yOzLagpaT z%g%B{9AdjY63}TQIzNyA?+|h(A4&vw`3AWgu^)kHTHo)S*jXpEjI5EP8{i8noBB#6Z*|r{G!-ewB3$>gd7PCa>=Bq2Wwc}7 zNfS}-WAEcyQ?21s7~74Iq!Ix^l%yPsD2J|H{;7T#Q4N7fh>^C-uYW{qajVwp zv8D}95MDycv51e&cU|D$Lo`BQTDt!R7bZ%i-+X;FU17Iz|KS0*3jDN#+j>}F*|Tp+W7@b^I_>1j1>sFfk)5SZrt)6SJUVbTzs ztdr}&3SnumnNo*T_7K=eNDq;<;C$RM{{W%_0@LFB7pxM7h&cQzp~LF5I0L$j(E{7a zAZ0R?;WY_-mhVFR3Ze%B(=z=h%%VS*$i&a0`|HiBClpPK*G(W1ObJ59WNM=0z(BI6 zH)n6F=J4x8xFRqu!Ed;M zQLnPVSOgx4WJOoV$5VMoYYE373T3h}rC5aj4+2q!RWerx%QwKyi1i3elUjiMNHs!=&yVD+R5A^VqR?o=kV*oxcoJn_qz<2@JEn>e z)(A|CF%M0ZVZ3)7F^f}gG(a(xI#1g5D^!6&dlsPmt| z$VS~Dt$C8Euoq~9pD7Xd)owVibAX!>>k*hHHQ5>4$&*)ucK@W)S`oSkOsR0@x1HN|a^%s5*bvvMH}W>Ozq#R%DqsK!33H(wgARgT?uGg# zL>C06G zW#F>o|HEE&ZW%^Wp53Fx4XsVn_gToDRc0<(6-JCR4!njU_4&`wD4E)z<@n*@IvFkU$ z>w);=P>%StIQOTg%Mtq!m^S-zHg|4>JQIGdF0R!%9deCZl>k>?20oB%??CurD}9GM zLPM(xVTQmo;maUL#C`i3p|g>z%WLtlMhD)I47?%PUKHuW2xBhMfE6Gt5SS(hCvA5g zPss6~mkmXzX4ZSmMH5-M1J6jd7diScazb;h1Kf;QkH9pkOCWi{y@V8>yr2?Z6|aY^ z8I7t9gh;1-v|by0K72lP@H!AK2uxEvNyh&tMm|RJ|2<|=wcwbq%sp-Pc{AJ7znxy0 zDo?&{;yvSkJNDesx4)7kKkE8eq>5Ebgr9HgFhQqFBsIJwWc{=3<6Pj z)gZ!pZ)AmDxgk`7ut8v&q=GG+yOz9qeB9tbwyO7gP3}wyX7(XaJCt5Y;;-QF>O#07 zFilzBIeYFDq0DaqPc<}!TF_=|mRmp<1}+doy~pR;_bBFq{S=}M0@H%Y*vz?Wh+zDN zg>+ozP`lJodkKa#5U?FekAk7&n_<<2@Iqjkt`z1TuLeJF?{uMEZ7`MFuAI|c1EMh4 zf%xmawGM9N)7Nc?y$DRxkg&I&y9$Oudx@E%GP~Ne;T8vEhZP5z;VgL--*uP5TTq%S-n)OS7tMtoc(BYc2(pNe6M{ z9s+mb2CoC*g1|Jz+t|RlO9(|iv1~kE_qdAIwju}XvsG@G zgKgC+lMtfdt3f*Qqd&vG-LwnwD~KKlOv`jL3{_4LnfRfK+ueqP+7hQjw+<44hXxtL zk1P}FoDHE8gbf1IByWPx%th2^CTwywN^2g2r&$Gh;Fm$l@FP>?T(Vy8K&(Vy+W3c( z@&CmmPZ?SI-zD{;bs;(b#<`!*&CPrp^8Z~qC7--~;&J288GFyz!e|ICI`%&>_1sOe z!LLha3Xu?i53>EJ|9cT75ttU(#NKpH z0`JBJd>N`2aZ zWMcz{pWrU-_m=2fL%f$B;bu>IxfU@DfoXehhYu;U??dWyrq?tD+v-LPJUlq}24$bP z4`#EVb3WMp2nPhFsjWfBDcaX@di5n=wARwKDjA>!-Z=!gqT9`bQ^VZzAyk5}L13Ds zp1u9tS$H-06ke%h${+XJJ?1>nBMt88EpGR0RqwYTb|NrszK*S(J42oke}KT!Xl}NQ zGL>8hJ{$zJh0?<_I^0DcYIO)h1g43vLgTz`U*jw$g4(FD?rapnKZjuTP=&$g>3J?|uOp|*Qn>cq1 zA;)KSvgKD*Rn2C8BMIxF5Huc2FSg;1`f%z&I3X}i^^VSs=WZrc|3CKL1H7^0IvZy1 zW!0=Mt+ZCNw9C2ZkSxjQ1OcKD9kMK;14QpdmSxaIcHFC+#3inAkK^(=?k#ceagV*E z+~eLI_wQWX-KzmHX9z@6sv9+YlFkvA??Fas8}CHDF`0~ zrfJ>`ADyeIkB-NhbyYL!s*=Ex5jcJw(mqHE%52}4Aa)`!ZT`dCvXfVVM$4W$I6G~~ z>57R^!XV?P2;jHN_}!oVUY)kT{D^@FOxsOhT<4*D>k@|>8?ij87!@XM7QPp7j5?%! z+0N8!2QLHRg1|Jz8(|Xi7*A20gtWoRGru&!`LcZFfM$bm=JcCpuj;{9*bb>6gcSnQ zWYsVkaV0!Prza!UvW<;eEF7qn^gt7|8$>7HA5~$1b)d@-dl8tXp=#fK@(RArq;09t z=}D$-E=9^{&`0>`BmRln-y_n;shh(u5@CwKv;&lL(5Js|{M?b{A1r@i`Mt}pS$@v) z-OGt(=kiUYTE zSj;a57Illq7tdcDUHIX`mloc?@Y;pvE<9!-xv;VD@P(@vj?Djl{yX!ZnSaOp%jcgq zU!M=nTju5Sm(S16{c7&y+(+l$Jom!6C(ae-f^+)06LS~LjnDpg_RF&$n0?*s^Jedv zP0hMyZ=Sto_UxHI&U|;~vor6UdBx1rXBso%8S9K<=8Bp5>0eK8Pk(IsEz>WWzIVDf zecQBQnoM6bJu&r@sjp0ZaO(9_&!2ki)aI0X>ei|2rp}rC)8zLiKR5ZV$yZK3W3o9J znY2x+Ca;`anE1`a&cw$j-a7H(i6>2zCT^cFO>h$zPfU*gbo{I19~ytd_!rIP(sYTgjK}Vn-$I~H!)BZF)~mkF)&aC z(KApv(J@dN(K1je(J)X6c?1LH$gK>NkXw2QE6HkaR)v~8oPnyyO$<~?Ze*YeqGq6S zqGF&jqGX^_qF|sBB4?l+kugw0q`ia{*E7K$T>Lfhx!e1}Z1V8K{ih zz(A$sdIl;X4`ZMlxsHJna&0eRIg#{cm8r?q3{*v~VxUU$PzI_X#~7%bT**LXflA4F z3{*nSWuP26hk+7ub}wNmxuiF%L`{w`P!(Bbph~jDKow+>fy&7O1C^0^1}Y_U3{*m9 z87N0)7$_mry@Vy?tlq4gnoKfK6`5e5N;1ws6=aNo%E>4Lm5~t!DqZ;t1C^}&nSpXE ze`26y<&V9DIWpCom8e&K&p=fxzhj`vmH%O&ik06oQ2EMl7^rOJ*9=s;@+$@^S@|Uc z){saL+uKvgT>VxY>EZ!%ED%KZ#fzOutWWh>hZRJwAK zfl5}s!9cl{uQO1x@?X7#RV&}=&8kqZe3gN!R=&bOl`CInpo*0*F;Mx+7a6E*7U2Fk5`j)9Vu&-M~ltbDCEt6aVEX$GoV`4j_Hu6&Y#Dpo$hK;)bnQ$1bJ{27D2&rqVDjUij z&xWG0qqS5y70$#u@#(7>n5L?w@|jo#mY*h)utPu?u{yxT$oLEbQytRdfvwq-T7KM0 zJnl;GDJo04cvx402^@%^2x%Zvd(T21Qo#so1g4$ghl$uuh)!`LHkmh+S2e3%;)k7N z5EBv7K+eEsCWl%a!VrOJ;y&0y_Xxffh+F6kvbx@Ajwfnyz7@b6CBz`4hhh6|+P#yF zLo5nmhQKsoZ~Ly3xAKI=z5)qyVOw;#lsZZX* z(-)7s+LWmiGLxg3Gr?*ih(ri!F!}?}YCgy}M7)H+wDa8U`pKJl=ZVK%`J2X&-Bc^5 zQ!woZu>~Ow!L? zn4+tJ#k3V)+?}gx`BNGA&0xE>c(F)g8g1Z95z7&nCS-+4aXB?9Zb@)DPcmM#CSXA$ ze|Q<3Ubfd`&r)6kU540;z%&g@+jUaL*NYhcZ>_jm@o(A{*%IulPwG zWO;h&f<^bjee-Xgd&=y~WN5(?xY6bMl>PoW^I|{K@soe(UK^w$_bRVPMhHw3O|@@6$;WN2R)sY{#m&&h>PEuq z+cW`1!l(Vv?1p3O7+ z$cmVSz_hiGggw=rK&;}PYH!TuNl0yhc)bM{sQJ|8@H1G<63Pd=9ASXKG_g1=a;ex<4#V~9Iv+xwfJ=I!LbQKy} zWtr0hJsF?+r^pcD2fQBPfWS1h5PXH#cxvKTIJRl9`sF!EYTXL7q3HB^=lrx=70 z0@FnAggw<}o~XE|+Ma6VBAL9a9^{`)P-YO4lGf*E{45Nv%N~roApSsL+D&)B(7-D1 zCUIyWuu96Dyp(cp+QCJj${=`T-)=%R*$@gr*dQ=X@=@@aF;SnHXrWe%xV=GnEC=-X zPffQXJ7Y@_^w@r{K&(Vy+W6bsk2q-rHFkRR&lhrOiP4t`^ZRIF@UL6j^fx6l*j0$J z2uyQu!r4j&zLkk*E4ibao8B_#Q8i)k55g-#>S|^E@nFfdp_PR2LSUNiZ7_wX=jn=5 zh+%0W6ysK<0V_YN0^`XL%8-7j`lXAAxZxIuFhpRQcu?s7zj|c(oF&=f`ohNiv*unq z`>ENBXEvroQzs_X6C2}^u{%fa8+rBNcg@dq2WXF-khx-eTvNIYYOOEaGQt~A0@7O2 zT|u!%BnGEN)nZ4Ju~3EYw2M`iFQpPGI4A(Ao1vA2_#c7kYPk!J8IQvI@ANU_uIQS~ znMhToA?SEZKxRw2Wp*EA1+hKYb%@0XOcQCf?>PyfX{ivK4lZG?6;_LRnFVOThh5Sw zlKY^tx9}c*nFv<|rd`m4rrU{BD>hw|No&!yOzFbfCeR1@E$NoueYgM<;lnBk;f267 z-3II*>(oqWReCf+RdO2&NyY`yG1L-}?vifl-UnSlzz=pEVle{KM9S?GCm#ti zK9LYch3n>3tutP6RnuV@5r*F`J$S}hf_-I1OhaJW;sl&oaU0*(#4{^2F@-;r^=IOy z2-pAvs}RAJRQcFUTIq%~69ZzP03pEYKFDF} zZy2Q@d=QwXS%A5S06adY=OTPY|3)dB*r>UJKoFE4gjd}MNkR4P{~E+n1f~h(VV#wq zuP1SxRYj@Uh=pCn^=2N-hwlUgOx*{Cz17}u%R@LKFikxNP1M)bM8oAoC~qZPAP7ni z;;us44|PoC4Wkr<4+7IPv+dhXdU={+2=Zh^!>Q7)n6&N&itwI?(5U;UVV1f(XbA`p z1g7a_;2Z}JPft9@LF;nKe07;KR)JX@h^Y!`U-WQQH>83PRtQX!P4oT#BO~7*S-yBF zwD^LBf1a<*-81`wnb%CeYU&%4Kbf4Ju#Z1-Oa~eM#(%baC;9l$TZ>zZ!somYSEg-l zb5K%;#}cAKLF%g1BrNjpto(=Q>_m8CR5WeC zJ_8%rWanO z5IqaheqDg+>tU6I@Iqjk?&F{P7x?Coym8vdA!*p=2YP~~4q-5R@(#>>*#!zcye zgTOS+Ef_^j^EAa#)RZog%bClmU=}*{5Mc|_erpvEwKdGb5OxSmlWxN(>LyQG97WAZ z?7l)gF3+ShKp3>Bv|EezQ?~=_&Ij*ah;I;>cG+WL6g9=WOdLh6hReF-hEeV=@EI*@w$eJvp?Z5M~HW6TSyNT}kTGWlkqFO@%J9p-%%

9=^in;Qmzw!J1HknZPPL+5Q=6sF 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

  • UGKwD88hS%O5B6NlSBYnf^p;Qk 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
    *?5XPPwuPTJ@SmRQK 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

    $60x=0C0iZj;po{W@@? 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

    0)FK6za>H z!gwK(OsA3w>Ci z)r9~X`dM8Fup!C+4?|aQ-@dYZvXm^PW2thiY=AIeeovGT-Wjm^KKn^{XTa+F5_5%2 zCT%3<5cU!Cowg8R&9PU>79y-UmM*1f?4C$QqWB^2lj#!*N(iuhGD89g0k+TVO-kvg zLFva6Y5YvJeaqC=76NSBH+3PvwtYhiXYJ+yPT2RSx)5OZy+;b?qGe+?6HgaVp}qxO z2v7FS>q1bd&#dfOyYYfTea|r!vV{oyunAj;rxF<&3E*sF&#&r2cyiCL=t59vk4&jj zn9I-rt6Yp_(9V$6>}?^yhRhyJJqfTO^K&&Dn@g5s>GGUo1T}8jX$t|icS09}hk8%b zsN%3|WZ|no?Emj=`kSWSr-d)|ysi6>x<20dFP#G&%k96`_SLpn>$T83TE54P@AldK)$|e|}_kZMPZREkz@=q~LuD5+|UmMCZ^B~A6nrCrhRnQEbYjMlOhfW$mKiv-;t%I8|M>| z()pv2M;^NUY|GN7CbaZy?pAX4ME9&daLiO zKe3^tQ!Le2|3|#lUre7U7cbtpv^X~o>c{A!U0TpwB`g9P)>9N`#G&*E*Po?6{(3w0 zUEXg%{bzZrKfih_y}C9%cKO^1r~2YRQF=fUv(sxV^<&Y)5o3TxDD-Pk-~M%@>c@Nr z&qH<8kDR!=GQW|%baPo#KX#Z%rR4=ER3C~_eXF=p^_`8se()UjR{zq}jVtrRGe?(a zOnO4w&2b8UI`1mnjOs%%s&5rHs=iEcjq@$7`Ar##eP(MH-RZJ>DD@NG>R(PQ zF0UCgGmC5Ioa)Dk7sD7x@qH6eAB#bKySP#H{q;QM+i^>M=lEi2cI<3sd~D=IV%=6> zo+3>gjwJ^&e11!+ZxtsZM2u=4A0&xYEPpN4SL2IlGM2xwqmw*#AzMysMC~fT~ zQVBW~5li?TU(k#ET55P(T9_P5om)J)QCd8rSxQ61)PTI;ik8x$l?c_JZmIQa-BKeR zr@5+;B4$$4(ny3BvuL+D8KILxsRk_d*B#H_j@g!8z>(CI=v3s$=#h!}MWMUXBtzT= z7Td^mie*U3I;H-Mf2~_eSv{iBL_C#Fh-w2&)`DV-OT8;-l7hDR41HTfOYW{ljtDA?KzDS^r{pG7n^T)Xv zpg(q;p@`AcnF2wa(#13V)JfAPlFvgsi>Z@NrOm7(Q&lGW=L+y25Ze=!mx`=v2GQ zK?IzRm#X()Cp7nwY<5j(eW`ebH(Ze(RpuroVVq#Mu?&ZFoo z7B7gIN6)iWMeqkNfYV2OAueAv~7s+O#(N5%Dkd* zp~^geeEbdccAgQkj=wo!L;&*HU1zb-K4TtFTdy+PUsiKFED-Wq1Z{vBk(5E7m2^Zb zMbJ@;%2yQ|APfNfG%fzlXZSoG zS|&#Y2|H3(?R#2)?`T@$fDu4RD=JONT*4_p+_-TQH&VxsY)JHk87eob z%m;W*v|2#dTP?L$>U3#PPiv8B(Q2dd2n~dznRGf~?6T1+u0R;edNo?TyQia^kpT){ zSGCAu>+_yo#mbxhhiza-#*@?HjF}&}77%z=cfbkR)=x%4C7uXaU)) z(RxRpYtSTv(z>&Lp~`fD+-L!R=SC}GIN5+xd*N^EyRlwnvOxaS0=nL4iCQvA!#Fxu zNsU!B+DOERifu9vDQLHpMp*IPu*wUCu1$9qA zn{o}irE0FWY86Y|T$RZLxlMt_+qWqR5%JVG8Zkey`Kn?P1Z1x^JRa*`~aPuhOwhy6r-b8Fr7rbb=h&Fk|I}dIoPCn*UY^l!tf*dmNg6%^_ zu2y99aj{h_k@Ho>E(pk8A>-|IzP;(z+?oo?`~N@N)GPS^|2e!BPWF7d=S4kF?0#?e ze0NXRZ_x?+po9N^qy7H2KcoBqy{*6AdM5PE(Cg^_|G%`nyd@s|Snx*hVBlSWLZG?% zjm<}!KHv1SjV%E1ud_8p?g#rp(5hjQZcNf%VN7oKWYlQdS!`BOO_BQnZoMi(2wuCE zE_4=~Ra9egKW-O*>{UgoRog(B0opmVW6oJD@h{Yv@D(;qdwOZY zqV26Inm^dU@@mz(_PkF;89FrWtzygXO!LQ01Ms0$58^;oYR(XG<`qQEtzwD%aE&?s zxK#r(wCa_?<kQkc*Fp}FvfBDRcZ#EsPvOn zEOB!+Cj8?-0bGdjBe-H_L(sto&MTs6EQ+nkevR4wbd8}mbj7e#4JNhr>&Wx=WWV-U zF;dVq-afP$8CPronToB@W|}`eIJ`nz?@y%W%&@9?L|pwezvUNdO!vp34Zhwvv?V%x zZb5rG^kZqylz*%}Y$*E)ZQ3_Zn^YyJy;Usnr)o_7$Ds}Q+lDr8NM~TeBNexbC2+RJ z%zqpx0K8pjO8{6ZM%%FBNRN2oQt}!LH&o$6$*<%=F9%2X|t=UR#y?%-Z9>~L zS?`_fVu_opGU1=D@wTBYAyQ0~;Pyq_8p~Ii^G^>Buh91Nh~yx1;Zw2H{6dwP|2VY4 z*E@!`=>XXE!3as48*Fm^zb^RyCc@tczapHW+y6g7{Qn;${{Mqrzt{C}=XX2b)H&Ai zMdJTE-2R#NN7^53`;)edZI5aFwboqddzAn0c*{Sxyrg9y_*cQ}!N&#uIB+r0(Y)Cl zZTgF*^}6%_T#ZTnxH{l$w`X-Y4{y`1s0<)iv2<6yrU?B2*;O5MQroN!Cr~nCuHm_g z&FZKzp&wTV;Mc7V4Tck1Qf0e}CHi`eS^ctNvkB1kb?Zzl8INTssdYRZNzuA>+=$X< z6KxX zaRF1Y1K> zhrXaO41G^bt(0vjFnv7J#Agz-a`;rF)_(0&RsU>yM={v;XM|*KIpC0_}Ht0aLLA zez?ZWf82IJVQ4#r>nA5p8OICf#>EX3^r^gR0!#VQAgkE&2vh&*9)Y%_uRohE)n^%Y zvBb^QnE8*J4k%u~>DVqw@Ih5HL|&yynV;}{jk*8y;M=L`*!W52`E=n^vDExRjTr#B z>44_jHys;YriFK*Q?W$P*O&*8wTIg`UQI`f40*{W4JUoLKFwkaf2zh@fE4}uNDEx3OE!O43t}be2}mL>CI{h1luynu_w86Kvqg_gcl4M-%}dya1X`Twf~U zTUB(-O?#bHEOB!+MF0r6+cq83smy}sa!JZMrZujPEiVSdG-Td-uI=X}Df>(+bD{&Yh0@NzDB9X}eWh5$m zN7KARuoS+EO(*&}zSq?vq%Ig}Is{00i9aLz|J)d`a2m3o4cx=W9#= zC_`KM*iUFn&H2uN3qO-Kdy|Y3&?M3MwXupNaA)|_P0w#W-W2|$@S7xyU-+jbi=N=z;E+I+nCt-*H(-yHmz;N{@ypb@+$@a@1S1Ah>BL*PY$ zg}`WFfbtW3t@-24zuWwp<`;%P-TPL0YFRJ=k}G!k$K(vfbYXNjkxee0KRZ_}oLpR4 zx;~m1KlpdL@O=8##@dyo`E2>r!M~Nl6Un2eE@!55M{itPG!`=>>!sASY(Zc+t4Nx^`yy;(<0@xG*$Ryn5}@!phL> zfmU5unjS9PTpuOYm*E2;T?nQe2%5OvjeauWnpjoH!8F zg~wNx=0}eVr$;8%4s=Q3(Biqs)%lxC(FpXp?UG)msD#ka+FzzW3B78&Jvb zIsHlK)!J*i5W3X%O;IB?R~Fm1H;|1cmlW z4n7cq`}RtHLlA=d_C8(Y+Hhjnw7Uv@Iax9TSGMs>{GNPHYga8|mjt3#Y24t0yFjk_E4Dn)swt-h$ z@3e#nYjS<5ClS_UU@I5m-bulb}c z1lVv`7Xoa!#}pE4PqCaJsz-D}RTlzmz@&dF+fM>)z@&dFCkw@5G#M!&anzpINZ7ej zB2_TvQU-Eh?fVa12=CnY9bE|T-1qOMwlN~2o1L4RMGmZeR&%h02x~P5TZpi)H(`k} zH$^lm5eKZvWL36>2y61lY6Y_i$@CSxeU!cp~|{UzPPe2 z1lX=e&3D>DfbB9_8Rv8MWs<2P9fb$jJ@SKIDBD7S z-D9RLVtu)WW+pNz*!nW%xVdtRvv0d~(TbRod* zkz=sJT)9{z2DX%gM!N6EBJA6AA;SK5OPGuqMv^)O zfNlG@E(F*%lRS8C)_M|P+bkYr8h=p}n@yDfHe`M}=4>IrhRjcg5&~@Kb*4hal2IDjAMHHe@deudPq+VF`%kw&x$S+l|KHpC&enWu zYv}EvQ!QVnnRp`jso+lrpC0%~;96jR^KUg@Xbv{LweD*h7vySu41(A8PT!awI)ARP zJ{}o|3BnLuG1~Vr$KYc?WpS29RN*#4Gj<{>Qj*q06xqXd1=!N!0jx4orTNf z0~{xS3!R*vo<`K>&idwRYj&IfE=2YzSDI&k$k`eb4(J+VWQ!euhCPw1F`WRnMbLQ1 z$llo(`5F@m=&|97?6fO$mp_kOs4<@aM>c5gE3*A)&#VHh{jJN_jw}pk&zz4J^~e_d zpB{cs3?%d{Lc%C6mJv8rV{QRnwg!BNY@)GrSLn{blQrfP;B>eE4597OkL(Pat0_tW zfQ87OH2Ao`7J)k>XKPF;z>y8e7}>kjn5hIfvH^F;$lh7we2r-Y^w@AkHuc$JhpJ(Z zT&OWy07o`x?klqWXwO^$tUa*jdPTODNy{S16>WdKJu;A3R-jTSG2 zZGp2j<_zFK0bq!1*XY2~Y+Kx1jTr+tPyiP~dz5y|>p;{gwmvh8DgclnwDlC`{#-m= zW2yj7xCpoq+Fr>-{bA>8iYx%Iy@FfpL^oWEGc_g);LS$BcLujRnW$gonJa)}8wiy3 z*k*ELm-2!qnNJisZIZ=Sg)$=mhaliXZ1XWfFMv9)vv3s?0N_Gs^P&8PadWl2JstsE z2M%uoR^EKuI&|||D*y(5TWz~j# zJyT;w01j;MwKK5YN$DuCeYhoGV>$p<9u5;b0$Z?UiL=NQX|zkPol3R{WL(A8aD)i~ zxYGuF2<)hJbj^uC=UTkpN5xiTGZO&E2>@ecdjnYKakbYa%yY51TGoyez=g=B+~(#{ z87D;2;wy6%ON}3{F#!Odtpa2?TQxR1e*D(ib8C}H^GL6TWE~%L6ZmWm~=nEyYfxudD~$>H&yweDAU{YmE+Iv+zb{pYk@Z~d>K*S7p-@O^<# zH~$;`&*|c&_6~gBWNM#7G~@PYtdtL^iGr#@26Kom`Huow{z^Tw8Ur zpBu#Y_{?a^7k&8r?K8He4#w0%B3+`cy%3)h{ejz39;??Wc3YZ^>6X%FTry$^;#H!u zi)VzTiF6_nk7S4nF&!tKET5*54oRP;o~~nRsz^6fDZxilPy;w^O3;N0l_|llYrEKK zsw{Synjl&SK`ulId@_bGRU~qaMUrGI-9a{@eodv9Wqg@hzCB@^>d2i?C>WHLCY~rU zBa_S23}2eBQ|vO8eyy8IQ@FH2WWN-!v2;>cN_@BpdSQfC-lCDDFH0%;K=PR}zm+;} zTk4Eo+SDl1R%x*;I&saU%s_%q+1Dx7EahM8mc}ELAR?Yh5uI^@s49i2v_V6bQu@9W zF+68{no2Z{F~3dqR2@@`@!}jY5GVAeYD5l4#DxXT16T~E+QlwY$;dR-B7G>RSBiGX9(DSRGR{iDDs^E*4W-uOyXE@hBH+6^mV_(yv{nCX&f` z)Sx?56t_vi<4kmMsiZ-+Cq?(u56Jw^qf=eDzA%+b2y^4@uJG zhs=yF$Bo?O)uWN+p|ew#sj=uJr30ZguV{i!aEc?uY^t+ZEb+6c&f@eAscQ7ErD%dq zf@B)(QYXZ@eIlX_iDneB*y`k92@|+vZ=disZ0+R2iQ&@NNMv%-WkD=Dkl@=EPQ&bC zr(v>q2g97q&y-w<3`;wzreVWIybU{7%qEVlMJ^pXZRSR?^B@uZGA)h@{!6XK>|)I@ z{&jsMow<<&xo z5>II{N2(_IPLRtmO1|J_82!3I!)O6N>Kv*xY}k;uVX)igGK{w}#qz$>FuT}UW3qS$ z!(6>0tp?nsVMo0UgUuGV1!8B#!!WB@GmMLOFih_i#W2MAZEm>62E7e~wRX2*VqsnE z^k_9^6>ElZ@eYQ0)!5y19&-Qxm&N}7MEJ|$mxg0KpXhmE&y%`8MEC#qcfGSK*ZG~! zH+G)r_-e<`cVyZ>+5Y_Y$G5$|?P}X&TmOL0=LbS>2#vISrR5bZ&kp`$@I}EV2i_aF z6xiGRJI%%B&Zb}fel8j0H~9(#uV%qF*0GvJj^^(lxg3|`==&r-y!y_BRcx-XY%1bG zz=zc=*W#oFQ0H|LcXE@72YGJ|aA7e^U-R?@o7-g8LEeA>SXj#%iSeD_T{wdI26?Fo zkYTBb<{i6m@bo4#4e|yA;KC}c=LUo?Z{#BX4>3W*gd7V@^x7lwm)B-L9Hyw%4cakVjc6LQ}leq&-db&6$0<~NyVkd=pF zwkxv5m(T^oqv?9ZR%A2VAV)UfV`RIwsuG+rgNYZN&f@o(*C(@^Of$%F0>BX2bpgEX zFmZF6`|UUZT#RhW66OuDy(_YtOf9Hu43W*Zuf0t6ex0o`GYj&E1~lF&vZXV(Mb2+B zx1b&zuE?f^LH8%pM{vw+GQ}WAHfZi6vVDN(H<@0Lm4|tjE3(BL$mIo^qY!mjonjf; z*-fSy6xaK|MNLp-tmeaf7~LZ(rDCZb2T8fbP!Fw)pNE zM$d1yi%yEQhpDz6+dK{S(w>&W>l9nPHuDT}uMPMR+m!F#8^N>D&~m&LDoiuTp#s1d z+`GcfZ8E(e2RGnCaE}nrnzzQ=yCS>E)PlOk5ZoTK4hq1XT%6lvN3>o7vu-P0|N&w#F=j947z_kq75iyKc6>IQ*TipX+=(-?jgl_OY&K3l4yu zzwZ2}&i8km>4>Wv{_^&}E}bbOB)2)@+a(fy>J*AYv>?VdTEH=y}=^9$+5 z|JRzIO1J(?&9CYHXivENx!p&*f1K|9SGvC{bl737g0EPVjML*cCnsm3>$4CtdrP_y z>U(cd7ebxwE$Bk%QuaPq7ecSF_c^){n)cp@bs@CQy?I>-O>3{bSyjA#JrP|#b0r<0 zhl~0Lf0LgCA>98z_#0BVG;?#~`t|FRD=R~(%jp|eZ`~XjI{Cl@QaE<>A_3TvioFEgAi(^Pqq~h zLap@4hzB9mN}p5+gitGedvt}MR{9>J3!zr}WcvhIsFglxXYr;HA5KL!2CwD7&R~o5 zkP?EOL6e6>3Bk@_P=6Ba44T|0>PfIOXojW|f}O#D4hwb$P3{x*B-j}=DODC@H%mk7 z=f@MXU}x{QB&-sGoxNsrP(rY?_nZ2YU}vw{1l5yZXYbebC&A9%Z|Fj>v-jJ&5bW$V z+vohs&Fs*%lV=JGU}w*|d{Xsb&;`@_=L$fv-J$R}Q{QzEkzL z(DxnuU0n!$-@)I}g<$8w|Dg+EC~)wdQm6t96zcz?E(C@8zn}|2q5jY7LQtsxpLHQ9 z)c;Sq5WWumpOZor)DZFeU!eP%OgS{o!s5ov`SR-V^_i8E zx0XvI<7ZBs89Xumfcy%AaAWMm>9vz1XXocO9x%U1$(iDCVd2PB!MJsPygV^_{_Nn9 z%>5sduqtlhYk%V4)mGri15c4pDj__1;K{lWLi50rbRmT1fhX!h2+ade zU|~@WT)=(z^-7^?E1+%vm!wej3GmMTpVx&@+5NB7g%BqFW>70w2(W%LsFk)53HR;k zeQVR<9VTFP#8M#z3y#0 z!l56NPpUc6$mL7tuZ*0eVMFu*vwf;3!MBIN^E_f3k5qf%)|F>$;3yq{eyxXu;WU{_d4#-eE+i@Zy_GOx6%s1*L%;l zy-RTUi5Wg}4YvPb$C>s|bsXr3xBt7FcTg}6wtj_H2_9*CZRCa;Q zYk#BQCTu>gu?ybs!-HINqqow_H;-p03fE@KgprcXfs#muDvFJ%-D0_W0ws0Ogm3uxa zpHxB!{ClK_;7Mpt_n011PeKE~M>6HWlhEVbBbjnQ2yOTt$&@p?P+mN@IDK}0aunRx z{zI(o=<2oNBhBo{%Tl@+Grmj=_9&Lv{eL!XlGR88>Qt*J|~(Hob} zotr)MNnN;bapUrtsrjkl*o{MfqYGDN7pG>H7mtmm&mH>Ty70#E&8wqRr!HMCgl7W zZo)gmayB%kgy4j*{OE%a>GFsn=nq46Ftt4s-@ z@g6X%Y;Y+xdFsmK$=on%yCzLhLe%!UE<|mw=|a?YRTrYRE4mQ1y()$3;|f!Vd;VG% z!npe$vk9svVZw8dIapFc_)87fLtXpm(jGaiPt`3b&jbB41l!Oo`F z>raB6P3AyUJqdO;nFCQJ1Us8vqr-xoO|N6&=&i)Dr&Y)aif+xYwpj?^)A=nxG7abPt41QS(ucpW1sq5o~TnX%KeUUB% zJ6nHR7lNIwKcx%7&Q{6PI;!3YcDCNup9DKwe^M8Movkm{giQDcW^ZD<-jWg{mp;W ze6i`v1i1UZ=}peC$LF$$mDM6ag&MHWWf8A|^Ll;4$`k4;mIs8^H&uQ;z=rY0g=Z48 zMm&|EtLmu?U13g$3;9vvGfqb$DLNZ$WRhBby-1QW`wT?QEJAd|oUYKsjKg-Zbu@|d z>+u1OLcAE6i=@k?1QL2$nYJ|5t#m=IVu?Gw$$9mpw-l}~ZzcJVi_3{rYt#hY zLeSaetz;sZHt2FH-R>8cqRDASEKb+nBa|&8zDsY7iW6wkTd5eaFO=sZC1hH*QoTFf zl4J@Fwi_Y}A-1a&C5zvsuQ(f^^p)cL0AK07 zhfV3>w8$>De8tHCWn3xTZGB}zSP2)cK(>o5UvU;d=_`fo@)fZj5o-#OQBd*^(Oo4H z>8O!Rr;@}+p{Fpm$5L!l{UH|T2{hx%CJg~!S$XN4s!IkDsC{V>6;bqHFy^ej}FiUU9VSCvE?mJ8z{Y{bk@CP5dA(O z5$_T)MT=HQU%?a&8{+Y}5y|YzTlq~+EXc>kfw%;wcBHtxd+a{*F4#;K^Fo9Vjq{tFOi&LFSctHKBjUdQnXc|Rd5+aZwb~@(diloK7omzZ486~r2(Zc~YtDo)H}=?u*z4bh8>+^-qBP9Eij1z)u) zN#&drH1$j^-+r!bs*^r1K36Kn66M)Bn~_R|WO6_Fw)v2H3cJ(5wxoJRx| zQDJF>=51n7L{nbsoc+>2ib0Xz_!uPVV9JP5&apJ{cxHG}EJ;*|H0Gs+3%VWYn-noYi4GjxQ1#+>{&v2OsdG_E z$0HU|#H7k)DphLzVwb7(YnQ3Czz|JGDFGI(HKchcPbIXnNJ|mKIBEC`U}~y{&K6bA z)bi~gvrTn2)mh4CG*_NW@(p^osfzCkTX2Sp-KJ(-OqaAkAZB(+n$!_7D^FS|k3G#| zVsQ%JxL^9mh>I7io~84*FW8nko2tkNRY=WJ;x%{eS(&{x2Ux|LrCh96s*#LPHxv~l z8??SDDpio#$0?cxv7|xkNq(4GsZxD6)$;8b+f-+zs{ERsrh4^CWD^&=P4(!N=-4|= z(`X<AqfLusN1gz_d`n~Lh~ey!JaoXCdh|6+3^Ml9z11)?HaB8$)*liIY; zx~4CX5%J@JiDIF+yn5_tHnmRU#`AWyJ0qMvAn|B9ITtH=RXcqc>leGKoqp}II&IJg zH$f}R)Ke$8ho(h0TBI{*BuOh<{u(n8oYG**NhDdnG3V--s?w=>*_7ZRysI(GVwb5@ z>@rn+VaYB*)Jq>W?ziY?^mP*bG?7I4s$fYi>8pZ?OMA*T)!CS%bHvU&JDc$uV$kBG zPFpJ}wq>zqD*xJLYC1yf(gr2iOl49`rJat5iZ-YUtg^~t!*lAjJO!+dE33_A1 zX6}RWbpG~a9aGh|qnAxY^`A##-dL4ivg+r-cs_dV~S z5r&i9uzpiLSI1Pfujgfx+D#L4iY3jV_OGE<>+W7L< z7gMd$VwA6WkC^{IrD;L%{|$sc8h(B_*z@L|iSEDZ-spay>&;!KI=|leyv_$Y-q$hF z{%`HCYJZ^Zy=}{_UvGU?>(S8rLsvtOZFz0WQ1D-Z*MbL#IpA3H7n@(!d~eeq5TN!q zxyec2g+RV$BQP=%n)B1AL^MK!c1of|kVj+v^zIfLvzwd`PA<)s?0Gi0%Iio# zVu1EAC?;JNQL*JK&IV`t%EsN%S2Sy-0j~?0i!EPqJ~-1?HnQ7Su_z6cX+ob$@sys% zlaW+9O0??f$ZnVXIbWRgm71u7ub4VYbBZ-R_bQeaO>c6ZIP+A6y#N5d@><3gk(C^X zF%yRin~E)Oah5pgEv2*WEnd{3&owQA$hih>g450jO+Lt7yFDnt`Qv0GRFi%5mRCK? z8NSOPDz*ZPv&YH6Qn27G@2&6T0DYXjUP#53t2lw2bd^HZU1g+c9gOykj5HDPi{TBY z(x5I>i~@GMKcW)M71Uw@xGL$bI-r_`crnl@h8ke`k=ru*-e>x(^LwAG5?zG+;Nu($b z!!EtWS?r{@)RGB!i&qsi)zbq>Cf@WawjztO*U46>aKT&Nox8OJqaky#{ma z(pL)Chp%ExObm0FWQUwM28QvUB5*0|BrO8cOL3^v}3IOYwgc#KScBYi)|gPZ*R?p z{v-6J&}hpSTWT!>!H))?AAEe^{ehLhW14@n`CQXC3G(~#m)&CCbvFCz@L>9Sabj@! z;&C_)!d)_)1~E8gHl@;|iu5Wr+tU^^u5)_=TnG`n_wfSR7CXPiZ0nLBQ|atH4&*QMx;xK<44rUs(c3U}UMfA4-(u=@)*kNMIFCBl1q+!ph% zb8iB;aMWpxrh;`K>J&@l>=rYx>l#CF>x|w0JdxXC(sf;92yXXLCx6KKEv8%7gToct zv_qx0KVQC{*<#jpKI#O%c80e5sFPpinR=a-pPxQ^)L2gp9-W_eMK&$}izyMd`{dyS z4O}^ytyi%X*-XIBkq!75+4|8nQd|J@%-#)b&Fr&V%)riZ0>BvA-U{!4JGI69>$<`a z*%LY|zp3yJp2%)7@w%??_JQrg!_!;Lxz4>dI06FOv)A_Jon zVT*a!xz`5WouTc)*zMQj%)ZVZFBB>FEMVn`#$oeJAEn4)7eeCdad)bM(hSihpN742!p zcR7~YVsdurtav$-F3|C-*`1w5XChn%k+Y~+8kE~&Qg%7+RJh=*dgD&R``RKETdrb4 zcIhgG>~a+yHlnE>&5h;t13HvLSu80pD@~bqxdyYvOzqNDk#eF;i~I38ytT-mD6Q^e z12OY9q~o+F7h7?~MC~%J6fU^RZpj*UWPr{xxvC+~#S(jci^E|v!6wwU5wwnBvq&hl=BuFg?7KF*z(r%)m&L&ySzmWkdC|3Nd}rFi^!r+ z5^bQ-@d&zKw%bLR=c&1}I(`n`Vh(<-qNxY)+E?XbGqN^s30xUj3KzWP9a-WyyT@V} z7hAsCP`*;gy02*8h8#&d&2+$nzlCW!b17~CiEe*)`&?rF-`8|bp8x+*^Zfs#?H_FW zTHE7V2SXQIwu0{rd^!+neg^%>-`^wI+iT|O2`%UE*>q-N@YKYy*~{lBboiKr%;IYp zhp7jrYdZCd`SgVL>m70>&RjhfJ3Vpp#!}`q^}BQ!F{Ph-m&Fa_{JrjN*eKmd9*hmI zBv09=dTdn_)ZXYGylyWSi>}#enEZ94hPm!8G;G*4Z^I_fm9v8*(UlXcSKJoRBCkh{ z(Kuf2l4yqUuNyRsPI|}gCc7nt;;Oe{g_+fJqf4pW+L%YxWX!V^&IqN;v+{_AW*8SY zY8Yilxl6-VybYTyTpF3We&h1dK{2L43*v_(=>eh{@GRC-;~Lhl8#IjCSj2f8vf)s? z>TTHijn)IXC3dd#;$l9wl=debnN8d@lWYIF&m~8yH48Dq4-o%d=BaMq`|v%)X%2kM8-qqbY05V z`DrqrwsD-jj2zO-|2i*IF4Qqqt>}1}DwmyHrpjWMsZ{JTm8Me>T6&Hr=>!xX6(>5Y zlvwPbeG4+x-}z}8Khr1BIcTYG>UfwYL(7U8$R!{&{c=BZK`(F!CnAz+hncFIBPX-6>Fw)v2H3&0%@*I z$BonCQZUb)GsHhaWFvH1jSe>WwUnm8&d-1SN}aPUbzXH)YayPN^0JECQZ9B|8gpH{ zGw9e|lIvZDeL`momv(1|ED*-t*Q6X-tq7^ z!mkLYdp^3OQ^l0dK%NJT++L8|bUGS%aPY%28z8+ul;^h$P1vCRQ6EEv@V*cLap#cXrDUTywm53dpd- z#s?K~Pth`YTio0hQ_1NXyO+2cM$T_Bn;h@2fyS==H99V&Z`1qI{K6J9%JKdh;P1S@ z<_kT)#jJ6xJxoMhd&gpu=yI@_h7yU59)Yr0*5}j~v&V6013rc}9}IT7-3M@Xi^=0S zPyiT0n^yF_HLFuB70zujH5>;D;5tHEr#mqx>N~h1yT#;iy2cpV`fj(J((iyfy~WgU zyw(jGLulJ;-3@y=zs2ltdU&{kTL9N_Yn@{0?U^lRf#Y)#pu01;JG}&rRd%OA7YzN-FX4jd7XvJbZ;CefD56`3k(h8=C+vZ zjYAu7A+#rmNUDx%b&4&G6`30#Lum7!O2ZmYZ!wu0hc@8)2<@F~FTcffZhCa+p)JmM zdh~odcq6~Xv}<~J=&?=VK|C0{@b-l*W?$nm3Fz*OZLc#w zzC51aVh%Re9#$mv;O5mrO?$cU$P3HZ*;vI^jVdNKz=z;w)=V#eI&XIJ4-P%F#p;#bEPdf$*m{z{=gic!(t4|qnsvaMjq}aD(5T{?@TZl z(1f))qD?T^K1{H=Ghna}8-oFZ$vG$6fB};X*zm2cnx1;6x+S$%Jip)L=ixu;^XY!4 zK2>j5S66sHFefcio6Z+2szI81_KL%-+OF{07V6mHZ%FvGMFAhEt=Pq^Xh@ZoB> zK<(?pO&mTukky^Yev7}lZIWx zW&OMLi~2U*+jOa>|808N89)EihxBwmCGkWd5S#7Idv^OKMH0KnH=`K5_bO3VBpU^V zI+4xnAxRz5GyZh!0r-t1RvA{yD93`Q59u*}TKKu}qCY%2H!&LyDmW}j$S8n3{tlu< zeT116K7L4#^V6{h-~)$=h|LiQN0=FK?2w-3rw<1J1BvNLLhMF~5Yfp6P8`y+`jo_g z3nWeuUHl`8c7$0jF+Hs>mKZu{MaQqP#Pp=TSYqg)RW{OVLQWsjllUSz6wLMzQOYAi zKf=svWaf|_$*0{j)O91X)w*YmrKiX8Y3X54kAm9Lej7zGrHwu+)MjS6J^A5#zz1p* zP3^|cj%^@15tkmmr#t~%V76kkt_e4BNRQrAo&YW|dz|b)y1o+gv-N-s%vO2EHPmqO zke;olLl3|OW~)wyXsV6$Aw69$vO~dbGOE6=I!PVUGxW6AhO#$uTea8LP%-I4dXSzL z9(Hvps4eZdQZy*tyrt~SnOUYbJx)(42>3v46$)y?<%i_~7pP4ZhQvok18)3~9+szX z8NdZrDN<6A}pZt{?xgQv`f0-wxm4cO^JdKO+Jhl1Iv zuXGLgsY7}qo-!NCu7TMaz|)8H&^s+WZ0i%5O}+?Jx+-Z?Ur711GPBHVdib3-DBz#K zY%RF-=(~su%%;0i1frabn>eHg+i9l_s5RV90u z6tBpW@l%JR5)?Zq`Vtu#ub=K!uSF96OpY?(+r+c)n&+;?N z=PiG4d6l`}{1~&t^gYu@P4}7ZF+JIIhpEeStI5**t>zClzp1&}yxW{=eth#on+?Wq z82{OLuknS(4P(q0BAE$)VfZr1PWW2Ga}CReaf8=zqyDG*&k?P{SL&aspVJTNJBVVz z4|Sg;GZrt?J^h&Z3Yvd09~|FI4ezZ^$AiW0>7lNC&J*m~x}{5WE)7Qa!o4YXe$jnP zr|66?y0;FdCiZs5CU1Enb0)g|bBUh$RObM&(#~>t=D8CdU^~l-2~OyZ?9XMev3w{q z7uxHN4IhM-y-Q1j$?duD#XCjk{Ke^2BquH|iq4(R(a!1Jt>N8V^x~65=VoGc zJ-6DmpIq*_m=m3=6SKL6;9}gJ^In`6oy*?oiH+GzK0Xw_xFR~|!^^!R!Bir+AHTRD zItvG(KFtAs+2PHueecC3g>$$#wj9i4B7yA1S>~MD?klWp z%s*)gLIB1 zum>kRNat9N`uyaY-?y@p>K)mGH(e`BFAGkHvy~;L1t-MW%5u+w6XI-Txo5!%akf5~ zRRS*%#Myd-=!7_1S=L&Bg*aO;vOBxI(SePj$xPoq#M$-@(Ft+3{hR27INQE1Iw8(B zmiai(e-q+tV+pds330Z4O@xIw+rB9}AZJ*n*4=HlFXPyX`vMQ1MApV`|T z3b_6Kmst*M2qiMS9PM4+UdvCrF0*9S;Ow7BdX}a)_SY81F0;Jb;Dj{vmst*Ms9T_k zuC-`r^Tc(NDbY-J-1a6+7|Y=i+$h_jXD z7Y8TA+4=|KZ$g}{Y{&z5LY%EEOE@?o&Q_M09Gnnm>+{%eZcY~Bu0p67UV}K#u_rsn zoe<}_+QZA85a&6@A-EIbJoiQMHzCe*tiymiAFsX2FH%fAxbF+Ngsjs?f&$42M2LQ${rR_0vuZ@MDM)UtODs;@01 zI-&a7u8K}5P#b%p=Qu1>U)yhqcS7~Gu|Wjf3Dwue-r3-U>T3&&uuy$%k7LfIUf*Oq z7AVZSAkOo(CgVXZ=u)J0Z^Vwf5vri1Yl%#R5T`=ULweun_0@8izP6 z#Cg8P_}MX%g*vtn&f@6JrenX!oe-zZAUYvVTa)O7IBm_M6XI<7h3JGhTYf1zAx@iK zbV8gqBXbt^1`cNX3gPiiXwQ~foZJa^{`e6btlBxT4v|}-`UjqNav_y+x}A9KeYTu z%Q2+kANQ35UxJ$xi~Tx*qFELl;`4Ncbn7$8{Hkt5ec3^ ze>^S(7QE^qGAMLj4+8@;1}2+N8yL~QI@5u_*xk+Qf%Q!kNBfsk2k|bc4TK21wKZcE zvozl*1V*nuZD6Fu8uRC!y2Xs@f$jEnWygn>6GL0VF=$UnI*}g|#UW&~v|fjS$yc8; zFme>gb4Dr})B}TIx6opts~%Se(U?~?Q^~Q$z}VHN3{2XV*?98u)Gel053GBCZDM6} zacAB)p@_gscCU%Yph=5Sv$PAaF)()ZDFc%hS=?tiR2#cnryf{zcd;-#FfqEm9uWcy zUv-B&NG|T9%@~+`^(g~$DRNYvy2YB*14|UAM>p5ECnndW?f`oUl9GeS-0_5fwSK*3 zmbQ^J2F9+wj=&lZQJyxiyPl>VSblBa(>>R@xmU<40wc=@UZOE9#!Jm26~ofH5xM%b zfss5yXM4u(da8P0UB2B^q^CH$G1b)=fs_l}(-EfUsGuRy3@uhSpEfY^jGa+x;3?{X zMZL+r?#{kZUqYawR8((=loPX|#bmQE@{rB0(*~wE&wFYrK3P4mfraqE_GW*kvoj+^ z;J)f{cZBFpBy2G-V~fe=QwAoTFlju!d+NY`S3R)8((G<@$s6%Tc9em6I!MYLb+a(? z@RGpj)u#-MoHciyk%|ZEfn|FZrd(^YdrNf9zOiZiuA2C#idm$h`zpKow1G+aKhN|Y zyK7%Pu=ps+2Dg+5jJk$|rtw^LyE~*rmW|I?%`7U*$XA~>Ffs@}BNg}513L(3w*9Mp z-8-3aMFbML==O1JF%RV&Ne|cX9`n}Bq0J-T zY(8yZfir6X?WhL^yK5DJNt>eS(U8W#s96|!5CuGT^=Si>_L`mH8DsnZ-@wlQ|H%1r zXRqVyj%Pa_X@5UC|9_M10o$C-((>nI|Nr-_FS0(t@=ePNEFI<#o7c@ZnBHN^o9xYh z)jVbVvGEU$R}Eh=JjdYDe^S4zzerZo@6=hE-ta4*7KoSVK?u4X5#C2IQ!+)LecXz} z-ZzRJ!?L-y#izs*4FE7qqy(kz{?xdM(nF>F8+0oU;KFp0$`*3DXh-}YD{;ES(+mJI z%qWrDi4Z&4&nIqc(S)BW(KG{eTMOXBbk@jNkIIfMP2lMg&oTh7UzkXvg{QAZWi617 zP@zChewLb9<-|)o%K+fRq?wcwUD2K=1IJ1{%K!kwoEk}qavivd63;RKxIpZY5Y0Fz zFi=a0d6oe{MrMl#P2{>fA`n)^$r8;nK(}lGE-+hl3%MrjbcyE~0Bn)lJgQ0KOJ(pIqVT63;ULBQOQGrO}b1hUq{{$xLRJxy|zo06ubCu}8Buf;%2KR^oXE z02sKf(g)I#iF@8_KUY&PkC%9!0l)=rcPb8QX)G|$GXTIqZAAtIO}NPt&ocnHCsSKP z>!nLP&j4U6s7($Sh-YUsl|5CWc?M{=4fu`JR@sfH2|Qh*X$I(4N*IGHs4b0;1!~uZ z+G0$yS*A8kH$Y$SfZsrE@fd@QaK!I1;8=;~8lXFE0T`(*?uXTc8!ypR0%C!I+Fdm9 z0`}UPfMX?^OF%3zQv14UI8maR1n77KDgvmjG9J-X;&jPe->C}7YQz@bkecvkN;G8v zJ<3rH2o31-YeX z=KQX+?DRN3;dm-J|Nk%cZTk(jzp+iX{7=iP$@l+%S?{riEuXFB09-NONWTBm&A+Uj z|F0MyN522>GTche|Id>h_4n)U(3zWF`z!nYPnX~r1Yg8bFj!h(YGg3U$xc_c1Y+0C za-T${1!=>?pz zm?}|iL3VhJm%XufR*tFV!XIBT=@OR~gk?-MYAY*VTCEg^+T>@MnKfv<#H9rRAE-_G zIt3*(0LMyPS`dJN+cd#DbawTU9r1HAx4Y_{9pD1DJIPQ<9YR^vG?3bdXspDg1pyhj zEsmA6miUQkB?fLQyJv04=@J(fgc7STTRe`g4S%LYg$3!j1MnM}tumW|`VlS&+WR0UxQYLKF?au@aXS1Yo4L@-?FYH(sLBf?|Pz z+GBL5LgO=|0XSCT%7Rc}V74exRjXT+%S`hG&+X{J0 z8R3ZEV@(<>acMyS25u|Fjy2&XN?ckHaDm&SVXrv-qX{`y;?jbE4CGeK0&BuembkPa z;GRHkZOxZ1acM!oZX`G9_dG;r{)px}!pvGRRie^@bVvgDjpSBYozYY=>C$a{JjJ)O zD7YGd-yJ2hE>oerxkfo1fO4ZSHM;RI|u*^fV%1x|Zh5ceFDx%G{6PH+;bG21D7f zZJ0JZ&Tz$`(|=9>9{r!|pRZrjPw4~tn{@x9`=ah$y4UEQqg&LC>fE{q|H@`8ehu{N z8u)b${C{5q^t99D{&L^W^yYkG(7zFx-B_M3X8ghIWp;8GoJ+Y(zk7UT&J!HC%+B9} zGdI*Vwb<3=9oh0-W(Q@#Ikp%cn^>FQTA0|l%+CCxb835UWho!`#bz(F^S9s}9Z!wN zXFVJ7Ip5_$v9uuFa5*MAd%9yislD~Fz1Zqyc9eK>-|JbLn_KQ0T7)q}TYv4&x)WX# zZ3ChcMg?tsq7&YXZ9}3H-pOq}q7w!LZM~ushE8n}(Ft$MwptDCMfO7Ta|Z)~An1|k z+2Q#~?gTv&{eLsq-B`AmPmH>~Lr_EZ+eIhTke$gzO!7OShU^{Uolrw|rhEZ+LJiq} zQ@j&u$bOsXgc`EDL?_gcooQxFu1)nMd*)UrQv(MF{iE5!$VxOHxWbN}f^&Z>9^RPt zb@r^RTw#Y+!MQgcU74L6o`|k&Uty<9!MPhOtn98I?1fzeSN@e1i2vqJw0CiSKh)>l zU%2vNg_BFjTzQx1+|1|Z<_D$+a^1x%AE3^u@zmtjY;Jmfb_(jYbB)CMJLp4 z%Ns-|)NRX~MJLp4%U?6+ShjaG-&+g@4i;S-g&kjFs#u(FXZjUW+}Shj8;&Ons3FrO(FrwV zx*|HEhD;A-&i>AzCt6(fPmHYR7vibah2EjiRQrzTEM^Y62R!?;$;I{dEzy}t`WCxF zi&K7&yM0%5PIPU|t!7rbI^+KKZRYG7?-|^kjE5$AcPEC6T|46&)9dS(TSaFfn;BeK zU)mb-k6w0&&g@>GxS4TngouV`2UF^^G_jGSB1};BHbfQFsU3A8#4}yE!{oTED zvCHQ!86W;|-BfsRJ+`y47bygR2@e*1K!h7bAMl_}^Z^apMIW$0Q5GP6ga{4nj5;_WM8lWF--H+q?C3k(2|*fI zp9fBe(!j(XzzJa*n4ZIwFB^!YA`A0_0}!X<_YU11O}}h<&97+qpD6L|4{)#_=%up0 zRy*e}t{lr|HnW#5@eBii3{Mi71tODKWM9uwK#kKxvb;cTWqPJWGYrr*2*3yK(@peK z-O_nnT=kKQd4yRmJx?(Jx&Y9Fu+mFs_5~nz{NF1syUAvG-jk;o0DO4<++ywmkBo4{ z?=j$5iKiF;eY zB(v0>lKz7*@m@E}%%&LzC{X|(nN4LG@R8I694qk@0|1Q77CRD6xQP-^F#x#0>_kvp zU8~2eWG1a4`B~&C1^^kTE$;f)hMOqS6a#dpG2os^?UNfXU7A%Rhl1Lq(^h#XPsUG` zc!B{axk&Bao+Ik@2s5khbcrVz0A&!7*;KVd0Ad0lVzR`VTu9h0Gn*zDpv(q*WVU!Z zq>gaJ@5wyj83q6tnC%r71GVACOFY8>-~zMz6|X5xH4!WE3O6Xe)5Cbf-i= zx|0oXf!L~hA~cmbUAm)AZNL_(Ev0uByAe(JGbNf~fR0B1zmeK%`+YQ_r%OD=0Eokg z+@``U3a&{SFyfg!(jd$%bDO3Zpxg$0k9OLC3*1&2X=|#AbcrVz0A!Kbl90K$ z+eZ_As>Blv0DdF0l^Y_oRZF_W6AXYjkVtGQ+@m0bqyZ!*d>}u|%rgIYf&st>V$&1; zI2w@wj`%qlmnRqiT;R2Mj<#N~V{sEDo?rlQf!Fb{PaIZiEb)XyKswL{WFWS;5QOmz01~sUO)f;y4F$WkDV`b zKHl*q$I~6ZVgG=A!+z2BE?btU^|Sr|FS0(-@^6;sknjKZk^Fz{WKTfR&&z4PP}p&*0I2M8B=SLHAZ&hV1|U)t~>5mH9S^$?;5fcPFwoI6Dc1RwSb)U(&vg zptu#;E1TJak|V-QNJ6(QAeG~%NBBiCgi^6A?HvCkXOA7#gBc+vnwKni{nM(^S5bd7M zv7K=LMpo>rN$yZ_?n1&3boi-26Lht8Gi%UznM(@*KJ?XOXr`>*lYwJpE-e7Sz-`3| zK}`itl)1D3-~zWNed6$@9`g}_$lT`A0)PzM7U!L`;U>!M^-&1m0=Jc;5N*imG8YyA zMZKw6g|$k=cs*KCPwa$^!A7@Z|Quc62`)5vfgfuZdp=-k>C^ z<`Tah>t>nSTv-6{k=lxMgPMS2Wv(m$z(8&B;6=S;0s-ZpV+Br>sj>j=wgDHY-5m@G za{$_qW94)8aR?v-wXd%x5@jkaAeQ)eYRf?%TNmjv7Z!jLH&UDG!6x?Q(*y0 zZNNX7+M3YQWv(oc>z`kYjrvEkOLHQ%rHs$wD~I6wI!GfcYloWUu8JxP&~YW;1GPiK zcva$w7F;eY0Jy+xagsqBZlX+u1t?Dd7nt4S_g`mCaAg5N24)AZ3pY{b$^w9UBC}7f z<8+xT3jngnY{Ct-ZtrCLnKD-v0DMi%J{dh-=E?%StMQn7eb_ZO7FRG^xtX4#o8>;63kv`)FgxP&2@I@5 z9E%()b728M24*Wh!!^}Jvdo1A02i38Hq_Qu=5*<4^`SOkE4Z!PO|K0WV zi`-VsWoxRKbcyQ2>SL6#)WURynlm$>0s71UFmRh{e!@opscj7fPL!yy0PVE_7r5Q+3SU=M#7bOQ0FZ&(V(x2gC6>Pb z&l73?|Fio4H>t}qX1b>18@X(JBi~DyfclHBt6q0UI3NudRLs)cBkE1cSDzruxGZDL(ZuOmYAF0 zbCdk7<2y$_Xk0~?ed9|~cYqQ2q-TtLf~cFt&O^TX zw1JVq$Jw;W?{=yOHnr~?c6ZL@L&biz2m*8+LlG}CV~f$ii20O(NxkA3I}e9?U|Vw$ z&+hQp_{5+z`ojqPSG_Kx|1Zr9shC9xZ~5xe1}4p0oUOaJs|N;aD?$Y1YerfW6Cb^r zSsVn*SD!L4nw0!(f!WjpgQ<08V1W)_SS2vYtP&W#`m}*bYe#1btVKOAm{=78W3#9s z>4O=mSTl=*VEO7(21Zv7&K8(eJusM8Q$|20(Wpp@5SVPn&VvL-&8G~E&KsXCFpGL% zFsafQSZ#hr%!-0$2&`^CA+Xe1uV;L0Z)Yhy&OS8HnC^wG|G!Ss|BE=k<$Rvg?fA6g zX+;13L-tksIoq3TiI!isyoT)m|B>~YHE8*yYDQ^QASowvCth!mAqvi5~fDaQ{;?B1^z!5(u<8paH zz{Pp2qY8E`ZlcWP1pyc4vHINNJeJlHb9q5PhIuT-b_h*1oG4RyK|1pWxG+bnvSh3Y zIbG)Bf`BZ}&=PKl8`ree$V{1v3(|Epz;9%>%Kjd0=;<=33-Tei$ZR?sR!~A3S&N&$ z$~#4F_0K$+VE3l zDlbS^9{|6R+bUWAAKbe07V=reDNr z#SDn6SFAaRS#D3NEl8OS_`qyYEwT=9#LvmNTv`xtf!X3IN^Q7_GM5$vTwwM}QjO5z z2;ggE_Q|E^%7QTMqF}blRt`41qDT!On`H)aWkJ9PW-In)$^ZhhWwVUSl?4G8n5_`w zlmU*#O_Zs!Ams_*0<$At#ixNLV?#LqEY_We)v|NpqP&-tIus`IxTUv=C~^#9*&U$nQ`-fGK`{C}@&8M1zh zoc|A6K5u!ZZ%!O@`*bAo>4(K=%Lp$@%|hkn{ilO7j0*Ap8H5@KT+n&0)Trwn`H>0Vr4T!PM5i|03eHOCL0Ar zO?skasiEXEWv(m$_>F8<8-Zv-PnWr}0IXjt=p0sV$E>Yhi*%OFtajpMt}FofKxf6y z9%=QMtd=WkOExp$XqhSt(2OAf3>~#7AuHc6w5Dv9c|wH+Xs-vb&`*zh>EbDl+GU7i zkz-}9EC9&B?4US8)r6ZYQ)L1A*$BA6Y}L<3P1xx&*A@V51-Hp=W3f}xgg;YWsgFSb zzmePO*>E&aBwgm(0Bs4TNGp@wSR9k>{)qoG&R!p6dTG4{b zr3C;Ns7;f>s}<~sFl26XX#v0mZYP3AhI}k?tjwha02#O~ZcVLi5jpbb)R-GM5$rd?2=4Jf=#fiKGoPCjiIFTv`Btf!X3=Qf;`2GL;sfy*A(ivpd6z zV;mYw%(Vpo8JMk5FxP~eEOTuEzy)Tj_S%}T(`BwL0N5h8r8PitETsuQRi@ekbg~cd z8@a7AzSabuE^}!C*u^Aro9-|Y`Xn;TFKulSPjAX*ncG}i0PvC9q9hUFpa$SrnM(@* zFmPLuF-{Y1qD-X)D7OI@xZUj*#SpZXI9Z<)0c7Cz^_G}x3ji)~Tcy|5R2S(o*A@U| zk=fEBusHhDgg;ZJ+5&V=1n?V~tu`Lfgq|*QaRFG`R8U*mW2U6`$%~uuG8Gq~A{2m+ z)K;X)B?Xs&#nGE=X3tEl%+&<|7^p3ZVo3x%88=bp>H>fZ)K2&nr}}Eh(nbgz0m){$ z#9Unfkb&BYswR~GmJ>td$jWb z=c}F1b}l$aoGxdZ^W%*n)2+?lYJOAm2b-(Ldz%f$7aG27_=WLO^KSD)4gc7jGRBPm zY}_zejNh=$*nZn~3(*+(X3P7C&fuZtSuL9_@s@DQ&DLL9zhZs2^>w;F-6wT9-OF@u z(>>k#JnM>e!s@eLu>6e7Mf|<_<))9CA7g%osmpYa=?-(h*VK;Loc{0huhc(NKc^qkcaRK)KWzQ8)<0-nZJliOx3)Wf?)(DzjlN^{ zD^UH#XqP)v*xAUe7K_jVI;L_Ojji`&hkCnn@i=HcUSWE^-~=hjD@^3EhPKeax9zjKsHg zmb<$`@ZeaO&SaE3p&zg?>2PquqhVnJ;NXO=&%(4V!3n*tg~^qJ6I#W>RM5c*aax$J zI5;6r3lrOnPJ3tPvWwA`a_!F%ovVxS;KKHh zZ_78*{%p}1T_7Fu#*o)HQEY#f=$srHbcIHihWv{g?avgQ%UcJ-V{2VYTLS~_zb88P zw`aG#+Y_T>v%&VeMdwr|((4UP^!4qg+V2vb*`;9b$k5*4z(BP98KSe(GanCoJzL4n z)%K^0&iSdm{(;?2Z)zjn{xs2uJ$$$m6v;0z$$M~uBKd`ni?D;ix%{5LuX}K(|H8*aXJRb0KRJ-f23N8dJ}Np_ zq9fy>&IR{Ivh%`6MCahZ=xl#vcKu*#^a4}ThXVEN7FMTwhP&sMW-l-e{^&rA46+jb z?0_3f`z8j&D))*`toXlR&dHwmO7GTca(wGx zdbBt;G(FkX8NN_vPTt=_Pu?E$Z&qwopeJ_-SlnI32&sP{}i3jjW>NubV4`Y z^gYoD-FVZ#i%#gqn^?wxC@(E^<4xZY?}Rv;zRR3b#aLIwy*{w90&!ZBq7&k@%!p2i z(=shOAx=wLbV8h#xafp9EeX*HaavNM6XLY|4s(ufL|m@X?XLbP#ChHzIw8*U&7u?H zJg*m>5a)Tb=!7`WH;GP&^Sn-ULY(J~q7&jgZ(`1Y<<9*6Q2+eOB*bZWspy0_4KEj+ z5U1fKq7&jY{ITeSI1TrRPKeX+V$lh48eS$kAx^_9m^0$*N=&S7x+9nz!2Uwf331v> zq7&k@zd&?Coc4<7ggEWBArCJQ#A&Y$mbeq*v>%GF5U0J?N%i+`cvlyDgAH*SzQ*q4 zPKeX+4bcg48onwzAx^`;iB5>q@MX~naT>lNIw4NO*F`79Y4|2{^3NdPt?mn=b9<@B zbC7UF2lhR>FN#j61YNDP92P1;_j&P7s03ZDhWMRO3A)cVHR&F9%s1VyT}^EL|BX$p zf7&`m^#A_Q8FGBe@noX^_kR1P{gUnNwkNgxqUDt>gVyg^CH=oI5&i#%ncqwF|8AuE zescvSti3%4M1YCIFMna+vT^-_B z;r* z)fJ@6#(W*>noEE38;7m%6FWd#8jm_6hX&vM8R!Yq8< zESLDE`T_(X1GB}&wK~ADHIb}PSwXfXg0~JE`Z%|h*vJxt6j zwGde8ft>mYE4I?t6oKTe^cAiv2>8Hkg|w;+aKz8aJmI>6fD6nP z)z?UUXee)@!gU1!7nnWdy516VT|qzwW-GQ+X)1BDLUjdcuMN1sY_(onTWzE(Tv-sX z72FOg7mhWRJyoH~f^Rwp003VK~RMfsV$uZPd{ZfUAMoCs%U1%yk6;TVyslwW{`1o{T?Jrn-W3tPS{$%vKp|OV8!W=;<;S7KF{s zBDJYzm!cchuz5OO=E8!257c(Mgz*?DxCY>8nFV<3f~Wkgq;LmLbu( zu+TTsGdPsnW3minJmEc?-o#_n0~-otr_Mk0;jmIh+dcM}H2%rt=s1}0y9%D|-8DkKGwaV6gr*@+ zjlaW3ztS-N4^ork0S{4+X?U2(Ha9QP!xNt|W~Oteje)VNPZ^k` zpAtG76@NoLu;^Z2-&VBX?cGW#0wZ5V9-1_$vBjua8W=YQ#;!hPU{Xf2GY0l>^}y!W za;pc?g~Xmqe2@9B`a&H6#WTjtif2r|`m})&-RUz*Q9evPu&s=Hdu`U$DOi~^`W9RWu^}xn6{fi^rzTSb{qVS9buX_DNpjUcfVPG}0G&P9Nn0)nV10&gn z&e&oPQ4ef$cXe}TY-ehbrhpJ4kR~^!uR9g9*kU9wdi7}o^WNq@qZH*8^}ts0JNe13 z*`dVBwju(bx5GnwiN?UFSvqjo*kbJJ(*{N`&e$tnRu61wqI-C~e`I52IwJ%YrYRHX zVGj%p%ovz#K4oBJh3c#?=$q98gJm&AVA3ik6?tzAjGDz>k*#@#yr&I}yr9oW#Y^ge z!J36KFln_);+zneWR@Pi#ulSXY3|bpcGl09i|T>FlyzeS8`|93mTO7{QX?)bRlDP;ZsAMHiE$#$5ZoG<{vh{w7JXpAI7rLWB8b1%WzTuF0#Y^LAv{OiKd@6-E)TZ z|8xZoKJc-EVgidSNeSnp+4rJHoW-u2+3e;_1q1~-{)rPu;+Hez@NUc(Z`TY9N%GBnHf`G4u+8U^ru5d*`7!oR|Ee+QMs6>+0q}v^;;FJaz!5(uGn*?40xmFHT|ZMM1jm z0Qe_!TN8S^!X*Xat3bhRX~eEtg6a?fG$Sr+ei7(8?nn+ft zrXXD|23!r~J{db*;i`gwtsu8Fx1bvQ31y$Da8*ITZzQ+cCLft)sz2&+u^LZTxT+w0 z87jyveYGio=m+3YX1PVVsvzJ4xyAG7gejVExvC)G0=GqlG;O%?3RM-P4}s@si;m4bRp8)ELr#u65P&DrXxxdH+4>T)pmXt&^sYn!0p-t$zFW zTf)`}$BzxKwai<6jzY`(n%`u<-)6L~G(WW2VE&Z(?dF%8pJC3M`wipv7aNxCciNvq zPWyjS_d}u~@In1EO&0wtbx&{p7CGndASd-*M4y1D6j+{R{iWsaEw@{StzWU6Z@Jm> zdFKPR4_Pmmf8>0%C5i(n$ES5U`P{$$?<73{!!Hb9CK?3aAoCOS za7l4Bo(ryRhOT$Mf`ROGuPl%3C360O-C$v5cl}^5>>9XKq|Vvk#>jY2@3MC?v6Rd7 zyT@1NJi&oWcd|S8);4-})`l~|0+lx2(sS`@O6YX7` z-w*Y9_ZKd)qkHHihl{6ow}y9f(M#+^AUHP@tLwSduKnb4&n0%y5S&xVi`yqqnPS94k z;RiL?y~y0IyD&dI+0z~CN$stV?Zs9vvcty^%Klb7yfN+T>{(g4lwq*E$v_F>26lq1 z$eo}BaRWOH2c<>lk7}?Bvyt8G;#wduwiq6pSexHknAo_oC58fG4>x>Y3}tjYH6EY! zY{ch$7ulKS*;V8R&>H|UV4(k$!q8mJ9i5NgC@Jgj@A};>rB|;kKmOh zR$BfbL6hBdRdntxL>HH`YstWB|4m`hIop}-@ox9TBaykAyrOfob9iZdZe)2RI&qVS zIe9;X9mXtk^7e$G%{g}35_&M8$)yGHP8edGW6~7R*f35w$D}C$7Ha5HPAo09$|7~n zx(3$PXZK@^d#k_%vrBXW6U?5Q_D`MJGHf*8dfq@T^#C z&nN#)cvh@Gp?A&(rv_8`W#4Sx19!I8`UFpEe7d;4ws9~C1!@~*cXB7dwvC8RfNdMD zmA1~?+)&rlVpo@UWXpGDo88GP9;(lLJG+w;44<-9@i(E#+QvmEz_yJsC$9vEv-Ojr z6XI9y8p|&ado8Saew@r#p;BDK47z(t?l|AOH4XS3{J(1z%Xz%j&T7KGfbM49I z&i;v{XK8w4e{Esx=Gwr8JKr#!KnH$-RO`qJ!BXMZR%wte$DbMoJW!S5Az zC%o;UK$m8SI@{GF3v{f5{wBaee|zZ;u|V+Vy|T%iyuXDW>{6b=@}3&H8uM?8PGG#5 z4I<#>3cNMD#XF(zGj}j2@2LT{m5tuuaexP@^|P)2bhhf_aYBDOMF#Kx|5Z~RVpuUx7*WG^z2AZ}c* zm(B7_9M3NRz|cc_rJX1^6*!-LHVFKvWY07-kQ z>3-hE)?j9N#+IiS0DR~hlX*2#wz_AKVFF+4612FVuiX-ouaN`x4Uw|zP^4;g~ z`c8;a`h;nk3e3|BK!JhSD)i8Ro2bzA0(5r-;GRTm4an)rYJDvNkQKxxa=7Ajt)?28 zsqo|ifZs@LwM8~f=;;biE&#jjMP}2T@Cs&2o9e~f0Hm3jS!Om(E-c3ePP7$Re?&^jAt^ zYrvnW(A)xa+YjJ35?kfCu{MIFD?GUX9Jo<1TRIFQG+gbtjX1iL%`&rjasj|cW-E63 z$p}aM9s`b5cya*%24;(A{5_g*6P1+I2U4N{E>OEOtk~102{~5b$pruzsVxq)HQ^>J zG`Rp>Kn7f(wra1f2|Hck=>-5=L2mLqURT*?Dm=Xa;5U+6ZA7B6^pIYFZ*&&PO%Fr~ zWRv$aA7Pfs4e13qegnD1k0edN(F#p3K)Y=?Ee7Nk&eD@@u;ifdNgKZt7052Y%M08d zBj1omgnWcqei|XW07nLHi&>Pll{i_U*##)Kp(0M=wx-&U^#AwB`oH~t`-|;QA#3m5 zTwUMtD%9a;+WSPu{~wQ5)+ajrx0)<88vxA&AgcRIy9k^Q@D+ci#81}x-$qvapRUVE zIRtclBy+$AN$vo$c5i-+={~c=;k3-#KW2Ke<-F-0=c~=1a(vq9GJVexG2P)PSZ=p} z-|-5vBVfewSj(_;f#fUrvEy$^R)S}lKI&|1PLVwTWS4>Q8}j}Jvg#iq`xbtI%Kw&O zvX9`r`A6nY*{#l57Sa!aDVsm}S59@9hE;DB|H`O^b?pd9V03XgV!PXpi z0=v(#d3|s~i=TV32n!GNIW`#%cS2us?nUCA(2> zt5tLYhpaZy2^_Lon6ogjSLg|C2F7-QL#&8+q1KY<1P--U zm@_-Nl5`D>OphcWPG^nO+zD|y*|JEEJ0VVIjhfsEaXQ&j4BQEEI%|yQcS4-b+Vjbs z5T}!^Dgi9S>0~QB&|v`kE?i=jz7aUmX?gjSgZWWz#L#a7;VavY~+|fNkbdCkb=Ep|own9;_?l+io z%+r5R%m#z00z3`|g%chJLk*VK?RaKsJ|6OB2eRSze_^oPxt`1nc%z#K_VUDgqO~RUeO6JoeMpp6Ca08(Fre|3*DjHOP7Cp_8b zYp-Pv3vr(RTk%ea^L%ZD!S94P&)3EY+zD}>f2#-!ah`uWbH-Mtd{e{2OLM&ktGUSN z#K1(?!00VO(YZf7Fupw)nVc=`-x6R>{sI7++|1UC;ROIRxtZ-{%W;CiFzdn~gAH!G z`d5dGll{8@`;gjug*yTEA+-S-cLMt!k`rNpeGjRXmUnNMBIgV2PVStZ3wZZj%f&wb zYWwF!Cnmc2oan?fOP>{;m}coSqB9Pels+vwFIJUfAZ2zR_#7s(` z5S^GTiS6-%w;(1<`j~hpCQJIL=)`169}%6HEa}6d6Z0YctLVghNFNfNm=EcL%*h{n zcs>me|F!=AN#C<<{r|O1t*;~c|KD|%ogT+098V?d|Nmm&vOm~%zb(=7zb&sJ=l_3T zeX;eb<#U!NTOLaE|5u3q|2s_S=3h3yqPf@j9b?7#IHLc5m*H0ZyY=%VyWago|KHs7 z+LL}=vp-$s#~`K`2m0N;#pL#46#82-GecLq#k|a92H559@P(CYh0I)=#H!M?0(4mo z@S$&Yd&N248nALcn*!HPGe@g5uK=CI0$_N>DAyj?{lZj}{A;Ydi7HPk0I=|)7$I`= z>JZ1*M6Alw3IH;^Fat+a#PPVvDorauC$Rt*9#_=~S~+a>P->N&uJXhJfDP|d#tw3P z?YinDRi%jqSY~6+K6s%YxfkMO>ZPkZuK=i4DyS_fN-ArCNLi{ZgG&mRo|=|Ig~UsuyqdY)DQ zbW0V~mNZ2LYBPCK#W`8oEcegqy6=yaMcCCYPQCYO8kJnrb6m<(UPb z%nEW7tqAcYsj2KURi0S@@J}YUCiHZbXBGhMT9MpTS5_b!U6~07RaeD`Std8lEI`Q( z_(*QWQ&R&L7pY~lOm3c90DytqRPYWT8W})64mlxAm8TW}Tp;&UNO96yQ&q&OJhcEI z1GyC&Lp0$gs+Rhj25^DgD*d*mx=2@fVgW!FsV!{-6REAK>5Jf!M0OwkGU!g=ZE3Y!zxNKE>qV)yrO!PD@p2W&t|b27E2lKAC#y3QsHmyP8F6 zOVV2^-*wVHaox{^z z`Dk`E?%h@d=9W^1NL^`TVAL#q(KiOhu0CyGWY2Bz3__aEh~0fvJ+R%uxq*DPcO1IfSSmT{TO3)7hbISwz{rE+>+puez`%?xCYw(c zn3t$jomq4}q#oG*Y%VeEiEYLF(o=(+qeb=6F`Lp%#orWxk*iM|n45gfpN)z^^}zb( zr#rWbOSy2T^b!&x@Du%il@^oCA{9wB(5p`wn54jT#vB^~^}teteWZif-dR`@I}g&` zlg@+cGhw_nvo!d|7L%_&ZD40lY~WW9Y&f^nySnIJ&gZ4^NMi&fky40CwW*kufw8Mk z8JNp=o7;0XD*Ds|8y{Tm_xZd-%kx536gPQ~1v)(R+ZFVYNa zb|yBvqtX6>2}J~6SBG27V?*MlW?|$Zn@>0LAl<#6h|iskif;A5MtYXEy5=|bmpX?U z1M`pwyd5rjLJnF?HVeI?Y(Cu!n!U%)7??{vu-P8>+(z$2Z_nhQGB6(znU*3D0+YK_#~$9QXIvBl)8Pa7DioU?q7vGxByZEAfL(f|LZ^My{oeIHayMnNc{)N z`TxthcaZh}rlvpDyuN?Jg^4OX0YPWr;57vES;~pp+IvQv%dVT*yh^&t(+mJ|<7^gb zKGKy5^ENV&u;NoUGyGJQrWv5KS%BX-o7FQQW`M1u5Kh5FeBCS;o@W_=mssO$7AZXW zP!eaeYHv2FI{|$86;@w5=2->+A7`@^da#;+V^yAI0DxgOOOd@n6K=dpvkcIgWx$1* z+Cj1{LOtXo%(dyaDo-*1z%WrO=B%w(<*~SlDo-*1xW^J(8*;kJlMDc|g4kr`Sb8g} zk>CikOl+EDfD#+<8;Py50->oL)79Sk3Iq&d6vUPW7|K#gW0j-Ktnl$F%`rfE0{BR5 zm+)N6gP`MqV^yAH0Dytmid{LRLQXDlqRNvD04@-F#7k4?2<><>a;(ae3;;4P+bg}A zPmPvdh*+kaU%27=Tf1 zBeTP7geg>eZLlg5P&UiV<{1V6ADJyC!IlTd;tEy`xVE|*tMUv301V7lEP=@Y>T%Rp zjd_Lvzy)RxxfQ#8ieIq&EG=Py&(975WW;9SsSJnq_L! z`~tMo27IKpq6?G}j`%$W9INsK0{{%vrr%d8B@=f-)_$(0a+Ijj1Ot>PfD62+{ zW$lCRgsO;Dd4>T%25Ku7&^6UWqUx$|hydIZsV%kA@pX}|@(crjEK*w%h!Dr5no6Fk z(hLK%(+2!TYO4%KG=Zn9Ji!2b$SRmk7$T0P*k>$FpxekF=`%K5%ghn0(gXu^aToA` z*^1Oywa;Vm)hwH3V)Oh0fD6P{Xa>iU)>%jfWX-qRR6N04@-_GaM4XI5gG-&o2PT zKx~zF0jo;Y63aE5tn&N=$kCvSo?>-)mY1tlzi(k@X3dZ&;pX zc@)|Izhr(e(f`X5{l7nJ9x{H*SR&v5U!?kfAJVUr{r_*#rFF)pdr$bRKczcX<$EAt zB@5^*Zai|ag(|v~3XfmiEWcQ|svzJ3ox8-mPBMZpz^t3)=Z~uj0x+^!nt@d*+3~o^ zDpeJvn=%3S1UABYefb);^$;st}6(*Ky8mO zJg*n*SlmRF>I%{!2;c&>CqlmKtO+hG2*|+g>#N~Jb*(-G0bJm=a;i^TU8JjASP+m! zW~+#=X~UnXa$!NhKbhH@7?Q4XVL@0F7MV>KY!#G{)_zr*gP9ov<5ey!2>8Hkw>YLG z)j|=3w_4pSQ=1A4(nkh>f!Z|fHgOWWeAWc@evLN6Bwbce8+OX4At}F=HBDq~&vh1y1NM$d8^q8qqWkK3)1HKk=Yam~` z%B2NiV}M9*x@g~6dNLzUcMAwX)y*=wxwIhQH;`MPN*&>d-;>Err3ERu0T{?Fp3c&S zo2YVaLBIuaclku6V{OQ>D%TbSWFWUF)2IzMS*6;7bW8%cCy-kkcDl;d1p!+mH=&1^ za#kCDs!G)b*~cT_m(oaXxaag)Ph|B3BB`#0<#xBsJk z%>LK*SJ}(ZG5P$YHT(9!uB4+cMP95e8BK_!=D@OF+9ieVUj`c4VIT%o=;Q_7A+~ufF)#k zq~%6Sv-yYSubMw%e!%=j^DE3RFh7ONcg&av&0+JS%oofi(~nGFBiRk#WqOn8k4-N$ zJ=L^qN}GmFk25{ibkWq({L|)tYyM>OKQ-Ui{2HQRcz5$gbH?^e+mT(*bW zT3de6@|~8?wY%Mi)ny~g+1J+xu54IXDKd^ko^7Y!}$%70J*H1^h>xtRjd~ncfe3N8I6sJcw*S9Ao z*L}LDw;CRnp?g-G$*ccERFOY^)F-?H)Bek{agb_uR4JgYlgeU5Of2wtR)@ z;q_c_SAP#PbWIe!yIG=eWxRtLmZI*pg$ZAzkTPDAeq=gW*c)G)3J3SL&(RAGmiqRG zQjw%5VT>?CVt#UbZX?;ZYaF5mzK=`y24;x$^zM2$3Y$fpOEOG{4>p65Sl5uJ-*_k) zlA~Q?u27-4z7R1!of<;H^?|uvPp5xK{}O8O9r*oQT_o9I*qEUP*GewCxs;suW{i)L z4AZN=wXw`j&&X<*?g};VL;bpYX(;nMn~M=&W^2IJPye6oSs%*`Ze+K&Cg~0Nv5BI8 zq~ANTqN`HFRAzE$X>zK2G_0SZhQYz)QmntTCpD~l7&Y_-m*TzAV$j#Adk-~)qOsiK z+H7JVqkocQNUg?pdY32W_O|nemr}#BcR4%0I&cv7HqmxXEv*NVgQ1l%&ycQxeSq`iiX!WFKU8#s?etC7cOaDr#m6Udk=~Jy&+UhbxxK-4!x%MW z4i*L@o+*E~+rTjSwtn4P=@sL#@xkQ6a%gAU@Ca%cS;)Bt_tzqQUfqMJVKC{+bnZ@0 zul4Ic&J6Ya*t+|uA-uaWwz#^s7n#sKoElvDrJlHJ$rIevy<0LQ_qMmD5>sQjP|Wat zYFOXhn~Lwx4s0$PzQYWQ^Hbryt=*i**d@i5Tyw2|U?mp}F6{JfbVu~9 z)WEl_>fTK6n2XQm7Ti12qXF7V$wX>mdwIOD)H|Z5v`>z?#sP;_?Va)kM}tFq`p-#*=u|P*6>+Z*Y^>-uB}2xO zE%*ajzb{nK-&He^1iZyuAeT49m?0eU7hJh)rfA4BLnt2#1#_NYNdNenAsh5(gWjB1 z_gyKJj3?xE1-%8oFLS^y2n4(&7kj2y)c>ev@VoqBm$%?+`W7?z3q^m{?ajJ$lyDi3 zKcC6@Gnug0u*@+1zMMPnaRrONTf2iCUnu6ig^a$3UEt2S1I1j{@4k~=;0lC`K2LyL z@H1*~7s<($OfesJ>HmS=;V!!Telp1va241Eg}jUWAI^B2{-y_&f&MIc3P78B)%IKddveTLSKE&Rz7n-1@&|27fW@^M;BZUlZkD#_cV5 z2xP(UH7v3#yxy?e?+>^_hGu4P`*S{Dpy=`$wyD8Y^cVdZpReH3%`!tFP;dpa*?iXU zY-Y%Zy_rHF@6G8S#|*i=+w1aX+(mu3X7FU)t^zrGsQ*4Qgt9JQhL9(ye`n1Q4rjgD za51cZ1~ZV#B3uXtU3%I{W~62c5_XYTeqOu6WrHv84!CpKrf=2^0k^N{E_$+h+WTZ&u6!uy_ZQvSrf;w-T;$ov z1w#Iu{~4R+}y6uI3nGWnx2eoj18_Yy626*lne=1sCRL1 zpb!r37-_$m=ql`Vh4-WJt|jA7=`DFOwi?MT76uoM^aT)$&u?UlfvwDV+(@6#xN9%F zx(b-+^{zS_79?3A>KfE}+G&ViE+-v+N z$q)}m;tPxGxma%2_;-${HJxjyDCvsCNS}Adz2!;l^crbr91qX#M3URl`H@cJebPH2 zkt03A>c(ued&)@fm|k*EhEl%%o^|~zs39@5w!X7JyS&`1qdk6Nsw+j_m}A9>yy5E< zVj{RavNk@NoZL^*JNjKcJK=+oNHo;+L2Brk?48|>WheUl`WI3|*J`fMKbu|m?CL*7 z4V{ZCHX}0f9oJ)ps^<0+mZZW??NgzU}WWTkIj4bqXBXNMn{KR z@tyGG_P};@KN`_JSHg(T`jP{|+4#WZreTm8vVpRllv3P>k(g06%>0iFv>N%k+wkRD5SPWhjxK^7%G0ZUY?zM`tJE z^P65zVIZP!mWmOb9gNNO2gU=@!D)I&p*XoQFtyXwUC`5EOEj|>iEr&JcXx$!>-36g z@9bQ5F}jjmGu%cEi9&4JJALC*4;Fy&4}_w*LQ0Y5hOq{14}I zogGB~@5yBS|NZtwyTkT++f>WXTmFQs|9{VVNcR7K)Us=Ni22>-W%CWDx0n*mKWTnR zbGPw7Nd7-*|NoN>H|yV}U(i2D_cyvbnts{zN(Gy*!;rehw?DwC{>B+Bac2)%_b01r z12daeNnhi-f^f3FaR!T=<(E#qH_l+yj@v8N#MmkPKuz!|evRu20)E2` zmN4<74LEj<>I%{sEC7ZXte~)uN*iwC8W$D>T$sTc^@*}W+K^+{xUe7~!wiuST)H7+X%_{TH5F5Pef^U~M2 ztRP4$D3~qD9w=&oDkuoc4x}}hnN?2w8kZFWd}MY&Sd^gx^wjLa6M zG_~QzuTfb+x_uOIf!W>SPIqmvVPwmO-)#&rb&zmeK%yL>d3p6d#Nx`u+=lJbRGH7L|z zSy03*Q}Drc3IaZGTimu=2RP#AWLz#Q2)ICPpR&^?OgX8%iECU|5O9IoagTU>O>2p{ ztRNr*x5e{R+HjNCxU3-HYU1`uwUNHYWd#Adk=wM}R&0r(>^liRb&bjj(j_&(Z{)Ue zwOCulq_1&RLC{xeq&7R!C-%=|a3hJXh`qUNmb-1PDhT*MZMR~iBO?ghmd!G^xvC%l z1Gg2Mab$pFaTC|LsvzJ3wkNYIB|`u3IZ;0TV+6^ z2|0a@s|o^gBeN+v#KmH5C7-!wlKMTm$p`R7W-HEzXhTn51q<*7D2_F@4 z!Ph9QG-8&i&1D4vAE_2FMTnoP}aXpWQf|M%4P|KFzng#M}eE4l}C8KVFHhU@s;KmL~3HNFjEWO{OJ zJdxZBE<}OYL1Dz__g(e7JAyu;dh2HSQRD&xfD6P{_Stoa#`dh68FKm>7Z?C!k=81E z*XlsW;-{{0fdRl5X)Ov2Xai4Q;{pTgk!UKA?OAvERz+4zyOYHFB^t`!j*xha-~a#E zdk^r)lIm<&-D-7E2aRTSXJ=Qlv%4N(P11G_vj(FqjnXKzTIz8dS~-obz=U7{7e;L9Jd!oo%s!JB zV5jK;76$AVx)f2NW)+IHKnQ&SKt^64E5Mn3p)UZqhx1yC<)Jms?F)SYK-Tk`P^>XKs*EU%*?G^ZjNmgcVeH33$Twz zs4)=R`0;2JJGU?71pr&7wsL_;9-S>kJG(FB1pr@9ZFx3gz4Ag{0CqTKX492hy*2{J zufEASw$J1R*v<#w1G7WN10LOH`T~sF0DL&LtJgQPFXROP7O348G^2KP3C;nc4Ci) zQCbsKUTUKu`amF|#Yl5X7Shy;m9ZG~Cbi;N6Vc|`osp@U#(bjj1?c%F;cNOiQXi&SiiYrX>laS=vcft z$YxVgLu$p6W30G}W9;rhObpD?K8n&}G;cVe^l6{DV=I?O=l6Qz9pTKR!Ld-H zImvdN^^PgU>>8%tG5*&_b&N1hDB;~}?pVw2W;Q=L7VBI~8yt%UDXot3s?|Hjij|Ek zy<_~ZkLZ~4GCyICjmzeaT}}?B)@Bo%Z8s#{WEu`)3EGZT4mRi=D;Mh>mH0eN@NjBH#&Cc)QIVo0=O; zB$DaH)TA!m3k`o%)g;N}D;`LWDaG<|ul@B=9it3}Cma>K%pDsSw}uQJ&__*NP98%3 zmW%Z*#*2^Y*vTclJIx*I9NQbaJ{=9U&rTT~i_&|{NJTo&$BQM$Sn&}ZV;eCidqH=Y zJC+p}n+%T8XKt8f^wLw270aVyRMDQNzdovCbm--T@3D4s$6DtGh6Y3ZgIyiQJ{Cze zr`WEo|<@_j@_6XZEqi+SQ@6Aa`Gradq**Lyg=_*xmfQQ zFFvYcC!bQanmY#jL1vC6BF0fs*(+nBa0bWdud6sFzsHmp^a-ihV(u7h2uP0c<$pN| zmbxpzuK%NB+Fu{hF}B}zvccmi=8nOFFgiwGb8O!s&bGtKR20R^grw}4D6Tem=(D0k z`G&{I9Q%25$6!6s;Fz-b7gL5my<_EKy<@z%N{g8|cG7%oPd0Z9R)ZuD_`(v?pGU{k zVr4NB9n=2$h>o%4&J(m)dH?_Ar2qGwziPd$oNseZIcw>Tdk5XS|1H}8|EJntu6?Zi!}cZ8|9i9TsXwLte{l=~ zrbe)o#nQx;7irl9kj;E_%YIO-E&d8=LBNHTEd90y08l%c{T#>5>@#UWwlD;^u#|Nr zA?xUAQ#hqZm>{dCoznY4TM&?8DNELQ)^HDxL}s693(7SIMGc5xKfAlm!7_zea1=ShI?r+ZW1$Fn852($a}(CB>Ps;b@8~AMjC{gB5EG z+$^uU13oZYK4ew~sPJPTwt~=d1wtcvoDkd0T-Cv8j)phts$rP*UcgU%$8Ma zt>I?&g|Z;jxGJ-&w_R>uC<_9zf!RjQOlvj2x-XOk0pAj{t<+v93&O{Xf!WH3g@J0y zH;T#7$cs4x$M%J?Am9VDX`$#i!0COVEC|3rZ8i_okD-<-%#;P$ehJ_LwR_pj`N+WO zeIYCez`*SIu>z6VXTpMP%m&=O z3&bXk4S8~40XMTRR0RPSh&>XP4+dMUu}~ER$z<{AF$z<{Zd*Xl?F(H&Si_RJ&DNL9xLxhE_t^euncIMm+}5An(wejyaC%?p3IZ^2+nj>c za5MWtR}gT4+?iz3_)4HqS3~CC|0U)8e{0~2f#=cv|4*>{|L^t9`CQ&t)BXSNv-|)5 z+w(%t6Wkwn@47Fz-cR@c{m$1ruhf0J?!|SjbpQW19HH7z)Nal1=z#`aH|c@S~D3K$%D_M zkt+yY0l+p;J8no)KrW_geGOtDbmOo8bNu#YdOFmSsi zCSPczP+LGw7eH7*)EKxeU%s}6J5c~(0fAec+ZO7aD}b&@)B6C|AwvFR69rd6UR|5rkvBqttE5PQ|fREgc%adPr;-ngI zx*&uF02sJ!xE814>Q3^quEZ)F(#CBeEC9H`?Xi&lRJ4FNJQV4I5EcMr;I{rEf>qp! zf)Ew}-0IxsZksos8jV~*2nztV%GUU)YS=R%$GC z1ppbSZL&4PLs=p4yv7p+p(_Bm7O1V%`S57u_JythU>m4Sv+W8%CIbnu#2VY-T(iFr|5Yy<^TINceCqnTBkM#EM zul*A3|A*|Kw(r@`+umk-n$2DF$0zvyH+?iy5bGeVZS&KKrImO`ViuU)7BzgKQi{)L zGfDkO4AhFXJ}!g>02!Gr_eBlhP~3?E6BghL*rLYOm~9C=R}j(yP-g?PX-~b9^M}?w zTM*I$fUjq^$$Z3O<%P7sVrxr2J2|_RUAk@{Hg!vRaHYhS(dKwe9?P|2twDvf0N}%* zovHvJf3~W)nl@O0Nei%-0pP-*t-q*B9Z>@?1e>{`;${j$TL5r@+O0wT#YTZ#!4WNU zcR^?i05VXU9lpX3UrRNfC@^gSMs2{YPHpb?q0z_{y2|qrz&21j_QZ%hm(plpj<3cf zTM+63fNz1?7O0mi2z7zgNNhARpN`GX_Zz59cednL3#~4O=+LiBL9Limd#oVT1pptY zZMH;W0XSV?>H>`001VtVEMIFilcKE^^9pAQLS6uHf!kxoz$$O`~6aNDp0 zYY8_~5b^?m3*443^iglLgq$k~c>zE+Fq;N#lLhSR*X~S~A(Y#A3H1v*T@dO5fDg=;6JaYsw}LCw1ppU_ZP-w^gqtY{bpgNy zVrP;j>s*#m4ShehO%NK5$H z0@D{@)CPPj)UHmETtUbSz#U5iwN3WZsq%D{(y%_F6>IYmAuj;q{)1* zdL$+aOkIGD*?$F6slYMyC(c1^>V8s6XVs)iRftTqfc#2U^8ei-;%;9Y@7 z0?!XD2KocRz!}Qz_i6vz{J-yij(^7A?SH&K;QOZU6TUb3e#iHK?`gg^-(!3p?^nEk z?fp~lzIWGq)%7^ncU)brw>sbG{5$u3F2Czj&PO|+;XdtrsR(&`>-E>`$Ldq{=RH61e9`kh&nrDI@T_=-JWZ|rTYEYGE9`|s-G#^K(4 ze6+i-ZD$_(xaX#91loI^EgNA}^E_8J!g%U=rfh`4-198i2!n&?IkFK(I?qGgIM~`U zw=lIew73DCzy5aF2!7T#$wu(A{+w(CKkM(5jo@efS=k7F*54)@!O!|TWFz=lf1Vo$ z#%3pO%w*%OQ{d;BIoSw)o>`EM;OCiH*$94~S(1(5=b35Q2!5WKk&WQznR(d=ex6z6 z#+Hq#$iRG8dnN^bdOj!{!B5YJWh40M`77B7etJGC8^KS{`(-2e>G^P(U$g=l_p+WFy<5Ei=7=?*{$A=CjOgXT$#^AMzZ6n z%lUyOURy9OPvyHpS61f3iJqqS$-g<(+d8t;+8XKKj5fX3y-;&!#gSKja&Tm8cV&5c zESjEcdbe!6G7#^c>RKG#$oDn9OEzwF&uv^ApUqQ-x~6x^#*vxv<>k@X-rDu~rgzB3 z_O^6;c6WVnH@({QcG=joxg3lQc5JQ94K@9xY}_90SX$Uic1HFVo8BfHcM>xzJL@-g zQ^B65x5~!tE7RjE*Saz{X7`%jA{+a=GqLS(&+_8tPScxZ<3#WH)Iwt9S}?ob^cS+R zeP-%fTmO~zE7K!QZ<3AEdlS>M`D-H+;cU|zW#dqPY&tkUJ2Kh3)b!`Fac{JJwUhEq z4$k*9y@A@&dV6lS477~zZ1(L;jW+!$gS{48T-}Ofvx{3J&;?yJvJtwV%Pt$C3p#%y z8=(uj9I_F*pz}wv5xSuB$FdQ+pvxv3p$ocdnQ?iqwPj;)xM#J$8~k*2V-V1xi{RColLAup5rqNFpk_9TMGAXFO7^$ zpSxSG&`|5f{AzxswPh@J?t*OW@9p2)9=|@{Hr;ye9@%)gXJD?Ydv5*4$iO*1H-X>0 zoS2{9jdiwN-tIcbCre=L2xfxW(b3iG+Xr|0KuH!lZ{);?cp1l;AqcY*!f?w5!mPafoueVIsaQW0>PZ$k&Qqw=XYfz5X|{~ z*$4!4{!lh{Mpox~Ter3shFhH9=Em&MME~{csh#Bz1mVo*Wh1z9=8LisTsiYu*$A$j z`J8M7SI&GvHi9c>{)rpMv+YwG@yk8CJy6>k^%W_M&?+_Rn^zcNOsG-cpTY=!)~IiL zVFW*G)c2<_f}b_&n^zdY&l>e@FO1-4jXH@K9+{blj}4`=dGPbhAM+pxBlvmd^|BHC zJo8%F2!5VXM`{5Jex7+X*Z*s;r2qFG$ERw)R$FU7XS=Vaz0!2-!MU4xRUF~=+pb=` zc=7(4n%i%`=&q^BPg45d*~uWCtfi$Trh*WPj0VG`p?xWwXr^S$m5Z4;g7nudZKFM7 z9ajc>21c*a0n+AZkWgb0`hSEIOg$mlOsS=Vr1lg^#!1E`5y_3UuFnVeR$9Y5+iRn% z(XIZ?$nMsLUR#Ei?Px1buT;VpSNXrYmzTH4W5KEMw%~&^H=kB^HKTKNHX6()XHs+- z*373Q(;hKIfEOEFrDB7tp)jSH4yGcZSd=*$kEN24L_8IXCQ`AmB}Yl+j?O^o#o#JA zI(PG_Wk>aGN)m%J@nk5*wqnqu)TIdBHa4^=6r-bBvBA-JBovP%V{~mTPU#z|O+!IN zaVydSt}4rf6^czgJ{(R>ho|X$hmoi$I%jZ5vE(ZIYlEwiP%0IRCrRgl8j+2@DPnUd zOaunO$3XlH%5m8h>Ldg@T@Q^C%gt=qgOTF1}WMwwiZ}cFRqU(L-CMs)6=-9ZqV^lj&B9>}y#tj}CGI2KAaN7xBjy<_EKy<@!isE*N8CVDa|j+r~Q+tSl^ zV{v+z@@5+x3&)xx31xFj?-(mqj_>Im<9}VnF}aT^^5-XXEN$-Cz|v;-SbiWf&>{=; zhLsr&&AAMYm5cR`@!~3u$y8LtGxTq75+tU6#}un6Yb5)>=3p>bc~l%VcWiy(+E`!5 z)bRY$hM5N;wo|HaG4de9Zq6DUqra}=n4!gJOZkL@$4CXo!ppJowi|s*Z8waL#hMdh z5~Gfa)R0=St`WHZn0r=$KaT)!7=3&GuxQfw^+GY?-(yWs$(QzrGFD2 z*|8yW$Ka5q!7=4XC6gV|JI0EYlOTG>_+M9XOzva!-4i*=HZS+<8w_WzZga@)iF6o9?g-fVB=X94)W`EgDJ z9Ce@H{XDiiKkr^}_qp$LpQiH!pK`sG&J8?BCkMLde1YHj4d>s{`GS)38GKKloh^8@ z(=E;f*uHK1r0p&IWI*Lp0hLxZ{$DO<%R2N48lMR!CMTySVL|8?zJHMq&!&QtsYEIn zMk8N|10$>!-NM)KzzFMxw|s{GW+)V!qVJd4U=(5bhG$+F5ti=~f)Qc)E@3_#o6b+g z^7&K*VfjV_7!j5)e1Q>RU#HeKG82wZ#%5wV*jLL&g#9Dgh_J8X#&9Ybn+Z-$=4Y|C ze4`;Rj0nrO3&4o5e4_!{6QBGs|4q@@_~ehck>-xHG7=2tXVJ*_sPmCXbSgPH8BGSE zwx{`~IT+zLPaB>D*wcKYp1zdh)3InIm`nn!{UvIJ%0_^-|DkLISoa?$r*&5myHNJCmRu#pUTLG zCqv29>{NVe8enfxX(EgOdrSE@wI>1g7VS5a)5&CFDx5%q1x~9KDjNYd&?p-LHgHNa zP9|cLiO3X=3Eof0Mu7GHooobH@84?1NH7tZiAD1e1p6yxBf#2UAsYeK{&Lkw9h=rT z^RqbAoYt67HUjKvjR|EVz@FBa5RV08sbFLVhw(ao93~$w8v(YCAEW^zz}8KvwT;cp z(!PE~*UMaAk&OWB`VZL%u&ys_#^_XNI!rqT7+ZB1r}bae2(Wf_7#Bu>wZEzi8%oVi zM`p0e0$PNWWo2dr*uZ1tCjmC_Xw?{+3dLuqCSxJ2t=6;4Mu4?X$WH>SeOxt?aM5fu z9M{$MbW%0~?CFGT1lZGYZVb)R4Tn69G&q8t`nYTa*i(Nk8v*vz$24P*mZ_u3IKtZ1 zF(EXo83ER=jtRmDuy%D!2+d5>Mou)9$Ie?`S*>r%&r&{RB>oC;3|F$ivch9obH0PE(5J-`UCZhmehADWC$ zPQ~NXQ&T{&Q_oR@P&NYWsRv~vz@B=xYRpHcBazu)3VYe<9oY!5r?+Jzz@FYxjmc<4 zdGRLVSlidgMu0t~P0-3u0_-WZXNMBg)6>e^41?gdsjy`uz`AQ>Bfz@UX*0nFX*{6~ zNT}`U2g*;XMu0v24A}^QG*d+PiYm3%}z!m$=R^(?V!#WLuDht)~Pc_VFcJZt=mT; z%H|dAR$^?`u`g6M0_=Qtor>gV z;?of%SimP60XE>3jQ|^{SB+ECp-3>24`DA0Xca0O5mu{E*@&>}XcC;FiB@nX8cSeo z@6>)%GXm`C^Rf|OPdD-V|F5ZOcxA(2;Ol|k421ok@;}@E7~jWyTfSSpf8iak|8f1x z>Hhz>J-_R@pU&Su;J(N8LD!n=ob#Q|r;+~uOY6EEUw7;~o?QDcwa=~nS^HnvSL|o$ z{{OViSM!?x+3)9EL1-bsDmxr@;43i73OM~Y{e@<>m@Z%I2w&pGd}TFV5Xl7q9}aLB zve9b*6@E^`70Cqv7h2GuOJWH(QxM4o02fZ9WN3e`Le(l1Yc&?h1ppaNtHhLjrz1x= zQxM4o02ka*bdc~mf;kI{^Qg}gWqc+Pfz(#Gr2Wp4Rxm^u7T@dL702sI(K30V@1(99=aDm$+ zbo{A;&lQTbUM|uL05XuMV?4Hcu0LZ{>+JToRIu;_4 zDX`=MObh{Vt1`QKEOG^rS^$s@%nlpX7A>`5w!l&gaAphg>6vXh)3y+nTtQ?OfU_0` zW-I3)3}Lq*BR5tMnFRnJnQhR^wIr98E{Mzm01V7FtwoeA$MY;ly_kTC= zLw|Q5*bwv2*xq8c%WvG@ueP%f_xyM1{&U@flde;+C6;UX%Wa*b!^=C@ zmf%MHdA>&tMz~Rbp5OTZBV3w4&#!fW5iZT2=PRq%7WO(a^Ha0SdmC_L_ribk3JK%% zOt7<~d!%P|cmBc;nQ^7FXD&WAHW0j)g035QnQVkHF2J|B;7Q(U^ZZx=gbzdz&cELGrfT<5!4()b&wN#O z1qP2Z-;#|mY@PWJ*$9C@!*|c%HzDw6zAirrfj{$2ZcKEhAUOZGY=j^<`IR=PEd;^I@7RG6g5dmD z85V-z{CC+1tGUiEaAR;`YwN~H>-Ojkh|p>ENnwN_oc^->Bn08K8X@r{1mU#GTVaGC zoK^!bj1Yv=s-MCLK{&0(Ru~}&r+G)Zw!AbN8M?OCzOamb^3{1TqMv@|Cm7LBzH|>p z^s_;J68&_`M)cDo8_`dnY(zf;+&Fi=y=$#yW@~5+{B-cZUlT^~)4|7EFoK^BHGJYp z@YC@P`8UB&2X7UC1wS2}Ltq3y9emUTBlzjy!`ro~`L@t-*XZ*61o+w5#499>;AbP> z`G6~ii zOJ<{OBAy06eSD|+nlOT&e!hVXM)1?ej{<@b{Pgpa17L&-`R!_jhSPJiQ)``9TA@Ox z)NY?C8=*p{)cz@qP@z+5&lX0g&?&X^3L^ym6o2Vl6GjO9DRndvMhN^Vb$Am-@blEy z{LiV`Jl>4)_)qcJiaGU4Yc#zOnOeG*Ubvw8DU6_CazXV|828pg>!ZPe>BWhm3qSC` zt=dEsCi#oQtI^)&mA2lQ@eBXe@Twy`2`V@jzAL)|DmWLoS^@m#mEP=?vDuc(v)%0% zxU2veL6PRdf6B1ElkuhOjda`Ph0p~)GlnNYk>&!Q!h&(Ab3D}9mucPET)&{ckwo}F zuI7TuK4Ap8nhWY%P#A}I#|HXFW=0n`S1+iH7sl(E)%B^>*1d^q?H5$`3FE*O3c_4? zV{ATpLG4JwxD#F4i+3!I<>&h@XnmzTCO~)aso!N{On~m-`;ppt%TGdgP`2r7GRNm` z#U~Zu$JNZ$G`xiJ|NU#=*8)-hXZ#QOALV<$Z`SAYzQKFdTU-C?`d-ghJ-_OSxc|}p zp!>0|kGs~K-*vv&*_pN4@7Riytr$x3zZbB)TL;uImz;^p+{OV$DKI1s4VKTjU2#*Se3UZ^&qqw%`f$v z6>HIA`TcmbM4b)MiqVy5I#f@G2jct=I9-0H1MATUWsyo8Gg>15UtV0-hiHYBby<_D zE8A&i#oVLJ!QJJZ0lW-^Wwfg#40ZLLh^`Kgy{miAy%wdi`AVXRsz>TtSD82 z5t-5h>goj{AFQjufEN@NSn3&jA8m9j@> zXlAYxU{wHv0}LdZ)Ib!z^xi9P1!(?OgXh_ zD9~cXvIz2631ma8LZq!i*PuwIBBAubU?N0>r84S^$K+M+K%^K1(E^xI6RVU%O2$oN zu4KTvC?03fin(WF2O`BF;KStExM{2*&@Wd8P9KOAg8+<;EN>cH!p$6r6oY^ZbDs>| zKB`c)3dKAW=>w5s5Rl=M$gmY-vBoULAfqMV8fj@3%tLFOI}iy50U0KV^f)7jVbj=B z&95G?1cNMVH{inzl@76)Wu&)+o;wg320^w$rZ$t5Foc1rQ^>obCv=j5)1+`5Syuj=;>zx zH*>%e3^HN^ZZ%?CK+YYA^n!pa6FV3&CJnX}>Z=DVy&xkt;9DWKrP_=9f*@OBAhseY zBDJTgPGa0kW)de_f~EtJUl8zt*le1F?P(FWR+*Qv_cGuDu}yNN@rqS&gLjzBfygfi zxIpaDaI%uiha#sBM1Da)24*MZmyD%IOdQmdzkL7~m|gz%IdYV91(9D6unpX%V_?UM z$<>0$F9`U0Zkr!sv(T2x_y4^$@2F{be#7Gfe;1hW|H%I`|Kojs&Z3Op! z>YwxhOHs$Cp3`&CNrj9vJ7pd#=iP>2K zr`wizohEJ)6;jV)f-sVwtXLZlMCv-gg9%T+#COjT1fomaF38uYcK&E0XR!^~NYIfzky?Qkgg=uSDv+{B&@J z`ZFCnM+FFWR#ys2teIW_M!Kp4wGgW?k-|yVrCai;VDh+Y#v->~J|7HCh9>C>GG5eV2{?_RqJ=Xvhmz`x zJ#)Zv>+w(tTnnM1f!z$5iZxoX%zB(w0@)aHIAx%har1hyesF(OnnNViE7G1dtw zV<(Ajlc+5X@yC4+vTS{PY@dzHCTAo0$W za+EEqNyw~Nixtb#$73as4Y7(UE5=IFY8s;0oPj!_B797Wz$9MHn!~vFSD~2ya{7R! z@Kfgu)6>b|beQs-!-u?KZ-6=lRo!gBV#OSH;((>@mzl5RJQ zS&B%#`o5YtVCntTepnW^w-hasGdIJgVjivS1D4{CzY9g3KbP;1| zhl~D2BiZq&rF{Q4)?BM;xHa&2e~WL-yHx+6r|5pI>pjj-)qSLC}=99{)F{37EUNUUpQkKAxJTU!01krj+-l!6TCQ zuUu?!l>XY_D2)q=AgvV8W?m=}W1fbnkI~0*Fr{=Vi<;a@q5!>iYh_p0D!57tWb~0t za_=UM7j6z2^w(+3(uyTlS+VRYB|o6d57B6Xl0Z;e0A;A9H))vmHY4aTCZb#=zV#>BHyX(z&3tIpnBEW4`D{~%VjOkEYi=Hm59 zKCxn>tEq_WD$Q$YJW3FI>7Ao3QY*?ZG^3+QiZ%YS*Q&+*4|6vc%AV?9t72Ws%u~L2 zW@uDiZ19wdWlw1Vke1_9!Bi|2kH^_3kn#l-A%Qz(#VdYAgbd5a~QmkOT~sAt|mLbfYmzdEF!|Hz`dYta&izXH1t#YAf+q$kr>UEl$R@WH4#%jvS^DWN@{JEUNkKG zj+CjO@;h~=f~#Ul#>`c|Ze(zk7aLrqVnd_SNzw?NK&8A&v^=5Ae?xSdQ29UVq%rEc z7F|`cO@uA-ce?DVp1)!}#ptTG>?66V6-%zNVuP#k1f4V{r9Ik=pmz&<(S+zUGR=o+ z898FjQ~sXOOXF8+)Y+R;6+9KIA!eTPB^!gMyx8C=6&pN_5qXslw-inA`N827jl(o; zQce#?tW6&1JwuWNR%gGHWl!}zRjgzfJ=GRmBu}+s$x~J=drBKlVOoZu_b08evClVU zf<)T_G;^Tkq_E{zYKonsubwd#M@W@xAnVh|NpZ4 zTkc)=1=sss3oeiIby5#o5VpGr2RFj8OQ9(3@hfjavtmy0%mI^hV=IM#3+p-R zN}(CVp~$%dq2~t3`XeDUz$i1k3P2T#dCjjLFg-VR+zIgYM?y@_@o8~U))-8jQrDt# z2TauM9_4((M$c+`yYI%r)E{EGy=xm6;8dCe0VvzeS5V>aOHnQd~|NsCLR zALZz|119RmnBCn&R|BT|mzJ+Z49pH1YadsXLiv{wGDR!a7|6ukSbG9KFk2Qz3TpsT zRJ39ZS7^HdE-+gbJhg_KIbhmuj36usdab_d&P#!nan4XrjtTb`J6yNyvkidmlRoYCW{SCA2Ay%wKi>bZwXbEgXw3I_! z^nn+NQbu6qD~}}fX_+Fyu2~&#e<*#xq~Lh8#3l_4J#0ubG&CK=Gz%gXYs_L2aI7Qe z1ujI(e494ZoMLKk$M8)6luC*qXSMVVW(FX9mGK+=L1eP%?Ddk>1K z#PL{(eIAGvCA>9Z7T@$SdZgX#nmAw@ahzEK7h+Y3S>a~dY%=~NE7qdLbmDll1hyes zaayFMqo)+HC|fE~zNRVlHc^WP@?-WxrX$CrCANwnT4vj{%1)3nXO^PHiZy02{W#7n zfeX*)3-n5QU>HqG`Z>k3=&p)+>$GK|tH^znjK?|VYcy6wK2 zy5FgLpzdjPZFP^S^EkfZ_-n_Xl8*n7J!-$r_5<5zZSS2vf~~LidhJ+ks`kA7 zC-yHob{$t8Pj=ixS^%GRzKzuTo*y_9=npIgg3jM}KF2xZ>~=oh8L0ba-6!haHS^r-+TYU*Wmq@x7~ZMx4!v@Ns>juZ;tZ@bU_zJ^x?-WB*^ z!*Ii@{gv)j_pm$WKIi(O>vOJmxgK#n-?ixKcLiN%0_Xhy?R$d%7T;g`{=xS>+iCyj z{qLr`4!`7I@(=h!zCZBYB*lZCDvK6OqG4sRcXn%TG`ZLxo$75JS!!*K^lwJ*;95j0 zolBQn`j^|Yt$V1d@htwNFfLE!yFyo1=EI4e3pZsWz+QNcY#dxl4Gyg>Y%UIMTzJr6 z9NF4kS)Lw?rspm^TQ;JI#SPimu{S%Kjx0>}U%Pzaxw5gnE#02oT_4;{uU>ejY8>os zi>KQ%*IQs#@Bh4Pgl^~mC)o&n$NxEQ6tRU0-N6NXAn>4ec*kAxlMvfGE^y=J(fPfe zctX(2Cx?%Qfpgo&z;1~%Fg^wRyIO~{9llbz#;z^RbyFB6S_m-6|xb!L*P}i5xPU*<+2g{ z47{2fhnKeo<6HURP#09l!Sm&;3{LcJuS8qhC$^zN4e#Vn3L{jg;oY(kD%9`}*$5SC z;EG@Hn-KVhzm%VZz&E^IHbUSV-X$Bs&xZGKqu>zu>Agobf}h@tvJw3B@}XvxE)zws zk1vmg=D<()lh~7B1V7z8)fyPVPj^Co68v;ul8xY}`{%eZ5*v-or(^T;{pe?lY(ziX zWFz|d6xj%VdOKtz`00JJYy>~OKQ9}>Pj9Pi1V6p)%(${JvayyJ%V(yuP+Pm&vxRZK zH#;Ai*^I3uw(b8cKRK8fTo@df-%O51>}vm<-ku(Ao$Jl4Y(e-u>X0go5I)bJaadu5 z3VGD=Rv00CoC1pFXt<3M2UGdz)M#@YAP`3F1lc)29wn!U%r))In-=eQ9iP zBAS`l0kP#dSlCJR_lV!riz@{=G!eCvO6qZp~d zPe)odLWCT{vJqnI7?O?9WR4Np2uWl|8};o$qdS;vtOCzwREBe-nD<-D*b=PeT8? zTP3CVFo2JdJGdAtd>Fvw^^UXrH^r0i0d&W$vJoU3@3@7U@g$PuP$Bp*xP$A;f)PF` z?zl~^(4hF1yMwFX!jtfEc?TD|1tWYS-f^D8is?Q0+4O2<|NnH&?Ue*QE28>t65pWbKb@A8qfmU8g_#Kl;yu>4zNZA&k3fYA#;9c>n!1x8Huz zT~m{u*@#7UGoxb*W3;HkPFv8iq)_ToFnK8!Y^DXI%EjyuhV<8MgZ)?fIz~I%XIfkK zX1cb6GrLpS#YB3gtz~PuV=24V5xz3GyS<#cLbpGaoF`8V>Cd22F`X`nKGEXgsPsd% z=8i4L_O6U}wQVho+>ksV-{`yuyK;{Hs>O=G=$Q7`M|6zNBZOnRGfzi$%x>;j|Hj~K zWmD^YMwj=3EU%*8F;=Xs)9D@Ke|=QPlryF$bIfM$*ig&Bz*6hX;`N0ggJYy{ zMwgi?7waA4e|=QP=om))WRBICJ2n=+F*v=~v9LEGwOA;4DIB2-Im&`Fw3t?`EOUZm zT5;&8jv0<>9hHhVpJndY-0<+s#=!86)$oA9gD7o`B$SgJddFC?a6JVn9Z+R2v3xF=4}UaXmW$Cbt@x;pDJKa}M8%sAm^-#X zTPb6kT~p(O8KYy$CZ~yGO0mLF$uaiVM|F($Pfj-6-+YF-V>=ULtt%6ek?g>X-Z4ch zHmKfo1u9}OI94t`l4CR^CQdrs-+a2cWBr-F&d%8I{8X#bYxEw3Xa|>Fv^6PKw%_!Q z@xMNzW6FVm6Smk5bH{q3^Vc@J$1|Jjt47C?&2(YOyjU7MsKw|s5&iWM9iv0Z;gb#b zH}}jP8(bUS*xK5gY@akb7N#@Q;{FdGJjer9EX_Q$;^a{sqnU^P4DykO`(1O##x4&p zudVOKwpOK4f~rcw#&jXc&|<7uc?;;N$p89?j**V1bmaKRj_sH`2IoE{5BT9%I`g6L zdTO!UV%lFH(J^JNs6QWnWXHD69fM}v{~urT z`kIDUGztOEBb zckN6e&nBOS04wuY zIaefGsNh&~8DCWrNA`^a>YYfyTDFnI8ScpWX$YkH;8dsyX1>{^&$ht!;WNIt-B92w_ zY>~;jv(w{%FH^gt{WxLC6`8aW!@$joM6A4YuokYR5Xj`XUqnCWOi8j zST{qcP^|F;6yC+B88F*q&{n>@s#G{r1ci5j3(Ou#l4{JcYRnYg8M7f2$ZTc0cjQP+ z6q&L+JDUi&!0hr#&Ld;zibB^Nuw`x&Je0>?nXWtIHsD*~c6IPvk%_xAZo@~e zf!oRls3GvmCoWqL)W?h$Yupwh?|_forn8xHi&_9q7lp_>00Xxboj-{w7H~5~A@UBm z!0k>_>NpN^y2wP{8Mgr$xLq-p6@HF~I8$We?rhWsT;R6pgv3HDaz!ER4#);($4E7& zLKQ0%^O|2RGGTW%Apv|nv(0X^@zs@z;o|7IB9nJ#)P`janc8d#!ca|RHN)g3%8NB> zGnscbYy&=0+oZ!=03Izem3MZU9e{z_#(AU#*i5meJkd^T!B z-SylyxzA=PFu8-Lmn#noT{5-VB9zpid_BwX5vUcb)IPYO;4^9iK2qE8QKllu1A$h| zfzt)PnPz;8Jsqyey1d%OKz_IZ1w?aj7{n*XkO@yR~_b44b?&nVn4c98WHrgbISl9#@8 zgDFK5HpK4pKuF5PJgC_s6XNHSYJp#k!etbFis=Ts;YXDL< zgW1ZozVf_SWm=Jm?lYzVK2TWx_M!?}z#T0z$$d6B11>W7IMp31GCh6P;{X;2+%DgZ zwpQPCkqPR{ae%QoDs@?FxD!Ptrq9M^sBo3B*&24P$n^4MZWxHIXwV!d*jI~8H=oTr zpzeBNo9IJWtv%DuXSIi80tRL)Tlo6g^V0x|h>LFGS}s<{x*}7^=kpG63;~!OVzTeh zH_8Zy0*@A%L_VK)2wB@M8npG&)`nb@)2V~&3ymDi$ z#uG)Rf6wO~A`n%$Z4EnDWD58)I}F@bvY%FPzCtmN$<-p$xo6ylnCQ7}GN-m$d!}~J zY7Zwx4BS>uaTuzp90-x~9?{S8VvXBO^PX`V@R8f>$dI1f7J$=5p=l4mz-{?6RI6D9 zKh%5LV@0NEFIO1I-7jY()PRl6i;+kdnWQ}%x1qwoZ6!+ye&1TdohUNFdd6+QtB9oYx*uHD2FLk*UcuY6C1#yMrYF){U-~kkiF`%ip(v4AhnvmCB(!w8j&~$0)dr z+JI|;+SOYxSA4XBEwjTwZCV1BUs;x7k}W<;!DrNly6dTJTnVujm|XE~5si!vE zGd0;*vas*XzyDud)9^?`U*JCjzZ+=tf64z``u_i*Z{2sB_Z{9judDu#===X`o`UD+ z-2d!;f&1~UkGih88l7);KGo^2dtKe2<6Dm3bR=uPQ2YGa`|SVAzHPsqzW;N!x|&y? z?E7DOI#Xn8Abg%ZurZvP>|5;aoCa2B;_~WBFsLX2GW{DQd%0M9bqR&RF@X%MX2~w# z6;lS#v$|Z&aVLsQVUW+W1#T5qmq8B2&J~5mAkyz-AJIY`_M59I#nVLw$={ z08ST$#vlO0fX$LW9vOG6$TSA!3In%?49ggnB9Sf%i9x6^Qd@fWl|y-Ggfm4UF$lOo zZR4hlHRN1TNDKn9f!K6_`B*j27Ma8#BR1e$Ahrd5|*cIw~ zIBcdU6b1nncs-&B#q0aBrAVZULSYb)f!OkfZrNk=pVPAZ6q&*x8?ylyh;6nfV+}i3 z6dHqot*16)2c@SuMog|2rn^e3}w& zHX#9AAa{loz|4^={Gck#l`b+ZLAl02ZkD0YESBa!r-pc<$aDl5xuM3@$!#GTxgt{v zl<6UpTR9&mEhJcL#cYu&2C{J*>aHiZadAWgKRn>MA`=Z{m4{oHGPl_cNh!kovZbLt zv|>KIri(%v5b%N9hGAO+sPJLHJ&Ik**`{Yz^z7YOLfi_ned;?4w>4-4p|Y~THUV}nY5p*`@PXUxDxRJxmT-lRAK(JF z+0DNr|C2NV&YEAg z+1XA^cW$TWugBMj(=?}IxASSug+4;UA<81FOgc@9mDe>~wkiL0mCH7Z1C#Mcdr$Y) zPMY6?qN^tQ>|;m09`(?z=8kQ*Of9T#4zJDZ4jDY4c|IjLG%aQal=P1AzdovCw5xkU z$8IrqtZ%5JyKg9!zP!65c@Vl3N>Ju)<&z&$ zwOBU1HYVLT4~7&f@&w#^$5^p480#J5e|=QPPJC(fq0{D$ZMSx|%nYW(ozo*y(KMJ!PDsU5=8mlhNiE3(dcg&0R;Vn1qho5ZbbncS9kRbZs$-OX@`Nqc zVD8w&%2Xn;xZSbQ)@|@05~0CE9u-rUlw!lE$cw|NBRWQ>D5dLmM;`72=8mn8Zmy1u zPb}i&Gk0tt9!w3p%n_kIE6qWiI7K3Bu z;-fl7x93i#5%7?=f@6vJW^6p$*S6fMcPva(D!O55&%4xLG0P?5~gLn4-gRva9qDdCVP~&a}nm zGwlo6mL7v+bi_N%4lC&$W5v>NPhsGHeRRi8`W|zeJ2sN<+g$5xn;W>1MaSrUOK+w~ zb4o9}R4!%`IOP^A7e}iN_j&~|?6jd{?6XDL$Yjfj&|>s`!iwdY zhgux1(qab3h>9oE;dsbt?ilQ}7#vgfRVc%#uIs6LMeOxfZZQ@H{?|u!Oxa01iTFYK zp*nNNV4Yp^fNx{4rDbd}wOD>ZYkz$t$M_`pB+_Q}fipGFv4v{<-=%y1Z}b1Y|E7P= z-|N56f5!Jc-#_}^;d_bixpWht*VpW8^nTm>N%y+#mjXfCfNjYZ^1j9Uu=m;CDQ~Cu zv0h*O*Gc)m-}#U3JDmUJ8g%{0bt~l#{PX%^{nP7zvA(7LQS~mmL-0}0>pj2a+4f9$ ze$I23JK_3*YuWX3*Lz&Q?6JH5#r;?ASG#}B{sH?R*?-l(W*@P~8)9`Gbw68sq2Wsn z?{9b&>HVK;SZx@l^9BEH`@HSlwwJj_UEx}r{h#UP!MG#mc#7kq!&&>k9dB?PIKEbU zf8d97pW$7B&jlWFzTNqU&WD_H&dbgxI#1R8XWjp*dvo23>z-9NS^JUN*VX=}b&8ee5C5422)d<&i8fAZS+iZgnK{$^L&qN1Od$R-Leq`Fwb|%Mi9U}-^q+K?b+q< zLNYkfAA+T-z_Vo|th)uC!;O*6{LsSI-qN)YtQpz=RW_oe^1sPOlvMr~ZVZM~SN3+V z@3qDO))tbD0BZ}&Mu4>inQ?kMGe0r3do7smft9l}KbDQK4tPtAY=jD(`4Rt35k4>m zo+%rzU0FURY&rY?O__gvMKBBQT+nOQFt;baoB3w$DuurohkIU*b;+ zBdk2vsudDOs8Fp+FkyrW)$%M7@S9Mf+ULu)h2LyEC07U{RQo*H2<=&`Hkk+?_}R!6 zR-r=BDz!Y_!;E+mU>i^K-xN&f?z=YHacygDdOUdHC$h0?Xd=8kzOlEqICz2cb|ycQ z-pF@sUmok;9!<};q_dr?d)Lo$wQn$9UyLlKx_71$*H_PSop3O2?6%JKjO>n&gwtnv z?f@{Z4bB8t=Q7d3%=B5Fv;mCE0|S$h&5f<0)rGS>B>@=c+q08v*O%tk+o#X+>i`(@GYg^J;l+`3c=;?>QU@dSm9sD75fVXw@SXi5*$Ck~%hMnL zZ0Gv&TyINPvU_mr>?`FbTW9uG($T*7SliH9F3>)`m|c%;_U=wx$wL3UlXD1+AaZ;s z=PejvjK5Q*i5N|Qw}EG{3c-``0=Sb?b9!rLDixfJXIDGnH_!hXe^MCXH_!j7Yy{Zz zFO-e=UU`9RgjPBKE8Hj|1W(?{dp5WNPu|JL1aJjnd;UcX7G75{U<4lEzbW3I_+&3P ziWdNM-dpUl5dwdP3$(+l1Ag-i*I)-D3{q!!=LI7SQn%RnZ?4DJTL)5?Q>qeF%TKO3FgxV9H=n{T>HMs01V5esAREC?=jUZ3`04zVYy>}@pO%f_r}Hzi5&U$1jvMnW zo8fCit*dKY;Ad^0Yy>}R2V^7oS*!L>0SkWCUXh;!KWnv_ak)a^XYFPAN$|6_Up9iD zwS!HLix+Lv+0B_$I@Lb4wF7=WLAHUL&9V)=e7tM}CxfyLe0;2I0~a4B+rYyo$~JKD zKJL6&#sU9)dQ2W^yHd zy))mocVl&`dtj(%sI_O{p7Z=kVchHMxw3V+dw6bU?;fshKO^SS0DJd0*^^*|SL5B^ zkd5$ay!-325ngb2e@!;R3-0c(a-*2iyK4CP|JT;g*Y!}~n}Od7L}(r0LI1tJ zkNbA${QsN16ZJo-e?@)2=R2N3?4{@;h_%l(|~?Y3E)zvi_SX>>e8t|Tr)z%o0qmoLF6OW^e1;ADupn$9x&niZ?3 zYfDUAkev(xeCUu|(A^B7!tbfav`Ru<5P+e>R;<~fxS7)3jtus}Cs8Foc zSf~pEGK@czdGZ(`&Xg{g)fh%6B9AC8+T32i~ZJ(SoQ^5L<_m4vn+ARCBH=R7LJ`tX`xEir9DcKQ(T^~5$&i_mI+ zIC`!m#06oaO=dRR1T!*4*-w*(a^+`PF=yadNr(#qJ}{fM7LEg)E(vi#00wHymyooY znY4mZVJ-7{Nr(#qE>L?cAzz}@kPi<>%<-w5`YojX@ z7i6P0-~+eiOJN$Wk%A0YrC_=wv;_edsV!Ywu!fr{32i~Z1!@n*Qx&RKEfPXo5Rie| zvcihh8VhYfzy)d>rz6&ob0wiI2*?IvE9X$mNl+nBY8zfHIg~df8?^ynCiVzB5T$?r zT3}wTRI8w~Gvlz?u4lF)b0KN`l=sy2FHtDgMs1-j2>8Hkn!#gO1cGiDfMO0jS`ylV z01VXDO^4z63cto-Go_mHd<0;D*`qQ29btj2YhEZ;`*=}k3j#7QJ9(@?WQxx;tMMVs z7F9bu#JQqS7K9q>na#MNe|1~MzglF(?upN$i{5I2WGR>Sx)PTik4OO6lPLQc2y(axvV zzJjs|T&ulO8>u~O|Gxb*{($cj-g~@H4*byT@ISu(-&}8XyvXqy*QXpCjwbs%>@TrD zmvjev?alsAH^e+EbdKRU{uzI_|81Tj&kKCt)czCr9OWkXuI(Raec~my=h+r*0}Ze8 zwUMvch8Na-tl|C6H!2GgZ0%=scXlW}Gr!zFH3V5Bn_{vNvnfVv-&=F5VQGUuF?TsV z-xa?SAH57sW{=87=%4loH;Ti^FevywAR7VJ_d(eRu)g=pM&Q2h!?F>&o$tNOnC|Ue zzrJ>3yK{YE`TFIy^z1C{XwBPpWaDgPcqKJ{rDJGo+jd0`)>4(4fk|iTY~V} z_+ndH7$JN%zJ>=z2%n9w#DNjQXLHNH3E{Kxl{k13hD;k@!viC{TWoyY5R5RK*j&zU zR9mne-N=q@&*fv+2NOHdrM-B^(pY|;_5oOJ!3ar3&-=M6ox$zd^u%I&doLab6+Q`}n>k*$7SMo0g5xWWE{M2u&Q}TYovcO z+Vmv(NnoFER(^7MD&G~lvN9h|^fWzLeiBISTacfGG`dYG*$7!{o075-veq^wWMjwP z>}Wc&Fxh|Ya??{}5*u3Bai2-PV-%eQDKDNJk56@zz9ut zn(sn@5jb?3??QkPf^hn)uJ2Thi^KLiuMFQ8~@P#gPKjltMR8?z-ud-47$VVZ+W6e2m*}pr@!s_VznpJ z6DvI%BLi#0{V5oS&hi&J7-42{Hq4t$JP9+4vmrU~5L*x5VTQpNV9&dJZPjW!y0bJh z*E2M*zK%jA?vL`{6h>fz`y;XuV(V5X5#mW07~LO|pM;L&RwpjvN$5!KzmlJXAh^}} zka!ZP>E=_ObZTR(cXcIsWqBQb)B9Kk3r6@&@6XCc_)YJ?J!R zdy8lJktgE*NB4v7$GSf5T63Lo{+V;aX{&o> z-4)08X#YP|`{~+e)!u9WsC~=|#{gi%C{L?0v};T^S7mVw6<@bHN2^3yF~`rAM2-Q#hZhCQNhj|=lu@KL zAw77mBytSEon;_0uRJX_N&64#Mdpya#6_!UbiX+iRo5mBSSH=Mh_15FE z90P2P3~*sAky961t8b>nk_<3GCcuSZs4F6?N^8i{YJ0g@i-gEB0LUn*}!ZXwdEn(5`MPCG7PYTK7g-hw(+2kwXoz$BEbNN7RbbAf&vCYFv$Yl z<_z^GRmnhAjvFh91OtGN#Fo#-X$Z;5@n=0KhM|1Ar}a zTR8`297cF^9a{HnNn{uRd<)#Rz`a~aWEcS53YptXQ^HV7MV=yT8&ZZUHf94ZP+Pwj%{rY0+)PPi7yw+L_7zHKe!NJC3IYmkzoMvf!d*jv2$1e9xaIs0{{%%HjX0#M5dj+I!30X7{0SfsXz z)}4j=rb{Bh000BCnTUh_J!JtmQ(_4Q*lPxGf!QV#ZLN(AU6lVIZ@OGbq!$2W1FtFh zgmJ2Bq2^ahk5c+1I}QQ(dS06x&$LE7{{8>Dnub?43VJv(C3Ur=7mK*VGL-zUKIC$IsP%vGxVE zVf)|G_y4V=|DU(HYF_t0^ZgGf=@L5y!G`MI@rC)B!Tk2las=pX_?n^f*Wu=n;p<&1 z=8c#siQEE!3w&;k8NM7f2#FqAvG&puxdi|j2yK{1YXFDhPLxD$0l)=9o6bTkVdqLB zw*X-4DNQGQNPfcP&`I@ZXGZ8F2QSb33K08}9LLp7_sL3o@_7Lzn&Ql1rR z#oACUati=H4%KmER2XojVh%i7T30$cJK+Ps!0k%U8;HVxO`|qTEx<-TfCXyza}_Zh zQ#F^(k;|V1BDVk_1GVK0#&jmhLLf4w6(taIje*)GW3?sZTuI~>fEt?-TV52ggnzZf zatpAr8u0bRHXExg#XDCL$pt_L)WB>-qSMfDirS|^^qG>=v0`ngV#x*A;0pM_?1Zsv zSi)tw1!P+>fSW0aVOBt&unKn7;Z$Bl{E7HT|E63GPs z7nogP(6)e`D~aR+fNkJ5&99Bzwt#=NG+myD0KOG&TR_j1L~;R8f;DhkQE8Q$jtjoZ z8MsMYRZ)$Ns0ozQC6-)(aS-r<+lK4}8bF1g)0iT13ji)~TfQYyuGpctnbOnBV<6xH zx7!j1X?Ke?7P$og8M!TglUl;flz!2y#=vcpQQH!7t|T%GK#fh9ZCKE;gnzZfG7GR# z8}RkaHe1TJgq|xwY5^eyY+$w`(`%pvy)DCr&jwXCSiJ}^R${3I*ryms4Fj`75xK)_ z2o-)$qxOW-psdRPFi_i&v%nH=rUbbKL_mPr-E_vfLe(l1Yc+=40s z0*okt3)H@xGQ6l%2>G?96>BvXxdi|jsC~RhDBu5QYUV)ypT74yJkN7~!0mS3=Nzkh z!0|}!hwa}Y&Aq44pB?uf66$}fxqjlv++e7ub+coBS6Sa8vS>p6F`5%6NiJ7epQ=y{ z!jR>^uA-kfm)u(GAKmN7c9C*um}V17mhzJcL;kF}V{JQ^TRNt%M{aa489boH^eDR+ zt#_2@`W8`xwEl2 zb}1U81$X7WP1|9Hziw$8?HTKsX>Hk?>Dms?>`rAD6X}(hr(; zX;uG%dG&jG`cfn7!^!NrqI8b+j4IQk7@PHBF-1Sr9Al>*vHIFyAF=u&{U}g5`gfXF zf4gHKv(|QFv}I3OQ^0z%3MH9PI~K<-#X`*~wgYUaKK=DitNQ27tG{tZKck{;jgQVN&4PPGWnEI{e%;mJIoy$=spaKptBhfI`pe}fR3rf%GXz>WDWhXPbj18=+ zVI}jBvH-7lj1?;{Q@vySuaD@M@-=kA%tPnQ9lMqpS#QZ~v`xg*1`nvmC-fYVp6KV!O+Jj(cDSCU-|z3 zAJ#OyqMhW+Pe0wtFp2d6Uf@PuB~f-fR46+3W|c_WL6f+4#MMsJduZ@ zC?X(#cq$^Opn!k^B0C5I@7xo4Gk!PXX65Y~{J-z}|NBEeiBtENaZdaqZrpPs&iVby zXIA{M;>*D>DkhVy}9z%x_L} zKcfK|hWQ3?Y8LooS(#A~@X>?Cu{s?gYA#_;%>p=?l^F#A7(7_)Fw_7-{7K~0EO1j< znNbjM!GqNj;A6EKgov9vHCsKF83h3uJXoB}NCzlmiB$G6#kd3D>dsjWIm9PAoSH?C z(^;8O5RmQ8S@U8@DRS_~jD~Lnq5^*^%NYeZ?g02Mscn?8OFAo43c^OfPHp;XFkjL{ zwPN(Y_`c_oEKbd$_hVU3Dag)Qz(;D^;|^|tli9n9&RGBkYHOKx%=ZP=LMx?*=x{14 za|!}3P`fq8#j2ciE@2^ooXpCcf`AOvwjbVeYl(?0=M)r$U*%p7sI7;K-D0P+GOHl; z*-mbzhdtox7Jn)$vkC&fo!naF!7X|^E3*p1W>6!yxlvPwPVD*YUU>RhtJxY+&ML^U zFTe+K+p|vsK#8BTaBnSg8*qW!_G6Q7aZ_2DR1k21+hYlh+m^~@dMuL)0y1#he&Wt; zk0-J+sUYB%0lr?WDtAYg0UrY|>J0LpFOr?Q+>kQZ*iw{zRtli+INviCBpAbby~ z+~&QyHgx8;-(f&Rv*6%Zma_`-!VUPq?V$EXpo=r*fsMBA zDqCePP)u#Ww^Q3`*>=T{bXKMngfBvs+WfVqQQQ3RbC|E9*`l^gD+u^VZS8GFhrG)J zC$pSZklzOY4Ai#YzGHK{z#YqSUO}FVfD6@6aPkqERuF)J*%9;0<)(2{ zk36@y+Xmcn%y!Y^^dmB@ARw#ECT`fTKDjmZaCNA8>=Di?$UFgjBzE9bz~cM=6&20D)!g3nrKVqNda&_Rl>h&+4ez0< zf49*6|7X-!*S)%~v-b0~zeM-{KTh}mpHTC@nw6S*-&^SW|A*DD<@5i)S{3yEjrTd; z`#gW)*`geKZ>t=w_-@53;5+`*|8FuYPd-5O2$-y%d=N3Rn0*1HY0jZDY8GonD$7{~ z_^bxtp1@>)u#cgFoX*Oe0)T91GJQ9iLADY=C7MOgr?Q+=KzujKc$%Hb+V;bJ?`2W} z2x{4>OfE<>;G}f35W6y6Tg8RNTwX;0%sQ`@<)i{kWxz)&tLd+c2qyw3vofmy0K*!s z9@=$>o65?p0)Pu^bf2M4K6l8;tjsC^$Utq58amnXL`zI$IjaDFHv%qDTmNo^aXJw@ zot1e709z$D9Y0aee7Up9WVYRW!SFH-_;zx)cdH3A+<~XFGOYl_HC1ktM@RD;a_Sk2b{L#7n~eB?Gyc^yG>%L(9c!Bv#Z%CrIijNDfJlMEn|5^Fz4&DJ8wX$5!@ z1YF>@gS$_3O>>@E%>p@@m3ajK8MqxW7eB3Q(K41uWo2Fgzy)p>w$>W5D4y)pEP9;I z%De)AtTNjqhxyg010_l|3;fBf%qsx+j?C7;%b6vem3ajqN>% zX3_bvtjsF__{eMy8|nyAXW(ezHJr@KyaE6W%+?&_#)H(e0H2@JevX<&hf`UZR{(JB z%y#Y?pYzg?g9$6IKvw1z0Aygc78Kwf2g_JuA}jL>04^}QxN2*i3pmV1(@3#`HPTs` zR{*e`xUI$=MBn)ky7sd{tEk0Pmh%emmIUza+_ttPI!qbMq_Z-y033*LBDcDx@G*lZ zJJs-Kt!9hdoLGRjB!G|Pc8X2J>3h`i_o!I_C$loM000BIwWWl67IE${HCyDCnFRpX zPHyL}Y14*(FlJ4gWcJBL2PGf_x#=6+zEB8&GM1Rg%FF_QTaMgfoV2&D)hw)$&dSUJ zfbBqTryySZGHo}VRH9~qKbe)81pwbp?!uR&MzV4gNoQqd0f=upa9f*#Y=uPJ+-_?> zOU)EN2#Amk0m@w>i_1*0VS}G@P0(ZgXk@afV(VAF^{> zUAV~<)MKYf%FO~fnU%Q(pvS=NxMMW8oFyi*oLhjm+koqe+X-iGQ?uxEIxDja0Ja0S zohM*|v+`)xre=XJzW?7^(fpd`!KQCFy^Oy9|E}?88lOP%|J{bi)W56#S@jhh|NmNT zwzkFpDgV#;@2h!#&1TJ=zCZRY_-d+OPxb%)o$~)Z#rs+B3%&PyKI~bi`~QDfIa66* z@zzs+^q=tHSXR11;3zs0nwKd2YNBd8bS%pr^WpDd(QMH}<`w{8Ahhbcq3?bdxT&nn zEdaPc=#=8Jhpy4wc2dOZvCJ(1$UtZZ2ZO5~b8Z2if`AKzR^8Wbdz{Y7%mRR{(V1K$ z=9=uJdWmLXk;$ygECBfSrP|@^(bYhvvof;)+!fH4YV#bw)=Rn)5LNS$nSLW~7M&l< z%FF_QkIc459ogzGfRkCyEWk@O00Xm~TxjJxoXX170)Pw59uM+Yo_!o$^?1Fw4FP0e zwmsPI))J|#Of3Mo<(TcF$LXw0Eda<4%(h1$-1dAbD^m*qzMa|D4*RCCw;Fe`}dE|6fCKdo>mD%JFc387r zaAPVf6AJ*oo!MH*(XCz5S(#V>t_!Km=BqsVz?rv#%)O?^rE^ym%tL?(Z>8wmG0LUt{%~YZeyVdeNpUiS<0S?pvzMa`> zJRKNzB0JGhwiGORGvn$K*8ml%F4U~01Lcsi>P%81+U8)LVW+{%=mw6)2EwWKZZG8UU z@P5?0>pf5B{}=iE|9HjsDsm@$#+MhRbJF!O+;Z68HFSL?D(zd0z93Q7Ylm3`U5Rpo%8$i?HYmUTTv%kFhPg-l;a#U zoT9lv;2d8pU;+a^5LhiUSp?7sXvdZJ3IG=f?BG&x(ce@~-YWoHU~o&+VV~pzIhm99 z3IG{a=BU2Dxxk&s@x21xbpS4`%q4amF0j)%d9whpRch1P?6B)_fj^n!n*~g5z_(M| zacy=1p3cdO1*`j4+ZOjXTeoIfRBAh&0HBl}lnYl)-67V5f8P zUIAdM)OIMSQlx>lK#89f?3l{Qdj)`Rr?#^n#8vO*y@H;e!@-I0;?<3=jLL2E%8vtA z%v_54S`*@C(fhF+-z(s+MZgDc2i4@Erdi4ZCv);*0RRKJ9bPCda8o&Xu>f#^+@prW zM}!OHWKLcz0AwJy{rV8U)?MJHa(uCX9U*`V&5TUDBv+CPdO_pqYuuf!f?`E!%vpfOjN-57bt(^P9|egDY

  • hP^;y=pw*od=Y<0F}?y{lJ8+6HtDsANTe&n(;L7&n_U(yo~J>zh>UM^IG! zsUQ0Xg7iAJt;BT~*Pns%p^PmoP=Z=)ejcbs+bHc||B5rQ5U= z8>cs>TTN+P?VmuU2erSbsXhKL<4~HWX6%Z?Wp+)A&2~*iv#M#BPJ^1aIElV=Tt$Sl zqIBjg5;NT%!GyaL&9p92(KlDBn&1CVs`zbr|3B9FkB!f#{D1FnSZZjle|vqpzPj#> zb$zv8uKnfOkpJ)e5Bq;K*6d#i7(`UlmouI{h;X4S7(#k_y(eUA6XJ%8c3?m17H z{nHiSC)h{-Z{kQMje|XvlRF2mZqV+LK4f@~IW>!cPanyoae!^VxF zcFNJ>Y9!M~GG!d>$~9`6J7&H2=AOJ%vo)SFWgOrGwY9uj)NePqGG!d#0<*PTPp)vs zjyPo;r%M7{VD=SyJ!r$|ro%F08~_8c`QU*nTT`AFQt=ckY z9N+`B#jzVFgcE_2M>1y|00Xz_g1&RlN;F#?=A3cNZNLR?chbGxQvfHAWXd=I25xi2 z*1GU+gWoMu(T+SND z$2R~Mn9T>y9B|dwOu@rcIJ`4cHk2gjO=QlM3CJ3;>E>doE|y@7MeIHkpVw@_w-eiGtL@6(boQs`vNvo<*$OC#wDxtL^=;_S0B#kE#fo zl>t9g{T8bF_bIdfpR5Mhe6=~^@AEyorqTC^?<oE7?H&H_Hh-r1y;T3;g=C7-|F|^6zOmQdIX^nsyEy?=zeQA50U^-!mS?F? z0_SddrYZ#5-0}=n2xERrnuU8;TBnD4ucdmoS7EL2ixMb%ElZt4^F5vY``gf==8NJ< zDTLLa`Ce5By={JsDunf~`94($y=}gr3PI22dsHFVw)v7O1U;L7ObBCZ%S*FES4IN| zpy#ckpwgZcf}XdE!ciauJ#Q7&mOu!4-umb2Z-Sn;itrTus&n6RBq8)1sBX^2|XCRzjjdk?*?)P+ekKQTji-B;c zyRX&g-0t36>bXQFVX)79Toqyk(~qe_n4f3lY4FBg98W2?au3!KP6y$7Q1JsJNmoU_rUOV1>Q;_40c_C zU{VO9Qdc0g6avBO3aUsUj7r@vs~v*ztos#J2n4GukXph5Z|j7GV21&E`adOL<-!Ph z`ah!zK~MibsY1}xFUqsQs0<$(EAw-`3w;ZHl~epA2)hn?`a*r%Mr?VYazYbs^<3Lr zZQUHb(pf1sOZ#Kpoju8!{qDJ5=&eW8Gy@^@)+5T6fe?D@5%s$EyJ8!e<(@04y>YOR zS5#64A^fISRQm-X{H9kd;~<3J^omlzAOt3O#S0yTzyz;Y<3R{a@QRAjAOt3OMaAg- zmhQI0<=Lyf>sWrcep47;3PI2M>#7j+tQTeI02cJD-%+0gJ?ll$Ja`iHtQWQTKnQx) zZ>g}LXZ^MiM&noG8_U<%Bm2->kJvHpOCi>+6dN=UVhzc{)^0a8du2Ddcs;rSG->#E z{>?op1oJg~RTV;q8osOw!F&y0SA}4{hA*i?Fki#JsX{Pc!&g)xn6Ke$LO3zjx;9~q zOb*PUo`tUtDMURBUma42dKSJqq!9Hie04}6>RI^ekV4e6@YNxOsAu7;LkdyP9}{}Y z{VnL}Z&8Jyr@xK9FMqZ4H|GBZiHQIIu6h4|py}I9FK>EUzHFx^n<(v04R==rwuO z{DaC_s{i-9|0N2I<~f@_-_C_2+F)nJVM7Pb%>&qK48Pbc{4A+FC(~yS5x@c~+9<8F z-Bn{jD8aX4bHTZn=T!Ragac$?jq2R902JSFvDxY|C(2iQ40A_!))pb06|v41G&ps`{hq+7D^c;LzR_{-?cRJ5W@wxZ#%?!&1 z_dZ}ALsz=VC)$lbsbxB^b*IrBXe8~O{xR+F{5!%gKm>pc@2a8D+-s~)HGoYh{XhDvOr1|MU- zX^TwdIlVm-8+vXhwnOmPon6v-PH@k?hpP^DV$*pg^BRJkf7Xo#HNaN57E!4AF_z~v z_DmGOM`FhnV!H!Q<~ff&69s^g*lO6s>RAartQC;6*fUW87nnU3(ds$6LQdvomU=)2 zYHNp-T;WdSWtMut1!_B;ZNl`vph2!`fg{o!?Nwp;_1B19uN1OG-jK3ku(a^wI*@V z&_2+j+1ihA_IRcW-~+RRS`9hAT~!V^nV0F~0T`)$st%{}GJQPY0=I|E{EPOpAntm6 zB-6(OGLT!{nTdO5Dr^l7A0eARQM>2gp;M=L~ zv}n7sclzkR6@%Y!!r6h^TH)%#A!qfyZ#5Sd?W02zpBF2@2WrPl0qFGM1K|R9^yt9E zXG6WEt3wVJ(t z>U0JAGd_Bkna1)Z9YR_p5a;wx1-Z_EiR}#w!P^9;$jwRb_R$>R+p$ zUVUHf>uXH6jS&s#~cQ$%v zru$YWJ7V!G5VX4I1*#B&R`)z#2vd{oy&DS?BkOZOHeX5zLx+(-YJ6#Ta(H!jKe{=a ziH!^d?s$VLT*7+*o zKLsJI8&%&_VPOrd`gTFs(iLqT@9xjc?zRlHjPGst?ahot0 z4TKQ6yhp_4KnRh`dtTJoR9Wq)xFLlw z<(tLv3J}7aZx#nLHsXsN$?4hU{r;KZ)Y#RXmAy>dSUgu4GAV?KbnZo>LsGcb8cr@5 zGb`7UOXtK~SzqmLxtd&VSzC>C9L$dHS!r!G`nSX9L?8lS2UikZf$S#a6b{~J}06vAcS@3+}#3JE~&7*SA9eKO}V_CyNiVz@*M|EsCk|$1SZt{ zoGOH6yr%Fjm$0ym*F3B~3CnoR&#FRL#%q3FeXYQgJ*o^I>{n$lQwnd~&er($^kD1y z(iO0sU(jGf3c);n!7dPjdHjMSAO!RH1*1U-=JAV&9SA{5zhD;#K})}2GzdXWznCZ+ z(bTnp>ubU8xh2rk+aRnig`lUmNfm;g-g;FCdU|hBg`lUmRuzJt-a1tXdU_jGA?WFC z7Q#?qpyiqojr1Rao>gyDg`j8Ee^-T|XVvehLeR77f2cyxv&!0I7CQubR$05#q7d|~ zdXowZdRD!eh3jkMsZjfH*VWDuSZpg3st{I-$_Ir|t`?}L2z|pg3N7?4@uXa)+uM@u zllz;4`^oilkD*uZJtbei{N#pwSHW-kMpYr$)+dgpz>{EG-&OTVu&r-I6@qPjV?roj zf$*En|Evn(H=9493gI`K#i>SkdBSfte@cB4#@$J_e*=7tV4lS_Sfyg~@&tG;(Sx-xl~Z0lJHp8E||h_8Ba zQVX^h_^N-Y`s9^~zW(K*;lSRt^>Z&#g>#4TXv^X-6i*b3-^kqP^7i_< z!v0nEwq<+^>lE|0~V-e^=8Nntrh<(D<>& zpQii&A8J@@xV8Q*^{Kia*1fu}zxEroFRhLGKk9$B|FJb6sM)Hyi@vI-s=rtL^6Jj2 zFIW8r#s5Fy{b}z-&!2i$JhxW9qw-mm6&0^6IhSrmFq!8I5PXY%tAF)ib1~2{+tvnz z=3sG0yWOv1gda30Q6<$OviT8<&B76s&U1MJ;aP5*?;H=!Oa!kkz*M5g>6Wyayg>ts zB&fct;wU0~(QNrVlYSK`7V(5J`8UG|u(5U4$dMM8C9x$E&no+}WDz=P~DEYD6MHFwzQJl7ad=>hAd zphxrp^3b;pr)`8oi+2Zztro)}70{F;nhe_iC zIGL9<000=c&3TXQ+;)MR%F7x6fQ#IYsnwp{nIf6z8URdgKn8NF)v4X#rt+NOpI=YVMHJdCu{#l0&679h6a%;JCw|%5$E7rZ)84PHl&Hu{-p1o^$zg?;&fjN^Q>Q ztE|r=IdD{6&8=pO+MLs$sSWr@ZAvO;f16ndC7P{038(aDq5v>ZTaCWbfj%?$ahVRM z@_}Ml4RC?lqj5Fmi-oMd!3sZED4deabIN|T$3SiMn2&{fvWZi9PS?-Wh8~|xZCAEP z=Q$z2N)CU2pY|g*W%m#d9wwf1#I_?5Endb!j%o6|xW@|@DUEz-9IsLxcVPJNrwy|^toXpGY z`p{t@wi-BhXNXjuv+Fal0k<5nU6?qX=iK@#H#B0?R$JYUxU$Gpo-^q4nhia-6WeLc zc7>kK-)Bx6?me7nR+(*PZc)x)lHK`qy80byHCs#TkD2&PK)?rPbI~K*HMlzUZhrsY zTJf5S=EpY;H10HP)?cf8Y3)1xZ?E~J@9%t-)laAz^v-#nUHPl@C;u1!J-l#Zy+lIB zSYkdt6An(tOj6i0F9xU>5L=~0vppfB_-i#GBUST@()O2fO;T1y!>q;@q#|r#vpQic zWEN0$n|qSdKiG4gi*XhIZBHn=RzlU8%skcIp!%NEnyQpLl?o4*Znmo`{#sL&%B52M z7%IC?C7Tjl<-@G5Y0x{H3aAFDFws~m`CbmzT0?ug8>8#to&IfOe`ib09&2*ko_e~J zs&hB46;-v@=nl>Y{?U_@l@KY$3nT})}2QR{3jhgUKzjYR3LjnkH|o6f{-pdO$J?Ye+@z zV#9ba9HPvr#rbP*Hr;ousl7RPQz?z<%rJe$KFYct%g&0;Ufqa<*LEj6)S3gNSR{Ix z%H3=F7MtygiRLnj*^^MyfmgzKl!`4mD>g8aT;Dth^v*5sC>n&#O01!vs#u}f+@hgk z)?b%V%)X3>yu|htwl|lA`e!R{EDFUQx_HM$C^2(a_jIgv=3p-z?o`r-lTVP!Ur=IU zp)cjojgAKCH5xP-O7)L)#jL+3eYL+X>N_;pJuo^IxE#2j{x3b(+Hx@0xf__d_Sy`_g&SgFEj$xPw>r1|r7w@wG_@dQvGT z-cFOgI9$QY33kFOidlcH3@-n5QC~NMt5Mr{!1$32?ws@BCbzb)9t>aG>D<0CKeaw$Cq^ts7wY`ZqpQ_ zW-f4`D8_$%3dJ7fk~HJY+JnSu{}>$|I^0oTgA~Q0Rl`!u&RS8D!me2HuQk@vUl;W~ z6>B5T1uAZCNup(W+SvyCd!gl?(e}yVkv(k`jqv3-M~AeTOIvY`wZ*^IY(Rf~Q#R0+ z^>pXL{g^40Tk7ik>nfokf z#UPZZDQ3pW_W?jD!XFhugfT=jhl(#Fm5!Q_Jz2_>y#9Grn6!Y*-#V{VGOQ< zii$xqDrPm8QA`~%j@>;9#YFu7RTa&@)!g3nrKXoOJ=FMVIw$|whW9iqH{4eL`}NPN zuc>=&U3cxj(%Jin{~!D}{7@lm9ei0))u%$681wC2c%k8{8KQbOaWTphd0AQjaKV>V zB5-^HcA`)>H=UQI1pr&~W>HBB<$9pG2`%0CSmCPfWL}mQ0DQYQ%fU^1B6zr9m~>v2 z7J$8k>dZ33C#u&f{GhpI;7F3jn^I+fL!NlPnXr{9Ea~EG+=vi5j=f z&oiCd^zq2IZZ&R4jAG`KN%N({>o(vcw;c|8n%|kuz~Mw;(j@b;v;Y7Dx7AcFCRIw} zQrJRJFqN031ppVg-EC;cwoXJ276vkzPZcALfDGi;B8?~FCJK`#m6xRj02j#ZxFb2i z7SZB%RhAY2WR2Ps1#qBtX+b8rsRA5LtFG~x+=f6g6^V3|X zHhtxnIpI8(=h6a9ZNNurJ8ZW3=(K~i%-<`lR>{1qEdankZT7V)t1AOI>rucR%MTUj zBH#kGI~=woF3x%<^Rl)800Xlfz9U`WPUN|^03Xr>Twr#IEr|;wr}MJ90AOp}rtp^j zDdwW@;`{$?70s`09;Ez#FKbFPew@$$|33{o4HxSFp#B+kKd5^Z)&KiiZML?>|0(+Z ze{9YBDF5F%%Kta#tETV&ErgQ zfUqJknhT*K@d`0U_1$1Ki#2uhSSA((Tp+Y+;==Rl?!;;?EY-&{u^_+#pWDMR_4K&a zGi9b&&4qo)u}mxo$UtbWM|snRNFB?>f`AKzc37&duASK9^s!7V2*@g($*ZMZw{V3& zdCZ9g`Scp#+m~tww}>n7^s&q<2vJ{crKW9$dVG>X!7(#hrx`~yi{TtQmU#sMA9zh` zZwZ7F%@(m`UO@l`VxOwNsbkJ7$RCdY3&b9dbD48H0bN)kd3;B44+6+YY<s!&v0Zgu<`smfzea3_j$;(#JBdAYg0UHWR|0rtg!-oL7*! z4fu9$w|6^S@N;39^s!7U2nRnjZj;kPU0Z2D>3j$KUzIOMIt`Mrz8sG^tsrl&0Ux=o zUHv%;*f0uTHOXVnE66840T{R)cd&NJ4jZ9Dhf~L#Sdh65xWMg^h=af71XIMVFUMn< zSrCwc+iE38GuBbE$DvpOH+9UJ1=St{w;i@4Cn3{OPBG8Z$1<-V^jKpyy}4jhn4y+f)1y1AL^m z)52dKIC(7d3IZ@tTRWw1^{j***0L@03IeW;+S*kUSIEh{%qs}UNNtB@ySyb*d6`!b zaLZD=JaRfO^9lm8Mr{hyoT}$jd6`!b@a@!g_V)>noj8)|yv!>I;Z2R&=0PeQsC4)= zYNgZ5%e;bs57br@9h*y4N!(zl=o8_*g1l%0E;3sWiZQM^L$$X|Fi>=5b7Db$%K$Dg zyI;*Kcw&d?+PauB=J)>-DyGc%|KplI*tFgF-Nxg_D-9oP*l4)3{^j)@b^k`0`R=Iw zquLJt7yU2s-&OO6HFLf%`hLY1uYOncY;{A`OR5syPk9%-jh_GMd8qPJmA_EgOnLvO z2sU}lSKrwdnapf#&InIaFad1ATj3~u>XGweG!UX7$AjV64@9b^? zT$nS(t&Rd>p7S<$-%iZ}d+(TUzb7Ah$bT1LUoqAfdRupPm#(%t{D0s;{_dPe8(jbJ#ZL-ny( zG@PK*_3=30pGeTX2^!-By?vsmv=!f)FEDFnK00gA9%~wHWv*#j*U2AQqS>+)-nCgwYfP9>kx zR`M!+COjXSp;4W)&q8xWa_D-gX3JK5m0s9N;<~UEt=LXKNX-Iy_n7a}kMJCn$f~W3 zL?j*~hb?_MMuO%Xj79_TaGb8J7>035Q}JbcL96*da5@;BOGFbuE5qC{X{Ivx%fYGH zG8JF67p9W9E=(2Xce92}%>sGvn6KCiT1jNhRIxxH77Q2>GEvAhRh%~Xp_pl^Sp0O$ z)#x!_zvuG^nQ6L56PcS%#4=zjNBYp}>tsP{779%q^R0Wawo6zrRq3@o5_Vi5so63X zU%VH_lGvKDXmN^%5)mUxi;B5kk#3Plz=#KfiA3y_#Nw;@f>^UgIF<=chiBtpEWVhJ z;~aZ15T+dQ>f6d{wyeb$^M$n}ZaHfS5bfn_HCxu=%lX1u5?ixY+(?8I0lFR*4@XUF z(Ikwpo86#Q?3C8x%lpDwaU)<%$LFK-m@b!pK(|&%rCdRy;)gF^+85JM;)1mt-h=`o zroK)J&4t+d-Z5X;7q*hfs;%fES~!ph(A~2{h;3y=>1q}oNe6+Qk5eKS>}S^RSHSl;%}$cv+3Ep|{SX0dLOIyDR2 z)Umwn54d10XJ*k?9DB?(WNH@3yT^RnU%U%tk2PDxXnzo+%b^J)z!x`zkw7#MrCTkr z@M+(LoCZJ;OI|z$Q#lZe+;QR-s$C(`EEJkJ<_rLWSP~aZRf1S12Q^H9v~y{u7b6q>Ry`46^RcnPKF*>Lhj7Et~{HYVA8?zyE(V}a? zr=5nJL!hw07canqwX_`~TT5Jf)vQI$)->b{0%v*SC@p z0m4=iS+$iBiG}G!7$O^o1+&O<f_XgZ;7&_(u8#Gvi3`9h() z&|&($L?lS>cb7Mz1I7aZ`voAu5b@vkd;C9LRCLO`ep*p+*IoDdD=IQZhR$kC&nBXC z^tRG9qWx#dW?j)lP*aq47j)^Ewi)yx6fi%H%=bcw?(0UVEkNIqZtn5(&EinPcD1Cm zs?RN@Y9J8L1k8irPCC&sjnd7Us`S^Is{Y9Jn?ieE9)2HR>@ROMz>)v%Eux{`k>XwZw^ zg%?|5nu0K2zsIf$3muIu@UG zQi)!JrJFTP>918y=|yTfFrxIWNi&w|8;#SKCyjADL?4{)5>e1hB~|S?07}o)!xE~_ zhUTL4q4@k9>8y+%`DAH&m2S4HD*jqiH6EfA8?*$|S2b-_d8V3su7J76r>}*C+fk*w zR_;`tzj07h)jm@*b8-5n49!Mo9ChL&D|Y^xI&rhEYQoS|rF{`Orf6ZJ>>{jcFk-}F z@d)Wl!DM%XYL2MeL7l&`UrN)W*WF3eC?C4eG!@O7rqrxzYLG)D7>-jW#V}DYHFXU(*LY$YW7P_uR@Uqt69;Mn;kTb2I<4v+}hC| zk5mm3bLt^!ZBC$r9q`1bC(-u_Qq~e)ue6vARW_AstO;sGN|+k%dT%tRccmM zB^^WY2su~d0s1a7HKjx65gKROLPT8aNfC2*ubG7#J4HS1Ln>Xrj(T#4Sl5%Abv2=GaQjA`u(KxwrqBp@`aviuE)P)-xB~+FE zN=H@M=c231&AO^FO;uWy%pDS?c?d>mOUSCyS{x%^UMxY5Pj~#~cF_NA|8xBJ(cS-H z-#2}E-+k5ZuimWsc2%yb&HH}uHSbwZ&eKx)h02Y}a|HMQ(!b=fyziZvF=F$H**Rkd zLj`3L5{s+zVBV|Q5Jiw zd6LWz0NOIr*Bu8pDR@VYBwFyOC4M>|<>)cr2p17MBOH&>8H2lh^j=%2S(0m^E^iIwDCH=LoTcpnx2b9rz7DwPC}=F z4pLcT{Tu)(O3jwF_y&2w`CY_yWi5JD=p#Yc)_u>tW4=W$tR?%bS&Mdt5i?32q=2xw zLkycK)MLRI{pZwy6~1FGtVM|#6Vt|YVjicV=KSXIcbqMxku_UV$9%V3%tMI_)^c!u zGjfD)t7y!kW{X*TuUyzlB5SsytdevFjRHW0Lk9G}$>T^L!*uW`bSmd}@|bU&7i?8@ z4@01UPq6A;XLqAhv&AgFa4wi7-OgaE(({lGoj5Uznk{SbrSpQdihWkCWl+pKOeZkN z0Tku13i*BLn~RbR(iZ)+Av<|19em7SExz8Un}zGhJ2eZ9QpbENT`)`fuEAQRm}O?k z)!rRJinbJO#dp$$tt7H;t5B3a>q0R)J!l?Zp}im(irl{BQj4E~70rr@Lo zThSMjQ`gyJt=WoP(-yP%p1NR`#06WGW>&)C7!j?9)GV-fkNJ+ehy_b*&04WAxvI#A zNd95=o|2OyLf^AdT9i+>b4VV`JM01FqT27^c=Qu z+$^y7j``BNSh6IxYAlM6Q?!vz_mF?k{9vUB7zLyPbY|Fe^q&8(1bAK+R9gyXtr#{_u_@EB(i2JTEm3DePPIs+R#-GRH&W4<*nzICL#A8e&BSZ2@J$FG~pO6rz6?kipk%t%-lrlJ|> zWGZSFrrJI3HIc;}l*pQ?$ge}uzYtN0eb5m)RZXu&+DlLt@l&y?uKD#94_7|kJL?avFUrhM|{869BIDO`vaff_m$=s`u@7% zaSgTgU#kCb{afpQy?(!bs`)cbud07){k`>7b)T>MK;4__UQ9O!#_AGv7ixc4`{~+0 zt9@PVFIE0c<>Ra0Liq*fYS(IqYr|FVul80?R_|54vHB@hpR2x9dx!tK{!jS-*#AoZ z^ZZNxKL3;bx7B>J=3_PQtU0cExMtS#ZQqYq<~)Ds`7O`S`JU`#sHcC*eKbS6AI#^($3dRmrAzSAMPfrQVgsmwR8}9q-x*cpWMt-@UC0p(66#*Ht0ZIK6vI6+#u}yEj!Kluo^SgN4vrC}(~yC!QQ1=B9xs-PNJPjUFIF~ty5A81Wk1h6s5pF#r zo|NW0yt35aztMTny0CTWuT|mZ?DE*;`f^8aeB{z!sluM_frZYlh0Vi}flGg>3g!WAcPCky9hBVEaBTf3p< z)$6k}i%Z?(-7{_T7w%A>gsWZN7WK*DE91c{eW}*H?ad2!s!sw@yjN5q5XIZ33V|rz zE+LFgwDn!TKGV`W3Bof~su1)%<5h*wp)(#;2}KLMX>`?8^Ln#t4q| zE_YoxrwK={4bIH=8oRNB3ujf~UU=mo+Oaa0S?s%TI}2ffgL=1jKU)<-z1zG0n<|9T z_IDo^gvG@MEad+-3xS%M*!c35j-AP!-i{0RslwU0z?F`!k?!^V#S5Z@I6QfH*f}sg z*S|J88@(W^p@VRLXmoAiYTxka+Rg=0@O-|%*dZ7d|F_iM0!{qiRfWJl|9=*QiOsd4 z`Of)N8*s>1tqOsfz8X~s1oIUb-(Q4<>EIKU$>*gIRPhxUFNI)uUtz9DA?WGzsT~46 zeSRVA+a2ngX&YP_+XOwU3cZy=(6g!lD}|tERiQ&t2zpj&zX^I)6(+BI67;Mp7(og_ z&#JxjR+d4XjgM*0xnon>DglImont%{GR3%=_AO!POixmunXg=}22O*kIFdl?x zKCyy<5X~nR#<|snz0p;p%jnt#J^h6hObS6yzu3CKlc1;nH<^7P1U>zERS0_eMLBPH z67=-HOnnmc^oyMzJPCUGkHnL+eb@UA=A+Z89niDl8>$fWtPo4hoO}}WtoXY6BM&&DNH2zoZo zt3uGTaYYq^o{h7r5cF)EQ-z>sJ{sNwzGs$F9Y9HxBo^+I#MO zyejOvwlcof)w4g-9=!K)0`~e&>u$?Xs%2~DaDAq0V7Pm@wR_;+I#qbk*FCh;({*)W z?%>|SGA_3QnTha9YkXydPDWn(8}XZq;{!|Au5V7PA;GFYs|vyJ)t^^|VEF2PR)t{r z>VH**VEF1!t3oh*^=DKe7{2;*st^oc{Vyz>TihR53baT64|#6_=15YU4eLI;)w8p+ z%>#O1QfV+p-}l{WwR#Ysv+w(EgAJGgg8`fSGAngso8_=E_xTyHVSzQ+ z#_$2=#$Yf88~8ZPVay*DS)~ePmU^mt@&Ek)^9?W$lTj7QhCwp#MUVF?Zeoe z#@d*m&)LE5G}c3@(dhJw(!Rbm(stn@FPzSIjFd9_>5bXwh1+=H`bz)SRHnQWX-i+Y zl@}IQhc`D9J*m;D+=UCgurofI>)2c$9f_4L+`RNpUDcQ-K!?0NmP}Up9u0F0|a6X{EdgHMT z3z-|XKdzLv28OnZ{mYyMkt-3%8$ni2YM9on=C4r0^sBF97+*dF_~^Jip<^4?Y;IWJ z%KV_zH(wqY+ZPOj#}TrF&70Nntv8HaeO$v7KCSK8hBcWRHoo3bnBQIQTALjcEdVkr zBs;GkF(7Ye&75J_d`!b2Gf}#qPz;(IHjtT@m-2G7G}JB_CP|ke3(dS)ee~)LV^?3t zFn;oY)adB_DbWLOh5$2+e=`(Hy}P9jWg|YkBU%uL6bcQB^>ck3w_`cO^sAv+xVmQV ziQWuqCT3k0F~jSz-wb~9!7c1=CFI$m_K{2{=L4YKi9ym7Kd)-d>eeCkfqr$(So1dn zKhHplKbKE?yvGp+*JnPsnXcSM+y2g0W^++6EEc;Ad33C~ez?>mciynt)xzMy)irxh zI=H`)*S^<$aC;XD`|ay+k}A2y`9NhKx(xgN=FRE@O$S%Mx@N4k!By+vnwe+$wO_vG z(G0u!ESE#ANadnjl)~bvB$YKwr~{1IovaxRs~y2(SMxd4kUj#rwUEr0gdDG^de{Lr zYGbgm4QF`cF^h+iSPpgloXmFh*xz-BLa(`Nme%J`8`-P+Skb<-gjIa2h|Pkfa5Zl! zu$jm*9IAty5IFvdiSgkCP*Ff5obZNv$d(f0Ssh(#heFHOTs2ec2i3^s6ilrpoYtFK zYpyqyH4CN!NiuLI!4V`lsiR=JcqA4{LY}w`i|vH9irp}%P@2oyQJtA<&YGq5gKFeq znpw)yMFmS)vtTJS^OmZgG%?7456f|&AH&orIB5pw0U(JX9!o-Ql*N<2a0bBIpcbz= zYNpnoN-~ltMN{=$PtH`mnKKoeMN`!ibnsjP%>}UYs81?nMgvtG6!5lwqB+8^b{jpX zL7Ilvc9A0xnIRv{y!iW zszq1=uloIer|tP_{{Nk!PlvWbH#NVfIoIrMdUMlc@Tb9729tp=2d)L~^ncpF??3N* zzwZe?hxZL|2H@wO15c~_o9<`2ALjZ8*S71T^Im7!>2uuU7_$G={>S!C+rNX_PLqb$f#e%!r3P_o|6?MaKBOQJ<(5q4SDRxQLM9D zPgIb(9g$5GAC2tB{jF6msvvJW;)JLr$ew~)3CHQMUb-?>LFRTuHqlIwEfB`S2sZ9< zQcJ$gRFJnFa|(%Gg6vuXCWr0Dx)XY7t_pIu^XL$;4ID2j3@q!{4?9d(kiQ-I)k)v$ zv29Wm<4DKEv>fhi1JvjH{q6KKQXjC!Z& z3K}%)dIPn00r@y4$cAkE6X>0+AZ2ux|w;h!Ot;A zq$}Q9QX_E$LAJ@9ZOO&i3i7t|(BN?m5iL9ldhDKGtsr|l&e^2r^|&^hvn}=>x!bY# zB*?%68@V?G2dl9J^un`3D{NxJKTV>7?H3})|)kK-~HR_oPyXU`YE$HC23>2=toIn1+Y#GDGr=~VB|UbJ zGk5Q(E=FtUDZ8~)P+W$ zh5UcuwNMFm6A%%=VC()97B zxu)jeJAzMueEv5E`u+dme}P~2eaZI>-y^)A@~(Mr^t{cJ@z~w3a}T?I>Ux<=aem(U z6z78+_c_)bH{0K1ziRuX?cjKy|E5=`E8VJR*jvZg;wN4=S)OQn_}b1?{RgdV9ss_{)qMRfr)T7*Nd2*z7{ZwwYf*knRd$R4% zPvN*FFZN#D-REa^_*rab-kGc*7d}qmM1S2B&QFNCh6cZp*@BjTNu1-1)1r2aF{?F55Cqz+k*b9737~sXcLdrL)&b1 zV#zPr3bN2+?@96x4{c1$;RcT7_z0g9db18~ zC??PrzT$NS=5}b2wR8ok<`F1FFM)O^uy>iO;1OT%ic|%O=J8=9nhCT`;%REql~4&# zH-vd2T|pXozQ;#HTUTLjh~|rI1&QQ&aPZJpLkbNB>u8TmSCCE~KPrhw>Y;5?X;Js9 zdFM6mgKPyUHU#VzZ7EWO+xV5d9R|!g@s4(BSu&;#B2<&s&C3ARnPJee;W{2cQ{x^mI1#{}CZ>k&&m&Q@+yHS^%$k*!in zs(D!4^mKi2OjmAI^&_&0uj`R*I%!*QO8`E)|JLzxTg&%bzS8o^miM>3vE|h*&u!Uj znQck8bis-L2e+JQafN;q`sdK6LLUshIdpgE`JtzT7DCgZzECpsu+Z6%r}-z%-*jGc z7MefZ{MXHIX|6W^Ve{`cFE?kK2bv$<{D|iB&HkpJHGRA3vrQjqdVAArn_krPbf_-) zq^6;!$22{%>6WHI@aMsQ4Sp_oFGL&uB>3XsGlFZuCkKatOW>~HgB;cxdx{kQv1 z`F`#D58xB{gztU6H~3!Z`+eVzuk1_tI((Avfxa7jHt+YnU-5p@`+n~my|3~<*SqJP z^`^aD-kA5n-ZNgO=l^)V?)eAL2Rwh_x!dys&r>~%o~xcdPtx-+&pD6R{h#h{yFcf? z*ZmInpEx(&FLr*x{S5b-`^ip-h`1l?zRUS;_XT&*agX!6&X2o(;cRt%$Mt#FN1bEN zm$}~Q`cv0ST)zj*1Uc8J>+z14yB_7b&DHGuFK5_!(HV05%JDtN7a@}J9@B`({|$|& zoOd`1spWBbd|+U4w$trU8}f_OyL+3Pn-gnmuAkx+JIiBRU1MXLqiNS)VZ+8)X);_= z%E?v7zp{q5>FLFxo%KwIja{)C+X(k$rkA8y=OgiomH7DHR3^35vFX~!hQ&^K47d+U zb7AKtY?v8_+@sWdGT&wY7&er4d-rF$O39H{`#owyes6lJyxz4lz1HXYAzl%m&Ufc# zTPJgp>uYL5Zg{&ZzE$2HDz3V|j18-ca(O+GiA?vpzQC>s&usVa_s&NaT%SfAiLG$= z%0PLnd&l(}wIM&y-Zz<2rZiw*gqn zF6Vz?!&E9i*FCzi)*o|z6dNWAw7g5&$x5Z>JC z*$D3?!x1NrWPVqYyA$EPwvDvyL?bTuNr(azLc%_+H9#T0LOfp%JKEGy$d&V@Fpy|NBH*I-?`RWOHSytdymkl8@TI!ET8bq4r6sR4h4XwFbS$g5$T@ufj_*pNyA*p`ZOb0w#gh zSZtZy5XqGj;bbygaz2?ggrQ7hA|Ht*9e=Jh=#-s~-_siMIdDTslI$t1L9g!U*wh6-h~;J0tx^scCzG(- zpg7*m?tr_YTR>Z8_pt`0R45kXKo@NLh1LM+pWq)k=bT^-@kmK36`-Jo;|Ht(B1H+Q zkjs}Hova~RD9G_5_|^U&S_25dynN1qfX$VnF}VcX_l2VEN9>A7St>%6qg=un&>Cc^ zP*8G`V*9bypmG=kv02>C;8lVYq%sU$H0;26BnLG_puk6=oJcsCe^dvSrFbM4wKE-R zLoQJSDA;i>$`uRcauUiml)|=O;jb8cWsaw?hT4XY<5{dB0fnn#WvI<-|97nc5+x!^ z9`NI34e@duU|*7pPKNU${1XZoizLD4Hujk3bLzw@%kV4s2F>MjFeenl zz`}0-CR3UN;7d6u%;S6#YXEjL7`j5K;P{!=5K*8s2h2E5d@bi-o=KKql%gf4on4`( ztCxXTz2N+9twFD`>eyfnv2Zb0Oh#brf1fqT`4R*`Vx^dUkTs~2CX_Y^7wmId13XJG znaWAqziJKPD3oU^!Fz~J*ZC-nyi^Rwa!v+gcm{IOB5XQF9PE*VdN_p$mF}w!5?j zc+uq|VOeqfk~P$7wm9}!L#?!lV^?dCfciTgE|u+?(ps5i$2PkHrZ1Qai%QZtsx?S? zczA%&*D=f*lnA^^;)Pv%JAi>-od{&f@i^8X z!LuR93gNI_(+SDk#b^;CGWIXBE8xjWByx$o>=ES%kEtc)y zVs`-jJ(O=Kz*GHEY?xjj?_W%$w+141HcS%(iShZqy~2E}UBW9y)_3x&)8$lq+V(zd z7+e@kZl(97c-e-lrQBf0;MVX$bbLE!`(Jp)z}U`sa%p*Yc-L_e8+sz8&QWDd*fJZ@}J0dJUi9y$t32DbQ7%7vm@sz@%C@eX*~ z%kcC8xvP_b#VCB^*wL;C%TS(6Dn{&V_ECy?SVX{s9kKljyP^nb8%3Ds^3FxJ|Nk~y z%RMc_q5p)h`^Pqat@&xq4{G{E(|Xe_!M_O>f^PWk?)Co=zOEnV`?l}du>XIbch!5& z^H-j-C*=MM_lWBUu>b#9=Qo|tbIOj-IJO-Ru)p74vg0;8Wp^8Ql1 z*xMWHE0dTOe+(d+yb?>mrXZKBQftLkAvmS(7t%bCR zViMBA>hUBnR8w%I-gE_P31AS8=shx|WleLog0%uLq(wCIAuaVF2Df``P5;#j77f5H zHln{iq-Cj1o312)l5 zfGr$&v#1w2`4J{WF9Ei&QEy3ax`LGZ2os{00DA(yuNs)#pjr0>lJ4_8rocXt-b@84 z_i^u-^q2tKbnn=bH?kFE)#uS6Ks#|4(&cau`}NUrwSw&WIBAo<*F)Q6Ibsca*$VRO zWAD4#QvGcmZS(P=aRJ+qiYI~?3P1o6x-g=wSszh@MxW>>*yfib&~FQRCn{s=GlOUU zh+cwi?hR>8ZMuRC`Uq{JmO#55s{b~yxIwe-h>_YuPBar}3pLU$IU-X*hJ1uJ(R+Pp zTX1r=f*kogIO?Gd88gwlgma6Q`hK;7O!x?G(swJ+w$yth#K+!~6lVe2D(#s#bSf#E z+AJIlQuGz^WCdyQ@so_`C(wqvmd8+>(3fecN?#2sL@~j(*|XTV!}^J%$x5%Pm+vqE z_n^tN4LM2;Jdx1Xt*J_nS%(R>k;txo>T9eQ0+Q^RQNRChuzk?h^3c#w^H$SZ@D+iV z_}}Mym-j24FStMJ`jzWJ&VI+b{grUZ|0n-EJ$3DY8dC$ug*QC|`=ZggrImp;KnPMY zFv_@SLjA~7OS&~|21Fux4e$Zhu0Ad)4ov6wixeky?RIm+M$)qFnn4(hTg%j#P z)*HsIzK&r60a+Z5Gnr6uS*9^cUAt&*SbAzPGNw$+-5qO!1u}3@LI|2Stkzs_7;CY_&^$VbfWu)J||yPn5XS8wJF!{%cerj`l6Ka&U0rCnf#@mzSji`#wC z+3xn`aE7xWc_j=*p&+z_hS4)q(q&*$f@W$Mxf+^Cl344V-HEow`ptX*JA!6DkTFCd_<&t4_yDdxmJfu<2v}k3YZafw2k>@0Zw~O` ze0(9?H@BSZ;U7^LSy_$5iLTL`IUiti%~*5FIKjLmeC*thCl?0yX7j;KFK^1Fse!dZ zVn?t5UJFS`NiYF;6uA@X4Xa%(3@%(;3)E&c#KakfS0C3fHE?|Y3_ERZ7zwHfhN%%0w4mNFY}NuF=vj?+9Go|HY=3;G2WvfnNp=aR2{>aQ^=@zFprX@4en- z?@gX}c+!vq{~C9v>$|QOyRJCD;C!m{R>y}NbB-4KyX;T0{n~c;n+O?9SB>KjWc6Af z!4i)@z(ymiXMx<60f#b z0$BVBu%q=R^eyNrG7e%CpXep=E0c}aBl@dzBBZMZ8e3GNc0kH4<*f>#_PKxRXt_a zV}fmr$#Kuj_4TH!NIHmHC8Wm$+v1tEnlq2|MYd{C4ie1*vK3+5LDzpYIIdQaauBy2 zi2izHo9w7r)1IvwoP*?hPk^@inI*VE{j7sxFu1I!e=A5~oldigoP!v}C;BP0p&mUy zSskHRu1(v48c>L00&Sia3mkHUUP*h+q^n3eh(IBF3AD$OSmmG|f~Z*yb_gFqQAN*5 zsv4|=L^FZ5Bxcn$?lBZAW)EYg>Qy~~(>Bpdpl!BYe6%;BwVBW09VEI1aDy|%S5D); zOA(E(Zn}!RgE(yy{q^7$Ga>ZOn>##NTag&FgXBA2z_$90EkF>z;zeY#X6E=*)meie z(ND0A)dK2)Vo9&TI!N>qXvfva%dz#Qs|M>J(MzD+&f*!z)|{#utb;@|fwsvbW5E-d ziorTa^j;s@7IbGT2J0ZvZ31mR?*!0iLH~5+sVX`U+C;wvXj@R8tr)C>B$6XQTMeKH zP*DRmNcJPlRS|>x7g+~!QB3p`X!GPd;FKfuDm6k)gLIJSCD7*g=8x8!&>r=4#ULFd zdh4Lg6YL$WS<)7ksfs~5NHh~@o514;Pek-tyJCC`LyjR_J`ZNPxlt##Qp8AKXgCFeaZ7APn+k#f%}@C+|(ZWQ0PxW&koIp21DVN z=hh?9QSJSJSp4##a$2CX4`z`L5xOYOoY+12C&Hg#Z ztm8}mQU9;~|J?lk=1TK3f-ep3Hiw!^%{|R`IxahIu>aUS?f(P+a^TMce-zm8ywmea z&r|&O07v1soBT~bZ2FAz>&_25UuQ4ayX+5lO3nv3e(p-S6xS`z|8_fF-*SE2^(K$c z{ayFpd4J;ly!Uw&ih5 zDCHnkGha-`OZ3hsYC@@?$Z+OaE|NP#vaU8)C??=&Y=PW)`uBMux%2e1b)jx2F~!FU z@PeJXkf`;s0=zjmS*Uf0+!>1Vy(M>sV%l%!!f-mi97~i*hfcjyyR%p>m*DteI7!r= zdOa^BYERw63#r=IF<~qUoz3N8nj&{Pp2Z8vosMfvD3^8Lk`A4Ij`o|fk|-q#$r9~t z%Q7z{zuB_H3(0S`ENZ_Ahuuo>7#0fTH_!YLFC=Qu{2?zSYR|mD_d(lc!)g3~NTAuN zluG$z5qJZrDXfkU~C>9(O8MjV5j@E-qwWVH&6HSLh_rZdvp)w;pjP> z+s=_Y&(x-IT}bXcqfO(+Tafhj^dn(B)Bgiw%J-K1<{4JlJ!i~dMA-5qcBc$ws`7Fk z-YdkEQ=ig=wK;*@dFtJ~ka+0SyEI`z%0+XfVxsPC|3xMQ(g!J?%*Uf8@|$P=LA$fo zA^Mx2=7sb(|4~z$1UiaxycDI+r}qoIklgA0CtgT8j zECNG7404(xM0kc3lg}9dBfoh@he^%xL>T;<_M0^!=}_>inlPUOO7mDQ7bka~`6(|X zcb@qPFQmQwF%!x)Q>fZ+^FpeYm7&kUxo>S$$epKuPrDP&j3@F+Ax4+#jshDn2UDkw9(J!2rz`a!MJ};zd_jn;yyQ>LnuVo@U z^Pfy8*FL?d@OSw;$#0(dnI;6Dm8hHq@Dkx^-9t4YQG0rn|4nk|nWt%LYoB}c&PVXS zNj!8~AF|q-n%vov)$Xi)T@hjMZ`l6-Yi%vnmX6T(LN5wkY5sci(_#Pr!%g!|r-SbX zCO&WAb+G^c9sl$FG2a(`zvsKt`?uaD_-cNOC*%G#^8bI|^&(f)`B~@h0RR6d9Gi|a zu>YS1{{PqhM&8V+s&Vvz_pDbQNn0usE%89-uy$WwHffNqM$vlolX4`9d&D&6gK? z3Hv8uh2NQAiTaARf0C-U*R~*teiF>$&$7UPTGDG&79e`blOhm9SkjxW8kGfzUJ|G6 z2fm+^dBUhHKr|C*$N5OOr5fsBM$CWkfyK7ij0Jk8>sSg5ehz8W}f+<%l z=_PdqjD8bn3vp#jdec=>SHRFqpgjx(QYY&%sViV;CeS{aCo)y6E5J664ZYWgwgoR| ztE94kp__-cTCh%hEG_82S|ybQ4E;Q`$J={O;_+>g=q1?hmih8#)-~joXz5~jpwFBY{L;OA!(7FnKiDjoJc4F#)&9 zV#$KubQNn0V8##8OTaw@1ZF33MXLI+8n}sO0&dKnqUjd8FB|+Edo`x34^{Q@Jtp8b zNoKR8Ia@VK3y>c3(1sOB^h6$+t{SBUh<+a0ogEGAZ_uoNDHx>%NP4q?Z1qeWr|8HG zXGz;upRC@Yx*d0piGGS~zPbwJ7&K0uhOAJ1sbiEDAc_gHg(v1Hy>Prk$B9u|faoR2 zo=^m2AE{Z-07zAh(gH*?LAFV{U}H}JCnoE0ri!HnaM~t%39?N;B#-QKq?Uqg6c-@6 z1#CmkjF?_^MBk%YMu*D(|4jQC8`SLkFZ)*=-*kM`e#Z57#~U2acdRa*P%e^hHZ+TwJ3hwux z3;iY_1Yhb~^Zt$ZSHAP!Kl4p^zvfE> zcY{~e`~-EUKX4!0{b!j5YOa9)BmUPzd}7U?@+bYb`t81d@qNtqM&Ap(&+#sLhrLla zt?)C?7lE10*zQOyDch_2yFDF!x3kUjbY!ci*w;Bfo$5_Z?I(7(y4yQvQx{qIl?ZdvLU*CN zqkU^3evyS=iEw9hpxm}SvOcx8c5$8krlB^!8!vCryf~984_;hB;pBF5Y^!%`VsD~{VA6kz7m_*0e-kexvz2!wU_UWZSLo`CsMPmsp+njy^XWXLuo^}F)z(0dv*$mjg_-!m|8=) zzS~yr9p9ZAkEYI^<%O%mrSQs3S{_ap&uSeq?pz!i%1fK;Tcay;XHWBY&UQ@aS2q@B z*E))4nVqCVg-myDcc&k?!Mo40!6rfile5jd+Ma=>iO!|1)#6n6Yzr^!9?e7-r`GpY z=ZDW~NHBWawYE6Z-`cJ83~!x%0K3x|PdX|rgMbV+9hG+ePKsNWUO=ADo~4DU<(@tu z?vLEg;-u->x!p)=V1HzLnWC?YsWpTYecil}qK|ES614;-{sDGpd0{a%TuKhL4-q?W z)EsXJiJdoU<7o(qoi}QZH-zLVyHNv}AtZL*sEwx~BzE4Y4VfV%cHXFA$Pf}cZ`7b! zE^e$X4-|Li2Z)`vmuOC?35lJym+?Ykr|reOkl1N^1urCa+Fr;DiJi6=@j_y!?WMes z*lByYCY&1DSlb#MTa$^Mz7O$2VyEwKcpwB?l{Bz8L33My>~iJgwe@Esy{IZ9oxzM!JY|)*y&~!7DI%Eimoi3J5MD8SZx~lx0#7@^Mc_FdW z#qyAdT4JZ`HT<2#PFIBqJH|R^c2fD#t{Abi<=woH*xB-4UP$b0c^5AvcDB5q7ZN*L z-oXoroh|R=g~ZO5_wYhuXUqGTux+K#6`RSgMR$muH(cd~#LgSo9(CHdlh}E~G=C?t z^M)t!LSp9)Q@oJac|(R55<72r0xu+X-ta^wG`<;#ogwzgl{SRL&d?fvC$TfM%nON~ zp$%S0>?uD*|^Q+EhJ0A*F>*gIH z`#bGVu)Az;`i<=W*Oa8HcnAVFAQn~={gXXPYH6)RhDO*oj$e`DmnFV1aa3>CBUwg4 z0iu@-oWgI?>k7DtoZhTQvap~4Mm&jL;{Q&@Pe5a-Oogx&qc`h4HYy4b%>;)+SX%Ge zkv+~-v7!J*vWQ-SQqxG5CEeMoQB#2ECQya0A=7Dt;ku4brmI*}08=7}e)60Q4tJRB z8|$7mb&S6Em8}{j1vdN2lOuca&6Ny|d%*3$1OOw+?|~(*$SUE4y5%MuT}#TfW41;~ z0ivHkTjsYPj?}ByOiopek^)38fi@C-Q2-vPH=(6)q^m|r0iu^cyB{_gIhP)(IjRLb zQ`Onp_5;yOpeF6#`4EL{P$g2l|4O`yArZLc{Lh)LeKVh#o zvzcnLiWLRe_Jg6H06U_H$VSC{JX=$&9iE)1Vo3pHrzRaI$mX|8^!o)=vR~8Z>|AY^ zil`;P9*zqWk#4fN=Gr4}R1_eZ39zBsPrFOPzR23k)1#nB^ z*4j~hhdO|4D!E!UstOSOmcZS(_q9?mRiml^p}H2pt4 zCi*G3k!i4g>A*BJ_&ugLRmHLbxQZu=3AhD%AH8Qs>P=UTx&lNm0e2c^*9IyYH0wP! z>Ix9e1l)Xq1&uWPIxfysjk*FvuLW>lfB3RhqpkqaEr1&m9ZlXk*VliwYSa}V`YnO` z`r5Nqqpko+pXR}hROH;yS;}xuRk5xBVvy)3;1(7o7WEos1&CgPZ2>8k^rov=Rsg>w ziC&8Bh{7+#ENN!^|LwNWe}(R7zSz_iYzs{JmweCgzTERB_lI1cbAHchhkAZ@+S+TM z;r#!3dhwd1aUk2EevvDvYZ7V|5gujZJ-215=HvzMQG?D-rdvQWtM@ut_sDRd41;RgOWm zDnPERfW0yHq=KK~YLVa=l%9@S991ZTW6{*|waYbAGj-1@lvFMP)kZF_ejf@p#S~Lh zS+ig&Gz+H2Wwo>jL?WSPZ&ZC$p$57XiNoQ^ND|7FS+W!c71nL_M8k~-^{$$w+^iIa zV#bL)RGc@n6l(G|ZWb(st9eU-u_TfJ7KeyhVmhhdqY4Eo6_}N!s2qtamQ005HF=j* z&nVs4)JHZj)hG#UW)m!c8#fE4!qvQ~GL+GdL$EF!j={MQ^-&GOa6(CEs0kcTKnTR5 zsjy&)Sbf*r*}zmVC7b{f8u*_HeiefuT6=loGs&7oQzZevk^;l0z+ysyg4A&~E5)Gl zy$lmG)Ob%?1~5dt>PuKO9@R%QFx99;Z)z&Cc?nOjg3Y3-abW_Mip@NL zfjvQr0w+%-3RTx*_*#vC^$^K|_m9e-X9>VCEva!#OYfTUwTIPAt)GCEa3mMc0SyGd zDgvY?FUK%s!i}olESL&c^QOw`X%QunOaRMgBCZZ9P+uyE1iWb^c;i?dRCrXQmMjHA z`-d`1`C2Po$%USUV*k>@&Z>@It%wZlIRN`BR+t4#DGRB5ISkWE9p|~aTcuwO4iK)c zF@{?qv=`|7A^254Bf(q=BKI60#M1pa#{Y+N`CGA_Q{OEdzDT>wUnkt{H1SxIA`oQ^Lf&V+`&c z=7USZb)sPqo5LU}_vA{K;WI@vOut$fT)4VsuazfP7+f`MZDRfLo?P|&|6#W0tLOjQ zL*EEJClrDG|ED!Stm$J-L&5(Oe0A`FfqMfh{-5|??Qi#e+_&Vr$@^;W<2>K?EO~Bl zzt{bE;M9A8>x}c=&L=y*<#?_mYJa!=iFPk2JjtJ(17yojJ^InUn{&oDH6bjxs($vv zdmCO}Np*b^#tA;5A`RB!uslf-@?@RVrS-nW;@57;&$@u;H44I)wmKER?$MFNr+`9!Wt9U$R8#?EraCo*vrp0XFaj-MfB&CH_A z0g~+7+o@d@N^j^gtf=6NLH+s*!{K-(3JYpDaFB?d&|65+&%9-Ps1t7?r-0xs_IYmB%q&VD zAVL34II$RdiMLFiLv%_!rfwMsnxR?u6;kvwUm2Q3UxlNR90Br1c=S|X#Unrw2C*V_ zzb$bhUrih!g+H6J%C%2@;wyC>DfS#c`^}nlU?FqA{ut^J1mY^w#}J*R;QorB8=7@z zA#cC_80xwOXF)_E2@xYH1_1{3F^nV>D4-z2P6hCip2%6L17!4Pz%qgb#98KUVUYvT zqNtWtk~u&^f95SiuQhL(Klw^jOBmQWKvI9^Ekn29tpt3ROEAkT8nl2;62fXQ!6!g+ zLT?$Q|2ZSxK)i+DD56_1_+ZwoW6L1@Cwi@U3+dxU-El1+Waj`$|CzUpKJ(s^5>QPY zV#`37E2|G8U@Hn=8{w#0*5+gnV(I|P0WfSCAq(m)b-^oky#eGBddAWLRsy&QCoMxS z@s|0dr3L`hASU;N*sMQ?SOb9h%FxXFO5I^lgI>T*8OG-@ECDr|3=uEz-^rfCi36+> zz$Pst=0SYbpy&KL3+5XPbm+jc8*f8HEpb(&NedzixR@851~`` z8L=2kzDi)3OhGp^Yrv{v`2YqiLpSfMSQvH`Vt^~){lj%uScZLp2t1Q<2;QB@S=p*l zTY$t}_#I<4*N4vmVBr->-9F_$(qwh(j#-wf8np$8ezIc>A;kLZElscXO-SPapjXyB zmZ}=H1&CfU$b7wcEgYnOYjS!eE%{`!inRqWH;L$_JH|r2t)mH(kZj0yx_dy#$sf`I$#)hEONdoUIy#1&C%L6#@zi@JvTX>W^spr>jO` z0iwS?6~csz?MQbgYqe~Q!U80gCg2)27Wl+1&<~L`Az4vxX3k;X|FbOr|1+W8(Cy8y zYaVR+Y131iZV%oU90~jsvi~3K|6BhCaOB_Z>-PS=cf)&&=e3@0_xIh~?hCFDyZW3z zaK6HM(eXEq1^W-}FSS3$_F>yB|M{OeK+ZSqd!+=F&#_{nOd0J>XXu#9`=$urD|$1t zVfz4i-`EVDuj%Gz9XT#1)zl)`-@q+&AV-ENI~s|>V;euwq?0;mRbM;o%^z0sVL2BE zZgTqY^6xE3e2_1z+bi|&XT6yjlsQ0JIOZ%vFL@RkIV%FuZvKM>oQ2Iy_s#)Q!?7va z&@DJiO2EcI0+^>`aojG5K_mf|F%U|C@0b&M3yI^Hx8h0>SUDB=SR~%UOf~v;0k;4z z6}(XeZ(+0UEhLO%-ZJ!B@D}j7;p0*NlM!szp@n>L3|fY6!CQ*@CQHh&qF2-xS{UL5 z@Fg6Eby)JG&@zbRa*=ohxWmg*I6|GJKJWEChZ;PPGtr=#8I(RiA~~F9iC*F?lSL&C z18fY6nq!c}Q(J%|l^g?>(PQ3KkgXy?$UsTJ#*-SngI!d}cYr_w%v7*Djz4kC;9cs# zpqhgc8am-V@fE)6IA6ssN6qmD&AP9UYL5BJ(0g59L4*=2CYTHkH0!WJqB#aDLo@Fy zIUbiGq9Ox~*zP1OnxMut_z$>ePUtFRpwqvDi%F>0QLbb06;^mK_|eOf@WH1yGlMb* z$UVoN!DLd`OI+1p#sb|kp7-HK2b-Dhtpntp8^r~1ao^#{T5CnG14hVV{zC7 zgsN>Pj0vX>3|_h%jAleGN6K}4+i{aohK}Qr8quDZw&cqkATOOZyVvwu@)b+k5OhPc z?ki-bW4EgSbH^_8i_R!lVKP(Di)t^Z|0%X;XVm zFL9Rn)DER&&47%}%vC!FNMff=?KRD!s}ky?EK6aCKdDnYq+&uK3KB9PsqLh=LYg~< zE10Upaw#SNf}RVZ6@VKyGlS9x$Z^M9WvI2{D)`J720_)Vt=D%BkmZiK%FxWaN`{Sw zL>y8#A$Lk!FhJ})0gP!-%jjf5yNLs2!DFr}lyl{LQU+L)N6=)!p!VG4wT{iqRha`M zzhjS}p_aI+(aa7?%(i8)S$_nP`;I+=hHk-GvdYs5X;$Dcb-IF30c`leJRgC$!3n1; zB*kOCDno6RL_vw>=)&D(W>-6Ijy9#XU_eSd1}j4?@l~TI5a3`2D`?iAz}wX?4F)Si zGw&&={{i)7ASGIc&5XwQTpJ5s#gP6E!muS%N$ss0yD?BcL_E#%`E?a-q!Mf z(4EbXZ%PH{1HbEksqYQm4|qP~{*LRvVQ>H8j>p<3Z1emV{c->O^zyY1Esf;nv-KHa zMztImSDN}IUx`5$42HTIG-Dcxwk5A$&1Zx`@|*gJ0rQ*^jo>)}hz-GKM-oB-@Z4F> zXoT!}YZ;B@YwZmzjg(`GX=tRT}SwUjhd zOZ8@cOw~m;q*X)C2gKLom<6K1f-eq-Kj2UVSZp<+5#p!T26g6IYa>&0Wko4KLZgYP zkhq667ED#QbHJN&6250}VHJ)`5!h-?s9|&Xez0mPjH;!KMtD*mUo*A- zNe##HW%vdyBL#51O%SMK`%Vp->rG`>^QOZ43pN0t$f2Sh4N&nbL9_|hNbtPCQt}vs z8mZ5FYmDE=)hw;YuMtNS@LLN>3YM}+rC=#E^OnkSNUnzeK=N%OfeE>=gbXL)l?k&H zq`)Su4k`qG6BZxU$2Kt4hyseH>H$U0RK1xq6`KW9qcR+sS5LV>p{pnhCd$c}1i4dk z4Bokx&$+<-YxPLPV;Y!hgz!XD)$dL<(#V;rH*=<9vtX*4bR5P24P>HexoKfoi^bst z40ymYfZ^hN`kK zwh&9O2w;fyMXbJS9^JrHBZ6jTDhtL5rm|+iRA}Z+RnG}PR+tijlRZiTQ=Q;l1BbTY zKZ+Wiwqz=t6M!8iNFEGd!T(+khqbk^_*yMryHYc?egZb)U!tjcn2s}5Z{|$JX5Lho zfFZ3?Wfy>jk(MzC1+vr}iDVMS*^;H0c5NBI$(p706EIALTExxFQWj(rEM?7trO?b< z3V~I~$V$RAoP<{^8&pWgf_ygEwTIBXwYMq^s@exjgF16fX<(`meKIqZ1<3?cS+ig& zH1npypsFh+__B$qPb@AA;iN3=f5D3ecA~8viGUPWI1*v?wVG&PsuAxpGgbXi z5VK~%RA?4Vh1~_%hk-p18OlJiPv9hEuc$j&YRwkQuhk@fETZuWBHqAMBl;uS1hE9+ z^b!kE38$CzX5Lg-K|rJ%UMz4h3vdjh8irG|kpw^&7QqRN2ekmeP!_@J3L@6PR3mm{ zYO1>H%Dq-G8mBgMqY92m#6(lU$aoCit+KjEQcaD)Q>x}rswsyMTeNu88{Rebhg}+t zYWbR6GqrvKHi9pvHerN_dsg+pk!Y$SKCAHU0{PPrnulqa;aB}9EEeGyCoGpNS&HX( z!j=YA{r-QrZPnItPs`=dXF^X2Ihy~hc?ekf_nRIVyeBvi_;FxAaLNBM|FG{zzE}Gm z=)Kpw?D?_hRh~BY$K1>A2e{tj$~b@J{8MMY<42BHIj-2hWPghNfwucVrRksa0TQWU zBx5N(mYOLSR=Y;pNM6bimydsdo51ZyNW1Ba#K};PO6lz2>Nlby4n5hCa)@Sl_ z+CD-004db?9*eOTGZjZ_&K@9%+U@Gb7U{8&n38~HgSn!kJ#zH`snn2NiRiCSOzG$q z*_AB$J9~hHYS{aMjnQ0geWhz=F)3uGfLqj6b-i~a33dn6W_Tv*GngP8$HsH=0BO~3 zRJ}v=lZ>l~K&An?Ee#dJPQMNm2UYJa)`_KwCCR{%PomsHE{hWe$)-4P*PH#{}B7AgtKu2E(TpdCVRl zks1#V0o-s{OMKiLk0N|nuu+^oKsq&K#Up*M2e*0FRb$80D#aWiryAR$3rF(#f>eNF z-aJHTSQUbgk;_;Xw=O9|Z)TlNA0VF^i{l!4iNj6exTpd+FyLtseh`|O=A8p%QcK|` zxuIEzd8+|3m|&sSyu=oQkXxl@?Zd%tSO?-y96S30S=N}ZV4oZgkB18iEf$VT8m{ZG zsKZIktXcOJva2y)8G5hlE9o-CdPQGhv+gUTS7W|1H1ocaA(sXYgTsa#d=#i_4%jV+ z1l1_Kp<$EdguX%oHqBQMlrASC#S-0jGV_&AAIkX(o0&zK1EgPLn{>IFUgE3TgDfaX z!Y6@%EQq?x+C02{fD~+Olg`jBcng-DaKu_Y4usitY7iR!35V(7T*3*Rh5T&HS*2($ zUsmGfJT1E|oXx=<0EnrX83fI`vyhifODd@8wd5@LI5yJ_%}n?90kX1bNd-0Cg0mps z0w`^O6gG~#zW}fpe4znBN)o=Y@fVK$6e3+4bC$86LS`)BvN0QG+*}bsA!(zZK0vlM z_7oa=iL=aSEC7&@GK8Z8&H7V_d~NJ0G&J+BQrSdQngSW#S{M2#Q$odI= zW$?M>j2#)`DpH)usWtkMk9vY53ej^&em(J-JY;%f$TD_yh_{3Z1U79T^BBpvsYQA-^H%x*Io=qu z486o#CdksagE%Pb%{sD>-HrLm(9HV^@>C$V2OdEP+G2VgM7W|5%>$^Qv%;F0MQs27=eCxcLXT*ET+;+({O|bh_InRzejRH%93&O!7Yw&b(NOaXZD7=1RtpELzsv|$6P{E zB5bbr0lT_ptd+rq5PF#3!#v*L0&2(14IAmmjrEq5#pJ+(U>JnZA@9Y!Sp{>wVeIPb z7$&fhsFfS)wn2_<*r>T-OH(Tw8>@ZcLTXO10OACY8))9F&U^KSv8%6Rm;gxi&3XR} z8);xzVYWRo);+N}n-MLD87VS=Mx-2(pkOQII~T*E+b{T}nNM{L;Kuu^VM z8QGp0oSf|!43pt-1RScYpI4|EaBEPzd# z7<}=luK+rEXwB*>hC)%l`nZM(xk|@2Y|z}W;#z#IZ7A87?AsPBkQF#3rDCq$Fl<)m zlzPM1)z>kMpFGrA(QMMU`pSb@alqWL?!9PwGZLSf-d+|gfU@(DdSl)!ju^Z8n1%t1 zXY_s=)^BcD*Tm?EvJ#)`ORG-}9U2JU!!a-;=}dcRYt8(K=~rLJFn(54nYZirmyQj^ zK6As!Mulh?>;mCAZO&e`S=|buP-J@;QsS6~0hunh8+ts$fH1C?8OE=^NRV1E4CCF} ztXRMLg7c|@VYRElUg7GRy(e0IL72Zj8HZVqzhWVAWn*t+v$O<6**)6e-h7r%>d<59 zx(|%pT|In`gDW=U;Bw9UMzNaW0DQZ^Gn|C;gcvT0z|l+yi9p~M;<%PKih)3^-Vf|+ ziTz!l0NdTbR3oq~nyN>?IaBp!&QxsXO@(z2Pz@ANXJ4SA1Xe{kHFR@5j9>-m{*+@;uRFcOSUBUEg=T)b$wWH=WOPKE!daW6^QO z{$6|D?gzEMxj)%Mq@Bb4M6$pXwwvKQgx?j{mY4iCzuwF|GkJ*gbGY41^w(`St5Y%E z2-P(-Xl9C2hsZsL@l&FhMsC!Z|JZudhsZ34@l&FgY&Q?W0jZN{P8}k*9N%NI-He+C zC+IQq%JDrG<8sH=oIOO|I366rX0!Tap2Qo=RtGAS$}BzuS)a@c$F zi6KB+UH)^uXI~OXjYXZNH|x+wrZ|K)(NCc*B$((L8vLFPZRCnWpb*6b+VEnihqfiX z=|kj+L!c171ls*j@#7?#Q-=l*9MMdmjgfdWUpDwT=85zn^1$&uJ{sDVe33mw7C0Up z0<@vt1rKdY`lk<(>kacLh(~y6cXl+ezd~!K8^rAd(wKQemR=_oW7lUXmGj_y#(2#aQeku z#nG-v9U`Y2K8r*%K{kHGn{@4Hz3D?_Y(r!dz1Ksw1s`V*k+h8mhk$HI#TB1*3;L%I zZR(Z@BAfKQ9@!=tLOR46jDm*j10-j|&XXVmk8BJ82#VBL0v`CS9}U*b^rsGxr45IZ z=qJb)3U9`)Skj9OZMsSLbSbx(8$iId#A^j!5?n{~sqop1j%xgq50k)7p zX2}zo17u#qJyoKY0K2xQdTeiG50HJ0M~47yh@yzlw&0Vi2S~z(>k-oTdT5)iM=W_J zdw^7I*n1LZ;<1e}APy8PoP_0qsMGXj9otCAh8QIJDYp4_tFEBI&*^%Rh>h1vunp0S z`q|l%-pK>xV8gcz=`X={hcLHVQk**2sBP*J#RS^O=49r{26iwegbVswlr7FzlOmc_4l--wba3qsu;0N6ccR2@k#;PsGvbJgG!*O+4cn||2*jOI{tPjjjH z&cI^=mjX`zxBMUXzsdiH{&j!KulR5A{kQMyz7P9e=X)+x7Z_=YHNC6lTvL0~lbfFE zlY9^G{@nW|?+3hx-fP}j=Ns*J*-zPLoG)-WT)$=Sb6s@)i}PdNe(z=P4R9vmbDsBl zUgLS1r{L-GJlxX+{DlALeuw)N?%#Gl5x5D5TgD(V@n?>&Iiil|wA|bB4R@>iL2j?> z-&~(`{iW;0u5DMwu~sTvaNTi-W34xz7}yGDI_8o+14|Q~OIxeOsqm#&@WSrVOmuN- zeQ$Ms_|nUHVJV;Mn_pYp?2ipydKoXAQug<@mKSGI<-toYWx{YzVQygyHY*CLsr|(6 zR(E^nZ0gbrcwtUj=q_}3v~MlMFFl_Z?u-tU+qOs6r`FakJ&zaWcjM)aTzE4X-o5k( zypZ~{bA92N^~rH!=WP*QNRV)w#0v=$ zZi_PEVq0u=W+;o449gNYIxn%|&*{=Eqaf#Y+`l*jCzGPRRrD$@bAp zck{xHd1*e`vr|ZHtXz5xFI*iig;!?M@^HF%>5q9K@$IEo^TOGV>HO-(!t7c{@zSe! zVIk9<+uiAh7<~7oS2E$;(&RvAVQh9`olJqjq9#oCt}R9erq{N}8?X8MypYUs%|GOY z&-vnh2)LW{5@VsUT4k!&I`$lzxfBekl5M$f0%G$b7g!y7u^`i5IdXR z%nON~O>g0a#LlL_;DyA_rnm7zVrSEvcpCbr~v9swfc_Fd0>8(sSG_ljUGEiJt z+aY$kf5Hoio$mkSg~U$xk9i@n)BST^NbGcLjyF0)>~w2LFoeWT_fL7X#7_6mn6P(! zbT_u&KAVgZQ|uZv4IwebuEC^dVmhAhSPRQ5#6y9PGqr}0s15urFC=OMALE6@LxE57 zLgJyoy}XckDDY8UNIVp{j~5aT1wO%q?S*1^YIk{dU}|q`W=q-{9U7iVoYQb?2-mwt zhuXUbGh4;zxj*CYTv?b*%y0F}oATf}?Qt;fT-w|p7+!5#-0bZ=r#(o9aBh6JyLYEm znqHqg_eNfAdA^uRcEvlFXU5NI?-k?D{9>YWuz$C&w|C;4_N)+LIyODAw$MJ&vv=+d zyxPg(-l@*5wYG`2-gEZ|!lA+V{>n&a`&#jw_Iw&@CnLklv(uR}%n;|a*OehmmBKS} z@0`3csGQSYbcS#|*V8E}qg`D))918@*AR~N_l1?g#s1jB`Z?|4HH0I*18q|GX7A2i z-?`WGz3p3?4lgOA(#+26IrfTNGw$r^7+YE1h_{yW1Lt1H-`P4FO%8UiFHg?*ozvz7 zscn2V)ipCZze^DBX=ZmCLV|ct3oj&y_cZZBf_TpjypSN?6X1me@tz1}AwTu``(Fg~ZO_bjynE zX44%zyo)T9$eaE)nW^mT?H%5k-RqZfWC3yU#k`QNzh1-(>6-5)OlbI(I6e3T{!X%r zy7)pAlHRWGwv~Iwcc;dqsoNgS?v%?*k?l-!C_hhDs28-!!Vr=b>ILnQH-x0O7qo}S z5E3U`(B=a}NSts%dx#7nG35fA6p1Nh{dHT6*=ejZiJiAHK(89Y?TOTEYihb{WpCqF zKYu4#E#B(mg=DpOtCtrp4h`j{&GoI(mAP9zypZ(vR-lT9FDud^f}vYoOlYjcyVe$G z`dhn|p5d+AuJA%)%56zrNKCm+;f2JM+Y-Exm~vYjg=+?=2@)>8lot{VU3?i68sA4` zJTJZto~~O>pD?wNb;uYp;)Gk->_yy1zBq1mu-}9)jqcs<&fZwOBeA4xukP>mboAZ+ zC|=mJv@o^Y)3;mbh}?de?f+M8Ew6?8f8T-q|3vdwo1fkM(580<>>vt}0g$Q~kjKL)ahW-?ns-~={| z6L&!=m-@(xCH>Qfk5?l$xcxx%lc{=exTB+2*jTfqJbQ>N{@8hv)=yp%&}FFAt7g-4 zooCtmcn%3NQtI=^5*j7(vm}I@MX6BsKA(HPS1c`ovZ78-@|G=|DAlKDvaO)Gj1llSC zQQhXSCB5lGJXXrc~1~%!&%Z3^%$A+`5qH!n@rl4e33mw z?tC5_0z$euhzx_q3qiGG4?poVIop+U3$$RJlf0);3h(8fbz^|LniOwF%1Yi4@Whe(Bw zKp}bww1Tu1Fms89v`*0&O8_%94vShe(Bwvo`55fp&vg+rsc=50UJihlc=e zNKqFjC=2?p9wO^Kf}8Z+3b-w3&mJQ4J@%fQ*%H95o~IH<6pv={c`uU6<|FGQIFpAD zF}Bu>Ghr0mKoY>C&4S|8Au`+}R7l4OxP_cBt!LsCgFmMeM;$&$?J$Cy=q2Dz!;#>V z^%&{v`5qH+3n>x0FB|+EdmJ-|$X}1(COy7BxGi`&dx#A7JUj$&!-DigKDl~$N%b~@ zoAliZxGnV_>FQbUjdOcExFN$_AQ=PC!|^v|1B`Xxgz!M5;~bX0$VT|%F@4MKXNmteaC&SD&+$MHz5$G52C$a{id zTQPac8+tgVv%aJc&l^vp;R%9m(>2KvK8|Z22-(A%Rn0s$cx0=DF5CWScIw8!L~8wGX|3=fSpJ`@?O%*ZQ92oAV9$9_2gj{fYPU-uHR$_CDQP z^mcn6;cfQ(z_srDZ&%8tI3M8Nas8pkXYX=<*L}(LamS(i?_A$|=aTbv&JR1EYk!U7 z2K&>3e;<5n@TI|Bh*LZ^cze(l_;%pFz@G>HD6kQj3?u^={J-}9v;QOhd;EXkU-pms zW&c^IWB6s?2X(tZtE&AepuY`V(fAKWQFim=^D7JUBfZMOGTFP|wz@p9*f+78 z?3|7i7b53bu#E^O7b2VchAt@*V2y9h&LxnOWN(A3FPWzC-2qss6TNA)090JkLUd0xDWtamz}Sk9mQ1}|Km7#vYr=OgQx*0cZ2gofisMi-Zh ztG(e^TmF0xf9LrAd#DvCRw=Lz`=0`@Sl)=vP)4XslxzstB zm`*45CeNpM;Yj=3a3(!9y%y~}Kf((qr;6o~(Xpxixz_W;yl^AEvQ}7W+siCHGvQ%xp~d%-W?&F}8{S!3InVZ@h_G|7Jdu*-@`Fo#=bsSzrR_@NneiwIvvaS#EDuSY<9(@x z#m;>tvNP4SlDehJ3->lBlj~D*Ysd2PEiBt**SK>uJvp|uu#;1y*;`n)3la8iE{0>n zom;CjqqneZ7a}B2_AM;iW!FGF3HqO9X(>cV_Akz|%rGJ(`xj^P%oIZ{dCJZ{i5HT5 zptCt%NaFfupUex%j=DfqrBTPDU!$0ss(xDqZ#S2M?Zukr@BptfpvrL#=gt?$~Y=0|4 z93RqN=!TFuKBT=|4Iy!S=qtQh;`k7IMeZ4Q5<5d*;_oDOhQ7=TiJc*~P9SQDogwz- z-HZ2yi;Icq%1|e<)AnCXtsx|K+Wwmt5<6|bY`!HzVrPiW)I><^46*r^2#K8`_Ua%) zVrPiG=!lTm8Deuh5fVE?+WT`SI^Q?ZF+Dm?v$R5=LnrJSLTcwf@j_}RdmPA})Xp#R zcTzjqQ%3HjcK&bvPHN}pc_Fp)3rx6{TN~b+>Rs>eC8jv;;Dy8##{+pGF~#v9CR|!u z&+SZ(PM7u?|?ATtPpI_S=Ti@=oYp*LROw9GpZBEH@#;(1Q7PtGNv)%2> zVVZh)>Jl@>5E2ia(wtxjiHA;IHm3T|vMH5(uatB9?Y+^xnasl4*)Q8{cK1iPen z(0_*R4n4N{>&;Jx{r|sj+G@Hj_>o`<^7-!x4ETTSf3?5e_ivD;e;4fkZ+LIU-ptcXj9W2e)E4)hsIHe%y4+PFF7@|F6|Kv z^QUnlP;w^$gj!sHxz?=5w2aaOL@$A2FC+xi$FyoH8Z_%sIHNQH(M;YmP@u3bx@S#q z`p_s%K=hIaR*Y#`)0{mtN)r&xgo+a=A0s^j|%Evg&Qzi6Hvxu{|-?Iy8O~&twm= zGyz7N(`_q-uGma|ExIFs8*0FCadPNAFoOY0mhiKzS;rujD8TqT(NDn5C+Jw!iv_)NwZnoWD=C293y`q9&BRG`mBxR1aQ_S`U$Y%RVMV%g5uO6))PRS5XA)9G4YYJ zpm*{RYYFfjCdh8(3)R$2ZeWN0h#R#6NQViqk;t+h*cLjRImB84xP46Y5@0u&v@Ph) z9*(M$Dvu5U+VD>2wjHhcWcmbQ1^vkq-64uD7@`s<+0Z#`O4JaIUvdL4_u6U7AD+xg^y6RFgm8)}(#6jkQ2#NtkbO=*jjVOwUf(S~GsDc3`_C%*Q{TM{oDKOv-b+!PwJZT?sooi#~*tB!E+mA`g>m6 z&DLLcea87+$NzR*u@Bl-;6wj4e;}K0Rmr|6W#%X6{9r7W%ndd&2|wh;_Olm!s6=5d zX57QC+YM=o+4}tGQh`^@6&nl{d`m~Qz{pO;pn+d4SEkpOi7}mtUNQdZ zvnytrbpH(bm&@jg?MK&^7E3cj3E!caV%#mtpcrH|HH;W22A@8oVl0n`KI7-vviSlP zOXiAAE^Qo5?)4Anr{|1{MWB*6(?C*;iP`f~8ZrFzDT*2LF9Q|zSzFJh7^EpKa>e8{ z#Y5H2vDk2Sd}MUXpg|xGiKUe}rVkte&r5@1+NTX+Ch%!ZUn^;f<%tMkEdig&M8rN> zPg9(Hs9-+0Ytg~*?n)S(cxEIU#I6T@*C4;HxtQ%d>ENoL)|9of&hU!7`sA%=8(d&* z-dwT7&c{z?`mBnkA`B4dU0JYP-3Z?TYD$fnxaSQxwxrM;I}PrO_7_KJ$n@&s?#i-O_$yXK6RRCl#ZC z5n~g~C$BS#SYBt;PoGsWR?FRFrk&x*@T2C6RaV1^gVEld_`#83Xuu&ihIt$HRMf=! z5#!=>DE26y3^{YfYMaXo6P1;%k-nNyvG6sh3uP{5Q%_P1KYfZ~`n3_L2sV3^i^p@# z70bl?gY%*2RCN5npg|aNl*<)nfT1XscVCJ)c#2~39D{f--=o}p-7r^dsJvNOUOXtw z71;t#I0r`uuqwi?(p=1*gk;3DPoGgSSUjYvbR>j!O(W6@x7t9qSr>X|U@C;Sj zdBD(UV!dKqd{)KSt-+&HEN!kBIa4zzh9_vo5!1wa#klyaia{ZkNBMwGnJY%lRP>4| zCn$LTMb;EmEN!V&@!8&RV7Y&k@1*?x|5w=k|47$AbiK0cn)kEb7hwMXmCo*tw|C5Y zzUz52#Q*eb6RWtQv;e^+r&w5n)ug|-#!c5nX#s*u zjqgC@nyC+-A&{4rswTY-5ePRsGL$ zvC2R!Er84>_=MR|h*<8oC0ws|+(~c=v#~_8S;w0E9Pe+cj+F)QK$+kYW)I;3$C-hX zbx~M=025;43CWpp({)i;fZ(1+YzrpN)kR?ef^0%;IUv&-HL`V4Sb*Tm#Fq1)SOd@1 zMPUK*!e!t!dl@nk0^Y0Sa7y;GC{}sW%J_#oA^3#Xe)&d2L6H4uG_g8iL}38}Oo%NP z7SI4p^@u9jMACI9>oDFt5L`m+1Qf(Fg*e3&$+{>kK#&Qu<@`8Sdn^hI5ZqIl4Wo35 zjdOKTSb!iKm<@-+Qc$h6p5LfrVF7gTA^3V`n>hF==%?5__lT%0Kwi0JYUAs$VLb7L z+xQ&fVugW^h{^&4pHSOmw`2h~@d#EHz$-O^OPPJ1?xr6Rg#`#KA$D&N>bA?z7z-Uv zJ|YSW5M)AZDA|1u+{`1QumHgQw-0CHI9bM6sQSb$&~s15l~*rA2~abp2L`^W)X zMz~+5IPcL@+vwqAwezH|fH-rJnT_Wm`pzpyD<=L{?0hEVQ<+Wb3J83{?2zOIVHKCu z6%e?D+43&Q8gBX#tSf+PHaUYL)SisVLG;#;laG+X0;0#1+7dmi;btBog#`reDb%)x zoqJ@HQ4crT#2O~lmS4iG;oo?K6c!MD*HhahwU0IQ+#{l}06BIuaGM>88M%GBb9(X- zEG&QbZ6;{6-%%e+6-`O(f5sQ>qS9fgi| z&s#m??O%tC{ZWXVzv;f#_Nlf_$hiMIt+`gG>(^aL=eL}%gUkS5blh}2&Hk767uqk| zK45#m=4^S}f86^&LrT_#4+ObbCaez0n?3(^c5iIh_^4vOZe;41W03o;i3{sfSPec0 z7O-=5k!6tdS^$6S z8+L~9vnWEtA#w~7WWsF2me-OY(sj%+h))=TOPFnRTT^>{Yg^>%BEuj-mU#^| zg5*SO*6_3Sn6?oi_LR}&0j9K;wjnC6sU5%zmXBYij`;;~!6vwb)}}k`TN=Z! z*f>}Bi*1PTg^`KPGONn3)3?G8$CVS%Y#lQU;trei-2$<1WpFhWQC%b$Bu*@PV#Aq8 z#E_=Sr}(PK zP1i+wK>|yNJp#`cbBNOnA<_#HWWsFO&C{BJGj)+(kl>!iY*lS@RWx#l^nwIi&uk=z zoTtiK-*41KdO?D(XSUg~h|>F8TRc}6=>>@!lY!dI#Yi#(_g0ci+`>C6b9qwpj-~1% zy&%CS)HVe5X$VbzPn|O&y&wUm+%_IF@SfcgH(eL$1qm)8_iWU#r&M*mC33QUA6o)( zmJ?(`ZaJvWnkCY8OfQJL5rRv|ZL%A&)Z<)TBo`#e25K|+m?o+>5%V#;Q5VSt3BI1% zChv~c?2@aCDQadx=1ca@Cmgc521WmWZ~L0Sr^F#2`**!xp32U zkzA1A5@yfEOs;<{^;jeqB*=u>=d(n*E|Lop+*6r-`q<^_BDo+zHZVJ8y6l~f&)@&w z(b9ba@&DiIdM)Jt|D5;v-uoc`|7Pbs9q;LQuIGE6N8tYdpW9#8{%rS`+%MJc|KHzQ zX>E1A)ivt;U(VM$?{|FF@k+;2?4Pu++V8Nv*Os@nx4h#&_Wd8xl67$qGBA6XC?``h zBfbK6P0!VX56{~v?kyU`;5;9M5e`0!8t3uoo zIawE31qd=Bvte&z2{&CASp^90t;uW&Iae211qia9%&^JLRNE!6(FqLlz?; zP6tlbMOFaj^|WECL5gxhjHW^1^q zI%XA+J50DeZP+PT?662GKsrpQZMYt`gqyC5qyhw&P}^j0Z3#J77fA&OvP^823P#>r zTf)!QMN$ERe=4ypf#>QXsQ`%{l!?twu;nKX;6q5E;R;w4tHc&b1qePRwjAQh2zWYh zvM!Pe5MV-VgP)Qm+;kn23g9~!!6n2_MCBS0R(mY63J_$%?4bOZvDjnGDj@gxRA!%U z<6K?j6d*m8navV+%MV^lJ!HF{=Q&KoNXBwaw1@ zEcRZc6(E${15Va4tpJjn026W>-a;+mrt2cF z0Kp~Xp7zN}%Qy*7>oI%(zpdquMg0HkJnwJ++jcL!`@`%SE6I24ncK3P&JxJ>?@uSTT&H5AYiMc53_2fYUQCFP1THkt_Di^Kq&}4G1Do6SMLT@ zx!9m8h-FnnK-5Si6pF&w2K`LaU=-$T%pZvdz)vV@NmB>}3PV{?i&J%5(^S7I#r>6F zsp2mdOb0cJ$4CZEx!9m7h-FQKQD4{}^8r_*kx)2{gBk$c1BI!^f6Xlc}nTB~?*uP&Mv@On0$h2xuD#20>LAVJPS0 zgSV?lAndcY00V&y!MV*<-Dsj}IpQw|%f%qR*cnyDB&bcqMpdIm0*Aw)Py`;J@ZK1V z09+0tB1KD4f=DrFuj`d6kFg5j~5zGaoEN-iNt4I6-L z1=j2#)W+7xWf?9>|^^SBr3n~e|vGaxAm$tpZeLK_-?C*Lx)DZlwj&JDe|GDd3U+liS z{Rf^)T_0@!O4oPWKLS+)Q=V;h$bt1HCNt{`+sSG^T^b?6G$|U%iIs;JG$D=Tu*~x*8J3*XdHz&xBcZXP_lZ3mqHqFI*II-;oUayHX65C$j zl@ccl)s^L1CSL5#lJUII%Pk}t$#`Dq=Z%D#iNWQ?!`M*paH;2|a^rrqytco2bP)HA z_B<#z9?T@xs&f;wiM8FHm&=VuN5fNv^5j~g6zO?|+(^o__56g~I4wq{=Vfvu8I_(L zxsi-Y&z{^!My2N^aw8d)o+I8UrXU#=53l(}rXU#=&!@dzEq5BuI1!F8fLP`VufRqc ziA}HYB8a3hHB_nOgZ}yPrI9Pom0^>!f$Vy$e`|N9?+ULaM7}w9keZs9FDI6E*021i z{LNYafq!JQw!1$xb%j@&Bj21EhiOph9jlBCT;Y|h2&VSJwK+ z%L_d>d80@*O4fqg{y>H$Ouz6PY$Qw|M!2#h|K>_DKkT1bs|BK?J%{pdlEvw^_sOti zEx58Q!>;v(l8eFO@@jIi=lQ%bKQ&(qjLq*A(xgb~RbDx8QZ$nCiC5kHn=4yu{R7q2 z+UhRR)5WXXO^QZhTi2K5ZxWig{#tG%)4}y+xsgl<7q2fyev?cG7cY258j1N_UzB0V zc)I=vZxj=W)FJKJl^eH4s#~iIm3%l_==m|;xHVl#*JAnVNP<|Xlb1K06ph3PoxHp$ zX(Xz2^75vnkr<(q*Uu$GMrzq!<<%!iBdKM3l^2*Kjii?CRbD2NtO?ttVr_ABVYJv^ z>3Jd7Q_zGI*S*SXNKOu{?DQ>e9j^3_6Fog6{F|bY47NwnQ#2AiJwx(0iG@7Fym7I- zU0R&nT`9x~Z!hz@c#|V@q3lv*eB#J=v@lhf9$%R2>y2OimJCaV%rh!C5>k7{d81ep zNaJn4&l|;-ju5Q#Uiq8kH*b5d+(^uK+waMZ#0a;&M{XqMyX|**qv#Ns4xM-NMqxg( zCS2wP2`8f)N3~(!)O=~5eDjWX^KXhqqURmFLuBnE`}Zrn@-As4v+PO|9{-P~(Cws9 zg;4XdvL=W|GFL7utBGhNbLH|EWDAkGa{2STQSg>n$TKE45({~h$t%o9m~h9tWZM#g z-Jy)9_$Hyr9ls-glgzR^6b^}R5}MrcPX0|nYVyt7-Y>%v_TBN@yiqJ~y54<$p82A&WPg+jzh;)I6YW}{D1GW zJ-6knEkAD9PB#~%k1@~z-MsSRVuA2WabS$FV{dW$36~@>cFJxh=BJB$$Cx^B{{H*j z_YmZv;CgkuZ+CBTuJ;CB;)ftX669@<_=ElkUY5aqeh4no;c76F!(U*hNRdP!c-doI4h21<3^hVJLhZ&TrV^KKz$H0D#>p$Z193K$VL*e(D(03UVh^ zaX~>y?llJNFIy4f&`hY zYcZq8xCKk3k40WVf@@^unFlX-Eb*u+a1DG3FISe{q6OR$bEyi`E7* zcP!Ehk{cugv*F}ccB_SiwQ#K@r?r8fnRn<`u+1V**T= zZHy8^SfkHA7pwghX$1)^A@;1n-BQ)qKzC}0Cm0kwoH@(PlE6Ji_U6)fSVk40WVf=ie^49`si*DUo| zquOLA-BewBjW5FWXW6UdvOE$sR6WcVz z#{zh+F478;D`W$)*%htXaDu}dh+#pOZi-_{c7aqK(+c8}P4Ee^{U%E`bi5g`n)D=D z$Gn0#V+b%|HkOLeKY*L#LKSFbGg23c1qm);_JIFP$Wf8@L?jj@$b{JjM|9+06H7of zB;MmpT_hGHxP;kF7VTSD!>1*OIMfzxf^Fb-74d%ng&P zi^PJ&H9+PzUfUZx&m04cp_$-D0Ah}xs$*h7cy@sEfRU1Ygf=v)mAt&~tT>SCBY|$kb+$nQ|ZpM1C@l5#xrI zi#Y>5-Z!>v+n(HFf4}_^`$P7cecXP{ew*!^E{F4Pou6>N&G}Q#Eoaghb3VrLeaDwO zAMjlAKGhTVc6I(s=Vvc+|0Lke52z};b#7|?H^&c{NjF|`yIHR>3S^O z=?}L(rOn&=&uwpL|3Uj#Y)`foZNF#xT-$@ThiyZ)m$ZG}eY<kC|;vi~(`^9je79p86--SJ`P+Z=CUegyE@ zuX!%v?f+|?^1d@UGo>VeZ&a2eOhiLw!Q5ycn zF}ac0*7gbBI93}Q-dHXzPX>sd_V3A!L{Izo_AMsDqS9OOO=8>DALZYS=Xb;FL;ZVsn%2V2Z?}&`BY}0l zO#UXZt()IWl5djVbaQ_d(nyBP{h$m>M#cRSxshY&@(M(-VQ@PBI)O zy!CKBNhA5D$M8+^n;!m~P!_}G5P2WQJ za5hc8>Exbhq>=olllzmAMlxhh?ukYki7L)da`TDbBtz!>6S@h{K8i(pYqR0v=0*>{5+;qsqwv5~q%V~!r+fP3-^^^MMyf}%{rjt1J^a>} zd^5FBs?5yJEsQVr_6*A3oL^s>3#FpHvE4wAvK0`$ota%(D{YMW!hMCFXYp?e#*-oQ z@L5I(MwsB?llL&Su(g)nTMDiPhG#Q@m4&Utjiu?!ALOv2kzRd&fH&^NqdS4+-Qo2W zavOT-KyDFuR$-l6P#Y=3TR zd1qywaLD^y-Y9I_J5iZljpp+skwOo5D>xM2B)0WFPlhG7^(wp--z0Oz%NJw9gqi-u z=}dYdyBQel;SLF;aWXZU3d{|sYst-?ez~_pnTg4znOWcd>Uxi|5f!QoL4n)y*nXv! z9qDwy>hHcVYKvsXDRUcNpwZHll(iLz^qr@!sLs z$n@@IWoC=Uy+pFso6HWaA8ub(wppTadnvdSAK5QPx7RN#TOQH4FCbm_9P zdlQW-Q&WZD&erbi`r>6}gC-hl1KGmH_Hu1=pmbT;W{JjPW;lNUo(KN$@MUF#CK^X3 zRuhA(yBnni-{lX_W}8vWO?%zyVq^czQs$)|KD_L3vkwQulZUIfz<*PGldK7?Iq2?B-@42H#jWiA z|A$-htp4A%uFrJ6pv&QXi+8&7FFOxAAJ_4gj!DnAJkR$$uKg43)9!D%A9ml@_OZ5& z)_-q(eQTfV>yA6@@3r^Z{-^ELwmVwh1AywE=aadynkttGGx){3&2TF5&9@vZ^I7bOaR_XXk*7Jp7_VM2XA z4+B1yCL$0i=ZUo-)JxATt`X)H(HoIz6jRQ|Gsl=qpIb}do^CCe2LM0;lh~mUYEU%r(j!VR0M**Zwgk;pf&8*amC){XU3(hWsY}5KD^T3q#a7WNY=q+8>FZ%UX$J z%+QYxD0z{qg;RT|VlC5Y7-DH+jO#lWtG2@Y{oGap*=Vb{AF{cI!odg<3v3mN z#KT~*I5@za(^gLwOO{9%Lu`dP3M5;pxns=4s;w}qKev^@JFxShW?V z`scPPXt)+^1$##$V<9t@PpNpae~iigxvd1UY%9oP6Nmj(#1{o?u{j7URm2yE<(=(I z&&exM3?MHu)(~4^Ayk7=c%B+FF}GFb7>fb$6-(d}TQytW!7P|l(}*1msm#K10Nh#v zTecQF@q#fwB<+GrQkDtG7mGw-7~)|_4Rr23DHaOg%o0g&h_%AT1q9{_&wyjpD6Uq# zImQwJ+*$(Hg0*13i)jxeY!q{A?Hyxz0KUr-*hXuGAsJK@lIa9u=pP+``4;C{3h%QlxfZ11IOjCP3Im*2!abhaN`5tjoe4x4^HF80 zcszg9@?yCESMToaf6YAsoPP^({V&%?_IuyxeJQ)i_dZp<|7W-Voe%Kae7Kt*g4_9* z!2SHg%!9!8IqppWxdZO*`fk@3yFSRh1mLd!F86oZL)=54`>QTT_eZe`2_0&}Xb zLC3S&zXDzXKTtgcAg2I$4loY{$A_T;;i7xO{S5c*ZQpA9eA|25-T;{b&`-emHs&b+ zH~#NpnFLy&=lrSGKIbQRegGw(L6&(Ha9;zs@qZ26{-?kP;1bJoz*^Kp3zL82u}*b( zJ`fvO*ch3B=;*^#e(kV0JKyi+r}Lzdo*?t;k%zIH%^XE9_}q{*ZNC+cRxdJ92=dg4v$nfkLIWD zzK=Kd?#32+)7k1|fSjjw*?D91V5GM1FE38ak&x4Sza%%3kePdV1X)#llLXt`%Y&zA zWA9Y&!v4<0elcm%PJ0Y3NgXfD!7!gTKaB8L@*KN?z`oZJ{b?5l3w z{dBo;Z}?ziJT&3t`@H6M0zc}-@mv#ut|RN z>L2sQ@<2X0KA7U=s;%MSW?!$~sOb{GFm(MSf{-X=Ga@w7YTMlzoEcDa#^ zr(IbX#cz`Fv^(T)lJT^+%8g_^?QY&ERuiIUXH;$^dUnR;MxtkDL~bN{cHS>H5BsB&uBcWx0{4a_N_Nqfmtmc1KWdB&u}y>l4xF&y-kh(+JM2K$^ zQg;NpU)7Q}*|$Af5$}*NA9*@lYRHXbR4yIMjpT`RsV+B?RrAs#awAzaFTGiAB-7#2 zo8(3^9WK35ZY0y;(i?cA*xwS{dX)#dXe6ZeDqDf!aCB&*kSOG*$%5frQDC)3!Xf9H z+(WS%)6*w658Ad z%`9);{lju&J`-B*i!ING1OB_8BsZp~V~2C2*+O)!aQ74C#`&Yva$tOKd49fhx3YqX z{ViEi?^IseL?dyGx^n`Ss>@B6EB>3}i9}YDtDle?$!c=-<8mWeO|E{7=l@@7>Ath; zDcP%*gDgpoNOXCY8r{knnLD(NZ`)=Fal6v0S6TlfCu5c)5o%%pCRM7lxw-! zm{xDPG)?s>>*1m*?uQ)ac)w~;DU8L|nuraW!lz|T;gScgF5n6SF2*1Xm5pgM5Cc&V zPUih^sbO_cS;;0{R@COII-97fa-;8GbDAXwdC zXi-%kRMvoatvFl`Ldp?qHA5gC*B7;@s-uaj!Gf<82*vXzqsng0F>+k5swUQ}%Ebm% z{g6f_67+|_9RqF;KvgI*0T)vdKP*TvWv#BiXDE+y)80hYO2`*16#W$payIG|Wzlj? z#70%4hN&8Y{Pb|)7W2iS@?{K16{ak>3oa3uD@)Ypsa_Pswg(98aJv6SF)jaJPtz&by0XB0=N=lCC9_86pTgwvbam1MgF#E zn(9}jU?E({`-9=K@u3RtL_YK+lm=B5OPZqCz~3;Ge~E?R83g+J`9swg@`3gtxch?b zqD56%kfy~|>7f@lQ8ii&7vg2O|I8alFL;fWfG`ZIDmJJJpO#gHf;w*a2f5V+nESLqtT6r$*yd~Ytf@ToLQPfuR25#PX2Zu_ zVGXKsu|ZW3%cF|bZQwZrzBzDL%biu3?`k|8hEh%zHxN+W2d1i3{=PudR6kXPhp4Hh z=*Vi+6vakO1IA5ZBn)0OYz>aU-Vim7u%upoaC(C~{gAcw7fOb(Le7>}rOHFk*HqOH zs&Ma=R3)CGR8=CTs;Xkcpo0G_xC_D5gn7E zCmX!Tf$y)iT_M{lSz3SD`~Q<#KGM>Cv->Gsf6=wz{XY2rKfUwM!T;aZ(E$JdPkRo* z|NkxRli>gVeD~wpKG8Pa`mNT7Tkmsy!nNuAw)2h7VaKN&JB~~Cx_#94FSdQ#Wq|vy z{gXV#y6=i}1gokA9z6LdIh!(g&*BjRJl9}cs3VCg=1X|`7)!o$f3C8IOOCZn97*`$ zgdwOw6?5eMV=VU09Z3YT!I2~a;RTS95d66Oakg(}n~o^kVM6_<&^aARL^b%lICvqp zf>~x_6n+Y0uoZ|^TZwA$1lNkK;?cj!(%HT53&t))e5H*!5R!xPa;yJAZ?yXIwp7=;(ql#5i zVUc*nR9cT^Q?YF;+xfr?DDGyVFb>ptf`t@zdFOQk#{%-)RN~-=m6wuOmL`-!?`2=#F_oSvGhE*l{k7LwhGFw>o~~#9LiuT5UaMr zlJneF0@s4AVnI{Bf>^Z`)|=b~vH)1r{Wau@XJE zl{mYiwlWSgi?cJK8yBm#N;1E4ZYzOn#a8$-Y8VA5i>ulSOVM*%31p+K*b7=X%1%(& zGtkE-ARH3H0>;i$&c`cJsy;6czlg02VO;Resh))CHR58`R-#lr!9C4Z30M0oA zQ7GknUSD}p+deOj--xa7fZS*lLv#-}VO)un$Q)yBdnFV~JJut%GWC_ma}s`~B>f~i z=F*;nSlxaWpM#>$25UjI3Y-AN;n<7KL8ufA)mFoC77lY>UX6)(6>)$^Y-Na7QS_0w zr>dCG!OZa}!{xRTxRz`Mx)_-i1P6L83InU&tFur&bTrs10+9t!5gTgn`tS$>&X^$7 z2d)~yTIYKbCXR=hRy=G>oB?`3)T=>+_j@cVl0yv9FAmx0nvi)vL*DGD0={j^fyJ}r&`@6e_x*}aqw0pZQwqAGDAt%7U+WxBT zE8ed-zwP~V?+3hZ@4nqR?R|sy)%Gji7rGyAz1zFuz2V&K`jU6d{Ttr6_lNDz@!sWa z?fU1|CwG3U^KaZEwy!&X);{ZcX6L7!zvJla{E+)qo$s(0?62*7Q|C{0zNmB6@nhZp zWd8@}-`T#``P|M4$GbZ3?|e$taqM2|_*uv2J6`Jg z?T$@%#x>QE@0jg)j^o)K&*-?~*m7++KiA>)e9!go?)Q7X;rVZn+3!8}FL-{X?cY4V z;Fxhf-E-5k=P7#b4iO zEw^RcM%!Ypr?ow)JJr_H=4$sMRTno8R9XbNqk_R>Mo{yTNRBX?Na+y3{szvydAu6-h-M-({az z+}oNBhjxdi!*R#A5o0Da6b&8Dk1gdL|Ae3D9p4JCZmb7tQ3nnbabR+MjeTNe%a`}> z4);!O3^@K41vA6d`Jw!BBsJjp3=V++!})YEKW4>Z?(f;T7iT$0Wxv8VI(Y*u5>zQCVwt3(WZtfL>Lyli$g2joUh0Xqf9sk_E z;}@8KL?k$Vh6&34<^IKm)s4yJ11Abr7Y_&1wPI!EaLf7A2pXKrS2h;cm!oCpE16(z zXnCx6a%CXfcj$Zt6IAw>sw4Y_<&8+h`En+xmCFk=+nc`r{E+h@CaBhSH#SF;LwmJ~ z^T(KAad5_$TI*jAqFH|Tv(2*2c0D*C@p0-!#m># znVGC}l?iIe*+CXD5H1}#|IYnqE#2hA6~7Rj+0ITJtS_XZu2v>k&5!jDCFWN4SC^d& zOt3h=vRv4YR*s?vE*lf9M}~tl^Oc41*o3Qv3CgvDsYTyFB)U86L}FJmqhk|=S~%HT zb$*9^qO@2ptVOnm^8JU-Z*q*WspZ|Hk)hPQ?Va6@`)ups>co0vXr;Ft8o>{Q=k{iT ziPcni!ueP(fb+TSg_VTAYFkG^Fq{b1lHpoy()MReu(mW_*{vpGOOqkzRTM1FZ*4?V z`E)7U@{=ei?Um;Gs^jUkUE3Q_kXfE6kMGA8Y8&$^7@fH-!t?W)mcJp)o;g*k}U^+9tw-)Lf$n4o)gMzU{?Qk?Q7)Tdve}aOc>GA$Z zvOm4uYY%b3Xf={bP5D;i_UEFYcY17M+8>*W96I_@5FHHfu7n}+){OltDDbCzz2m*p z)un(9=hvEVad-D&j#k#Z69EtDD96Rc!sGn3of@%JueBE0df3shN?DxmeJS1GmyUH@6Ya1~yVt z_B-%LA{!&)rK#ZL=Byp3;7a&#CNbQ~2Tr_Yy7mt0Y0Y z{Tu98mnPzqwaK~R;&29aUFz%2XA70x?DDn^?Y9>rQmbmY2#?HYCSV%)b?0obAhG zhHSr&KLUp}z0-T~;jM!0ClJ%ObP(EIjcrUW;4Wgx*AIn?3&r)-d0RXC#^TQ4{$V+t z-B?Vwd>92A#r31aQu@HRWy6jyuBN7A{=WX5orE1X9*Zjj$?f6V3Zxvg<3nSAX6U}LWj@-2)!1~KQB_m3tE!R5n^mfu9dM6p^5jgK#m&DrinL410z z;NR;V8C$U7Al0_~gGUErmHm}s%S+fNYMaXo6P1;%k-nP!zq22yt>x2w2b25ZrCX;Uk~zXHhVGxHMRq@~wx8_J>grUk=CTYO~dN)V7BZ z{=LnKv3z)bCdzkIhttXAWML;3nQQq|_KoUZt-rV(Ur(o|TE2vWt)tl1Zf0V2e$@6O zC|EAk`uqpk!Q!I*vkbGkobOK#XVb;)e*S@_(%R&TZ=+Tju~+dMBGkh6DHMq46dUf2 zNR*mw2{Grj04dx(Rz)C@4YyAuV%7dQ#1xSOEgwgLaIv@HkdVMVdkjAjogd4VRzuZN zz>fB-`bIZ4tB1+ugLNBUiuN~$_U7}|aH(v=<-M{RP8^K(?!*s{>|bOUmD--b{2%4B?VZKg6@N%z}uJ6W07o0%x~ zPcNr7TlmK2aA9v~G%~U{k!-=;L3y**KR7(=pN{)l{)&N?SE~DomEcHlWY6||X0UQ; zVteAS5-Fs2ui^)a;n{V6Y&spBwc~Ux=MQ5ud)3KQZQPC{U7jBrp6wf`mZsw^s9Sj; zyAoK8`7)D!dm1r;t9E$Y$SEd@Me;XUCmk zY2z@^U+djIC>Lxm#!nOnM*9n))ol2{=0`!kcPFqq+qb?k-0~)dS<3E|_kp0sL0qbLEZ7(}Gd0<~cLHuALJ5nnRWfHa@ zLqTZ%aAE%_QCS$X&vx5d26RjLIsU>x%iFtsd%ZJh*d9B-!333sso_DeVzzhQ`Q`2( zH+f)`^MTpTfxg1t?fVWi+y5s`6#~; z*$WKKY&pNc1Zz{#>hMH5+`GKz#N}&cvUi{y%4{qSmYg4ApIEB-hsR5B70^HE{9yO5 zne+o*qWULB59hOeqTg76Yvw&TJhO0|QI(ap&8?V#cQ- ziFtFrmHYq4Rsa8B$A~A_zU6*-+b_4i)Ab4G7ajlRxEJ#JJ+mb)S^uRiH}B;>68B%d z>*{^?-FN@}E%)4WpS$IrfmC6xvpJj#k>5MueM3^vd{E!hA+eI^?WEN&ldjBjP8s_-k!2BD`1^gjOQvB87Mn|CX| zGFMw#2oG9jHl~JadxM#^10i4bC%7#gNKRR*Zl8jEaHBmfvjLU^uNQ zR=wGyC?*Hu6l28-xKa4T(1_5Q@HKGbRuwafal|CC?A-+EtwIs-&;U=ocn~iV;IhgO z_rq|@&eEz`^KL?)HJ{Z$oI9JS8mi=rrKqnQlf6s9`6LYa)?`;=A~vWBpO#gH^ZqF0 zU5Z7(wE|9-*_{cbVgbtreBdGu^W2gn7cNwRu#Uz2#F+n+#vD~{Uer|8J0kjm(J17M z3d9O#!xs*-vuWy{hpKY1K~)eNRE4W+2$f(%8whciOK?Mk+(0ZzUNm6UkCu7oSsT>y z%{w$r(`?0Q;ZL5HJX|7#%fSF-$uv{R7`1|$a=I0<5+=q%nEjZ8oIUo40F<>OC%t;I$isEab4HnT%Zo3&$FUl#7juMofkj?nS|? z6vC@uB+<7N9819s2GaQj*oCqsRl$wcy2s_s+nT8AkCuF)B4$o9Q56!(npuF04XT3J zFs2Y32M#Mya5)M=m>`>|@o3lwJP(4;56c5)#p4ntYSglG^vw%RR4tZ@zB2fPnCrx1 z6-_L_#RgSDEUU_V+hY(p1`Yx&>Im1Q82Es}9EHgn4O$BhJ3NA?SIK#U#AE+1y7RO_d)YGybIE<=QRlAy~ z8qAj~ky1GxFj;<~^XO_K%~e%wR22?U`V*t6LB8q5y4A55I8ge*Q4~CeF=oyWK0Q&0 zw_@>;5F2TUz%Z)tW0qXrU)p}t%T>K!w|}^=B_A$FqHxY*O5n&f@L7eyW|hj==Gz~J zG~d^Qk!#FlQ`s1a{ll$3En5J_IR>6*kPs4LBID>I1h#-+Gw_9hr;y*;U_;OqxWZc+ z?CC5f}gOcC`1&x5JWoo17XWgBM54?H0%(+-Jxl!e;UDQ8bmc0;Mr(4nIo9R&%kglHfRcB zSyS+~gj;V=4g9rXL_t&7EyCssqRk-C3^p2;7|w(0^e=tQAH1F>stR9iQ&rKS+^8yw zjjF~BgUZ||A%q1UJ1~JG%;6NGupq%althn5L3_)gX5jN-Y1`;=J_hUm*}e%C@sx^x zEKeWHir4-FwWc4-1jw`gVP3vpVYU0ZCV3t`sIB+JR(E@dW%cWLEz8sAc}@3QyI%#F z0E@OEp5@P&v#;Y%yN+EBrQYCQvxOeHDMGT#ovQZ^lKQ5-wi|REptX$rq+s)h~WP`KH!LJVq|QUv8wZ zf1os$;_+}Pm=A@B56i{hlN%}Qdw63JGUpb;#bUWcU@!2TX8C*^yrZCKWYkZ-*~K$d zec~Q=}bPCj3Ry+RPO8Wboj&&fg> zDJ)MfL&lSQvrB=6@K^|j$iq{T{N}}n6eDPj1oq-hm=HTE`~R!{%{wHFKziHFv(|u~ z#ZtsyF2&+R&x^dq4r!#S@MciMSl5zfzpkoO=@O8{K_ zvfN02^MA;V^f$kx{H8`t@|zd`o7_lY|H||0|9NSy@&$i5P=rA02(6-Vr(5Ze)<`;Z zC(mw2zDe}FlV_UC7sL5b8GP1!QS!~UZz>kj8p$`?{!M9wVEte*QVa!&gZlth3DmPMCg?)v5v=}P+;NXY!w&R`3H?>9r+wog+ zBZ2LBhte1-l);xiT&7D+o3h3iv_=Bk_Pg>o32fWDl}4~FcyjrDMbcZhS8gP*?oPRp zz`8rs#%QThsQ5y3e!7$?SO}_(1lFZaL9LO%y0R*)FOc`a>oJ|5u3wcKDePP2Mhg2Y zN+ax@gN1;0e!v31l2sJh;1vvVn&(99Ew^}2C?NEEGH4@kkrMLMC z%mzre5Yh4WH~DXhMgr@4yWB`%UB96;!mD_(9PyQDS*Et{%8dlJ?K^TKfo=OXZ-j?q z44#sqK#_d&;*Y6~;RuvBDwb*E?S7?E%bibPZ+}9^v;Gs;KCxLM)8WD=d51(JQRTv) zc+00{?1F_6UI1ZH2+|eo!p|vsYK;{3XXQp>gbP2TG-?|(+V~-*QG1q=#yeYhW4=;> zwbb`Mcd;J$=E@);; zVj||JIhjVc7N?N15#44GqVW9vcp9kT+{hO z=L@(>Hrj=)#9cA5l_8)VHR2b?28}?h+R80#C2%d+ilsX-85|IE4ihfC&KE^qea+CTzOMlu^T0$QOr`9gs(*+TG-=@g{=gx z1zSO`C9@v{v0|&^7YSPlWZ71bkPG}m;Glr9lubfN5*UJubv6$J=ZpVO9KVqLGM|Lv z&YarHwC8x&Y_K3)lq-|)_yr7>PeK7pOx1i6vMU;s(E+h)tmg}332fO|5dF_eR7Qia zZ1J01NP`3SyO13Y{^MLxkICaB_RD+{id%PLtbj>opzt+**KV*Dh`C1T<3on4JPEbi zd}6Jplh9B(6dxyW>Zsc4K-fz3Shf{B@S<2L5AOAq)g3~S!IcB9_@n215+3ghTZwCX zVk>aCF$}YMSufcN#j36LgslYbskVw-i{Qr4fDB^QR=dJh0@+|INVOGW`R~+Bap0^4 zk;gHXek*j|8QRaA?;VMDxnm+-tRkK+LH_GTXVz3s7 zRcmbtYl%L~)`G0kaHkG?1W34ssU@HgD$C&-fIVaUy!GEUg|&q10I`-K=M7AXTX+U& z>0LG$E}w-0msrbu76P--Rwf<_N&^ zTPBuh{=3QJHDM{?S3oRf$l}5+)x>}iEeXe}u#~{HVkyXPYclB}PqoUb6^6`r?gH6p zsVHPHWC>&;!xDQCLe6l=#t9BB0XU&L=i0t3Y$ZGsh^-9u-_cf(iNI8&u=XTeVz|m2 z)I1)Dt(wol2)?r#<{*ewYb^?Ei9XBLVnt%Xa|`k;LGBH<#bR$}u$2JsS;&!nE^D#( z|EIRRy`}pt-P2wF-u3fcaqkzrFZMpE^OK#sotHa)zvF?97SFL~qWxdnU*F#A{<8aJ z?kBW;yltbcr}Yn7%dIZgTU^6Vi0*gB;kN!2jvu!Fv3(h;|GmfdJewO}|D*q;8d&rF z4)%gvobdI|1S;W?K$g_6fTT+>jM|$$MjiOsYYy|mF%$CufhEN_W+Rw)!mMYv>~OLn>bVnSa(sf`R%gadH?W?&++#v>W$`>Sa;|~Z-0|>) z^w@BC!u)`nsNO`(hcMf~qV127xS>Bh>Ft~EZ-UZ9%)xVw5SyXc`Mq>39*D)($EFgb zhzWch7I5(GWt(2TaRSk6EN_RonB%7!Sic>KP4FqPO?YAfIN1>8*$FTqHe6Df_pFJS zcR1a^^6bbHf=ig)%cES*Y>H$9i?ieAoFEfsV@=aD<7OJq&=zolOPH-K;Ah6pHL(7= zOb-LMW8h@i#H>xk+}bx9Sc4r821(!b+#VR6?;mLb(?qP28|$oN?@9EQf!r);$_NA@ zUEr^R9-LB;R$SR;q#9Un9m!4bDY?;OT{3%9U~s$V9Zxo}+&WT)026ZK#@aG&Ks%+w zV(Lh4f=kGqis1{JRb+6*ReOx()a4#ia+|Cl%`FjB_Pm+KlQeRZ9$O%Hb8Nq|m&-M< zT)IpT1G&K%CQC_ke4la-kZoYubX>Se-(_+S4xEL1>Jf6TftAy-^CT+Iz-<-`XTZnc zJEjx(Zc=VT@LgDWeM&X%V}?g=6MV{T%r~WH$}NCn%A`p)us}L8g#Z(7vx+d%ljat< zQSG1*i=!jA2`=IG5M+lv3$j{vJ=qY&&j~W&w*Kk{_hz@~v6`hU(-6ha3GV6Kz6Ewf zxnamPu=u%54+FQsd)T-sxfQARlWrkj#mfU7xda}6wXj-4mbmNK_7 z5|R$67F5a7iVFr2vAS4cxpSl-!6)3-?@0uJZXF3}{;e&NZQRN5k=Vr6w{%?_qaQ{K!0i41j+U>qbU&$U%Ddb7%N>8{ z`BM9L!Iyub?H61Bs`W9h=Q{${($Yx@Uj07{(12Jn@?ARIe37&8ZMex2v%!_ z<-}TM1I9WEH_2Fvh#kCN5BsjMs(}VE+yR97t%mW_JZ{BGbUM^hfdUQIqP6e8`84zH z7dOJ&zL89JHCU7S8M_|vU4t~-&BYO-torFQcHdfj30VKB=H2fr#f#~Mv4h?Cgjqi! zsH?fy(0%yy8M|-U`cE)ZrVPd9IIyz)weJXhZ{_CM2%W?r%3(du9_vxq4*nP{^ zf3kV^2P^xr`C@cy>!6qRGjQD(XWWk~#aTGX1A4L6eIh<<_bp}F0P_5>dH08AhtsQz zBf*&?mS01&e&D(v1|WJ34wRdVN%yr+pSAmzVymG0PcrX*y0W~IoG!=(hO2O(cc7-ZK2fooxS*@W- zj|;+JefHV`-8cKRbhv<@=7VA-wUM0n27baK!ydT#ICC9mSCjeKgQ3lx*s@;7aEO&b zfD*f0tk;o`9MO?}+MpwR`qAmA&+WrsEcriaR+I;BKGs~v;>uuX4syGd7uhxm_{K*j z%AVhF#|%;IW;*(zC>I$={ih8&!lxgdj@AORlQ*v_Q%%aiG@kX%PHqQkO93s*f|7*_ z_I!}qT;%i7i}}+>@wr=Q zCb<9qC+E*QBaSaP4&j{OWA;`1owoPcp4;;MmNz`whgj^9r<^!S z&sXIYUUzsOh7^R#f#Hn?7Q@49HG;1{#3I*fdUOb$gdsPq`eC(rS+0R4@v!&gk!m=_ zGWMQ7IiYT;89o#uPByUc9iF=pWO6L<0wSl13ulnJis`K*KtsTE9ZpBXugX)%_AwsWLMTIA5yF#$tAOK1=W^ zv!O^e;fV%}g+2{dfwW~RPq3C9@`M04WwwTkv^3(zlq=Fy11r_Z9o8{hM{E^1Xg#D-i#QZ4RENYSxVIp-+G9vHWjc21l*u))5S`48Q;DtN zV`U*@&m+nZ-e_P!I$X0!&t+n3t`MBrDmqKOXfiFKSQEE*u90B&#@>_dv&?MV+H$*- z%_Q4XW7R6{7+%{v3ua^KIV1|fr_44uu<`BpDZt4F)}BLV6JWw@{f!3cSra|DLDCJZ zJcmRfxP;k5nAK9;AX!CDHbiAPf=sB5ZY5^6Jf+9eYzXBZn^OC1gO_VyWjUD~GPQvm zxcHyB=QkQyKMtu)EYg(PXYD;!k;C4T7buz9_;O<~Fuql>Cz@UP{M$EQ)-f-Q0ltOO^ML#8%M5~w`K2>C4FXB$`#4!0x3A~Lnr?a0}{ za}6x{hMgyG&<19+w_C%wu@`0B?&wE@i&bX#Ya4BXuVc26ffj(14XpcyJR!i8*}7|J zWVQv|bfZ^W0tqf*_9$$h&SQ#X<2ejj?lECDy3w22vdPb>kC|ti_4qVqTd+m0@hpZc zlf%GlIcD3ct#34*$?$Q}Cbrfy+YqyD6+PGZ5v}*+48=fgcD^AQm>-qs{SDw}RWY|a zfB*lDmhO}8sjhE!{c=~o_p9EA;QjxPJGVRU>G)trt;6m4RnJ)aKexZG{aNn6b-&vE z^tL|(|No1v?`tizdR*^t%{ss7{5j`!$5$Lb?(o?^XWzHq3z_*I0RR8rc(m{T^7qpx z=mvr7AGt##yjETy!Ceb33VaE;x#V|zaddSu6DuqBiO5DkkO{Bx`o{ne!v}6AsA0I%=~guK^(tWfR{_%z=|9m~jACY+?$+YzQhc z131MJ=@ZO1fXpVir!t$RXJD_ah8}~M_c(Wg`2=Kgm@%6@9gRSEx?m>e_}LRoEP%`= zJ-5PaVBRTa$(>+k0qi`vXf|WE7&meu3vd3KPI|G*6U-lgJR$g$+4v;j>Qe;td^8iQ zJi!D4$P)rgm@OarDfi;)7Fj()(!?A$eS+x&kS7FJM{L|v8oCxl&qOn^+GCL(fFKiQ zqYIP)035wdO&n9A3Nj5$4}g(=1eY*d3luS6LyC1XY!LH4=NgzGK&FQox5XqOqv(eu z0V?J7Vve6}U>X4AHtG8|jZ=^!14{MTky0kOiAhKTnkz^8DVIZa5X#*Eu2=D6vGi1#PBdTz6Qwn1ko5#B_s z_88;+aW)cU!flMYH{zaRiF5;_`EfQ9T*7U|;n;v2#=tf+G4FA%f${t@IV>|9&IZgZ z0%DGTqk&QVxX&g%mzmAa{S4hajUl-PM($(piHC}w+7REz97v#>@P4CrL}3NX&BeU; zsRl;yBee;>j@rrwUIK<>{${`-?dAi+_mL@F}&io)nm!Y!Lvs+5M@whQx?_BnkmGp|&13gzvn@4u`Z$J&d+T zq7Ymiwbf`JJ#sj}R&67)pmvQ-8o9@W+G?DmgxlmMS-rMOH>%oXBt15zwjLR>FPZi@ ztSle={r?db|3B6Bk6o`(?*E?v@Bdq!w|D$bN7D0MPu(-x{x9(UA9Mee`^bHz?W1ig z@c#ea)*G(>>w4JL>->A?PdTFyCGaB0>MGciX_o{*dZ0-4Yk5Aclur&uC$ zf;k0nLrp9}=qqig$?)mlw}g?j3%e7NRY3GvzczDvnDQWimrMqgK+J8DJt0{I1ipT4 zmX1NRUItGwOzuQv6(I2tX51Dpi^MqK-eE=+5Ubo4Sp^6_<+gbbA+3lhu;8}HDnNh< zw{^!WnnA+k-IVA7VwKx|ZJ{H$7Pt*nQ%rjtR$l>5L{8rZ&svhr&%I%BC-k) zTua;zV-g($_dv|8kvkDt1qilfZu7W&BfiS*8z&;G0KwODTitgUU{144?nGo2Aki`= zGFslG=stNwB$*sXa4L~z=5UafxX$43ul?k~q z6iG7!51H~qEma-4iJ0T3PDEM(f=|h=BHwizLj>jM;L{JMCgz<_onTS{d|f2?l-cCi7OkQnU!_`J$wHrBzG~u?-)b3E{*v#%A=Dkmyh`a&>pK==y#|$Js?HW0Cf_Vjy+XPt0 zZQbKgz4wliBX?qN5c3}M_y31mx*q}m|G$Ix|A_a$dtd0i+WG#@VrNIkJ32Cu|L;wn zKB)Wmigus-v+ftUpV;=1wrX2j>#w!WyT0vuvunipcg|NjpW^s4$AROD{iERj@3p<% zHr?{AmWR*tzE8fBJi%iRe1l${N>wsPLke(u5Pbdg zPy-fJmTBmx*(G;^0R`CmVsK{aAd$%W_e&-L68%IWVsWZ1_D8bKv9&1{Uz67SVAsJ#=ma8m`aq0)`z1F~?1xU|0bXg>+cA z^6NG=8ZxBi)KgGVB&MvR$rB7Lkb6w1jY*EpR5ry`Es;LKumZWqx1=`j8ZX*w_(2eJ zTjWkKpg<;v1!^ngAQ#*G{hE_Q^>n{+@?5s>Kxz|PpGs|O49T5fL;?1Gc{p0h430;) zQrl+KmQOw)9yA6^ihNe5idAZ3U;$E_;8SYjC4=6+4A^9xxmcw(MiwAZ2r#9#Y0sei zv4JRn3u2Yp7+8QrA-Jben{^FiV2z5z)sTe~3@wm*OsK7UGvrgof+aF17+8R(h@{7a z+NP(7I8IP2*vuLrR>_S)1u{KM$Zay+q3;ph7E)6Q#2o*|35FFQxk=xxklTV~awiy6 zfW5Bn&5f<2IWuz8y*ck@I1VXo=ysBddGAvv7+ZkkCis-x@)H+kB?H#&b_B3? zUvh%M1xOVFOvoLiyGRWn7BP|=eh$PcxiPc=$xU$eH^Jrt~>0~ z@IlP+Z=7IQ0aBaTT2F0x$1Y$_VMy)-g9@I7p8klF;FQd{>v%Q}t-kl)=57{n@3Ft`ATLVyXi4R%Fb2n;a81u@4>pI~SK z5{2OEsZHOpM2`)7E3Sxolaf3cW)EPw$AsFL6M-)LmMoDu!O#L+w@Hr)wN2M;#MYk; zX{u;vL%9yAeftdF=cOv2o2(lRki3Psg?t^W^qZvrP-Qq>DrWmRTXW^LU)OH)nL(=Y*3kd${A*egxM8B~0|6MhSnzoMCm$ZDK zrM|hR>89tyo<{dTTmseD7HqEJP+P{o?89Bp~J=S>QW}skvG(j z#Qk2_QFtH#x7y$V6T|zAMeqS1Oh~n>Ls*wE|8=$M+l~F_s?}fW3r;0^0@2As!~4*k zV8aadL;|oUg4a!;_pQz7eW|%x_3iO?J$UmuYW0UB>xc7w-jT`Np6-1(9|ZjtMjl9A zMUfu@)wedI`cm`lQvX4<`pXlO`E+<{JT^@U54rjE-iPtU_kb^U&5x(E4DXwp4fRQLwd&gqo|szw!pdYaxVqvEuZ^kH z4~db7d0*F)H(S()=4#cq+jXOA^{&>@I z{fJuq!|BfDsl?#m#F{bka5wwBY}~gn#nNV?zR`TU)DNrGA6md$%$*(G22;4mo#57RROr77}DAKo0sOZ|Xa{r=uSXg|}rG&nIXsSnfp=(VUu zA0yP)nprZ0s;~d`?NZ;bR-f!qnbqg}T0Rp?GI(EaW-&$7*PDa4OMRbOeXR-bJ; zz$GAg&zbst+>}_&&1# zKvrAZhp?=5P3Ql=-umj+NXsW-|DT`#ztr^3riXz4?~U5||K~UUZR2B&Pj2{d!&<{# zuJ^cdu6pM!XK($#80Y_=LGJ%+_`#q5pDKzn2r?@$CA6gUDgWxj?UL{gNS@DV<{n8D zkyrq8p9Gj>Yvm1O4ghs4DqN$SC0RsT0nFACTvMV<-cjPn5%mv3v#v1`3&!3T-~q#3dzlx8AG=3i1kIpb*@XLmMIBHe4wL^=4h; z24f?FAd}EG73WfuRk%j2Q?iJ>0lJ3t(sy;8Q}ItwN-2aP8*|p3))`3t*rS+*3oFsV42n z=!WRbs<)6@K-QRqw!D3;1Dx!MyQmq7}^Bi z6x!0vLqm|i&PKB~2Hrwu0SpuZd_rh*fG|uDOkKuk=D5jQ$SZ(>LU2zEZ4MEW=P5?B zt}!wT$QqN-HWfp|FvI~YwH!vXt}*fo$Qqv*+8hG9qRJQ0%#mkqA)|mC95zB*!Q%EuV|!2(S?#DUQI<%z+cPkXZl&g#e!v+6dr-y<>A|>&+ZDc?)?3Fi;5Y$)U|v zleb_sL-Z}!#4ThNkToWuEpMaS^F;C%@(RcrpB&n#vEOv$#dvwp%zZI)3mFCE;II?g zh#!!v61Ct6Y2UFMw~$i+L!0>e^w8%1J|#kCZXu%pYELpqHbPq~m&Q}}WZqyj>!FRr z0yt_Dd>Y#F6qO^KRzRJ&h0FpNC~QStxJH8(UJH%)rJ<@r@lzx#{sm%E?U`2RE>G~NT}{|gO`u99oW`8DV3oSks~ z|EKDoRrjZL8+GlD_d4brt+l^iJ67|Rn%A6ODxm(0WD#o~&|b3dSfOLUT^z8B3K7cq zm&L&isafk7MZqROkX0SS7{w$YeGrnGIsT0zvI$_vAowSA3<>5$^qJxVY)rt5RFx#t@Mc3#87B>1e*2GMlt~mZGwM7 zXbbI6kC2(7-w188*{uj|^AQIffB@6bHkF|201NCCdeeT&9e&w z;1o}!i%2Jcg`NbLgtoQNQ^$^&a|ooF>pW8wWC8?R72HanM8ejXXHgS2GAu|YfWb}h z?F2X5TsXxuGeu++z;T$|;DKgK15&?&Kva8)(?z5dKIQZfWs@%m_)X9cop7IcBT-N z^QA|+db($dPcpu~1X~f?azadxg9|X80Cl5?oB|ly#MkD~R%|=k^UF*T z83j;#vZ-k!w6$$b^8yM~$C|ltP|Gav_5T}c+DdJst>0{Yee3gD{;uW4El+FyNb^eb zolWm<$~M(`-s0(T|Fiq&fdB9B8Xs?bdcz+#EHt#Ze#aGee%tv*=K!q#Uk>a4kJTL_ z|6k5gUt5Cp|2J#ipkCcq(V8e?;se8toE=bh5V4SkD{95zDydoT(a0=-pDTiE?jY8s zI0H61q#0OGZWfVRKvtOa50NxB0~jNd)XWu57m-*12Y;e4=^y67Ujk8^qBAiSkyHR< zj9^=O2wdlCtg+1aC;Mc&h_nJYu_5?!4-pd^Gx*7lnJFTt04h(8XDB*|*kcsj5>qc?>gO2^;B%p*~^*a8Z4vgFaGB63jPBD~L1Dq%dY60RA5`u#Dpc>qn zB2o*;o>qiOC5IR*GxN`C8J8Qy8TOUsOEBSSbC{Us2xb^#(k(S}ch3|bGG;jB9L$Mv z!VVkZX&rXlMeJTl&HC#^f&qM;1fRxRC^ZpA^?3}Os|QZvV% zDGG)Gf^F$N?3|H4ZkU0L-Xk@0{2N8VFhKB6=sjkblY?-kC>RFFF{~4N5AB9fq@^1r zHFNE!ih^N);M3kCsFx&!6M+*&!7xC8N$*k36av>yR~Q)vu)7mn(t9e5-lqX4ih^K( z0Mpp6q29K`}tEPmJwq@NX0a#Q?!SA-1bQpD7B80dhu9 z72AqWjQ?5`Z<{wpD>%3pVYKOFQ$f$Ox`g7Dfg{FROi&CEU>e(1DXf!~ zOcnc$1?a=VB$1Nf~ZxTN#Y)u|oiuud3OM1ldFR1suV*D=O_JNP=o z%8epY4B(`S;G4USX?1D~-OwHh22gvl+o|X}qMBLYpT1i=RYaZv9AybU?K)zkvl`$; zQP2z!VA^$*qwHzh%Tq<98ITn|t?Qibi9``u1~9UT!X&aqg?lxQ@U#xsJXZUR8qbt- z+WFkp_qR>7ezxriZK2lhxZd9I`i93E-qnz6=xcZ;toL8*`ikpg&a2M4`hTqdU2HoYIHrd?G-Jp&0lT)c=PWz zzpnX5n;&WJ^1QY6arfsvmpw7}_gdfF{Iq6w)4w!*wCQb4uWs6Jy5YFyn1>pLPdm;# z-sl)~ytL_gO;2vB_q@`x<$2|ad5O#Q_ulJBMdOL=()wI-AVXrj^u+=6WM*Ozw!ykaV${y8ETneM z%0g;qMix>#ACZOB&KJr;YUjhUklHyT3#pwCp)h&4+CEl~Lvz|+NFF#Ed_Km0g%c;$S^~KT4PnCt6`<;b> z$^F!%KXLh*EZmJJ<~tJ8y=w<*T-Zbd7rMoZLXvW znNVc*%I9QZcUPi&dVgbdKe2Y@?_}X_yk}|QAle%^SiJJLvT!ewU)|d{+>dz&u6$M& zZY9??vTL0O>6Pv)pOJ+lW7A_(bN(d_K)sd{<18j9qC_X;nrecG1kAAjcl!5{ufzD-^!O{A$=?V zM;6l2;JL}B>yKXBn;a$#a@ely*>N8Q&W z3#k)2Wg&G!hb*K{c!4aWPI$g7q)vFAETpD9C=02Fo+}Hfhn^z~X_$0#;dW+qt9NjB zB-cecuO}u8N$2%w3W+DlAmxe5Pm)2(qiHLiB!iSEEI&yGDNjTel0nMzfGi|~l!rSZ z)i<;>v^<)cTj|LJmin@N-Ca9N;j7yBQwaCQhYFp$W1FdsjjP)CQwV4G!-cJkcRS|Y zzskR#1U5gLxxTouyge8ixq5>uBnC#}A$LCtQ@PRcLTI=zFuY1UU)ia;C%I68>gHD6`SzIA8-qHa3A^A6nd6GCFAt02P?J6-c! z*c(}%>WLR3!46`l=UcLn*y;I>EF^Y%{!W79ff4})^kvZCjtwz!z%W)xnF)JhQO@{Bzbsaf08D4jRb zs05$%HJ{+`ln|_`eEdBv%UMEF0n7yvU^3*WEVrXDQVL-5ir|uw19k)}XjY+FR~R`3 zWQEB9s;a6uUEy>I83k}pgD6af*GfeZr(@5QkWE024l>3X(V$aZ|i?_skZDvic&HvzWBwh6!s71;ckt+iQK7&!%Gg-L98 zYGs`!1h`L23wdj^t}v1cU~ChGNo;F3eMtbPIU-#`N&$>*f~$^g6E-+QJLY3;<~q-m zkWN634pnTcqeHvOLBfyeS2;|VkWc^%eu(bo*zV|@?7~sQgmQX>%#@H#0F}?}Cg;=R z`zzkWfGV_&lhEQjk>uBZUBy&{l1d zoUU-P_#)P2aC3^_lF)`>Td|vQI&z|jtOByeB(_CKdo`X&7m-td7qf|1sE%!*Hme4E zruZoHh8!N1W4lWH=^`=;@M1QhdxhAp5`3nJbONaS!shaPZ+diKf2E*`ZN<)RfL_2O ze1^?hY!{JL0Arir)7Vz^j?;k?MWhwLNFl(d#P;d9$s&>pU~CgyQ*4X#Cz8$9-bh@L zC?c(ZtTBmgadNgA+;kC11u(XW#x`R6bZ^WQkx)Pm51X-lI{uB~7VA4WCn36dzR+z@NVnuVhhtox56~Ndg zj<6Nmr|CRXL`DHQI#jW3)W=ohlN&|k6u{Ufy4#HH)3rxN0o0z9ILoo^t6V~@{y^(% z)u|#93-C#a;Ltb4wj$Wz6R!$QZ00e@*8g|Z{O8I1|8J`MJ;$Hbejfhp|2O|UR=Ana zX&W!5@4ffl2Wx8D+wX0xsmb_febHDU8_wqV3J>bCpbi-LQP|Zl*J4-`3uysWb41b1 zX&c8z2S(yIV9j$a7zjemIgmd_;hMQ%;Mq`G9E^E`zCai*7Y;>zGgF-#^WKBiPXFHS zdVDRoGrS$x-`VV5*g9Mv+)R(mLDsZ->3TwF0(XUbNlK728qtQ^* z8wkRH6A7}n8im-6#ezX!ED{a|ZJEjg*siJL6->>~t8VcAo)ek3UYz6RxH^+2S%@?PPg}XKeu5YhQ zO^ibTqw)X=Oi>{yjEr34SI_fio$KE3XKx1n8tNs3Oac1W+|+z$$3ebt*PGwZPA^6h zt6d#C%RNixp$38yUX~7eBAG1Q`!cFle>yice-JHX_pfgl>H{Pk^M_j5=(Qjo!ZFl0 zH*@vPe|@{uA5p6x_s{nZ&w4lJHj-3*IF1>H&%(7B=DG~^&CQ1Tr1^HKKde^&u(SVQ zE7&9Gx9)yaX7G< z4^^KuQ}y-c+ok@XTK%E^<;X-}GrYULEa@4A8+PF9&zAC3ebP+T*PCyb`q$O!Pt66> z1ChC@fr%}yXXrkEAns$@JP-_D3+ln6Y6kT!%~h!%vOn?+sMX*0?`&tnV||fKhopX( z1y4X@;TC$5W~#p4e7n@|SF2C9y}0^3Zw}{pf$qw8Eu`K1qUBJ{&7i*Jud7lYKAm>& zed$xHPj)se>IXvCf_VEQ#6Hmzo7pewhP)#7x%W{|quH!JZ?0B-d(*oIZ+5HICn+eRJ_LRME{h9Xi)yzo@Zgb} zb@gd;wd&iQ^K_}zCs_uw`s_;C2;8fxjr-_*(33V3^^N9g)wkt+kL$HH+fe_{tN9zg z4mJAk!n%K``gc7FHTc=uUe^nu+Wx7oM(3BDA94OBtJ&u#0O|r*!#^$R@1bJhi29@^bYrod|=GMns7kOR3xe}jM-aB3j)%b&~-oK@_^*gPfZGAt~;{TK9PdsnM ziu@^0%yZfOJ@@C`A9OyKojl;@3!r-cy^c5XQwIFxLG3f(T)-3f8G^c()veTx@zV$V zbOJqtz_sFfa_iW6g0@$*t+h?Gg-%FsU=>9s0?PqdTtx%3y@9p4!OorCg^7*}yv`&O zie>{oZ#I^Vk<{Rwy#9g+NxJOLFK}4#B!Rv2^IQlEoNyr;1|EG1%d5UKLP%kG)i)7R zSYErG2}7PEQYgUEhQfY8`%ObgVgEoDQrP!v!e}m<&qqVyFo8Yy`?8S0o_mihB(Ue+ ztqJp4Zx)n|`3dZuyqq@^HiQKBPF~JSgar0ZUe22d<)h(XC>xE;QdnNjON11bm-7-K zh2`bEnTRi3@MfdFP=Lbjb5n$n!tTjJ3cIU0!AN3I*sLt1u)OFmBhnufHlzKfkuadJ z{8UCpWD_VXFN-8X3d`#>Gof%WlPhF>!7LFveu4jH2nO${-xrP2=xh38Cs>m5J%>tjwB-oH+$_zV+6Pol_77oqM2K_#-X&m~f25Sfj?42Kxg#`A_KhuSJ7bLID@mg6( zU>(26g^|!~4Bm7&O21`I@0Eq*$tG=#7f%v}nzS)K63k}`vsu4CM-+0tU4u1*1lGxq zt7XKK1lGxqt7YJ#j7+qU_h#uwr{PaESVKr)8~#KV64-`6=0X_6WB!~sXZl1od`1>h z*iXws3i~&jFrS%?MZICu*w^Nlg#@ZBfpuu_Q#?sv9oqX0XT14bFd8$BCQZMp!5TsW+w?24 zkia&*K@*N|j4p03AMPxZCmsC2P$p~$=Le_fefjOsYGl{(75T~0$mqi8$ozIR9&qr} zM450H$aizmoR3aF9NGt62qFI_0^bPtXh@h1Di#VM9n^^$D6c91djsAyW)p znBu<)yHT2u!X{)Pg^j~9DEWPU4pon9PVg6IgFaYB(HOcAl7&>;pe&@?1~g%;0DA~9 zD>S{b`(+`8y(SAO?0sA)mU|?IE?fokeqCka|DA2JDbxw~82o>~($?Gh<>kRqHG|N9w-} z_5a?wkJmj~_Y}t;JJucNYJaPC@(08JR}!=bWEX=}vS?RHh&=(=k%8KOy&TxsD$tvG z*+aU77Ytw}3&AC>A(i72wqDj_ZRXfBrRNwGhy>eG$-;KkATb30$E+mmAy;VT_|ql4 zVgM@;3BI|KMO4?C!B2C{OiA1@K=xhaLKaY2eG~w8_)&RNkyemx{Bz}}O5%nAf=>%s zR3w9la0)QqFn|>@1eo+&pQ;pw0V|JjKr`1kSrS(a5MWZJ)d8Eq6?Ci6%#jl%am4^Z zropW!(>mQ1=@MQsfWb|0)xm9jQ77s=Qxca95bVmqT_ygFQotxdB>3jwu26z_x@Tre z;*tTfEvJfZMHs{0C+v186}@lf=KXbbPGy7GXft9Ox|L@rxW^?@R9+n zgC)S`=vJIVK?t?V2C}$jfFPe5-lrocO5&OUf=t3&P%2jAi*!j`GeB@{g!kz>&y>V9 z0|eV5!5PTZil@JtNi2-ZlYodhr3}B=XU=rHmGBgn> z2w?4^1b3=*kI@$iE(vYrVa?Nl6QwH*SXP*Xwwh@SEIv`;bP2B*z|bZN+X(H`b)G3* zW;)B!VKcN($Dc0Y1p^q`M0Y!(eLDC|32zrbBxx^-ZCI-Okz8FCKo45 zc*lUOF^O$8KP1ywIbnciJ}%9a@OA+?I4qIPN_EZ>9G-@+*SrMw|JlAh+l$xt$2rfQ zzAxVP1im}Zck^3^>sB1!s(TsZ(W@)AdRy<1+52QpJ~Inn;|18CzaLluZ#E7!-Ow2L zl)L^aK0#Wc(D2NV?;3#yx9k>b~b-mE>Qn_w{aU51=Fg!7R zgISbx|M23-++N^de44ODT;&NqA|z}PS9yYu2nk!nRi5A@Lc$htl_&TJQx1t!H-C}{ zNw;%zg;GlceZHPTdS@w4I=knG(3I4|?$%O&Fta^Cw+m|jRTh#MuH`%Gsk!cr(aiPD z*`00jn-0#WL4@Q<2j|luLNdBJu5jOubdGwX`NGCxKOw8S@=RGs7)P!=gKN7xHQ>un zZEox@QpfWoaY_iO<9U*p2&v=wo(Xv?gjD1z&jS-7Ar-mG^T6rgVJNiSIkmSJBe0h> zz8j$sh1IBDgpk5=P8OmqjXs_!PtWg;Z*|4veFNiUp!7^|_X#15gt#W0n#(Twc2gsC z_snrs7Si{5k1V9`^T}M8oF3m<8OtyC43oHR`y*LMVyKO8%B97VwEH$zjI3RYOU*fPrNbEenA`6L~ z=NDxmvGY8yRv^Dg>^wg&KS}I7zaR^Vo#&TjA+huPDi@0WNf?2y{IDz}yjxeEE(-~n z+?A)vLP92Y<*BlekjY))BUoA}M9Ac>+$%pxy5JQpsKt|nOzz54| zhkHBe?Pc<^+g{9{6hiW{+xRAHS_sL@ZhMjZBzf6we2^kfl9%1~qw?x z?J@Y!J*ncyjz1|zFfvFzsYVu(LF)4NWFZ-(E`L`Rl9BrIf6GELQeXZrE)?z~q1mR5 z)Lp6EUdQ0*N~A#E%6a}3Oba1-E9bRgTnNcqIj?=Qg^;|J^K)DwAtZ0*{3EiEyp{9X z*IqnH-pYCH(;?g{)!AtZL5^#Tk zCge$C=efJ&CyAZs?v{nb&U2jWi@*{)&v6Q|w0AW-yS1EN2xJZq`$lH-!>jRJ_|n@s ztPm0+uuJcdh5KXi)wzkG@%ZY_rQeZ-gsJt?Z^%Nz@p|chS%iX&_0q4(!mV6(eqkUr zknJj5I<^P}0qmtW$wICLima5lU&eVFLFzTmsW%O{Ao zguw1n37<@@1=mM2yWPWUouu=+dSoH#yskc3NII{pTNaYe>l%=Sr1QEuWg+Rjt}agPhSx*~RZ_&k9uy@;Kjd*vsIogO|nAx{!JJ$ybygv3q{UqBHdvD3q+ z>O@HF^gM;_|39;4v8L@-+x6D3w*FjepygvNdoA}gf3SJJxvl9pfdB8So?q}h-~A8n zmm&Y(R^uHF?`X(0G`N1lHRb$<^HJy3`ah~4sr&c3*VSEhe8{m1oc+I8`+}Me0jTMp zbP2EW!~7pPV^2I_Y`Mef2YR}m9WG}XX;m}NlI)f6I==+Faf)D*iVlAC-VaCYqme)m z&S=NjY2JVz4y3~=9`-+x8T<(!p1_8qvg~N5mmPqv(9C~1Q4;t4WyE=U^3w5unL>4r zYcW*23@u#}_x%xETi){Ft)rHogl64ac;6rQmeASaE!fqLMMM4|9PY-$`*7$R7z-o* zNEC|N&gd z3jlrFuH<;r!2qJ+1 zbV8^Ahr{*(=$~iw7G566y(MS?h_{f=NufI1=vOuC-ok4GxwizaJ#SSA=8%@#-7Ddh zf!tdHTlN+d0YHa~g(5+SFC4Xk{xF0WFiSwu{F%HpQ^Gq1F{@0N1;_^noWh9{l-p*& zivWKhU04N|rs=oJPL=R(LELg6_~aw%izw68rvWEQc(owDW&%uJvpS!C8g8_w}~&!CxWKUEqqqMP8;=vG%aod!Hz!aD_V2b}=R(XD2mJPkZq!g~cV zS_rr*zN_>{q9iU9B*-MbW6Ce#X&R?Xc%dLpD+n%$Z(|Z>`O2P#JyQ}_3KHzf5niQF zZj{88f&||j;T6a4)3p~@3XG`Z%Vt^BDRe($G2*HVI@;TGp0nHqlt^a?x zrcl#XYP;6@7p;e_wJmRH8G-xs4x69SRB9UWe8cmo=c@aU+#`+u-uSx4s|_D&Sap5P z^*UFl^N*aX&b#aXXZ;K6zF4vQZ}s%FhCM@U$YZpjE((uBHafBrIe9cz?M?oeh=FO8H7f^3}0=!>8pvYWR5W>nboty@0@sGG0=OKq{2(-IgL?@H z^SQ4Cvg|9!bp=APAka5Jc_bU$eLzwG%Na<%_SrQ(?`(E9?+X>EudJhc zFmTNeuSxb5Z`R_fgoOIsR|5AmUjal!zr36#+_72r71HT*UkPN3ufi~@Qx`Z72e8dvC#8(wY zEFk~&D@H@!ta}Uj^|`kMw$)oOK80b7_Xh%OAA)_h!v1g|2*j$9vu2A00l%7l2BOvy zLd+uT7>pJf**Hrda2uo6>HxaxB&APXcf?ta*gEGhBtq4RBWIAD#kFtFT zpDzr|$v*h6Ft_!eu^%Eyzy39ZDONrRTy&%#DrOGgmXK;63Y)n_$r2Lu^L{v+(Q!#^ zDaUt)j5l;xedW{UBzq;K=I6c=$QED0hC>W8>j9wR7{oGfP zd;r*XgI@EP#TG9L)vc2+G*tfPW&)KWZqCFJYZ;>yt2;;Se`5zIp2 zrE24QBpiaRu3#9Zsb}kj@e(rn^T|7KAHm?4Ekr19mv!0zJ^@;4l?S0&AF`0opLaq5 zOI%gC6UOjts^#rKGsoU7A*cT&u5<*p!dZ;4iP2k!aO*S#wBg=ZCE~cAafmm?$lX8L42XCnJ_>H&Camx4wQo;m6kh=h^=M-L21Rc|r43 z(~{>g_iGxD8{X&o1n~XU)ZbP2EXNCK6Y_4pX?bt!zW_OVK_^PQXy&00L}!5pi~Sqk zEZ=rA)@2d6u!+6!3eCuyD^_v%*PJL(FqQ+|egytE77KYHV)^1T5`c+M3}z>=VvpIS z@%G*4580yep1YZ^U~1Mo>&wP~4Ui3CR-5o3PK9QxsS&SiYS0Ir5-t;fP67)coQc7V z0{-7XEDCh|A={<~@Om~|l>4~~rn2Gzpk$iOSSk1Y@SYT$?MAcJ)Tou59c~wZ6*Bw_ zR$V?cH5daH^THyn%FieKPykKX5x+Ol-+=B#0yX z{E9S^(o$UCSuMq8tED09_{%tme2|cWx*xdpgT2&nI0)q~QGXcB_1o>Luq9)=t3F)G zR3i(dG!=Jtt)^nL)zpY}Pzv}$p&%^AB7Rt0=%)IhI?NY@9q_04P&7H-}!Of`>6 zB7vf^iRXFDZ`DZuSWJb#wwM}$VVHESAt4@NsQ_5TvG|3z2`MK(++4!$D6%yGV^_6# z5lrD`+A!7pQbq1UWhzgwSWM;37E__wYHA=1xf?&*gA3qG^#Ro;7!8?jxS+}IM-?t= zvuWwv&6HuO^iqw?gVIu;bp?Rw5!P(A)MxqBu#!{gl2CW*gAs_|BgQTzf?W^z%EC9u z=1YZwXPfiixtqxfri#3Q%2b}-u)I{>Y%vv@EiV-^eGwRVBLT3_i?c$!TMUeiz}{NO zUi`8p&3!(5<8R^Slwqnle#NR^Woi^R04=8SW{auNY&F#jUto5r3MAR^b}i_qu#e>p zz>X8_+S_`m+)`WfUr+7(YJQ~len;cC-5259{4dmg!d+_UtN&@&SL#3Pe9-;*hIhHY z*Z3KC&@)y0?~b*4xe#O1&cu&*YnqJ+sFW3NpX&-p{TZh|T(fXaX54C=_`A7L(0nKjCB2at3bH_E~ zdV%ZEb+60i{AcI?Zg|Z38_u7veN*kt+J)Mo`u4j2s{7lzKd5_4-A~pn)s58o>h5gF zIey$xa11z}4SWI%jYGgJaDm-pU}Y9)`j@7UwtTAP-TXEJcI!av`)j}Lc#rdnv$p>4 zJyWf3ZaX?9m4W9s7IrtsL&2Ti(NL^o-X9z8+gzPmy#54!v}n=0xF6hEiLMW)NKHvC zKaaEM?HW!F&1TnDCP_ZZ`TGbzp@s3zbh?+= z=iz6Z7J-<(V{|vxw>e8nq}=={91)VVm75=hBSPXCH$U>XAWS*z4Nq>*ZS`%>cenGi zmQ*;Bg006$M+_k-fu6zXku`5SKcz_&B9%>U ze&mk`Nm-SfA2TFEQlR7J2Na2rxX;bcAd=W2?yKbo_lS_Vua+O8BSPZ7T7F!M2#G1R z+A9e{-uT4Lf^)AYOb9htR+wG zZS;FXdk5RO>;3IF@0zu813mxj$|@h z-DB-PEfVp{M3y64*+~0O%fh9}?uCus`NUXsto;>Sc-Y^UnN00Y1cnKv#ogbQh2*gP-QSXh z)X3tY`PhEodbp?8JJ-G;3lF0m2mU_TIbQE-UzdgB z;oXBRINi85w%pEn4#?}C+fHu>2G_^elhJn0=RkxT%ZL3NUCYUit-f|n*+7J2g~@#3 z`uO@>Xs(?TFOZH;Y8l;}HDy7>0^vTn`#Z9>^S!e>JDp35JKKTwZCRMy3WU4Y!*l%| zzVPaxk(L9h+}|nJk>1?;D&8Y;Dc1q}qQ< z77peXW3xT;E89I2?LQ$4hq`+$|-h`xEoMJ7evS$-=Fj;f>y$ ze=EP!(f(ptcz8X(=}iqJLxrh!eo&v-xqN+ccxWV)oapXt=ZEHraCEUR9b2F8np)~@ z{}CB>Woscnzk8Tln)kLJ%EILE{QBWoID0tJ+kPMm(*d~mVP$Y^Z|<;tUl#79H@CwR zi}T(MfBT*+EX<9K_RcN@BAvtSyRvXLo?Pt7?TqdQ$J%#LxELKM%r5LME#^l^Xg0h+ z7Va!}`wx@e_`rd`p+gpuxNYFac?m3u+lJ@MPm;K8;3t#GlO%2%o-02|;Hdr?BzC(05`~LhkwDLSV9_@)d@wXHwsXCIVlIF1 z_yp<+?+@8D@qHVn; z5{S0-BiuvcWfN`dxhdq?ADLBPPf*ylv=Jq{r{uQj;32s|NjZkf#=EYqIi=H{bpl_kU9G(UaQ|QY6F)*?c3x}~4Q9jnOkmb@`Hi(c z&>x0tBNf%(*sRr$93d+^uOAVxBswY-+c4~q`X@tr#oG}wv-A29fo-WDVW)e2Y|}`~ zcEKI;u-6-dd>`DqezuCYBjj!8)i!Xs2^1XVpdx|<3M&ehs<^-+RrwHa=H5ykAzwSM z;u5&TTgr+z*y#s@tUrj&TCL3yaps47o(k=)mY5B0;EHfNG30x=L`oXQDZ%^v-z;K6+Y3QFh8SSCl*Q zX5CfD@veoHfosE6uv4W9D`?ik3K`zDuriP>u7W(T4+`ZWkfOMa0EORp{vycg1<&X! zO49C2)zaDh*hG9aaoj*sOc&8LaG# zdrM%;-U>$HTq)c2hRp{oXolOephg8YprKQqwG#?T_)N|Zr^T}VY>-}PrKntIZox|h zEPWH2^~idzG63DWz0#M`uy$(+NMUl<{ ziUXkp0*)DY1K`CoMi#QhYlC|}8w|pwVqRKyTEQu*Ge2OFepWht^h3;7+NaRKCBCX0 zSz!eU4ZI#`*1d&n@mfDLur1z#LKxVj^ah~J6f2*gurdOB?_pLcch+NLNF~p`Rq*Hh zv$=deM~{uE`(aphW{_E=jV$RSq>$&{61eufr8*-6*nVT;fGqOdTLRnStuSl_LQx~* zI>EwI*xQAj-e3eqv$GPb93js<_ZF1gW&Nxiiyp&J_d}>pQ;oyW%-?_d2x;cIw*;;| zZ^4e3Wv&9=3Tv^odxTW;{BtOp_Eaac(&JwuxoP`xVR&1TZVebg(=Xq!eY>Ts?P8LcCpx;G; zyd(OcRt*MzC;{@Gty(^Dgv9jRTcR+QcuPG+#J(?2RpIqVwAoPd2zlx6!jg7@OT1NS zh!0~~uGLpj{ba!rGShQk31rz#2Zc)_|AG_f>ck*Tmq>xRiA!CX&pZTKppIDQ2`2+jHckIePlS3+aiR{@}bf+9#bH4SqS zR+$1H!U!AkW2_M8jGx0hM6J9i%_Y84&pvrUuEkf-%q>bDT@X_TfosE8QM}{Bf(*^N zug)`M?kj;T`wGt3#bAhHgM5g`6}X5k6QQp1jHfqw{r?KD|L-u>|No`)-<ZQ&xg9$SQlXiaRp@^$msLP*Hk`;P#OE ztzv4xYAQBcO%3_w01m*c7fRxRUJ&NOKK=oQuT>xnvlVu-!*&1%?(=(XRx55*Ff|P4 zk0ONvTkNUcDyUSk*=lN7Q5X*&NneE3OT%p}d>RW}2r*b_g&_YGw)a+{1`2BU>;~{= z1yg7Jg=`2eCl1LcllVXbJxXONHd{@NS^^j*1yM+az^D#2e-RwgVd@EG@-R%n>5hQy z!eR(udo|SAn;V9yllR_x?}Ifp?d|tA*3@Kj;X>Fu8-xpJHWsDFopo;V`Gd?plxSwGAo!jOcrHTXiMZNzT*^xVxg!&37nRpghI zCLxa(9g(;Lu-R&9&^jVTV4?;EnQXNgiDB$QiVSkDKwScdXn{|6s&ixBd$8K+-`ib} zuLXC8w*&h-o81drhwFoz>5)13ru)HEc&YY^GUsltRx;H{535Y&Ic$rmyxC$ZG+SP3 zm{H!sAp@wYg%djLlNtl^6t<>@4-HgN+ch66trZj-Yl7l z%~n%=ke~9yId{e!g;m9DvJ43X`1-(!d)ucvY@1rRxontf?y4f6tTL6SkS(V2W{auN zY%vw;iD51Ve9(+ufDgVtNX`t3`@;jRb*CGmhuF!#ZumE zu@stROW{0DGzOC*7=c(i4O1P!WWpGCVQ7Nu*looxJ5qO_*RH9H6-*V0QKhMvsI;1j z%~n(Wmf0^H=71CFu&DtFR=y$R!vrf#&7jR2wL5uWG-`HFg)SJTO7UxCHI=4f^3`f8 zHd{>%T1O=qW7+Z#a(po7XG>?82*V%+vxy+gC+vPy8R5CTxx?JedBak3{ECdE%2L=! zsoZR_6#iO{-vB#1$cQXp4FhMGF@E8c11#qvY`e#AH-6cS(C$l}GfXwVRFO_p+Jsq8 z%S+|SP^+na%j6d>myf}2CL?=>)e%}6gOie8HX{t$eW^Hq@Y*_l#rOYzi|zkE6Zrp9 zE&tW>=9XtRf24W0>A#xZ*mT|V=bmlPW%rxheU1OtxYO9)@COb3t}nY@<9d?w{mzB@ zf2)6W{d4O+P&ZfC=6JOuR{Ocyx!R_h-}(XM3MxY+j*w)Wrw#pun0J=VKj_YoWupdW z>(Og)1{GczO~Po++Rjk=2r0yQl2zc6^p0}313@5xtipz7J;8%C;#xAy(AkpUfw>~2 zb|BQ@lf-&7?0UcfOE?q_ALKIWB$&^#vB3#5+yamML+@kam zQiyYJ30zy=f^%3ZZ$Y!}Eu;_U-V)drZ?OUiI4upn_hDB73Vs+3STX>H|1+iz1;2P^ zHVb>%!F)dABdJ5Y($wM>*f&sHWbAezzqsZt1J|CnkkZ`xllm2*dq>DHu6fJAmc0e3 zf+(C;h0g;_>@c=qnF*}>u-t@$=x6j6a**@b3j6Zm0-U4_(|t#Ew*YT&G?f?r{=!Qs!4U*om(~ za*-|%A=RW5-oBWWB2T(D%`$TL#8)Q_S{AZ#{*y6d@BevXk5=d`dn*8GGRSHJy%>A} z+0+3F1|jzXH;x6MO!Z77eB$W2V$c$4dg3jZ2%BHDmW7uWJbE+#yr++z!*IE`1nz0x z;vg!fYuF|bOxF(zZwYLRw_xf3H)OH&j+Vjzt}MutgV$h7`;6XtKzK`J`>D6&*y5RQ zRZ%aLbo;dTpFWBSZwXu*-hy&hmA9~2pO!|2w*YJFzQ^PA&M3!WFbU)6Zj@cXWhJO8=-}s~8WO)YcZp#?(QkWC=JAFKrh4;ckDP1Tz% zrUKa?^d#1&;J!D_RA4`3yw!}0()NBL?ETx!2|n(sU}`=aiev(L*f~&|3LGse4`8#^ z)Uaav2?}4JNC>u2!!SQ&BQ0ET2<$yH$L5Gt9W4JsU9c5CyUdcjni z`xKAYRWLP@gL(_##Zy%?gca^{MkjJhS%gep^EEn2bJYHG~#R^j^+LgH0G zf!$JODjZB=SvEMN1QcX;Ers~CS)}uLjbW*|tA<#KStuKgD8DrDK~!1Fn=O_?v;0zF z?1lR$p>M)O7ZwNjQelhS56g3AD%_7?Z}{~Br=z_snYo)Us$gm`7s(YEy)Qe#Mkfl; zCs_roB7XH|$y98%m&=p>*laNs2=ReT*T?9R!<@Ym&Xqv+ z1omE74BLudFf(vpz-Cvy`KV#3xvPr3CZ(mA@vvHo%~ngpmLfCQAciG8B*x)PR>a50 zU$$(3%>a1Oa8k>bsc=7t_dcJkJw>Qq`H>2yip?CAsW3sU+-xxw{@U_V86Rl~Y6YPx z2@)18e&M4Ap$s2cIL#NdH!9($#%7_}+|9#ErW!jjDx3I*k>#!OW{auNESt)BD&YcU zSS-T~#m^@YusIHt*l=VK^6z#7n9={)tw}nlV5-mjfag_;QqfM*H>J>=(^(kL+5h+f7HLWzN7BLz{PimF%!vL(sGh&>^Yf&?2i@cJ+AEs-Iz zcnfx~p{NbEwxQmijrXwl2j7MuBML`8&gQKnydI2uOC)TFw^SK>J$pmFg=<1c>S*3N z!ppz7w*>BK-r^t@VhO!j^VShw0LHx~ur1z#DLM>MP&fs*1hLqHGcizb4l`RQk~^!n z@PaVzEs^sf-m)CxiHu7ZT5c?3btd8WwXDrn{g zC6Dm#FYYRVYr|FS8VS`8#)s>Y4W{|ZNIOwqDK@vl*Wj7~wME(?{qzyu{KY$=NM{jWDTge450HLSVMDXt3GwzX z&0B`fR&T*IZ|v*?6qEDWIIHqvgbA#8=8Tbrw}WwSiOd!8mSuqF7OD2UAiJgSd8Lo= z?l0~wfoscKEQP0tEoj!gh4+7PZwYLRx1j11E-8e9)_`{II0VxmKdjn-`1x$RkMSeC zA55#5Fp^)?TWZZ&BEixPA>*ZYL%jTpcSDg=BhIQcVnJ>}i5$}}e>=kazqqRevc*-9 zXoe*LWDg+$&c20k=>{H}g59*h*@{aNM|e9J4=j;9Bd)@Pz11n0NmDg*U!{-m@-H4( z0+;xzayMkx{wdxAG;{3TBfJ2NkM9Co_7;#LFq$BCb%c*?ra`$lq<7#Z78tqCI=YBZg64s{nvKTHsgm!8XJhr=&-7VwYAV@QAN0#6jRIJ#8oX3Y+!7Du`WLflGW< zDX=2f;OLe$u&`P8R$h2ZV9VZun+L+MI)#gHA)Ubj3pS&mZVBoM!G~v!teo(c$N>^> zSx&U0w|M5y;w@;_BP+{rwa7AZi^N;%$by+8t7(u2Lu}T4H7k52G`9E(`ZBC-V1R<% z9rP6>rs1$B%(K9KXZ#jsgs(&rk@$+`Hm$1jjH2W#OdaZx^$5e|LzciLzN!>iQN|IZ z`blWkz4b!jErD(E7NqasU=k$W;mAMp7Q1Z-PWJfV;|TkJ_!CvmN%{W&cliGQK=XXl zHqhQbq!B(bvPfXe^K4*9q+0Abj^3ZzvcS>g-<^=^LYE+a02$h2W#4EYH&mM zL4Fo?DY~)m3vBFW1HkK>N)8Urr3;%=;9kh=z<(lfzwZHG_|9AiL@@^{R&8E7%VBizf1`f>4u7`*E3y1Npt$1#rKb6`E_Gky!smgxXQqW2g zRLzos_}5h$C~aQq212tv123u#To~$2ZFF^S`zH2oyMZ0v!0>K=|JvN*gyju}0XE!0o2prQgZS5$H+YhP zu-9Wgkm!4^dj~5E zeH($>Zs18FYANv14TQQMdj?)m8#p&UxHiAN=^N>tPv#~^IW;CZ!yTdRZfsfB^PSZw6B8+by9S~niiK;CT6z;kK? zr{^XIMty6mE8*46t)ZT+{r!#f@UZe#;iOR-Md1x%v-J&zw2R4Xe(2!}Pjh99{sy7h zo`G#@1NRS?{d*Jnp1IDR+iu`VA!^|g;s#=~Jp)_S26n8@4*LeL_ojx!V{?J|aNo%C zKybiVo`KD31E;*%(UslkM$C78Fy6N_xtvND0wbz72syyY&6YO^e{Fe#Cm0CT zWy(H?&GrmzQX9DG-<%)4-oG@(A+AkZpoP{}52wwfBY7GSY`0XUHhwN}7Pg2!}W=MT1k z8EH5CyNa6*?QvhR_5ZVKUd8$UKhe6|db#EOEswM~o6F6UP5;{Tnx+RmpYy!L^DOtD zySLp>YWzTBuCb-zZ4GhPf4kn~>UVzG`9GYY`oFG!QT-3sy}xd;?wsRy9P!%!hWq+@ zYQ7AxXZj~u7Ch$kkbe%<>j@iS~t(BgERQI~xhlF(XQ# z$qj9Wv#k(li?vyIHWHenvk5Y}-iPWBAr&;a z+HNAVzQBr0t9HhXGIEz=e^nrO9lVd=4P_%|8d$=&fLj9@NM|jzLY3 z$>)H5&a3vtjWW`YV|WnQN}q!&l}?qBV;ntA(8=fE%;6C)Bh9$%56kzUN{t^XBg6PT zY=|Nnli29l&o1w5ow2_p%Sa=R@j(_7G(La}3|}OlZus&bm z*Enptj4a}~lSE)ie2i|-=Qp=1fK+Ja*r_t|gky9NY-My*sdl`KRN=BWNObVtQYGv| zW#kFR=pY(bjE*YdlVv0W$LJs{F)~*$KIl~2_{4_yH7qo=xqj0%?W%G9s`GmNSL%Ph{=vG>)!nRnw&O1x zYmPf>-%&eT^WOmb1NtXkMiM(dq=iE}3=q?S1XVN%TMzT5?T0IMN)Fy4G+%8^)IEej-^$QaV0r3CEBDQGD>LMHaMlWcQYihfptG z;jL9@<}s2gBQ2fmaWWo?)l=2(K;AiY2icLOvt!u9s-RtkW<9Wxc@6`cAX{h0)p_|w z8A<1G^+aIF?AV-4s}4O`MrJwL9b|rd*64_rky}o72bmt9$;%Iwkys8tmBbw+G|Y>q zs>1`>uKbwX}3{F0rqK z5ZH?0Q5|}+jQnu2JCxy39df+fZ_G)E-XuJrWh3bAHSw=!PIlh$>g=&$JuuVoL69slmqrxy(p;@0OAZ45E@gGEYPnD6e4WVgW z%zkHKU~)e-=}(Y!Ms?e6sWMWs$CC;m@>%l`A75+x={wN?;Wo z-n^?)^?qc;7_P|AkS?!HC#&^$n8C{aR(JX8pr^_q27QO*7}Dj(x+ZuCR|ouXImm!9 zQ9@inI=m%OQr!=v$^n&ANOwPT5GKoh295ol=uY}O>`VPitNS6x2OJBI*4qD7o2dDA&6|E8%m4T>CP%P~ zlgfN+CkZhs7VF~Q(yR@o$4(<22&~jev`?-DgNL}KS%@)ZwdvPL}ZmzZ~1N!vmjf zg=nkL%wzlEGM?eb4o_Tia)+-@bv($As*{sMG${g9;T3eO(5!b$JgASMO^~fgk?ML( zx-8D=6IhZIp*zaeVJFLYPG5G0G9^+Sa=a|g;S;S%N<_;LRR{Y}8PDNk#*Dy{@Q^ZQ z)xjsrco-l3K~7cG~^ok8lKtE($d=e zwARI@e`$TZ+1>m|(??sL)zaVG)%;c0SK$7@?=`);>1|EVYr4_&Q6Gg0gAck(P-U>{9&Zb^J)!kGt)Fduf9snY-_-cN#?QEe?u(7z zc74qCcGqiNkGfvy>h%1HC+2#ptI_!-=SQ5s>3o%Q&pF-j`i93E{;Kh2<3i(52bvTtjj)TlU~C<{rYiQ^I%ULW6IUE2=qCJuL}fK8xddToBPQ1fP4NMLJj$wC5K z^CnqHw5=)0!a{POqh~uk)zi0B^Q&Aaj*OBK=dS0=LNZp|^*mWfdi!0^m4(E&cRhy- zg>Q)|j;G2`lJCJ?owAUO>UVX>LNYGj^#biT=chX-HakWKg2V}~H_F2N@WE7O^&mSw z+2zuFn>L;t4DTd5b~i#^Z@)`>D?-?}ke^zL@2>~@`(2vjg`MPmI-Z8Vx!t{X5Sd!s z%=<@syh-nLJifM-8oc;jE)=0jCT5r4%e57+jEq%x^~ypr+T7J63&}j;u5MXKzV>%@ zabapLmg(5;?!4YZ0_?)8WFc|Fh5sQ7i4!jTyeuTXz3_9gko1)cuat!(hA#Z9EF|yq z!q3P;5(yW68im_|kxKvVu~v)3yCSNC>M(EKs@AVl7+++hX;jZOd!8`=RI5~ z!h}5O8j^+730jzlC#e&z%TH1#49W@-JMVll3bzLHi;Iz=crd?0CJ|Tvl0PXr((vH$ z!ES16zAM-HggXA@N?~fNWB;HdJi0L84<@I^Vxh&Yi+?B!v+Jq7p}Fz+P=55{2V`MB z-LbwhI?+8iw}0^uWZ_PFGvB|Q$b~0{F1}wDc1#bg$0q03GPALZ?~{e8uHm8l*kNXR zVd$dvLCi8BObkrVMpkDpz7~aK;?ljBUrTilbZkBYvLqq-$;&+Yh>)ZhFZ1XlLIQhPi$3w21orCR$fgk3tAEXf z!b8`|N9Px0;dtjJg!^h|$5iOzYq(I1@nlSJzg-p*54nF=7Lq~A{Z3g(1`PMRxljz_ zG{8c#kOo);){x1wt|L!)4u6xp6%rqE|D<`n`Fztmn;wDH@moEU z?ytFD=YB!s=Nlhye0IYp8rB=yUBBz?fRuwxnW2=AQSFLdF z7# zXYowx_-RHOm0*(;j9xrbwKpC)Mz#S=jT2~+sFG9TRsTft7+DA8KqTp|vj$@F7)b|Y zWHK!Zz{Rj<@%Tf>NH~BSro=6z%hL_hs$G&gM$!T7_S0*L-JX^4`Td=ovfIPSa-isu z>Sy3=p{1FRuBl_eIzXUFw-+Od6$5=`ZRXJNV`Lq`eovq+{oeZgiLkTBNI8J}VFZ@+ zd+UCf%Kj67Bz}wp1hVdyUSFl|sbj%BKy)X)o{@F1P1&k7P8~nd==20y+3Bm)`o=M` z58(HmKr1@^Srktm3-SSiuIleq>YY4B@&WAc1ex~t5Kyw8!PyTTBmV&QcY<88zgMj| zQV^ixv)PXR?(RT#ZE%CE6yWYT#@A7Gl*Eq(0|7y{%mAxYIDL!^1o$;0uw({kRL@kc za`ITv4-jnC{I5!_Z>dMOdlid00swvRRu@YDkqPTcR+TAH8`q9jvpiK z00sxqS_+P;VIMk1vH=VZ0$U+Cs)kP;BjEtf6i6knVy18gXk;9ap%pWQs-fe@f^C3k zO=b#4sbDpg-r3^@))A4cgTRuRLWh#9qq^{B>;DTi*J|4CX?ursB9IeBw|EahnbIp z_C#aWzp$T8FfHhUxEzqKLrfisS`Zhb7VH!&X+g*s498P88{}?ir*9Aiq{U|w@Hz4V zmO?vQk>$8E8gKl}1w5q%ZLnG60?k5BU9tFV0^TVvV7BU-TJY7%>xqNt{7$V@n=S<_ z^WB4uwn--!`0>!h#as)*uelaHO+WzX&RI@dP%J*1fOp6XIJ@I1tQEI5XQozv<^rB# zWZ(pq36y&*AlaOsDe=g&Qq3n_-q0`Q(i!HFSD|`9rFbzrh+R;ehk_n=|Ma8Il?=UqJCl(al@}15LjTMKJf#Im$|RXFNQ=+bg15*Eh>qPdp5=wcdUP*ToR(`r zx7--CLyA^1G`SXpVy*>G6cF}B&=7t;Q3?XPR^*ZjTa zmo?8-e@fj@->muz)uzhW_a5b!{7?Bs^iXnzK&wf7EDnh%U~GUA#6=KynZy^ilzi1;|alSZ(lbmLw@K` z3^hpO3`iO|Wz6$E;?#~3J(QviqHQOh5?lg(#ibBAbSOm|M964L=m|D{I77xIof4#d zviy{wkmcy%G{L4*f`lzMB`8D=9g5)w>69QLqbZ?%Q>v_c#16$+gW_03I!4_?dMT%n z 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%0DFk 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%0DJQQtZe#nX?J`S4B4p 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

      1#`gh*@3hH<52& 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πG5 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

        e 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

        ;pQJr%Exz9#GjCl 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 DSROk7 delta 2282813 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

        )2>EUeS#hU(>ifRcI;wxCLDE9x%xSJjj! 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 _}wJ^_~^T)rC# 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

        *sfV74O3*PK4*Sa zdz2eB*R;VJ>^6^uEZiXd4e5$xINIo^{7}7Hc?e>yP5FdMp*gR52XgXJO{{XI^ka31 z_M9{qxpt9fSL;@ntJ4*mq=86wyI4L!ZBmX``6~{q8TB=pM)jlOBBdT+j%pg!P5QgA z8-75lRo$b?P%V)EB3El;W%IQ^C|i{)7bz{+Y2K@xt$757zAtk^?=(!)#YjGuyss&f z3`urLwn)}$(j;AyN=cq<;>fnO9Ntyhw#JsVI;SOfqBqN`C8wn|uer5nAgXn8oJgb$ z_?yH+f$ARxisPcu36PKf`;SWg_y2$toBvUudi#NS-`3h*SeDp1;Z2%(mYnL|n&hsu z+=|k<>E42@!Lp3x%B1A%81e7kf|$Oj+l(0Y0>?d3vXAblRI$2Vy>N~31o3jVA zrCy8?+yF!uOd_BIh+Wobq7-I}&RsY9^%o71(ir4eOpO=)Utx=b%T;cv!D z?P{#8$uDYX3vUdS3XcYu$7%B02D*x>BP|iKslrBovtML%Z(&q|v9CM7*tgW%a6(aS zj;X&cGod@wE7L4#rsSIZ^n`(y99cY6-Y6k#ym^|YB_cgJzc{v|Iy6(r9B*z4OK9k9 z&5o&Q&1{y{dmA#=Mjrob?mcbljL7H-n_czAo?9_zTlrl?TX7}`^r4^V`inGS31XrMW~&N$Mz$F030&&FvWLM?cBztIbF* zXpL!!FPQ9&hO?yP#56Wl)s*z~`HX0}-twlHDoa{!L-d6G-k)@~4X6rYvNH0E@+S-k zpG`9RX)_ucBXUbq>Y5vTmf*}9zU1N`=)m)n&0~bxANf&}Eb*mXsj)f9H4WXLu_$wQcgmBZuCCk#Xoqz{DE4NB>@+G=cGlYd3z?RlP##K?vFr1k`b=blHZY5 zTgmoTc87M3cx#u4aQWcF+E+9W;`Z@fOcG7y(nl%r<6>#}CEdhnYtqS89<5DT%gRHGjy&dEmJk8Wx*x z#x{kA4*6)M=HD5KXAFupGBeDS2G3{|k7CSUF@>H{DE@;n7l@fr9s_WJ!VInL=g|Y# zD$OucYCJkrU#T)*U~)ZL6xXTEIkmTKHP1A|Y3AdZ2)u3<)mh}3faV{cZT^%=^8}#BZ=GX4ipxN+BOc%{2@)#l zWZkl#C4WihNPXc^w1IIvCR-=?#F=OMG1LBeg*t8~e?qY2ri2IsapuRz=0IzI!0cmo zF&mjdrkcr?h6<*5Gr3y-ae5?V4L@G^G0E)1L`6l;iXMtjG<&ZBOb=Mn$r-B80jeEQDLv@G{u{*OP&Jlg)R^^y_bUOoyhWm>d2xRr15xW}C1)$GmQW z7=!ks?!0!7<`ZlkG$?iQ6R?6iq!T1lg^sh#S^4To9(bUJgoWlnG1KEA7u4&E%s(>u z9_(Wc?OANj#b`x(XeVn*1oR~n>cLLdP;sPrj+lw`%mcnHiponpVZd)1%_U;SWKs1+hWEB z%uEmbdPApL&B6GFY!5tpL%-#kv&48fTzf;A`SkFa9{Bc#mKV^ED?B{j@2NubS!TWm zzP+Kli_ABPnMocv_lE4n)J6Ut^6q_GV#W^2BoDlML&`ELPx8RMH#Doq#;QM9$iI466{F>j;l6f=PuNP-MFEK z8Y<8CqyRrqYtEw~Ne2G5Ze%!c!Q7UCMO%U(6@6x1|qCio~s=#rOyg7nFLie>UV;PhzafLmOzHZZP9au%{fw z@7`mck8ud{l;M9u+s%_{$(91=bkLFw@{|BKcT#zZrx^I&E^{({5bdI!?4}P2@)QD# zd#TO>5AC8&?}M|(yw~;d$C=uq zy1MGrsXF&Lb-K!=Yoqb$)royHQ+7M~cHBF$>uIW*4nB4-WuhG-?YEkb)tgoCC>JPl z<*(y|;s`|e3}R)>Lu?ru=1b>H?kvYcE7o)`FJ(w~zSq6Hz?WruvX+*z*;6}9(2!qW z3Au@m79+oFHZ9D9JF!b<>OZ%;pYUgy^smyhNu32K{^GolOBkPgWKVdFc(3lHZL%q^ z6YHd%(~z!sBLv%%>du#uZk$i~KAlsMp1Xj?tyd?uElr;+glhPAe}1E{peAe5)c&fT zSem!VmP;ETWr=L4*bDv9*`;&*I$QD3-VbSc)poWZ{cvaZq-#d{kB>0vq_bb@q>Ze{ z%dlSZosG!9xSaaq(b<4>kGHz}Uyt;J6|}s1bk-pqzLN4IJ8O~7TSenGxD&fsrtLy^ z|FJV^y7)GgDd?<1_1~_BTx54vB6;PV5C>P>N$$fP?}pqPLgJ=jvT5CVqQ0Zrt-P(+ zA}^3W=Z@j%iw1EcHnFB{?u+m821Abe^W>SZdC7t6VBwhg{EInC%kZ`m)@r`ah)?!=i6ID z&SBA*f$ZWBXwi^&PDfhU76LDzxU(JUjoV4>$~)VT-n!$zRxhpSH4%+!!z&` z>Rm509G<57gTy7ZnLM7aA0k2PWhRH`s!u6jZzhN5j>91#%m5l16^6#8x8{txN%@x| zORkcB#>7%9IW(vhE2{!lXkqvdBpHZWYH8NkRCa5kiY;S$Y+jCP)*)jZk^ zU}XCHJe4mq0~!f27el@o*xlHrBJJmz*VKcRixjEyfzo^2tL!i0-2!qld zh)=F&QmPR@hV;P#ZiZ4dz4TMa7KUpzlU9}f64C;VWG1aT`&a4|jz~w^{u^ntR5NMS z5r0trcr$6$_U9ox5IkTetvcqfkeL7*W&$nS{|4CbWvdCuF>JPWBOA(&2at39uZ?n- zH`%#3puE^6*=4fJa2KtX?sC7NH3`YJf&GMvrvb{9ak^VfHSYV<{U4C+g|Lvm!m=(Y z$FRb$;UVMybLZMGFnG)v_HE#>rOWvt@=U+rF*h)r|8v!!=_srFSt;=g8eLjm~Bq-HZm==MR4nF-QpM(O5}6cVIaHJUn-YbHqZ`xspgB7}sx(=$GAc&_ARi17J1TnSw>e3j_#Y`CFil0sk)nq0Ja>rk{j^XOf1VQEn>gq@e z34;6)M4gH>69kEwtc#$0f*^0cK=~uh1VL_x=$z6F2x3~G*Ue!1R*1BT>R)h_OT7G& zY^YR*Mz)C+kc4SziPE_qW&#Y;dEIK7V89C|_fTC0y@de7>tXa3-b{euO1RFzaDB}L z7$cUxhC7P!p{b8IA%VD~i5W`>blt0l- zh#@^ux0mr4C(<6q#i^5(R}?|G$fGy+y`+WB!@()zu*#?~z8+@M_8}>{elVcSr0sK3 zb-ihIAZ=fprt3*-FlqaF>AD7DBWe3TGjxN10?efC2W8Q-teLcZNVZN)^+4O3LUVL) z(dq+rZ@QXGg3X(u?@ggosI!yJgtF$nqzk5eLRlxL>cSb%??l=qnp*WVRRnHS?k($- z3fyd%E-#7)iM|8gJS&~!Wg%_;*EAiL;2?_#X|H^pQ?HRWuPC4vtIed%Un$h7s3*|o zrlm!cA7CbRzPVV3C0lPMb$+u%2kq}}CUrirOxKsnlR6JBr}BNxgq;#AXh_s%!cL`? zRHuiTuv1GF^}N~)=ww<^t*d7S-VnKr(hk$~Q$19kP#lpTlYJ^(&ece^v(4fV(G9f! z6X~2O7E!y?QX)W`z04kaKFC^xSwE!!b5*K0hMm}Ms z>5C~p-9lLDqb0g*raxxpEkqDaQMD@%>;KIiO=mCgyb5D1vLOb6R7 z-U1L{I=$RE*DZtsdcUO`0b#cg3J6(2!amYMDB$Illpkv$6!69>T?{mrg;0P^papWg zg;2oQ)x_kH7D53z?@;-dErZd)Iq&Me2-C)M! z0Aa2B>OHC~B`0^laGcFeU~h|`GIoLI=Qo4-gQaskEuJ&qsMMKS}!$lyJxZdXl4+*y>|SNc15MskqdBi_W+h{DkPLGV0SNDXEl z*Nr0iBQ-et1o1;@AvO5%Nu7e>BorLS%^D%7U)*tq!lg5v_Q2A@7r`XuFwL_Dsq#k!%( zsZA`TSdU&MZ8F6I#VXjY>8^8n3+dI5uhX(S*g|^s=NnFCVj;ci{v|z{U;*e5{J+v& z2xF`1Kt4u$5iybf0DA1||8-5-zk#0S2OOreLAy}fq{~n1B1r?Exh%;ZlvkhU7fE|_~eOhlpuMc z`&?Mb>Rg4dp6EUnKKNcY)xAT6j{$zTfJ0@EQH5mS)e5qv`(lh?nEnxb-DAHcT z2`W>R-zuKV*U5C;eu+lB2S(k~O&G&{U!QM zBZ@p-A=pr;)?>XN zZ6VmOU!zBFhgt|W+|ufYFdga`(K)e~7zfe%y9~oI@V#9wY8NP$BhH0Gv?GyS_{1xp!b{la2rNmK7!+2?7RedqEXg0z-(+9oKETuTrSSj$ zPFN|EjgxuEJ5*Ba&0=fzzrHOV*!|J5;+`jl9?v^(^Lt5f2NEG`Mh;OY?uGlBEuRPtqP zgL1Os6?`KdEIGjPIGV$%T(786>{CqD1jv7r)FawuiS|RuMD1|N3i&szN%pJ4L;J2w zp)yMbV0XUH6r7~bXfI*Ay-lG|B&c(6sM#%TByQX(Q>{b%jaac!yh@X;iq%l?%uew& zIwN28qNbg_D*jF}P7xyZ(nMif+oBmE>5}BBcB_6;2dPJ?-PBl(g!Mi3{Yurx|FQe4 z?)+!Q+J9y&{%1zaKQnUwnGqv+H%9d_`S;TAmUgI|=Nhz?=K5CUB?o5&1TaOJ`qjW)!L7BK-o&D&op2Ss&rcL3;Q80eNYa z%}v$W{=1wdf(ydqv;1PKODkj}gl7ZvZk|Ox(G{7o!PQwlqGPo4-InOnlABeKmk|~5 zqUlsWy@XNMBW$L+tg6K?T2n3D^UyCAKJ(P~>S!u$D2hlhW)*8rI_oY8t85J}^(pf8 z@%-AEQH^6p{8B1{lFOCO7@W5HmYCGYn(C@@f8};(iNw~*=90*?_DC<~yUvUXudqm; zq@1j(FxO;fMrc4`CJyaSPRpOfIWrpkjM;UKEm0+X;wJWX<`_d`bL)fi!V;@S91`3- z^}a(~{QlqXzn#UZO2f<25{r%X(cUA4Tu*(Fx;nwvE4sX)qzqbCSnH`DrLOmjO-Klc zNhm4xepl%9)VmER@sGty4a6R+AX+Q|RYko>%MDTP!>ssCS!KpAe7J9V$w~ z>$GLgB1LCl-`VS!CrPiID5n{SkNOh93SGwH9WPZB1StHTcP@j zj;h9ziug=?(wx=9c_@EdWlMT#bXiNOe~wGNvzD45pO}b(>bNrR{`Z|3!SPYaX}(QK zwdFm|IWtO1>nk$@qhjl0dnR_5@T$ne`6u~JQ9VPQ8P(Ad!L2D7Ug>%Lx*1;3fcp({ z{pxdaj6HvM7OAQ)&2FpCjEM{PaDK<#R%OhN4fIZ|@QvfTi!LrI&#m-we@B?s9ObHM3y$-R z^v}r;2+Qp|0o$Koc4%T~cx8!?v9!&trTb0cxort;Rrz)Pik}50X;{v{w&1Fa<`iG= z@a!ZXwX=*d%Evb=tR*42+D9r3>VUM85%~P z3hh{)ERoJ>w5n0|x|be0InhdXSE>(brf4hKU7LLMQIrp}%k;#L@;$7uyG(`v{c2e0 zR@hyp8-e;Z=yNL>UOB<~G%8Pq*Y3$wUS=i3iwV)=c3!0wc9%(|)6ZwPaw`lk)7yG| zHRE0;!rGmt`b)V1cFRoZD2aoeE#^dJz@Bl^x$agno7#B20Kb|QW|OH;sJ;bOh?VT7 zrD3F|;j-3!;pQ9jvCzLAta&`NgG8&OUUS;=l16XWENmF%YNv81L`tz?{X@l?L2 zm5kHe1bq*f^j0!Xs}uEaGw%5!?Khe&>X($?EAr%nq<6Uul3<{Q4+XDRf_%DxPNbEL zqK0IB1j8{_7)4tTr|1C`tYi}%PbHvGXdR4nRJy)^Esu#&M^G^Jav`XT+{OH|&~O2+2nsrr75dxA*2TQeDc znp}mO?1FTPFa2q$c#Ktje+V=%o6Q_5V-76?naQ^C6{+px!NNx^W`tN_(>+p@8fuduKzjw zM7CV~ojjg>PKTdJlIiFZ0yL6(0Gbf?Dy;SXERQH%z!^IBMEVV*>ChADn_{iB zmTizGvIC{#*)Nva6E||3*;lza6r8JwLrC6MZi3cdc|!Z4vQqL;whz~> z&t&tp3si166m6KxVfKA(q;|OSMcFF|{C!t!lvg8e_^BjMu^!RI!P-)77GT>dIZpnP zzoh+&d!X$tQL`Fuzp4Up5hh&t6Cu7PIm1pu3|$9KP6J4j;kv}pQXS3{YsH=JV-$Pn zNU-i>W5fmQx5_2rKXFfi9HGoxR2*)6|4C^Uf1;Soc`Da&Z^?g=tPrPipW{xUmEu7- z4Yx}1Gu`IH>2ZY26zOcmQpsG!EZ`f1WTIpMngVFZUIj!nvF{6B#?X<%<~qG=r0U0i zU=mICKQa{V|H$~yN7e|pzx3`SywGrGD#U!xgpzBiXwJ?~LzGvH z@)Rw*P2q*1-Z`n2zC{(vW6q4=l*ZPWn2b8FMCCqVf0KTcaB8N$r@A59JFqY&Jvb#& z(J7p0*Sl&OEAqS&a_hpvgUb{_!m$~8*N(=Lgp8QB79<2@$=-54;ve50SQ1-T=9M9H2LCjc#|8&w z`6V}n`N~E)AE|AtuL}>YE%rCcoI!|dR zI>uRTcy)7gWL{KDb_sV&csfh(IpUK-$+xt!A*`x8 z-dMx3&h{21*Vh!bR5fKMi7n2y1k{8D#^e;##U_Y%I!lz+RW~;VrZz{$i$8Q`v{nX| zrj)h2Rg|PN-#c^4vWlC%BZG5;>qJL|xsCc9O=D4;Z=iQlLv~pbu8w%vsQ)OxDLm4v zI663?Eul)|>U^v|E~Y&p)yvx}ZIY9lO+GPI?FGr1KKX$fX9!(T1Wz|}l;84cc{ zEd{;5b7r*E7>!|VHI?cu%aZd{{1PV zDLgtc&dVpoKP9_QcaH)ik^=K$+sYdn`t)*^h-&g~sR=D;Oo&%IqZXTjVv8CB3yMn` zBHi@DZs+W)FN;s`O{xlv2pBg**wdzW(?%3T#HCe41w;pp@Ktp>BV>iQz+O#bYimqP zQ+r8UbeP*Bp>sM|78cvu9BGWLYV~qkFId|2K^;NHsLYnUfZCj#5wAKM5fNQm8D3bN zR9!Hk(U}ogQf=ff2!gDM8IU#&wQ+-=tYJE*}Vp>0EM;cpV zGyUQsyz8SP`o8acq$w!dr!F_lKi{YC`0k9RIDhYAzbMznX1Bf0*BDFVt9;5zeQG1z zJ`mQSuN{r~#VJu?!GXy&iTw^ZpK8o$46ZEA^e&0*x5)WWSVCGxU|w~4ZtGCzR~U_L zu`TWSJ{1{Rsr|LxCE^RcQXA4rtHV7s-5Jq-k>!!GehvNuoF6|lHV5P-c$HT*wB__) z;4Bdu;S*g_7ZcOc9yZiDPn!Z`U}rUD7v|@BI>)~$D9EQJzc?YZJ;>8(?ll&aCBQyO zYOX2peBD`zuTL?Md0bgqT7SDRW4b;Aejc%K;$M>uTL!b@?#tSmyy|Mg>+$hGm6y-E z!lhXlpvKs;`ts)LmV!2KFMwaYn{a=oerQKS0M5w^h&1M;PMkv3H#YklquLwO@(SB0 zJaT5VWVbgag_ot~v`%oI?$y{>7hIW@=9^RzF#b7NhRE14fzA@G#R+u@<;7KjQE{W4CP`y+X?sC&bemsv=IEZ? zMZ!wFQ%f2OqvA$7Lwp;XD{@-%0z(7*ONP%DHgtKr3f39=p81XKWqy^u*#!}S`9r^; zCz}Gw%9HY1QuFH)hUPmnf`Y4Bb0f=YTLOkSLpK`>+Kh$9`he(Yzad+lFDuB#y{Zwd zr9t@vyZe+MADC6>Rp(Px>KZIC9Z*kA;Z?jqQ15 zQahOrYSD9%cCE%!^|kVV;uZOD=?B~{9AHo-W<}2dd#_99NUY?>RnOM5*io{=z%=!q zqc4I3(MoRI8FTe;(0f?Pjl1qu06wnC3g@_Rc%J?zpk(rmfBYJuhg)wm=WRy^oc=<4+b+{wynb$A>K@lswf+-to;#^!bd3w@CXyb532X z%2cMqOUz0Saxv^aaSh`QL`i%1lda^R4PCB>!;QC+f41XILWRAoX(FTbl-!T)C^FL?DD z{maAx@`881M=a=LB`^4swR(5PeIe}vrmIflTl98e(_iRPqQ z;cqpqSx=~cqLsYc&o<~Mz$0fR@AlA5a&NEPMisGEa&LdWU60*CwUyl47j_VmF0{hEZF+Gh83DYN z{M#o#(uXq>5EwB>vsgV&c}n4r6N?AIl+0tUizYx={`bGRW3A+<*6r4B!4mhyRc*TRF%9}uYYx)m4p6?Am3-BUO!{49T#&EYaFC3PLMwdL zrVEFtO;fGptoA)ju74Q@)+#3PAQIqXU~c! zF+$4XlKwD;zLw6>SjnS1@q}KDJqRm#boD3oE3t8Cg-6%qI7NQYSSxvSqd#+6xK{G$ zuKb)Vnpi7&bZ?xYd{1jW(qqo*-(|RFD|vLkIHzyI-j0<#y2cCoBq~oH{S_Cf{17X7 z^lx9%k6_&9(tcj7>T?8joR-x~JtS+ze=uLs`3h-hWFP6AY%BS2-?~Cv>T4w*?vqYE zc0C7M$%iYq=+}|K2_LR$hn1#Mx|N)`BkkQLE;(^$I>^LLw~`b0QWxcqw2~8d#5Mh9 zr^t}+`_lDpks;rA%1siPbSwG3Kl&06gt2o)E6Lga8(WEU&Yi)z6xG3I{qux(7p)}P z8P#z>yB-HtHfpD8qqRO-PdNK0-_n2Chg~i4k$6g^>{Ip{dz$@-eVYvx0&Zh||EKr= zuCCvtfU(d2BMLV#$bak~|3|Lx*x!V0-|I)qe8&DN(cJuZ+y`wI2-)}aeTCz9^{cTh zpm#M@-_zG9aLkoxELO3R-G?JQeyqPORNd8$7Jh!B|5!Nsy?(qi7)T{TD8^cio2pc) zmLHJia@Qn2n4;$euj8W=x`!y%O5TyhPrGG=yd&41IlUlO@{SDok-Q+ot>hgs{6uc~ z8CLR+eEqY2I<0)<9Vz;ihBwtp-jU>5XlO0B#bL- z5mz8^#A~OMjdPVYa*sUjVW7EgBlk#qFGB&nh}S_o?5Q&Z4BQLob z5Jci`Blk#6UxR>`+Q>bk>}RN<4w8FhrU!K}(ne0C3;hkS{NrupL~7$Z*vLC_X1JjO)6_=Zk${ngLC^v=@{Z(;qGzYu;2jZ~M;rd&BsOx6G>$RM z#eSTPoFmW28eXKnl1nLfJoVMbMlPk56Aa#zPcEf%6AdAZkB>;ZO7n`kRaJ!TbYIys zsR>S><#6vA7!?kr_<#P*&alCqB1Cu@telsPyeR{`4U?!o@}?yF(0h8>$eXgz*U%IC zz((Gb^?n8w<&!sMmp|nP*vOl5I>3PKQN4}4DSrjh*tpxso1zak^riCTP05)|3Lx10oUD$0B>U zjR47}IKwc26B_}NbMc08*u1k5Ao)GP;Edd`5h4*M;SUc%q`jb7t1egdP#l$?k!?lD zfIs_8+{u`*{peo;$w$0~r;Rl4wq!$pnm(j?zeq8-Lb2FL^WILSeBK7+avFLDgf0+}|#E&X0JWDs|N zTTJy+h&y9#1YEYfWEeyF1YFEh4Sr1jwcRlTt5r2hgZv>b0j$HFcNB`Y(0NkxOzG@0 z8?>^pdz#?^RsmAVYw~Cnh_^v0o9^b*1RH51t?W~17(w%a5Y3B4G#^IV2+_`4+H6O zOFa!kl?{4ac+_A(=!T8d_>D$leX@67i4lPJ0XSZ@7){&em3vk+C+yJD1uh zKhZ{b=XrbgI1t{6pV2)Igm<>g>>dZgJ6*F36B$p1NP7~&$}3du*ne%4&-RIH8k{+d^bvBPbo_aDxqmJPI# z+VAl?mCvz3?F-&-7!bQ*BdxEQZvapXu@OEBUtoBF#FFsQ+=axC9yY>9YZe(?D4+1r zuEmr;*+%&2izNm<an>z20MdHdNO7)tlQ^QZk>b4k7A>q28!65kD`@pl+DLKUT}k;9ZKOD# zt}+182G~e(4tbmAe-9fe&fL}1P^FC&XVp7YKFie!K?S) zBl#U@BY1UhtzjVJxl6Q<`BS0^z#eUxA`Uk)Na!GKd~$qC6(eZZgM)twn-AZrJ7yR+^Q4rAq0W3U>`F+@Pl6uJvsB3;5Jqu3oGjsrVV+bVspya;xT< zier;mgECfK!A_L^rV7Hh*~{SB?NrTBF3}uS-BGWV$IHHE2WS?mb6B-%luUd@1jT8)YxT6Of2G`U6o8O7Okb=8F}BTRyN zlVMvg30cFrRn<8)?diq2S&_ZNgfp8Ax$4Twiol$ljQFgg5vNTPHXF_}PJc{paWpPZ zuZV6a3mC7Fnw0Mw`Y@W@+OX!>%$nG=io~FAgmGI9o$BDkqPp0~=+uhXp#g&Y1H&jo zT?Y1-;WNsq8R^`C%x&?>tBkJ+E363|@thiw=bwk|a${pgk>Aj%&Q?_yCi@h%m&cZ+ zjS3K|KQP=;XZxg7q$HNcw}*}%Axzn3SUfSf%{#TWp}4%Zd5CihGPkufugQq79z)ZI zIvqQCfz`QjZNUi<300H2OntXw8cqzT&Z{VI@r#Z2ad+;y=XodBCYPr*M>Ttmb$(2o zo0EiV1&moixedXyg_s?NpaD(s8Oh}tb=4JdW1TO`^QoxJ&Gf2h2o4NhE9}}~$Q2^3 z<9l`#XQsyl*2Se~R|Ic%_M$bf*}J+mq189Vb)GXLJ14iYw7NJxB1OETJ0rWfEwZbn+c}Uw^>cg?Tu0KDc%pA^*7fCR`};uwMP|scZ*joK6?*Jj7g2p zpY)@%L{@HiX;E5Sd2;9^UuQ;Jd{#|Lep-BG#6;%^=Qg+28&ew+JBo|yCywiWrZK)T zrX?sMFK`s+%&1H&sSl1T_4m&i?ktfP5LFnTQc)Y+oHWE4Qjr(bT$Ixgke3@;I%J*m zk?f>0@1iDSR;qE(2+GLw#XT6=fdM$m!}Ig*w-jY%)cIux=hwR4Muv|#H@hySG^x6} zF*?oF8A6fU)*j#Pmsc4YljSKqN)aNTJjQ*;tn%WxAtG$a-NB&; zGgNDouPTb=V`ZVzQlPIuHbp#>X%i)Y&!Z49WhY#nx7$D;^NH*L*21Daz(>h;;A&y% zUc+TB-ws$Ua9QCl1?NN8oiMH)zdn`FbXnTqswui9gQv<@*>|}bpdYBOCU^|%}pB?E2+hlq? zIEqI**igi(X&81q>!!V|y@wA?ABrvFBjT;%<>Kk$B5{(oRU9lHCe~;VYBy;Y;|tWO zl4zKDyV$vG)&H2Qk~{2bE|?pJZ&ZKPCg4D~1CsTU1=@UVkan2McUq0+SIuqBdCh*! zI?a4dgXSeol#5;Ct?55n!>PYlUsaz{@5DLcv(**qOtr6i08SKtrn;{B3>#^yRdZEU zs%&BH`k{k_Pmdc4v}`uFm0Ql?CMhn7%@Tr67)Fbk4Z`u4BggjB4*9=MpB~a}&9d60 zZp)X|c>Oz}HvHQbc3y{;ecIq7tUGOZXTpEj(80bw`B8_nSq`^Z-zF@c|L|imH5+X0*&r6pKqa=Yr<4nSW(}q!k z`)Pxhkabr-O7815ZYj(firMZW%e|-0%X^&tpEu@ad3lXHPcBR?GfdphvP`=#8J#JRP!(CoWXXo%mO-{sMHS2%#>p$lsVK+rr8_|p=+_7OtY<4 z1A{L$>|~mKXfw!w6zpW0nd}6leC%YJbvc}7nw`v9%~g`)>2{d2Li9CQd)0PWvqI!` z!($|2%nE@wkSw;tmK8?dG~DOf?J#A9o?jYpwx=DItf2kM@LNCtc{Z=9@2YIdi;Al_ zXnUCKMd?y*wPXh_pq7XS;tI@w|84EfZneXz6XI_fe&tH-FzSS;+lFs2DPhwIK6fxF z!|ZgbVBfojlbBAh=!BbhF`dfoFzAHC_Y4oYdOPenVcUJfGfZGQRB-LrhBI8aoemW& z`^JDf4(%}J1g{4M3zut$Ehoqx8m@A+c9?R)y@xc~b~2V7-#YP{os8u#za#wBV280R zeD?^(iPBEC^6kfz-N#P0@{=b9cV^r;9I~pF;6mP!s^Lmc1%oTMM@dI@Wd^fL{#HQJ4%s|6ftK*iHuE@ZT^ZeeJOSOq$;faJxzDWB`u(gSs@!4g*k_ z_}uUph7$IlFzHVWWvLz3pD_3@aJ$(~2Dj>O!_O#72Djv21~D_ZOQii-tHPxM{c#yi zU&SbV|1nNFi1U(+W<8icMO~1|y(E(`YxY0l$#GyOtHwpl!*QUrldU)&!HCotvK50R zJQ`DBhpi~^9RDq(6Q-hRqLg=Xg>1!O8Smr@Y(+sY=ZPyY6$M`fPh25Oaj23fu8^fT zNJWKb*kLIO!__=-1%{$9OoPJ3cG!tRFD-wcliA5ke6HnH%z(!foo$E7z82n{L2{Y& zGSL2C>|f%)nD0cwa*uJixwqX8lV?>=yhdx!#*=^bQdDQ z%Fh%w`CXh){Jm6xJJ@CH0C8`or*QmVlRc!f`C_=$cGyg&etsBkNIQ%sVYEO07z;{0lKles+mIeInf?wS=_$9vG8Nb$ z{vis(FcqE#p>U-gcBybX7=rY&9cHO;WitOI7h?{O*YiB&@n>&3$m+$Nkx@@Nybm@m>po>3D z23_=F5a_}Whl0-kPzn0Rj#|*ycVvUk+hGKKb;nrHj=4K};AhVEHqhDI^FUwO9t}Ek z`$W(g+k1gd-$spV-!=`jZCey*>o#g!^EUe5rVr?U8$Y1N)qju(TKjzObvS5g$5u6dO5Se(EqXr-wDA2<(1Q1|Xo~aS?*p2*r33Wk zEhV5+w^0A4Y%zeoxP{8(Zo!dL;+)OYi0sYOfvn9jpc$Jdfu?W9g%ZYs3{}fqrMJ*k6ttEJx|af z??KMQgV&UU4qB52I&jSkpaa&BG_@nQ;#7wt$sjq$B zA$IkAhlH`mJJb)CcZiwVcSsmDt7n3$Ru_RPR?~RPSNns?Ru2Z1t|m@!Zxb&iZ)bwC zZ-;?0Z<9QU-o|h+|9V>l`nP~icEBHjUNV0QA)wC%^pg2qKrfl!R-u>7FRMyGe_Dl# zm>*YBnIBe-0)4g$qt1N4lFB?;ISusjN(>6~XeC6C`EDf!h52?RhLw4^0?lO}tf&F~ zdIgodzXDug?yZOb?YO%l5I=WTj0U~E!X5P13T*2$U%gcZdh;y^3v>OgAkb@XK~|Wn zZ(%wyjyD@X?QdeF8QYuaA7gnFvcj0(1pk;T%cp~0UXB4`E-l9ZF&CFZR+#h4AqUL4 z<nJ4JUWpdCHOB+FtFUx& zSz!(@p`IODQVM!-Nh;_kOQ&z8)gu`ixYB3Uq-1TB9y)%@~o zEVRtj+0^fsnn0%DP*LVZ8n4{oo}f8{iD6bwE)t0(w@m6+_>HWT>%(a|y4og_>5$y~ z36n~4dmlp%B)cEK47%%a6zE5fF_e;>kEyl~A5+tJbUf<7&-O>u%WaQ{ z2Om6w&`I8ZM6ciSNDsRC(Rk2}kK92wJi-`D)_(^HkgWR-e3rcT9mG?z<~!=fyWe5@ zN#6OEUcCC-DWJl)n81=%-(rE1toW9A_SUyl=FNxn-enIvAdHfw4>6*WB@a_T7d^zN zOBO!#1zqrP80h?m#K6}dQlDOXK&+nkpaS&O2lUk32h@l;528V5KY*}HUU}dH+VOz+ zG3x=na^?f9E0XEoP_x>DHL z5qbBh{Iq+OpfBH>hB+dcdXM`3(!B`K7w-ju=H8nCntg95Xx2SyR>nOwX!<>3e%f73 zFiFZ?EL@W0yWyZocWGP`?-IA-?^5}=yCl@HcV>V_->CwPx|0tYc_$Mz;!YfB_#GZP zLK1d|*k!zf#Ye*5!9;#bw66TX@XI_@hPf{w9Yk%*1?imD#{ z6;(azE36Ze5ns{+!@sNp9rook(4k+_14F)~@`Ju4ksSCX4a9&i<)EH7n?d{EECuzr zNdwXEW-O@t%@;uX-W&_+dXq%B&rK@d>jp_u&yE}PK#v>Qpe{FP3U{5FF1bDsl)X+hc5qt_!lle%poNV;?%&Kp!~DK)-Q-6YPCQJm@_K28F%j zfRwPe9eqG=Ipkn6d(#e9us7@_px5mfMfRE<0>WOkV})Y7>|izPu!GgCjl#iLi;bFM zwoy|$Z3UoLY!EB=7$w0ejerS->8$V7%Fb7ECeR z5Bh-_OAx!&OjW#Z9tgU{3`u4;o3RkFn>vYS8#`&>Hgrw_UEi4qx~>!J1iQA=4|Gi@ zWQcvYvmfZ&ok~#Q3O%*z3N?4-6$5C;iYu7w>|0mdL6=`)L6=>w23>lY3N5(|nP(SY z)`2d%JQ{T2Wi9A}OAs;kjZ4(@*Dq0z=Ut+P&b`zVbk0SRfY}#G06Q*Hvu0fk0-bqr z2d#~8VC&A45Y?Wio>iTv zajiU0O{q9H9klFR8EEM_65*0_B<;oLs7%p0s;BTQF+Be)y({l5z3b((SasN`XFEu& zUOFoQo$>_<)QewagXVmJ)sW5pf(m7QLF1SCg%mX7Og(7&8LBAt43$YfLuHcA3;<0$ zLoZACoa%}HoFqT)b1D=2Ii@HZ^*PB<r@ZW zNhe9#C!VARjXz0)HSXjX(6J|bko=E1L6SWB1pW7@6C^$(PSC@{Pq=~(J5Eg;db|{L z$njLr!N-F^2OcN(4meJY@H|E@=zom3((f2Gx9_pBpl-)VVEY`!a?bWXN`u(zC=FuI zqcl5u934vX?{btzQG0|WQ+&|eQ>x{7~3lmYtFA#_#T@xvkX zRs8f275e@l`YL{M5X=-mK1hWg9mH$I-yIwc`tTrnBYtpD4EoI{^s=u%nF@OUlQ__O zpS%Ei=aZ43w?F9#ddq}dWX{C>!d_}s@cLC=0n z9r)s7Og!N&X&Toj+!*FpU|zHbERv3+2p_~>40^^v`K zpr7u=Xo(N)g@lVg+3Nvn+RK0**aPVm@81Jy5bxVVHSF0#&E36+n!9TcW{UWu-A$l7 zcT?{_+)X97?(FJ@-`kBaOByR4iSI<%HRoWFd z6moeV*=R(3q(~+qc=o#BHErU`<;hB%=jOm3j_DfDBXY;bAw&9mBkv7Ar31S-rr}}a zryS^@Z5(4b54X6dgSK(5lIpZSbBa;L5IpOalypH2CL29evQsS5tT+ zq6i$lkv^NsBZ?r?(F^6lu;IlWa$)xhU!v*QvSv22;I*Ar)@j1wm@Y0lGLoCnv|I>-y(Fb%A0bqqzaIFJ98 z%XSPwGA|!InB{;MUI;0GZ*Q6dPIy6A$bZG9I|d>-xCs1ebifBM{945S$W3v0BKf2k zUbktE{zzUdLD{JeY>5cFOZl7JAV)v6aCsSzbFWez?nv(|=Mkrq>!2MGc_p8NI1q;$ z(nVD~0&=D~T#?>b%}-^@mEv~n!wqFQe{K+`ko+idm)vAeNX|(1NZysqlhjCZBw>;X zT)sriK9ct2o^$uP%iKX6Xup_if$u*ak&MTs+oda{v!tccRB4E2jmt63Ynob3t|nYF zQRA)=s~}AGZ}LC6vH!83 z<>Nd43qg2`A1~4D?S68opkBpK5dJ)A=p!Vo;&*enJ#73W;a?{W*^E>$t>s4x!K-*z z;iZ-QTG#)m&)a8wk|0~lpD_Kkihsf}F2eZt_}%XR-2BV(_6Z)3^^DFXc^?r|18K`` zl#suUuMxgjj@qxRxsc}YL9$>oZ^i_seVX7cyp4-@&^}GC z_px?_IOx`<+wa5eJl-)8$@N?L9o%ro1SFF_z}pfWw1f7`2mA$0d*{7e+xR1#pJOZv zyuO{^$BlK+4w`-kzYX(-cF?}tfq9ef7=`4y58=ZubaWaE)X2kR8PXni@y;om`tIrW_mbI zrgUJtLRhjJGjWoG?oF!M!+(Uyhy5X8$X@;`SLldA^6$O;T{N2RO}f7ijc#>BA@}`{ zu`m=musI}b*pC8J9M~HY-Z+3pmpf={sKf++{b&cahD_<7@T1`WcZ4Fl;~@P1dWR9U zl^)^`V?m*dlSY5a<8CI00m*Hj@^etJ9?40E`2x<}p+j=jVSW|35rU-G5q=sTqr19R z9KmD#9FviBJ<7k$4RZt|x#uXqksIfr5Y4P({C1!u(PeQ2LlHzSCAcSIoaU&aFD`lr z*Yt7uUiN}asqB<_Xm+|p2p-3I52aR&Q!YED^)7yb{y0Cbqm5gIeV%z-qsu$^Sa%p# zfFn1`RmZth&Zwvq@6diIpUio2gS1(kR`QqPMad)W0?BpBImtoE2l74m%zK2~A`!$T z2>HrZahio1R`Qw{-#jWgNuk_bu@2WwhvG_%cV!zS-jczxWs)A^R@_PP75gu3Z`F^o zy&dwORd?7Y>`nH9_@Y9}eu`VYR=(^t+^un6J6vX!y(Ax_ydz()3X(6?l*wl) zcd26JRq`qFlM1u^o=dCjlrmS{u}BfD_z5?8#3HJVID!r_@E>&huEJ z3d?I6y~=_LGpffrKQE3d^ogqqYVpbOE|7L-_$QUbX1CN-mw69z28%@%CbX8v1!kuv z<#)aOeWxe?X$KIie*g zKd>@qlrussvLP(EAfPQhCB1F1LiphV?<+jJ2v*#`2!_R9CcXfeAuMO2ET-g zoSGtIR@l&QomHo{6xLQIB^HI&4H-lkk@eYiQT~M`1?lBuyM(VU;YrI0z9(+FFa~;; zCgqmYjH`7%n3i2vn$}pITbeg6%$bo=m)zu&m6sA&8078D@J|eCD@cn;_X`}q5HTlw zkRhndKg~C$);F{*$Qi^J6`kgvksF>Aom@WN8H^PbP!teZR~nI+RT7lzti;bZxiQYK zEGj2Lglah}3j#jEm-vNh86+(n$FaaoMJ?Ef7)uf|7v4%#@byFy_D zy&SZ0+}cS{KG}gCdedSvpM(Rc9ob0Vvd|uVse|_DpIM>Ck{p>x-mvkPpi^j%{v$hd zirA5k!rL4?gD%fk^Dduaw z20Qr<+Oj|V4MBFfBcIAYpgMCLv}6CFRg1Ene!tp1ttk z5%@INL0k5g#}s;?c1%I~mnR4U7@RB8UeRnCgYGiA6uoU1@o_d6 z>mE0I0B2!$KHSj;ZCLXZU}vC%ZWj!A#=pnKIcTHa@eF(RjgDp{xBLLuKFdM-^lN?u z#Lsm!BKh7=zyiG-4R~?;&os8P9QDXv`U^@lJFrhLEc+E!mBfK4X%__$D3OBZk&e?p%7`JhLT`DBkijDiY9$iW#Gg#wNF1kyBos^= zw1aL1oTNp|>3*e&8? zh|MsHrh_eU(%GS1Ls89&9;iIAi)^`^p2myZ=&r%Y9ox&emCNrUTh7+YcpC-CmOIoN z1;V=qpuoaDMucZ|ku8_%YP4{@x?szh#<&@2mUodcr|)aLjN1C4a8GyC#&x+PdDz|f zDmSsKFOuQ?j61;%Hza@V2X6G~az%2t2gWI}s}E|3>W|k2bGlH zr|;^C7&SJ41};x!f+o_j`sKuX65P!1tyl z!;FZJ$?PJ4ziqhDhJFyhpECme7}iAq-*=>OBN{&e1+I=nn~S4*IT8B%}Q?4jx?u-xUGI)sPDwHM}1He(JjjzRwIqfq*W8@A@Fj zjPNdk@4p5?h9q4fc=OR-sS zX68&ndO|uiy%*9G5C}Fv!GbUr5V2uJP;u;1>{!5>(~DrkhKPyEhTd+uP#BESp>WI@>lbGExz;(AtWvfuEbl;soPY z3}5NL1rR-f5~|15hfy&6jN*a*l@KpT0*!By$BRKuJ1l^4o$i}5ll-h2?r_F*`u?(L!bs!Vs)aCdtQwK62e!m<; zX5~OSezt1`hH>gZ8d|$oLLqrz2}E|4?bX>~ijWTMKzheA634x~Z2ZmGYzV=pNeVaSb0I{+X3gH9w5Jyzm9>6%RgZOe4#&O30@LcSyww=c+Q-jvV z8muzL0XnUAVy$g6(>p+?)jnEl>tVtMDj`mIarV>}#>z zIH7_L#yDoqGL1%|_9MD=+Eyl6GZtBPRmy7>6Y^X$fqYe$O-B5vckmw+U z-*7EJL~szo&%e(08l!cPFI0WK4S9&HgCO3#8G~huX)3bm{Fw;@-??^gF>D|0Wotsrq1dC@->Iu zWIG*kjUpt?nuFbIUz_7i%|@?rreUK&p^w+`+E8XJ_64x2MamAvHTb-R+Wtldt^2!g z#vB(MwC>+F}5NdfO08p zmu(($D;jtO^M0de~sm?Dvmu@DpP#AGl#2+F^{ z6CZ?k5R~`ch2=ZaK~SE&8wwE)g7Wjbf%WkYg7Ulf;4^hO2+E7@#+noDASln-YkMXP zhc=J3uCnYf?={sK*TDU}Q+Jd0ICDz#m1efOTGgXWy?kV|UfbX7h(`~N_uzhKJFvV< zEB4V?talJ--*~U>D}1~dbliI%K3hwda?C|v43K;Fu1v`he{jrrZJ47AHMn`#fwf4f{w-B)miGjk^tJ3~Jr)+C$6( zn*Hj1ps5ci_TnRVz95u&k1 zS(cesnI;=28|LZbkVKyg8eXHmSFKWE|2Pi4*%=|`te!arH&=v?*B_Cm9-&go(ZQ)# zfaaWI^3Y80R2Rs(Fnt&OxBG`gOuM2ibUWZ^#(u zfQ=`zZxY5iG9fN_3*U5|gS?uv-zJQ60F|U!CuEFskXy6%9l|)r5{MP=qPuJd@uI}{ zY%oC`c`chx?gP*6HnP9z&32jTRIP;cC->R29Asc zoNe@&_&F>8;XjW_h?}!QOy+E}#T`CdgeGcEiAGHM2n6Hd4{djAEQc;T^QESbY`k2P zVirc+^g)^u8#(7{@m?>K2RvXSk{4{`A)k$v9qGfA8bt_i-Dr8xqBXOo&BkAhHmus5 zu1vd)IixwNF=5SKp?pTEL5H7c`{z0cTE_(dU{f3ft?vei4m${1+k-@h9k7%|{xhP( z4jEcc0|FZzRcQU_G(K;!17@;#{0z}y2drdl2q8M`fRQY&`2xdqoTCgMFYim44m(y; z^H)TN9fYk}U!ymRgRoV7RtAd|5O3FJ8ZEPNn!q*2+YO%^ta?_r7nnuSr6_fsN(5pt3WT$XmSs5zdZ(Vl zlSViQdM}(KE6PF8d(V$#ML7Vy;S+Lh8^t?XI#Y6lkWiLia%W>GVEA`))T+sBh)%t(Yo$; zOxb(~OmDH~4=7|f$nakDCs{a-CWw|xc!Q%IFubL&FWKnaxk3j_Z;|ucJ_;WU+*T_> z=3Dnz4q>@YH^#w~8n3;mwP63nFY2+XO67Ip(Z?4jqso92;4397Su$3fX7sU2#p3HY z34Ir;*+Wc;(}>n{Y8E~YC!z1V8WyXW*{O&80mG7y!>NNxK+D3%;nbq}9UV(P4kz$e z`d&{e8Yci)x@2InvJG{rAu}eH3{NK@SQ=|)$-U$R21`vAmfTBD0^#*mbUDUBc6MC| zE5ZPFtcSen2iuXE^q51G21UpO#HX9h>rHPOzcG%*xp$A^9FHx`PR$eQqpDYwzsURI zecJwdCopu^Q1&Z^cM^ntJCr@ntap+*{PZyPPo~}pb67k)917)5vWD*+!3LOC=NO3B zk7U1R<~m2?_WDM#U`dV6QD}a2G8(a6CWjoQ>OjU^;t*+2AA_xGsWS&qO$9 zLOdJ6?#FY?fVgW0p2O-SG)m;YfOLN($(Ai{&9rM^5wf%8U@@iCtvQOjY$*VDb2kadX(3w>)Y2!j zVJdUDI6IjQ-+*{c3C=bD(E1ooZ4Vl?<{Ql?O?O-GGHtV@m`0kGm=EYSqTawt(-XQ^ z^-t=t^&gc8=3C;;ub8Hz+Up!$i$!hy!Th7OS9h!2dFi>9(DIKOzU*Fm>TpeOo@gjeY17RR^37q!(}xxw|A^|mV%%mL4jJw-+@zn0%CVyjI^E~y0FJFM6vx`wEC#i4 z@70Nc^)2H>ei=7V#s4>re>Ob+Hw|+D4HIzv|NFD_ z{as}+K2^iAZk70Y8au=s*^(LC+Fp`XSs#@ot+umnrMySHA+nH7?1=1XNz7FQ$(i2} z*P2*dm(o|4lB5|!4fSiHlWLY^39+>;)^71+20L%wntS4#@~TSJa&`6kF22lOkrSKG*Qn*#N<&;@c57yty}hDF zbz<-*_S|lvIxDe`SIH5)`l_MLtX>T0S=>r>KZtQGgBvEjM(y?hJTTTt4PwRGeX`R00s#`2cp*pkZH znFpw$A+mjG6jz*7nw381u&mM5l$x90Ep#>tQNo}`-I@fUGCIGzbKITcds%ql?Wr+K z^GfrJmZllxo&5EE)k~Y2b22-ZbdK96zLdp|n$yeKVk4WYTN20g%Dwhw<3#Q_d#WvI zw7gBfzPB%LX~!(zbT+42R<7)>sc&hhNU>*!Zj>9^S_;b2^SHdW z(s;S@LOr5az4@I*eZ}q3at(+2+8&mVEv#8ukr2OK{z+4Tfa1n2_QIIije`xPYf|gG zZRtH}WAnuN40g%**7Bypy!xoz%J?CF$tvy9iFJi>1sU0OLoUz+9Vy1K>=5yn3^r_T zTP>Sa*;`qZTYAM*S-Gm9ptG$hDzVgdMcCl4qY5+HiW8D5I){BF`tY7YtCp73r55td zv1t=hLta#d9v-4LE9IF#zAF;v4K&r4#U;%*(ytpLGuZmh+{m2Po}_)^)GRi9LPJzy zY%U zqKXnb*^;mZS)*xbeSS+(WEv^ES8J0t{3S)mOzTh_Thoj(SWg-? zhDd#_?k!!2b`H4h6m>ehG2M!n!0d0)_QyNPE<2LP9tMXYZ(;9JaG2#zvdbFtSr?P< zB)crVfc+3~NOoCRA>eS5lk75G5%IT`PO{5p76Yo{o#ZVvm7upPoa8NhwS>JB)F&Nc zc`2w*j+4x?8OzxB0r=!C{9_p)x6(;w*~80$mpM){%Whr)1;Hsmp<*R~vCv6o^XyeD z&Kwx-B)fSalEv=bJSXgC@%t$Dc9~T@gSnsC&h#+lOa>D#F3J@~i&<;f5S8+2 zsy;DXt-O2ClRm~e;eX`5p;0cXsJ7lWsP^wN6xQ;~E_m5up4q`hiLD*%HM9R=Gsnfm z%(?JCTBGOuB;K-t9j1wiob#jD|DkQz=%hJ6{3GcsK56a^;-YqTsaU>&Z4)=Nv&CY_ z1}vu6uV*)lQ#Y`))#io&aVye_PS&T@ggmTx67%W6py?f#G85SrXXsaTyjeeyk{ewWIL*_W_M!NbYOh!z8bS;zLRXnmTTDO zz^>aM&b}7xI@w9KW8hl$Wg4htJl=mD2I@j5dD{11&%VHnbdsmNdNX<}a+2}**Jk!( zQik;?I<`RB=!ESkxwo>2H&i?8(frj7m@yNab!h(JMiwq=qZ1wh>HIcQQ90ofcn8saFP4hyq|107rB48?MH40+VLu9+T$aMYgA+p_EWV&v6 zm~1!KaEPgoknQFg2Jz2F$aZs)>H5f{WV^Y@bgg=fY&RD<_g6nowwsHb`=bt^vr#T` z?mu*Z-Gv*b@ICtkZWtez{0nc~jE@`cBLBj!TkySByU4$=_*T{%F=*V?)39l_e1s5F zx#?5mw+4^?23VXBRA4G5Kj4&Mp|T5_ec0 z&aT;L&UuE0vkQ)4DM^xtvuh^g(r4x2?3w|&<~drhLtPP&8=oH>UDF|Nc!AA?C&LvE z`Q(c-rnsh|OW#ZAQs*Lj_RW{+d%LDU%zK4BpzWXUB7-*n9?aB{E;49`?4zmdnuOmy zvX7>+Ya&{&x|e-+(4JK)6(Nb%R6KAPvH-FS8TxBw@7bZ8#`9NL=K4ICzL0B(6wwxA#f**kvroiJ4>Zfp?of zF(;WajSKW&pcM04%yT$*@?jiWy5nExW+LCE#6`?x+ehSlauGAB`&f29xxh@M=1*kj zlPeP{SA9y(CsziVYX@ZKlZ$-DH#lVHlMCcTy3;8;pIl2I?{mq{Cl~06^o(0}KDoe8 zB!gFWKDh*RIo3yp`4|_)(-$6LZ^w$nLmW7Q6)DR_{AABje1-@Yc^I0H;mwx2;MNz% z9B2JgX((G2-=oZsrV{G4i`D07hJ;Q=eUUSMgIj4 z+9tgVoKL#mPknc|i1ghWfJ&o_INz2a#%7<3IA70a?5~&C<|2jlH_IisL*j&+;AWVX zL*j&+;N~4Ihr|gN;6~b^T!c3(4BYKZw~L(67Y$q&2J>2o?M7}d zmf=2#BTd}HjMhbHbKJyT3v?s2$uQ$`GhKu>77G-@T!c2yTey8#lZZ#GvT{#gni7u~ z8p3_2?Vs%;B9Zn3`zU%NB60Bt_F5*}wFVlS&asG~xQIvO|A_TnigIbcXabrO zn!}pCnk|}k%?eG5CMsl_`O|-&1OKm6;H|M@aw`VRL~-58m>J@pQ0`jP)@Cx91a*XZ zsH#_0p~_Sxs3xmS$_q*#Gnp}IE@=FN{rqbu1}bsWP7Jm3#2}^9sGe6uV7g6JTc7PbTEHXxx{YwW$#x#lX^QMUr z!?+(uS>OE!<4lO1`qajSBe(l}(6?ocp*qZ#Y+H zh)+tIyA=z_tGMMOgVZx2VeY%)8{@g@;-BL4d+1h1UFHEE2eX=F_YXx1x`=LaGdBSDsX)Shk%Bg;`}paa0qC)L(#=g zGcXb6x`_&$n8_ia;kKf6-7F3P4Yvhi&1@)SxQPiYnuE)gx=j!*b2$Vw++YII*K;{J zpy37++?mB8Wy?)OaJmw`ncNiTA5e10XmV>IR;#$DFz*A`|VNisr%u4#^V}+*2UmkVq;c-C>X)OX9G`O?6L({MvkOijpaJ1Mj78 z7I0-KI^~`SIrmBqR&}2naR{+v5xN}WCN{TbF?SP4gPVf+hbM8*VZ|Ue*ESg|#w0hf zxuh_>^-}j3{LUSQ7sb1Y%{@1TJ9gP0{*D3`UZ$nY9An~epkKGXS9e%@f;r2?Yc}H3 zZ&KcaVY_+=RhC|eBr-Qa{i8gGIGvl~!t3oE;&g66y|hZ;C=%o*tY4pkYel2FNOn%3tgZkC;ar>u4pHOt6^ z!b&%&nHZOa%Qd=*nT^cmzSeG<=_YDc9Ldc<;KvPWCSDtb0h8>eC_`&Bx@&NQn29kl z+*g-LVzDA*sx=mwllPiVnr0X?4e5HFPKkO}2K5E?7}XfqQ-R@Jq_#iBP2Pw*^10WU zHaFm2tSI2lG3(qwd$G8X`<*Fv6WA9Oai21wZaeNHx|jn*u5-g1A=*oz(cvbr=S#Ws zjLOYIW5F^GAeQU~+DpmHIb__dcM~nUdIk3<`dbX~nw98pikkuot5$LQK-}CEP}rEv zAt2-?T9#{rMzot~*=!bXx6w@jg#gPTAmk=mc9P>hk&!n<@tGoIwAE;S9<{sfNA>d_ z?2E$5Z%D!U0>#u$DL%tG@e(3jZXyBcRUG!~xQPTLR&&!~(z!tb#EKfc|3&TsTrQ&) zGo`={3LskQxQ}r2a_4cuoK8=zs*KqHL}y_`u*XfbY->4({ZnqxGV$69 zC@gn_m5Gg&ob&Pu^ob(GY~?K7=BvSV3k(gIo9$pthc)kNLe;ZXVTw=iga@>nQr$hc zyE}GrDX1Lp?uLAN7YFCkYIhep{8r?AOp==b{p9T&GG*KZ=r`VhD>l2^A-3PiAydXp zcwTuImSdG0crMM`O(V70O@JP|2O8CG0J=EsZVZMFH}N#fiqrXu`pRqi`a#cJMes!?DX@rUl}WjogSBFJeqDS{_$Vu)K_;skdm_EOpv1LJC9d zIJxl|1jhF1Z`N-ZJW^VnET7nTo2c*Srm8e=h;#e7Nh(d5nA6YAJv>A$CTPey zjZP>|YqJ-J?GyK2v1r7utGQTl$5w8LIV~n{X<24=USjL?ZZY?2?rt+1S=!o|msFgR zrg>ca{c0}N(%aD&+Z4@qwl?syJ{EJX;YM!ADO?(9x7oYv%I3?(iu+R2(sLV|c(x;I zguDx-FFLv`sjV=-sy0UPDEW;0(uyPFmNZq=7bYm~poZR_(%90@q|)f-!m+o@8cXu4 za--@K(wh3zF1aByJEfzbE~hhPO{iP}xwpGDueB&o$Q+Tqbc(!JsJElYUbHl)raqdF ztCoJdhWk-zPR);6Qd?Bt71a^CUi$Sq4%M)G`!cJdDl3Gx^bExh;+V}~DOYddhDf=a zF`g{FJzZ>TUuttwVO9h$-n50=gQmisnx5>2mc%?p5RWN#a1_EC)6m<$xqjpl2x9urYf$r&{QG*upKmQ!8R^> zLSJfnRZDJW6-r0XlTU%`#W8LraoKHIeQRdFE8eh;3!l)Jl381uXXmne6R!A3ei12! z2_2a!2?_Q-gIaul8@@?jN@ZR)Ti039nm!e=9O{4mcJ4M&`F++1@w4sRP;m#{oAxGr z;}jvYIK6mHYJ0S~Q#^{#FHXOSo2LqSS3Vqjd`D|XT~EBw)!cA}9CYhT<(sl%5;@M6 zIb`7L@h(O)(0Idoh z9p-uEgYv52(PA3c?Wa}2!$2&3h*kxU1|s(`z%JSY(?**Ah`cCxRA_E_lokaK**4{m zp}Sm<054$4`BJ#xYy%%mkw|$B&Mu(UxoI~H)Hu4?OuoWhFdsTqZ&7P z)2_RfOrdpd@}_OufwkD^?nU#Bw{d#qWux;>MTpfJZmBb0Yg%iZXPB&?tQ!OO;TX*j z^)O^yZWNP4Z!HC{fwQ38GaCKOJIn=``5vOS!=C}0%JmSnJ@pLTqX*Phd_bam^bE&^ z?tPZ7zuGel%@03Ex9Ay4*MDBVMb8k(`(Kc6(L?0+z>9Q?o)9!Y{u04ist4>=dj4fj z02XRJ;J4D4ee$C1A%YurFD=?0a&r6rCB${deMfsQA!vZj^Z2ac;PH z=6!C2^wM!I{@>Z}VVcCGd4hQQJxuDc?{P?fe-HM@*Y9)V!a0R?!1A4CD2gb@8+#15 z>7Un|utm8WxrCj_lzdJ3v2vnwio#7yQ>LL0)$0^fO59qg;;UaqKAz#}JH+q}pAzz!<%{{^t zdL}{PMh_r;wFlH&tn%VZ%=eHVHPy#GtL^Xbj7M|*K@9WNo^cS%4nd>Xa|J~HN!&%X zXDq~tPhm<-^?-Rx`lq=t9aF3$@LJy3;lvft|t*U_4^kfxeGkxcYFCu?s;4t zWL#YL6|UauAue9^HD+FhCl+GyS(r^4PYimS{tXSzRu7T!x!*#g)O#i(HX5BosbmIIq6|e_aE^A=gF+_W2=Jna9D@D-u>-wvZ>?&@0RlZkWD2I5%11F(Pfl}ylick z$oBAncZ=bFafqr_dy*md`|+NVJ>(9p50LTUS%lU(LHw@TL$rJ5XHZz_A=*9cH0K`7 z9aA(@@sHQdpPFZxijXE*hoqGEwO?tk#NN9HG-|B9Z6qtH_XahZXKqtHX-dyFB`HRBHl?qapRPe2r(>*cd3~1lki7o8Pg15dW|lG zxu|(by;%9z&dB+Du!`c`p}8I~ZE4#Geh$izctEwKmq+poz^^^Twf`K&_u_OY54g6} zH-?ALa;OJnTRJ?JM>gLYPX%t|?JM{nn6Vxr+b@sf;Ypn80oj&ZZ%c=j{1lXi@qlkjZWRx6W2R?0i+5_;(4oxtU&agd9)gA7-X`$q~|;#A6$TR}F>H^LcE8@DhrjozG(%gqKkK%>_KR zL3jzpH!Q@fDD@DEw_XW_JP%M@%v^+iS9=JNecGcq zYi|q^%+;!C;BfX^Y*%ReyS%f}Npb-OZn>A1=cGd1U8$E)bwUxoR;_mi#NUhfFPLyI zP*wW8n4boF+e@$-Qi}Un=%tj*pG)}{m^d$`WFB6|BLd_Ftcp#`@nY(|Qy}K7;1L1x z5~^Og63@5ZI~lE-Rs0`tFn9@8Pb5R5+)J?ftPOY3>YV^_56dG()(cdXZsut1X!H`S z9_9J31!6dIBL06c9NN~WZv6k0hQBhDdv#YC`o_^0WmpgXGvQu7#bWAlZj2^=-VwDp z^Ek(9P-#crz&BYB+i2eVmdhSrk#wc~75t=svz*CHab)7WGvc$&{B-fVCjM>l-Dch` zzTCnK;X@VQDMFIrL|kuv*E|_Ue1c(>Uc^xKX=9i&&0XqC>Il_rG5IP!=xU2cz6!ffnF-w<9&&+HE;( zK4IDmFZwAQZ}%)dx2z9%r2gCfW3e+v0B6h z1n&ymZ_(}iYs@?^d5$LC!Na%Y1)UH-xC8UH(hD{rK5-`|=pt_k6n5Rk!?olsMr+Y- zjGRg@JbB1KfWmSwafzh6vE0^s3m}f(%YTVucf24I($5?D>G1V=iA_x2gqOL6sXcW&sfOju=DbpnQAWuotUVx+c=zg%FMlY~YJn#@SD!o8P zanHkef;KOJQM~36`GpZK_C7lJ!hnn7V~@!%tQOtvc^oe+!CM2d`T&o7Z7;Y7HfQmE zP--u@hxqu-^0h0WvHO<6YZLXTx>de5sE1g)L%uechgftQAG}N+Rx3j6)?7=1$%W&U zAIBcHI&CK+nAz%j>|k4cc!+u-uza`|C@9@_nBcY9OECE8Gq|@hFTvn$iT7h@5eja6 zmWI}FFHlh0_8e)qdi$Vq|MOT2BfPz67GI#xGTaLsl#abfDrPVF_8c$q$WI&V1x>+u zMEq!6wb)BU<=cDsA_Nt@ASzPoy*z>ntzKd(W%r@a1TXpb^6%#lXBkan6d$M*O6y}P zMaWhpg}rM@u#{N)Lhgd+tuthb>8g+yRoxnwsnPU-X_+a_l%#*%6rtK|(qm81=ca?k zkF9maSB+1ZPlb4qb-nNi&#I7AzVQhEROZl-URAZ~JC#TEj_L*VWHo2{Nqs#^6Lo1q z)R(XUs#3F5ze9i6I?einWkiV59E6kaJvjMpKyf;aCDnYlb-1#!KmJtJf6JdXHUGU~#XlOvTb!eZS;{)sG#11})pQr;4NI4X9OLx{ z)Jnuc_3uA%%n80)+J1sBQR18-e#nNR$g+aW?%v4O_F+$vH>JFgEhs1{Vb`?wPL_+d zl;_vf*_%@n(zsMjpR7@ono*V#pIFx(6|s*R%DR?z7o@XYiHRK(jtus}l~=bE=jKK? zNAiOjg&Db-9mQ3Bz2Wff;wq&rk;RE^DP>~!yZpW53p08$x|@14a!O}?FaPiSB1HPw zbhfZz_#rX=Jw8$V>?l9<%9!+m%B0v@J}vTXS*@V0K9(!1%Sg?fTtkJ8$_qMc`=C@< zl_7fv%R22fnQU`W{gTS?d&QT~k2$|Gy{osSJ)txwdXA`kpC7p)o2^QSDk*3xDre+e z*0P@XxcKhGqUx&5=m+G>#Mfj-<;GR>#r8Q9RT~>$lapG= zrp~!lK`mund}?ENUUgi1%kUAhN_J*RDVviMlhA9qa!@0xsj)PvV?4jZOx`Z}cDN>M=vInnIos||>m|DIhCw7nANq2TzQcY$dpJJbL zFR{lVio*))gQ%LY&Qxt&Xh_q?q9&!Cd50-M#ja9Rf%yw3983z$+=c>=@U1R|7ITpm9ri!9^pO>n%!R6 zY#izXC6_K8Bpss6zDVMry%8&_`7MG56nz@`3xCPdLO8nLdIGx5tW@bFe2 zxS4eJOWuM|jqeJ`e|*JLsKz%Ia{5`imr5Ve>*8;)Y^VE(UN8QZM|~OJD2SHt0O#v{ zM6Wg96EiIJ5x;Ie2}B#}1HYEiPtmij_YuKf{Q-{xGd>V(vFt+tu*L^|EtP%*8|re5 zS9v&CqRf+b#rEWsf<6g5I*KMDssEmn3ZZpE|J!PDdfYxA5#^J=L8HwFqAb4qJ5OOE z9}(qaf8gaT@`XeDwLf_Z6Zxj0S^F3N8|*J1QRT4#bXedcs(e1cBY5TugLoo{N7Va3 zm8Ew+qft=lBdYxAX+AiO25gApsKWX)iu~-x5qh^7dT@a8joR% zqa8j@Un0amjQE|#2lgmkG}+bgar!_XcUkOkar)xW`kBR!F{bf>K1!FYcJkD&^MOE$ zXMcbhZ1jOXN?)I&aggeZg8a*mdv{qf%m`(asI0ju2iv)P+4x>5)9kQ0d|9~AU(;|i^*&;U!Eifl4j<)}zdzj$ zo5M%!a94yKS!X_ChvEz5LA#cO8TVRHD09M;XU!{qR#;Fgxpwv)->6VSYE4qhMc zqqMDcbJ5#kAEj+^^XwEN^?@DkT!-E|d?1Hnozjk!As=zW)hfJ5y${?_ic#C~2|Ij5 z4i{oyUGU#~i9;SzC;xLVF%Ecs?Qf^uYb`%moR))dSlgXLv61+1 z+la-)A@=`e(^T+d=EX&p{5@Z!I4UVNviN_rMn@KkS534>=%OMEG?u%-1~)DqMoA>0 zqHVZ+l=$#4`yJv{75oUPXt;fFck!T=#1uzIM{W>roM4|W9vg3ed*uJ>V;xn;!I9Yrv z@RCo**~!V`TaM<*33k{>K4Qh=678p$5+AYRbBT7O{rO6u{BDvRaZIxhv{?FJz8%!5 z)H{;DKAU96vXtY?gZ%4c zdp0(m`f?$sPqAZdsPz#!UOv_S`E;7Jp^Ebqd>D?c)RFLT3xRDY(dGjk7T;NJmse-dVe#k+JFU)O!_uoO?I7wHRBdQ4v0+dZ`p7ydX3=4i zuN4=M;_QgH_*&5VEoTqP`F+C`K$>K04>Iw8M%1F!=rTsZm`~SrYM)?yFnMy-{WtN*UhYS6bkQlzy{(RD)CoTr3yCN7LiG#UojZYh#2BW@8_Z+e? z-bdEnJoO4yH}dE%{%gxT>nA_b=yu$BmY>kk(~et=@J~hSfet&I7JdT9l1{ACS^hAH zi@Kn|`zbmT(v2I)_Y*dL(rt&+!cS!7@g8|r`axF2W4&00Bm9&YwX+YsP4-h>RPtK; zJ$QX!D&pz2czuO_5Eb#Mb@cQIrA#8Yl7w~tm{o(s=X{jrBFZLe}Ni+da&5 ze>Cp)%FT9c1M&k{#V`RAfF{|3yQ<$j_#DK|nP z-%k`Ld>h_gxt}P`pWE=JC;5ru1h?BKU|Ov76UPa*;(GD^2y}OR4Z0iSpAKve!jCh);$5ZwuF?X1Kgf#1EyUP@I3=5Ct z5A%-S(XG&K!1=X%)jril)p%v282Ll^t+ID9+)w#O&SQAYIsQ6`S0A^- zjp+w!iZQQZc`o-8Xj)&xCs^nw&^-T|{RO7WPu`*@UkCP;`w283eFF-mege&#-^9XL z>o14c^cHwTxSuey_-#8m&i#a${Udql% zz5`{w-+*@|Th*)dD96h#w*+l}w4aj1D?hLw!d(!~j`dZVPWB@Xm9 z%HIL;v_l@clqA01DGyx&S({59x@*viG)aQBR~4=dbeo~j;FX7N6IvsE z_LJBr<|iif^N~SZBPL`xW`F0h2l8!2NW1j~i_82R&N2Q=E=km_y92dB$02=nrpm2+ zNAWf|T`Kg224<|{{o+4T7WG0 z>@V#IhXsJK;xAtUW=aDDv2TBcVGtW2h~57+URiSh2E4fPES99w0NL-^-#{TRpn*91 zTfFJj0X0PBcX;#(0U#_kQrNMPqJMcniFWoR7U|dkVeI5n=+5BZ0CC`y{rbzxZVOq0 z0~qyR8ox9SF)Rkq*L>;kP=Z2>~Z%AcW8A0Tur`2{%G6Bq+g_!Y}%d;sVu*)G}fGsxDX(~8_)>Ag#e`{yu}EwF$)5-Al|AKkRcHO;E6dp0T~hj zg1aQWfDDO11jN|}0T~j3>FDiug8%?-4Zx%qRVHZE28gp((ffWaFeyh|GO(C*dI0vWskpdCuF3NUyBlss~JEP6`_#6x`a3IUGu02ql_ zH4a@g20%!}wDHgt0+h&|G=TzEia<1)RTG6va6bgVNOn4*Q5hgY@|IEvUVhkSMM#RZ z9iQ_`*a_K&B5>wzEY-JY-a}=>MXE{4mL7jW508SkssFS7%PcVxEWdGNP3)tBc0Mv=Ir{f)T1PJKHL<%cPrrYcg2IQRJxlhYJu>^D51zaA+*A2YvWgG-5egX#(F z)NX@|k>8Be{Q!j_ZjBb6V}=JRAZEu1JDACVa)_VD2q3Nj0E@Ua7NfE-K)6y8CxEyH z2v?%x@$B^h!j&`ec;LbS;mQXIP{;}ZSHwpXu(;Um0{o>|G>ZIUfpniv?^}tPd#O*W(~ILV=KS7N0$o2 z)JajhNnpi$R|?_cvXw%LD6JHBN?QtqWm@sbawz}2On6&tSpl8bR|q@B;rT*|K0Ybx zI#dYK9Uh`a6)Xz!Ur`(%9T`39?_0BqXah5 zVd!?66~PJU;=J4q=P*I*y_q4QIx~I0(O)JK~bb#eFE8fL2wl5iM6EC7bHK;)9bL_>x1AZ z(xIye9E2colo!_vJY0a9Ad!?$R}&*x86+y{Efd@kMqQTT9#toHBZLe^Aakp6I`$-- zxA;|^*7qzgGviT2>qhKoP>Q2B3h5hO)jfsMRJZ6h>RNOwbywTGmCvk?X&st3 zb!Kg{cBgTPCfN|dm<@Z4r}U?dL9Jv;FdQ_bnbw;2=x;J4nMN3v={{CHr=Mxurg>2N zprKLsIlK*8?eExYnqj!gFv?WITn!5$QJbq@p!KnsR z!*>0LR+avc;U{J>PJRj3&Y|5EYNu5&y`n8QHW=^LT%%uaEkabk6lcNcb>p;eG6R~g zQS@V&Db@Ot>TTmX;}hC;{TPj;{hApsru7T0Dx4L5%Ogoq8}x?11z-Qsp!?!)8vkr~ z?e7}@Xz2gD#;U;vQQ9h4rM^wVLn?DhaZRd_*;ZDNt@}fqd#%tQUf3=S5g)l$xNWNL z6ABNu6>}MdeVt_qOA@so$_>@Ao%O}-Y*TAGb6(uASs1yvHL0*XKD(zpD@wCzP^D>U zhpn$BE_#hdF8I_|oZ8vNS46h;rfcNLWm|cdJ-e|itD&G^?3Lo7EyBoEO;v1NYHUeL zL%FI;?xZNbtf5kqW1c{ z!syt(mULeJcT-7wZ(U!JEv;vwIQx1bEL6V&j_3dQ6SJ-t)@>*+tjfw>lb+Di9o`{# zTw(8MY+G8gG%G=ONN%Xku1CqHq)dD6oHKGmQyw3i(NtcWm#zC!ZfNCmJ2K+x`TUO1 zsd7VknJqG#D{somH_3IK+N#qFnsd|2^J1fopUE1POS3BK;+qqPCq^6JGM)U}ovql6 zCG@r}_!>Jm3t@{3+Y96J+u=H2XMv3 z@j}#>95SFKuf{W2a9MN8BJJF2;d7`Ms&V zLd(*qYh)FBV%Zv7cU50X{7kvPR9j7VNl&W1qok~9=HO$Nm1VApDvjyQsF`uSSi21q zX4)ovqSM=iu#kpyt}BOYiYaQJJ|kp`QnXzsoPA&t;PT`R0<$;;blc6{6xQAuy6IlHi?v8JrKswz5G zR;j6|$V!S!OUtX8`=s2^oR(H;%Z)BC?8Bbu$F>X8$D;;Tb#+Q_Qf~IF!NFW#+*+Je z*jiN8K5Ml&;nn#g#dvy#(c6UaL*zb$f{vCFwl68ZciNBQJW?1=3Tphv%ICy17IwBK zvaH4qCsgFY$j9NvoV)AD3}zNezas6l&~gwp`@>B)nUvT%TA<&fJFl~8*D~KS3p6`4 zBXAlCr(}TesFO242>VEC*db7`DhT^XeCRg7Q(lk^r2BRXCz-WD^4NCo5>VhiI2YoD zT>=W+2j@WCEdrE{K{8-7Zx>MDK1c?v^L7CR?t?QS?!5yF;lUXYbM6#S;66zH+KYDz zC~zNy0V^K73x-W(FdVJ>cZ1v;gVP|E?m=h6g5-1mVvkHdsQk!Pcgy61ayJ+5g>ly( z79^+pwXHze<-tklZRQ%8eN05Fp-p%-jCj6P(f`jZzXGjV)1n@uJS8R{xz&c(H$l58 zBM38Ay6Qe59VM@Vuw$in?icW)@`8&X4|`C^MU{ylELo{`zi<;G7(tk_((exmnMx)i z2wPUlctn`4WNbl7d+dHxKp-m!V^&=77%aA~Alb4rABQ!b7fgUS<$!=VRxlpF`}KgJ zhl8anNY?D8o1xMiBx`oR^DKdhqAdmQz29PlblUJ%75VjD*h0QCSbI_B91!43`3thrwB{L!jt5+&>3&W`& zGJAVH)K6*@rONU0E5-&StJ89`ImeWQeJj@^ zv9V60Lu^Cbx6C>LH-1{XsV@jWrL^a~(2MlRAo(fBUJ$B?A;M27UH!AL0)CcYJ>=8B z2o2bf5QKRsExjl_jDT^l)~a~sccF%cKnvY7HBol#^blL+?%6 zkjZ3{3?eY~luXIg6j7O$Or~UJGCc|-VDE^yttbkL*NTeKt0<`0J7UK|I-;Uty(-_c z&)~ZEa=*2{-+w>Xy86z(Z}vH7pMCcGyxnkx{#oU);Q?h(6O~QVU8Ow7FoeE-&uM?u z9+9rryV2)wyq;B_slQUWNI6NVG8~s>sa1;MUla)xmz|H)*%OLGsuk#*_@d%5U90q8 zio2w*C^joDRGlmBkseia%0h~B^$%(<(BGygQ>;)dR!>q)mQFWXka+(qlVm>7GDyXB z8s5^{r57;=n8!6|7{}<&XLe{anJwC@W&hH8nT;}?JWJcAAIEg-M{98NGg6={si)m-Z6Y3->H3AeuFBZ{~l#!ACYg8 zhotvt_N!i$M&$K!r+k%`2ekcIR*xnyJ9Qq}%hCqvR_y}W6S9xw)8smJOp~XYr0P`t zqEV>I)IX{2(*2;iP&aHty^P(cMmwxptPZNrQJ1RER4-Cbf~})d|2jPqT z@~OX(Gkm%6{)`OG#M3aW`sdRJ;-?L$9y@JdtoqT@M%3HISjWhiBPB0OB$~+4Xvs3U z82sld9IPtuA86x)t>RdNl^ zx`zJN#UfO9TC)i+@B_c=0cLe&g0ExE3{ zzPW@86$i?PW;@Bmbct`2VeV;2bbY#Hz8-g6l{Z-IcGc8OWXYZBl1yE}kaMWJ-ql)N z&1@qF!L+*0;|x}W>jpbY@(dHjwdm~~s;jNb?dT|{jN%zGtbdIH0w%nz|&|g3_F|HP~(gr=zuG?wA|iYVJ{4J&UjDcX!rNn z%B<}LuEFV_jLb1qTq;f=+GpP@PTSO4;3zC9wtBl~caURWmCTj` zYObDnXDg)2${S4#Gb5ut!|+eNQ+pg;z0#^5QI&o_a|nrQAIsE;i(5=HL^;KVGmlWq zOO}j;nFxV1o9Pzg-heeAVdaHurjzbjtpRUn-Ux?NBTi- zR-LD23WN>-l|sTp5o820JCXa~=!jwvrwjFP`2YnP6Jea~41 zf5Orzj98JaW7#DLVU1EN)`4+sEznPt0X;pFJr6Q5DhIt`0*kc5-lz=pzKJXl$=awC zv~4owaYrSfZ<)fnAeN&5sga+ivbdkQM_|i}oI9Pp3pd(uWIgf+uVCw`oLz_U?cNB=ZOml&{1(-JwB%L3^~sbwi?W#47aiNdl(p0Tl?F^VWPEZt^j8DQQhwJYt+V-dB}9;J4r zCzrEdGjpQ`4BvYu3t%!TN?nw1t)MKbD0NYObr!2coPQK9%E+;m>^MA4O%w*g$nsHa zH85CI4SMrv7U62`Q5ELAXAFCE;{PpI-1t8FotfTQG=72-aXkOi!9@Q9Sw55fUe-aA z!)LMomk>jHb;%^T%{*O3R>JBk(;xm1TP@?ZS*Whu>qjT_x>x)?6*pldM z&~F#B07f;@S)eDfBg-%obSKAdM$}$(257m!Rse)Wr-ODm*o9ChqBL0OqEZ&>L=?tG z!j)n5`=e7p+RE`IR7EF)G*z(hL~EijHb$N@v1-8oD77}elns_(6xK%aoS8j#s&XHC zK;5Em*G<;ECnjZnrMR29TfQ4nfA>iaW_%2Qz6a_^l&XVo*NB&(>fkH2*d&_hGF;*I zx{)hnVfY^|@e0(TdAFN|!V+Bq@&=E%=N5x`i+5ztEyD0SXN!AoA;{O)V7e*MGr)1@ zIqYO8T~TO+k!R0k3&iD{k3Vi*O_y&`bROtq`E)rNqH{q{DrDD=)L|VfnS&3(;Ltw> zw*jN&HMgRp(G=C?%7X}k*~!Gw667Fix~U~|@Kiq`fFTN9hGaLh2$P6Hl_8lv7GV-m zC^F#J%kCxR-J0wp@#*&%GOLNdYBI?C-%Pz)k z%#M0Mes(d7x_VLSYTIxLi@JJIC>+FcDNf-f(K?JSxQsR9E3hi^XeG$mSF)S1f;2GbzAM?M!9b&>Tdo4b%xF2tu~)Nq zFj-OREq&r@_Cah|=xD@$4Yt#wr~{+!YuR0j4f3b}dgEHmwlqrPg4FdaqGY1bXUS9b zEWArmXtU&o2E5%B(GoBWHR5vpQRuS7-o&05*60>w+%L_RqLKLltwQsY@fn?hc|tb< z+1BSs`!q_;dS(-o#k|b?u9&K*(4Gym`gHj{@~wvBiVqdP87;Ct_4~>$<>P9V@@^Q# z*BU>UH7Zg}NLjAjpjoIqPqo5$zfz+rQ|!Q|4Ct+=ap>orHt@gg(-)k^p^cKSV8)GD zL+mPvnIf1$-wZCMq~(Ad8-1>U<2z{?IhO?v6*CV z4?8VK{Qo+-U}dzsxL}Ut9Xc>%DsS&7c2wkd^f01re6YQ@-rQ@it#mfaCK7!wJA34Z zJq5ivHTJyzUO^_B`i9KSuG*d&Z&Q*`&# z*az%FJ1f_bS9;mn+2VC=6#=t@&+!fg84=zMHZ={{TH4wzMIm_|S=GmmpFY@~Q`ue7 z8Wt==if6?i-ZB;HDQX}HzaYHcYiP>Mes zY%KCM^!BxOvKI4r@^T-`EgNhvDetWDhU%*PDiN3uHd}%Xg`r?)j!!dAoMo`TgyVYL zoENE`)ojpn%XbS}U``bNLl_t%TBODg5qkhO$Th%_{CUKyr${FB_17#h;=oiER zAM0+kg$wQZwY^jRA&#^R6!`+7KxcQhdiw}VbF;O6v~m90Hcu$f+o*k= zyf6e|zbVX)b_RmpA#ZP0pfyJ$Zh*noo`%}WiqiZRn|fsN{MB`q_V(&L!8@ryoT;_W z9(HHfSek9RRpLNIqCdK-Qhl+Q^dgSxZ)DCwyJCExw$-X+0ueW0lubo!=A=_Du7N0|TLs z!GO@!k<&G;m~6+p(6u|eiV7RD-IdNc&y$w*Y|hA6)>%>%$jNI9b{9++RjI*HLABEq z{#A`@E~ff#$}_rh=h%XI+=MgnYRUC(TRe<38RSW~YtZN2r1| z_vf~_YP%L*Pk%9F8!D|W4iyDjs?EE}%n+NI9ro}ZJI^Am6Gi1<`?dPV?au}23SVdP-HHwtME1!hHR6GbsamOTz3IG zFg#=m_Bi_sYkN$C7E#3>GWWQLg8kOqqUN0W;)Qy=CN|vD=Hu#3q91K=&{SAGBoy=& zSxuo4j(#@mEe=%H_n9V&1ED}!ZP+9f;$H@Fpsk?X-|Y@|lslIl7Y7>iZCtU-PWA@u z8uCLonY7+rVIs z(!i)IZpUP+qckvT)i(B7gq%fTDkjo9ScIIdh}L8L#R~yKGNWrjZrZ@!zzjrbXw;OA zEXp89&jq=4BjC@X=s6(mn}Eg?(KR6Bn^=@Vj-CxNcoF-I7^*f#f)>U9SsHYm`aTrb ze;OSCXTiI3t!%IK7pa%FCjJ$5kz!QIY}!e6;V07?4ps4aFRoc(_2N;T?VK8Lf&mzSkN|pAX?q`wW5T#1{ z8xK%T&Kadj`&SQQna+sPpr^+l!fbP*V$jpW>~;ipN1?To53j>??kH8-cWnl0Ge>FE z)28dOknK?@?ZmzXDvmn}ot-SWf&E~_pCD0Y81B+bwRdVtRmYVVDmeKu*)7s;i4wp* z4Xr*#_0HZsREwS$qk8AzC)l|XraVT~PUcCfNVsEE?W}u>YTcF?)XvE6f6~Qik5R2Y z^)w3uxI0F*de>gc<3vevl)HGAEr&*OZj7q+%Iz#H=2K%-t#7%Dy%pOlCZ*#$SU0tF zzmTyD4cdUXo-ux>eOKo}|FPr7&kbJ~-_%}hlqjd57Rm+cnAQt0Xi%O9%k@6Z9f}X- zJ<98~4@;}%|59`t?^mSc)0ui0rFSVc@}rDSyG?bMVyfy8^Rm{idXdR8UXE&zd9o*s zew_{R8IQ?s)J%|GBJ0%-^QumTR#~pPP_b6_hr9vE%&9&{Hbe27@+@te_K1A7Zoc|a z>1(PLI!>FZ-mcoLQZv(F!ya#}Q+}XXr+i#?F>Kr?G*PIM?y-PMvHn_{;~3I#F2>#U9l!@DL>ATZwx=+b}Ghc^dH3IR2jl%TMR{f19-b$Hx7_$Q)VW3$o#G$mH&sCB|ojo2%Q}T+a4ZE?at3{9#{qLvLGdUv+t%^fI#Y zCH(N+*C9&!Ut&j`#^HWzMZlMxU0mKK3y~dQ5QSy9r`qHmGzV(ytTGX~guTs`A)&@p zG0;B4DbCzj*V><(lU>#kmMvPHi6@4zYDR=7AB#37uPrb~p5`}1Zu$FW8S_bOt z@)%L{hua5&tO<6?mg*^8;;#n>g3jD}wmZ}4Z&-5lz!?y|Oci_4gIN#YgOJFU+isOKx{9Bl!mAkN)0P+Q~<)&-q) zim%B&x`;boV@H#VUS($ww}%>f2F(?vb%LrzWNy#rb8O93wH2MJIw&Il6}%!c^g&JV zWmi~i^`n-H10Gktt;AK8##YyWbf%waKn@~Qv zQXKHr_Vw7Dti5DlLasOvs6kh-Zc9bDDKjk&c>42;tf8F#irmaz@-P-p=V61bE^~Fa zr*YgCQjY?!x@OCOuhrk!Us5|pP9A!Loj^W#gB_)-?G?IeP#HAGWBiJ2qwAi)tu?s^ zfMe~gHP&ilt9Xfy3Ui>t9L_B(H(14icB|D{*xgiI-=lw19BAQeZV&Hs6;|rSzH;IA z7H5y(tgG+u&?Q8U+J2wU+t@SE=aEq~M6GfsBrsmD7pvNmoK1yurn$N5+WI_Sux23l z)P?gq!j2N3H@_|CeX zB7g0N-e3i*t`@aq9S*_6wk&>ygf1#vFu%6boSR$LlV4OeXFIjjXaI2xUAk>rjrtFMu%!2N-TT;tOKbD*Kj#V-egEgH<*% zNySx4n5-DgvXP*g!<+TRs9p9B4Tt?z6{B`pm5%ZVF>01QN6+CcyJOTW`ws(Ghc}fO zqjuTzzhbx2S4&ObGBIy{3S=r!@*#Y$49m{>l ztcuz2%Lm4BE9qu|H8k?=cn+H-6w3wenZR|^-D?5;)&UceTma6F7>w7EE2eY(xJ_$}ny(j2xIOUA#9+RT#H3tEGFt-|-usfn8Ir@2 zZ;js>FPEG|-Jmy(w*a`^k80m@jFO0E=8}sf^O0_O9N5lJo4K|Owy zzr{+*`i_$3{F1@Ch8$=6;@gR2c+q%$2isZTsO#kIZ1=LeBco<7d0RJ3&#MluxXDu3 z)M#z48~-XD2$~98?6!uI(4a5-h7k^*GqB*r_ zRG1~|pdDP3)xs9n=j3}QM#&fJ7iDH~`4#2mMV02>8ja}gMu$*upwt}b&9fwoc+nY4Yl@x4y?xDG?aY_x>8F?6j2LwNKXs35pV2&{-lcj&`G(>H zg;xHYtW0wAp3$-ayd+Z$_S(n^3->TGrDCwxNA9(99dzTuU>})iryG}z6+mZb%;V7b zAO?#)S-PA<j^5Y`kcL$p zD#S};XM*LjQJe(PNU`OhuO7{PpWFQJ+oR@{2h^?<(ft@|zy30Ig-YX>?DPW7;Jg_Y0F3E5q;t zp0mTb5rf$~(kO87__fCzpkHxt&`G$M0NPf@AtDGOfyW;k%enRV#@l1CeMjyyQLd&K zjNg%oX0DNb3?-n4bGRQa8=(`CAdxNS^xkYg$lP}LjG3{(L-_AXC z`+xsu!@04wxWz}SIYgz$&ckF|YPj)KsGJM>fm*sy;TQs&$nH80QR%TY7=FmbDdFvk zoelaaH&=|fvzQmO)XTxAdv44FcJvI5F8E>;D)y^tI8x9~y9;oK2OVe~d7ZEcMBZrQAa&Qonn8DTaA(swo9K9uvmm6eBG!n9_|nNC_&-L?0*_YW zl}lsw$l`vmij#~)C`u5e_yCGjY(@?6Icl}?Peq#9FMk)h{9}^$XlJy~p*hFG`1x=z z_a<{rjB4M`J`R4`7}dT_{Tu@)Yz*3WByWK3^7dFiSV{*u_-SK(7(R1|qkh^L)bB_` zn6jv1(7z*n=hHWq84H2F@B;dRYhuvABR8+(AeYC)pn{|5B1en!w#TTUrD!eYTo8ky zC6ZIm&8IptwX~emz?Dn>ol&9EzomOm8`FHNj;Y6}rYcQ}PUe1m9Ck?o(sN)wEUEN_~y4SNoji z0J7%_l`|A-H1&8&`kZ7tG2OY~oXt)h5`*Iuz8t=RuJ`0Pg)hgqa+BbijRU?AJ>h<0 zvf>o&DQ==dcXFJ9J=@KcWlWrcy_#F-XE8HQ!Cv52ZU#Q0I0buG-NsQXM4W=XZ*Hfb zLVp}!kLd2;kouP$H)4Tax{yOP={TSs32)%g$tDh@M?4#`+^gd>gQs8N{CqUqBBVipIm&7SNczp-A7_v4FctC#N ziS;Xp(?H(jJ=}igyg0xCdEj0S<-_6>8eFrB?zAy+3Jq?)k3Lo~4kSq)`Ui*dVQ~s1 z@3^0vM_DM4eB}YkqKQ)=dH6w2jp|`>3M7v{#AV{#tBX@4dHr=82+f0m7ve<52)RQou)lzCcgK1N*oxR>;HW+!tkGsHB~=3~UVpIarB zL?D508_6ys%YS4i$#QbaBdcEE9+4>Bc_wpC8ADe8$YxIZAFON7%gf;*JN~04!s`dP z3FN#3Tsz5qn;Reb@&M;jla?RZam4X9_w=mQ8OBV5OW&!h*N#@7RQ*f&o#JgKDgP7! zL>bZ&NfVs(*Ud!ls+n;r?v5WE+5C`pWb7fVlQqs_ZB88G_As?^$U5@i2OP?k#ep2i z#UFAgR~Dzh;gXN&u4{?|IFQXBbLjOGFTn8NC-j?9#Q_{5@-Z$p zVy;EBHo8F;z?vP@KCXFR{g=90b+a-88`y*LL$aS_5-BV3QylC^eWN(!Cb7miR7{CO zY!Yo8pRF}cJ@ZH7c+jpmm6~@au<6#sT_A5vf}ti3p-K8u94e;7smv@*bEudSry?`^ z=*Y4`WRjY%#bu+e`P^feZ9$y6=D$70p;k*AFooRojd*3C6w>jncxCFEFa3@~CSX?_ zD1|hFxDD|^_z6X+G0($+9Q@BI-j{x z{u0#57bQW|0Wi-OTUw8cQz<bYr_sbAef1g`cNfNGR({Jmt}{fpGw{&Gp`$ckiOV3CJ^L2y&=f%$P9)T zZwSJhEK%_Eh6X^+Q}XnNsOZjA@d(+9Q_($M&5QQ~(M_r}JiQ-CZc?VjbZ5sQxXElC z{|Qbf$n7WeJPs#AoQiFwfye%BjZ>*T(a58e?(8@f+tK3`nHu6$Y^#2tdt4ExkZ976 zoc!-vLHIaF3b$XZ-Hh@Ejp*uhsbT{PBflW~R5o4el?27la{`*1B_KZ{Z;s^`LPjU3 zK>vLl4;h`HDWLK3{BulRf~J7(%H&b6Dgl8`nkMk*5R#zs+%XYP%q6HiUonY)nUN;s zm`ypE2f7R9cucBAGd^^<5WI7c}R z(TuOl-j=>Dc}(m9aX%_xB&cxNK8HsO^~7Xc`@*@r*g`!4F;B=m9xc=pkn-e~`FKr= z#00QxUBClx6eXyX-*yIH2n3y=Qa-+rKI57Mq&zvg2s36U#^PRIUCcvhCm`d=x+NI( zB_QI-nx%O1)d^aPt2hfw8crB7s#?bXiXIUOD&fbC2FJMxD&hYe%>zXxbRa(;!ygs9 zRgcZMBE#?ps$gZK(adhdNWGx?mueyU=@90C{G_}=_KHj;m7~hR6%c@HP?;q`GktF?dI*SJ;a3+8c$fYZJc$pG3)yKPvzelm5ECF~x4$b7>VEPjP2W00g9=$;_5&#Ee z+idhlzzRX2?{f+%J|nY8;uB?RgT$| z2^tahN;wbLWr9Y8RaNlFP+p!egTBnf!*`j;23eeqSK>^VFvaKDn0a}ErgH5z^G~kU z7_P{8RXSCM&R`PsEX#%d@htL#=NfJ`4x)e96xn&Q>kWH#oa}Mk5Avltn|!MFN4ZwM zM{`8JL(!>wZY!5HeT8NpbDr{1y;b?X@@LgV)q3^W(wEea=&n*n)$eICr7Jad&D9!S zxtQ=ib$E){iF4%fk)|}z1BELEl*7uP;VtzY z%5#*Z$}^R5r1r*C2UX9jb|VS+VQDw=i_cI`kZx38BVDUj=vt9;+^Y3xIjv1QUprna z*Zin?7(sAfYP_PNmKgC+Wi2SSdx9uR z_Lby!7+UHoit2KThO%Pf zKwm?Dm~+;(^zd0?^Rdc)bJc%8Ujfhg3kHYmwmwUi7*J8!+QwG|s;vV*Td=y{;cCt?WoMHQrCA<*Re`(M-B#WcvNdJjMb46CaTsc>4(2qr zRj{G#!{mBdRuPhj#Genfy4r(%9!F=<*s4fcmUT0u3-Oi$-qTsd)tE<-Yt&i$$N^2( zsOgnM&E>^iU7@z>&NIXm;>w|*x2v_Echt3+{p4XyRwlV#lQnzVP+^n3yLh0u+iw1+ zcn!a4kk2XWspERhHU^8?zRW2}UrypwF63Ch4y!%I1r>3K3P#CK0=$ihq$Wh?&gj)K8VXt}V#p1xomJF2JI;M@hk8pNvYgb*9 z-B~eXWQDz!yk1{LTa%~EJ?aN>R(IQAH}7q4tn4&=F>)D!b5~m|?$$iLm^WMLb{5q% z_XUF#KJ3M&T{cR+j|kZnT5 z{pDL{T7lui35ukpO*|@mCMc3V*~HTdpNVqNCz>HRS0;d@Bft3gvtW!&P$+G00oJQa zP$+E+@F>5Wpip{LD-V4p0p*9JT6yR*3FtnNbQ@3gnFNdB6YY>fQxi~rBA<5fRG&#e z`-%J>S64U*?ZUlmgJ-7x02apyBp6Ne}+rn(d%8O`EgP)+PVh zxJ34laV`|+U;jJ$UjM0qGnfri5vg-r{}NfdZ}BX0UKjt0vO{(gD(|(E<=y=JQ}y=X z*ZOm$ddhb%atd@W;pQnlCW|R2E+ap^$RQ?w_kSvm&-U?`(wu^XFWlB)&f91u%n9c;n z{u?iW^i(C*VC8Brr7xg2K~=T2mw}@_K~*)^5F6?pmf1XQ(1;g!4%ibsO# zYU{58&UYrLt~PKrrYla+C~Dyv9yMeW(ACJ8YbkgQC#bGAr5T?TkEZ=~(4US=^x|5U zEg~rC0eNzZ2ui5(aL)}QDCx%NrCUW%(gm{WMiG=y-C;ZtK?zkIQej*LLwJ0-soi+3vlM!qN2!s#rYp z4{-D+sA94Ae!OUT0xDnRi3g}UR*;}N-`)p#u||J_Dt*$2c|?bK6IAQ_>pILhK0)K9 zKHV&WNg6NJb3Omeum+*fuSgpux>mTIN`N!IH{=@U80PA(5@FFA^#obO__a`m06Ymu{>sl8g0r#S;D5@#dmNI*Q$!|H=Z ziR>aI%124)AIw=!QAnc;wW|wLhx!bRKD={z@$){X|x2d`7km z=Q4H%I(!Z^ktWfKI&_AnpGruZ> zOj3F=^P%xg<|Ss2;kfbzW`|*j*}`l@4(k_8H`0Rd(H>#eN_&|K>5bBRkurQMO}u5M zqS*fL^0d}2|49C_?kl}a{)Bv|@*EToy+I$AO-Ik&^R*Yi^3)&?>7E-&wN)wQ!&$Od zj26{IxlaG3au|uh3-kf?ZuH`PPj(coe_dFQeX@^%St(k*4*z`th*hatW1IuQA?rB} zoaw(jZ2%DbzrBX1bJS&=KJvcz(|1LXL*I9C0S@;=Elmi2VES@Q~m zUZWUy!xe?wJS9b*E}yXI7&-bFZzsJ^@S`I+kMpagdUn85&JGM!xU+4>HzF54!QUq- zqT-e9D(oE^2-o>*ea!RXKnKs~G?f&W=Vr^q@D(n*&f48u=&BEvWv>-E{5_?9PAIln zEs7!1@gzSIM#OeBhdcWnMP)-Z$~humYhhoGyRq2R$thkVyPxDUb%VtNt|7mr-(IA= zlN@}KpRZ@To69^sf%?Kq?}T@V;wgT?>aNaKTVZkgPzR^HPn@U6SsCbVC~y|G7{3+= z`kDit{6KX}LGh>u#fVxq(9=*8E->eIxiU*g$5Z@Bx+>dI-B#J&-#%D4pxQ-tV{&rn z8GbZLKgDN>AxCU?|DbiSsjEBKpr1j`_$R+$TBpNO&gb#vef?v_fLJ!zYw@^>-L||KtbAiXtCX)hKip0Jc}=Pyo$6v&2uFF3_n(DYwKsr^Q-;VGp;1>KFxcxx&wVp zIo*TRwbm&+#0zvaS9f((SF{ZICTu|e_>I!lg}z6 zd!OZP#PTRVW}2_m-`>czq4n~-!{SA|s|x!oiX4U2Av1y7w zAnVVyTIvEFj-a3%S^egg2F~g;3$-muF_W9^Y#rzbxthu=3bR^C@pJq(vhZ1cw#lEL zSLNx<_uI4Qi@=s+9r;5=1OD1B&r}gmv&~g?Hm}LbHdK#Y4{P^sZC(j^Yd4-TwwGUh zs_S9n|JED%5LUtO(fF@cb}>9)zepBjG(s++1n%l&CJy`7=OJxNldubsr7u8g&QFfR z=pQfeC`6kai_x7g@~E$#q-LSZ4uGK`IT{SEmtb6}N{+(l)R!T`MkQeuihTbv4})oW zlA49&ufn7fXG*u?4;ZFB9EGipI#_bYxW!)lz@L~r13!NIJ={Q3k{XDfJqSD-O3nwl^L-u# zQx%#0*026O30{5FP5(poSJKL&!SNm2vR ziH~77%1TlL(d(b^4>B!DY9G4bQy3>}lGHxr{|pSJNopQic^GTzO;YQg{&Ps;po{N>0RdGxlS;3CRf{-`US^6%B0TG76}H&8#obt?C+=k`~}0lhpW^{VnWu?a9R;Gr!}HDmIiPsr66xE>EkiCKqD-jd%IKPFWp)&M=l3 zF48}sH|R>WHz2gQQr#z3o!`m4EU(JW zk)p{Y6eeOkLD6KA>Pw%WplCAb07K*_iYAj(UuylCqRAxHmt4P4G?|3HL`=Wp16Y%! z>XPI)3MP|OUHbAj5lkkbE|EWf=TWFNS%ld>`WI%?CJRAc`G>gHG{$7opW<5QgM8;t zajjQ_-29ig)~hf>)=B<7)CWvb8{mUqii=HcfWfc$$4{YDKlKv)Pj?(fBA+EaDV-uI z77Jpp0w7FM9poLUfP&0Ps)IZz6Ht&jDe53{0R@?pR0nBh1jLZ6Nm3o;5`}}j} z{i}5-q_ac&FYP&+o7J0DucB#tnWB&RkQomp>@C@BX*n^?%r=qLtGx`iDs^Q1HAaAe zHwj%Na%ikT4ZKNsGRV5R zb&=pifqnyRm_a)U6R%9tG>;>bz+g?%G>^L{3-lYHy2zR-0{!}+i$vy3rO&-O>BI1% zX#)NFXr9M6(=gk-q?qS1T|jm1ByTkG@V^AXT6$X zv>SZ-3w7`7q}mmlJ2Yd}+teymm-2|RTJbWD?q`@q^6TYtRBw7(5`|6t`pd=WhRhVi zMx-G}piv_!DmTuzV8xfDsK2KwSGb=UpHhO9ScMxHO-cdsW~*>HGcHB_J@akC7RHdG z@f&+>!qv=}lni9KUAT@3rKBK_*oAIJm6CvT`pY)q1Rdu}+B&XBwSWYQHb!`U42L*;Cx#UDDed9~>N7}D zpVCu;0G~mM`jjqnV76(gF(8+f3b!#ODGDCmE)@Mmoyz+I%UB z9i~n2cLE=ZwJy*C3hg3sq2LAYEwNOtdh0u?zDG-*AwAa>TOwTY}qx)GqRehoI z2gMq+JzXvN2L>}XsZwUJ<~9nKA_OIs4SHXbuo=iBMP+2IPv}5%^wcuYFZqR?lqU;x zXMpl(QcFS0+l0#zrjmk~jBIWfXvlI3ax$_cD7=rjy>Y2U_~UA)u!T+vK^d7_CA9xt zEbYS#!|nQd?Mcnq=s$nE;w<^AsOq*f<3sG5rxY8jQfGnxq8_0V=YDDh=#P7av(c$M zMWKVeUx1mZE43VS&w$WLdGbIf1}RTX$_~0XEL0=FFhzY!x1CSdW@gF?TCz^K15rh( zT+ln#3u~}|_7o6AaG)!VrB^RI>TD(p_mt zQOWk)jl$IkaZCY{M4UHKo=~bB^qV&eT{H?a1ym9#xK$WN@wOCTN#ww7!d{5Zlmql7 z+k`OguPy~-5*fRJ&blB4XcB4PD9k$*^_TH{hT$rGzU~}twMMD>4ON)Ghs*hUSz7wF zH1kwv5CdIMNR&w54!WR~DT)tX*-3?aisFOY?xDgx1$+>>`Cd`DrvMPhox7-TPXQl9 zHr*!*_Y{njk!}AFg?ox3gq`@?&iZ zAc64LVM;bdF~X9~LJ8e&zzC84>xJOoLEg0)hD&s>X-n0gshSiYF&Ck!&^C#Oe3i8% z57010Me@y$2`8ESR4aaY+vCD&geRl|pugNB1n5`a0=g_hzj|kiO63=yq))9%`9M$j zC;c*eQ_Z07dYbaIr|Y5B{}&oL z=LnM~TXM&p9+~FJG3Vrtm65tR!f8!=7*DP#_kObOJ7Iq0xv21kMrO{POs@J?_?}$< zoe)COX+5oyGgJFH0;Z=b(@F{Rqx^1!uwE_MkWr6wc@?^mrpMs9Du1M}Pn8}Gy6c1> zdSB91u%7=D*3FPMVtoD2qHIn>vPQ1`MQ}i9q#;=&pZ`kNswu6b%lw-VWtOEOS|jiM zE@VO8r76Oa|3T$lLmCJxa^9cx=w6vtfqwBXVFlK_KdrwY74jkI+Ct~B&&Qmu8M&qo^QCQ_nvEX9YMo`~TAy#swd(iGnK44ADpP2tT_qXQ9C>(jtD z9H7Y{XsZ#O3|vI^)P?XPt;kptI_WJF4b$QX=rdh7D()N z>9vv}F~DI!h$239d;$;31j{5NDeCO|x-so;Nj zf&&NnxHJ{~s!5KqkYs5HellaS;~QpSdI|1))D*`qrX~%sPoA0LILMrvhR`QlraBH| zQE6;U?=&oGC=EPBmQ8nj4+g*?GIxgKGgunZfJ0j!avZ{g0Su8#C5|XFJ58}rQ0kaD z0%439w?WU+|EfEtQ)_2vjH1G=RqP4UK_GboERP4UL_3mx=3 zPE)+`@*;;37N#`C8=ow8&_gm!@y6n%4thwYfj7wVEKGS`8gPTmS>`yb*r-ZVxM3gV zzxe?DyS zDU_ugG+bdguG*ve%{WJAhlgQ|Y76>vTMb{JFwJ>z1l+3n5Fsr?+8F9sga-k|PMlk7XEW26O`s3*6jv%b49Q?#PH(Nu7t$KnhX z_MD+56?VsXy*u2}oNsdmY+m2OJ*3<2IA8B>gcZG+Gk3RE%zmA$v^z5E`$HW8A zY?aTYMpBQtwPUa&+}xVqpK&`KaJP1t2Rr?!5K+D48F8SyE95D5RW>zv#ylqeBs(}z z7hv=H^O`LUB8NZVDI4HJU0rQUuOVG|j`@0bpEa+<-I0XTGr(8GAgp}Oowl@ zfu>Ho105{i#OHLP6e2lsrh`WT%BsT7vK*hMbKFA0uW%gEb#$_3du3H_eLeFsv7H5; z2EVD)Y|{l#!{*i;}qNhBt{2ZHMW4?C}!rmn=Av_L!rjJPCol7a_dUR0$p>Vr>MWNJ}0Ne zyn#qoIWkEMkL+y99V{uVuNiPRsN2N3y}qG3yIC+*=H`f2e0MY3R^`ne@-}tN+b?o7 zb@o^LORG%zIhJg3pwVP@n9B>o?yB)6tFH>a0;c;mbUI&Vd&ALWj!dKz_~kvCU4CXk<2IgGQ75DNyI@D-?O4D6i- z04CS6j!&85bQun_Am@PhIt}zotUM0&a2nv3EEF7YUZ(+l$$SS6Geepp-;)l99yl!x z^?-~j14k$g?SSaZ9W*{74efwPD;$3*Hm*!l?O@kT2cXCWX=n!|Jyud&e>T>9zP-evJdE7HOd8 z$nsh$awew%pCfH`4q&!1X^NjObJ5diW*Yc8a=Y6x14>bv0_c4n$2q`hX$qico$Y|2 z?@vr-XKa&*&IFJX^P(;Y8LdVaiGH8y|&Vg^~qNqzYNBs@jW@yoqXe`6Rf6#%%$r#Yt zamlNQ%1#4GlA}#ndM-`PV~3j^FEe>*Y98C=b0FY04HQY5{E#ETG(aSAv_MpGY3iz9 z5dg0=O|iJLmA>9!8d#j@+Q8vU1B#PB+i-^Wrh&vsqTPXj+cX8@hdUhEfd6R#aWbaU zK?82n)IheziTV6#;Bc~_(vg6ypeTHF6_pi}(-eizt#(Y5)M+%kGxkY7lNydAxv~x? z^%W?%95CFfxmIS7UZQs^w&<;f2Q=$-^OYJDR@yEsnI|+0 zH4_ynEzf);?K93HC0!2Fu-2G+_Uh+JXTncy)Y>I~p^h4AsL^^9vKg`)f7^bhqm~ zh&pW5UajMFHtho4c=*#%ibMOZcAxfP&35h8KX zc?X&t&$Oxt1EVgU7ZWX98X_=o{+;@jLr+1Fs)6+MQn_Fu_ZB_XN5HG&AmfUJHsuAVa&V7^EF2GS+9zuLp_dw89FeZnz z(vh6Oj#|E!FU+YObAa4_fn%hQlRsyuxvs@qKjf^NBId^W2C7VzrS%n9B~uK^t2j1Q z>l}rJeoJq5Uyi4sDZAWyo%p=1)n$QBbg39U-Q_)Y zYmsSMmT?f?E7)X#uNp)tuJ^SxcybF}eYN#P_Qz4&$uYmu*V56SXD{q5ZwTd9jLcb) zQ)z1-%yoEj_J{**<<%~8OMAfEo-N7-zs1+ll3(dAFYd^GTfC~d$Q|~zc6x+blaahy zoi~5jpXVN^%d51QTG(X@ahAcrK&Z>#Sl(Hl^?*3g+1A_L(&B8j*Dm~OgrllyAlTp7 zX>XYC6$gTit$n<$x~Z&qo+##hEvVj*Ti9J)UpLE2Is7^H=C=M|g=4UGMkRcDm*Icn zKV-SnRF3D)8VQCwoMCuP|DG(W$%G+aVa;^Z_m$jG!y=>hCcQx$UgWe%u0nQ5v)ZoS+wo}Mw#Ajv~l;CRbR zQ+w_9E5$Pn$~igbD)CH%Zcd7>7SA*qK$Cloc&0%$zvo&9Y!|^aRCDx37LPP&=HyVl zc%)Ii{MiQaNTYiBo<@gh1YH{-Rt)bWLiZKzKQ)KcZ>sK4E@S?be=K_tl{1?&@;2wA z1i~3dspfXg4UPqHn;eDa7I|u`Lk4T(QL4J_yU}qbIzk+!s@q9Id1fA^s@tNQsZhx} zN>#VATSUF*DAnB7-|A?C@_&?SZr|MISV-rj%KPMPbk6#t5OQSJ9gZ)cT_2^&`<@Fa zDj#>0D(}y4pzGRo6v{jKcq7*7jH4MCeq)nk{@>Y{Z)F%h*T?mfbn`Udsee)HRa2DX zVVriM|HY%yW0Jox`SEf0DmE@T3gs>G&mE4%u*w{z+FN=jw6}tz)HeOWJ&yfM-cf3s zzV%-E4vs>5Bd%Ta9UP^~+sgasJ2*;}w`KqMKa{-(bX3(EHazW2&kTf+ga9#w79hk) zPXK}RGN(*>G9Z%PdzmC45XFKW5RL^!Y}inc5-UXoE6T-+iUk{F`q=ybyeHiM-p{+% zx7L@nuJ>iHefF8N+w;6-znjKj49eT+Z;wg1GDgbV-;dKEj6r!5eNWIJjFIkkW)BU* z7-`X`p2Q#k)5f4ii=(#@rj5~whsQRfz5X#M(PIA=>kmxi80paMTdmXNEqdl%*)}Dx zE8T21{i>8JGtFbnOk864v+7ILo2rAVovKYxjKY+$s%a{<(x?1b`HJ$%@d!m_h3axu z-an%qRSBlAOeamFrd_5RP5q`TOa-Py({z(oT)o%&qS?m0$n0h|Gi#W7Mo=ykQ}$sT z$xXB5F)WRwDfbHg$uScMBl4Ff}Z@?&D;0qa~b;(#?&8J~PeeE$gkRl47LK>Yf! zHAZ~lh;@pXc))rh?0+m5$(H!!-HiC|K|J6%XkDoa`X2rsDPzPh2d%$rROZ?L_Wvjk zTfY=DzAB7WVXcnW5p_qbPm6yXv1(^cl>PX>M;}w++*t?~*b23AtNcST%C_Vr?$#cI zax30)ob=T(a{YFmAboW#7NzrFC4F^_blXc_Lxu7&=(gKmCv|mf9tzLAj_D9R2Gw@- z=o{72IU4rZKWUM7(3AbB|+W zen`C!b8hX}3>5!y9|&O67?~e_-(|(Q$1yTLe0x6{?ih=N`1%7@R|c8JCd(Gf%rT}l zLC**2jP-^+`XBXux+f4EIi%TxOt_Poh1j4v6$fz>;QOfh@4u1IG4lFWy>G>Vi80ce z1MgcA@;L^jdGz=Pq_d`sk=yswht`9PWsFXKZ2HLh6r&y^rFqF2qRn+?der`4}Az{QDE@5zOaB5MTNf^I1Md&i$LuS~ppu5j>*l2;U&wr9N>Q%AM!DTIn~5`p7_H(Wdep2n!QQED>7Iix1L4Ezs4 zj`~~lSL)kTuOSVYK*5d1HTp1BkzO5?uUgK$N+FTB`r;+sK1%0{5XttS+3OK2Y1J*# z%~S4HJ**2?{()1lJvxoSuI$tPr2R(wp7v$!(})i|qur&wO}k#(VOXoZoH1%y?PBeG zZG={*`9<>`lK6h0Ij%W?#ARDRP`fl&Xn5v=@^xkz(w|M$=+(cf&#ON){7Zd8eNg?N zdaL>>IRCm;K|xijWsyp!c@XK-A{9{zv-~f)TmGs1Ihu#6G1+5`4awEODph0Sd3^u3 z&i|i;U&Tz9-3i@oTduj{A576a^p67d(ti|~C;hWPA)Oo%t#0c~@mrTQ+t`tr+LvC{ zQQ1^*={)h$ufd?)-&zxbxRl%hu6C#}HPw;&nkam0oh)X2XN?YGdu{Q!qz+j(3oVUe z*LPNAfdW%$%Vf-Izx=RV2w;9^1<32 zy9bGN0<;4}8H7V^5sYYefU|CO1S7&``%4_2LXu{T2SlpUaYZLN| zlBF!RY#+zjQaef$_?qMr>6s=zrMI2yNT_Z}@>2nqnBOy$SkPWt+@2)GgR%WZIkiQ$ z;)0g42_53HZ(vjDFX}06<8vB^TJ%>*jkKpU4df@L=d`8IlL8aj>fY@Byt4MJfgy`T z+1T!aCZVXZB7Qh)rer%{s~jDUbXx}BUKl-1dT(-DQ)_8kMR{rE)Jz29Si=llT2F6( zN`Gt4CE4Px3)Yxv{k@%?O|3}LHuXp8k)+o6_JKr4es#l?>%^B)V_`vMcY1kRaRN6@ z3T)((GAmm9yA$iHE9BDWa!E;@Mb$z|E0TKc7K6TqCE$+>*6XKL=JX^F#W%KRMgJC&I>~7Xw&IFjmW}d@MPFmE4~$u7 z8Tu`G*?D%hEOGjI@${H=?)0I|!K5LJt*lRomeOyrgS|<;-F19kN6wTK@rN<%iiNc) z#f9aA6&?B0mr&E}KxSD%F<(kOuX2N>Wd=7K;0jD+CP}7~8P?6fyT{~m8_>|My zI=#tSm)O}foRP)Nk}NN5cS2c@HMP4kKXjH@U27#=)|p;pBq$s)G1=e~BZQ>*6ae>-6;o=|{EXW?B2n z+wIxia)ne-Q*3WZvS+1Mw8@;LtFcwBg_%Y9gFSs#8&%+vI#arPQagv!Thr^LCpxP; zh1}XMOH0OlN#|niZDqxs1MM}{wQ^CaQRc7?)bj(me0G#WDroJm7l&|$M7;5wHCs&l z21YpLIs9kRSFjdUq-JI14pj^#W<|)w4d<~o+qr~6M~kJSpO48DH=|^FWiH#%pKR}{ zEx$yHv}A|)nqEs?VtY#N-1opOtf4{u-DyMlHk(bTof|C^7o4}+r`Kljr5%Nh%|c`3 zQ_}Bf$m{LssO(NFtx@g~?>}#iS<2Vdb`~`y4b((RGn#EFM)+_kS6f;cGC_Kzaxlr3 zmSOF0sE+NG7_VqZPR88j|nB{WnQFZ^99C@pF2vGG}X$th_I zmyW-sB(rI_Aj8_n2Ukf2Wwp&|C7Ic2=}D=QnU^iKWHs~Eb^RI1sguMZk9BTbNlOFt zG+afIJR@)X88)-Lx~wO2Aa&}nR8Uf1Y_;U1^d+~4?G~%CK^aSt2C1jjQD4<8KO%a~ zabXEB$;|7_j43PVAaYzBGcGs0ZkVKBqx(?D;|OJjrc-@JZD-D?{>1T+CdDDdBHlz^ z<{J>gH?|T);guh)$HCiIK)m@U>j?OT9b)j$62GW|c<^WNi)CY#5F3869%lG4vUtV( zYDF^FF*11l`m6N=5EnYv^6qcewIFY$5KDfyu3>`5N+6#8-MSf%k+rMw4?JcXD?(}7 zpVph0!7&@e*Z#CR7-md>nDv)+BYp#g0lxVcenZHZWO4l4x&_CR$5<5ipR(?S8bNV@ z^ZsS+!J7*q?)(?tJUmta@siWlK~%_xc=u^*FQXr$oDsqAS~oFE$8xFeyVe(&fw3Hj zSG;HKW7dylL;UbP>y=B1OoqwQWaa_WX`Gv0Wn61Gp}(Ndf;nHVZPvW6iB}&|>zS2^ z)A$nSrds4%WJgh5HliBqMH_Vtdo{k4^h_tio&*7do+-YdW>2G6D5hm10M)d5X(Co-)7iVA}Mqg1(+eZf0fexaWwh|+| zlbJ9^F>OB?*;~<9lp=nX=4=9cFe@y4VF$8yVYj)KJ`e|7@6!2 z_^cm65vxJ*ZGP)MQ1fb(<^({^qsHiv)ST}z2<#Y4sN(D2Ti-y*A+88zpJcR79mJq8 z_BzJsq}a1N!q^*`7$?P^%?(F?4Ld3J>|f#RAhXs{(F+ zy9uQfd-hobyMY;WQtVmHRCIHWlVZ=#PGw&~$H1T=J~WLzi(aJIvumfbyD+~g_H02U zdmF}=V$Y65;uYCrYalMYgndap5;8W7tOUQaTQK3sma$pR_G3r}A?g(vlGHH=#77nE zAxxG5yrNdgz6(g8|>w!RLhx2uA-8DBSs;2xl#^hC%J#`pT|Cn3KZOS z#eAs(1-BU&phAL^3<$>;u=|)9PBI`2$FldKo2NjGT!_w};H2QT2Nq)9s+?p%NQuMO zCOIiE{>3;J7oa#NL+rbhy-7Wyb%sD*H34HC@0vqpa9dL_ zdxV+gB=f<7N$dl79R;_Yo`g{yaGD^Nhp>G~)QzFCMwxk&$!n?&+GqS886fuRf79D> zp6Oc6E1FPs3v-L=HsvwQiVFFD`BW)T7dNL^oTSvfnZ!QDgg8m5TbGQr7Ud+RZgL7O zMkgtC&!pg^ik;*HwWhK-W9CeO7?sApfjJ2msOU*!e`PA2az5g;6*0gEPI27+&ig8SElG<)t#_m;* z1UtzmeI|pEeFQ@`A7Vr_hAhrWKIspm**#cAF%YkxiJlF0&V@K>7JEC> z=On%T@mXvS(h6nawCGO?9H$Cr6pEja?#eK#UCz#ti;FVYxj~`-S-vuaSuNkx4`=5j zxp?2^WWVAVly<49U zCc_CoyJ?F_229IFezf-yow`Zu*0yPW)HJJqQAaQq%<(h0x4u#SCSrT&yx#!!jAH!k z+%oJL5l+IGSIaQ3!<~dNb>*yxQo@+O%Ta1`l2>a-1^W)>A7M;qCFY;iNnWj=Dlt?I zPV#EKQpJA5*q!9n+GA%wVmh1zF`HJf?dUp!nBP{g*P_1&Vm7X10Y^@PnBP|7H-tNL zAg;L_FIGDVVnSE3NbT+UM+25UO9UJC1q% zoYtaQqE2N5)oE3XAq%LCETQfW;ywL5RFTnj{1vhZ`_ShMnZ~ z>1@QTjdc=)v^BAhL#%~3wV8bk6$n9IZ)S&>Iwv7WZVM1i?t~L=_rg{dwn`@Y~(@-*2oekv61Ub+2>f=1EvsQ z^_e~mx(-%|%MJSt3-sIcI-NuNn|8J4utuZ4g>f;hDi>^JUnzc+|1G!5PW&HmC6ldn z5mqGhC!j(+HN*~M5)oGL!?A(&;guK>ld}h6={igtt+N~AH|wz4gPp`jy4JI|;esV6c@ej+M$gT0 zk{266pVzXQwdzmRu}l}v2E3}Ai(LLE<(JB~Vg&=G z!d(OlG23Xdx(F6t-iE~*CMDFO!rD}ChoECUg^!mJsNhhcVV}65&3wo3$GSjucaI`D(=**GOrKTEYU1b zj;bF}|Ds!`->dyeQKnCqf2O*iouX?u`E>W0A6NDwRsSOMUASUOqu!#9Rd;FUGba?+ zt1nYzBTVO{daAixtv9``y$xYJGjU$`bKSd|pS8P`+n8S!XXReibml>3D{dCJ3MY40 z;MA^+S*k43K27I!o3!g0gYsd8NBgqsBSkbF*Hzt)gSkCQv+_0A_4cW78?Gu&;m{vb z8F3;vOgW}JgF6SbibQjcqCp>{c;4*Q7mnKpk-R6xRDC%<*RSepTw9V2p?QIroUrJZUaHUqVA2~8o8(NCnhuDs4wWOmv za(jw$`clfRY@NE39&yCms~R$L+p1FS>W=aE#^-glvx5ag)oRHD=*UZIsmQYA7H70G zr=>@-aFGn#+S|20i)AGLts@@EKPtL1%Z6B$bo6tezuDe5T+{EU7*tC4=?-)iCp#>y zO^#Gn(JeKSS5#A(HJsAjSf`jSy|=rzwmY}0sk^L2zEi4^RNCBMUNW59nhE`hm^?wzsdy(QD&)DsW^rl@~bJEQhT+T55B+INjD9pT*}6E@GsD zAxA}0d9kgkqH*E}hP3}x;2o(oElnkk-a6cDnkzlgm!DQqnv#(|EF_M9+R#8}G1r*E zB{<#qw~=Z%(i0nSfo-ag+pRk!Ju*<` zXz6Gi#^qEx>Cym4mL@>&M&9EU)Sr&TeVz6M{dHeqVo5sx^(R=Xi(SC*FP)8zVH8r`OgO zRMh8&9+hge50$m0TH{k3HHPP;x1@I^S?leMP5JS&v{H@1+JdCy8cTImo$*PjpgX^% zvZ6PhA9NTs;>u0z+-0e~MeQjW9d?!vm7MF2)c9meYkxwqy=n4F>6xw;dzHO3v8E)| z=#*ZQQfF^qSw}~HY4l$4ha1?Kh3#Ewh(}21>YgIK#*y5RTho!@&m`HpN(YKF8k0IF ztda^63K~+nlA9`9dLyMSa>RFLH^yhTl{I8X=8C6oVke7RH?hIC{@jA<;(}^N8y75D zeFr-89ev#`Y0X8s6D1eB!&02frf25owkOSy%&!CONmZCl9YtkD!BUEyf#J5g_^gV& z%+%f~8^ot>WGB}QbaNGn&G9vZLe^wyF%0w$bmf)Sbrjn=L&m$ir@kR0FUMBU(lqID z`o#l%ot-5`t))2$&69?t0tegEkXn#dkd_!JE#!gL#{AOugx=OnN9gn7hU?hS^#g*< z+QXLSmgmlTO?qY^jUVoBW9|92snU`6fzHO3f!4&qo=$t%Gg6KIE^9%ZmCvbZ3R^Q? zP%IQ@7jdGsoNMQ&A-PxsF(yH9Bp{mA2ZB##F8` zT-uff`f#~OXK7A*YeM9$<5f!AYciYDyZURVUo921RSc$;S%eNQXWAp;eVf=&V^X}m zfUoc9OtH)s#iQsp@%Rnw#2SaCB(0+{qr}nPJv&Nzv^}>eyQ0`(XN6gk32vav);Tax zRasNsA2mm+(NW|`tIo1JhRPymkH0>tE4zE3qpUY!!Nr-{-+Eym1%s`5EfuAW_N3WQNd<$JzO>>LM|_^+(u3le5q9qS)&aJIZRHbEdt;>t#DSq9 zOLJO5QEL_(n<_oiTGrX#&{b1V&=PaMRM5s&cNOv7l|9+h9+L`&l2YrFY=vEwI;P|%;jEgbKWA-1_Wqja!#j=f>wPgKQ`m29&XcU1Qm zatjYj&-8Y-*0eMxrze&tKPcXE1Dh)Tx`~Yz4{l-;gB&Tfwf$AY2`!G)gqOt6ZcPY{ z>$f+>$JdlwauXB6qz026d3hCiT#L{UFCoA{Yj*-l;6ru4svAm@~tUV zrQKCIm!^xI*Rf%ucpW>z*wa;&*IC*$*wPj^O+0yPLf9pauGWg|0oy=v`1lHMkH=1J!N3>adKtn4 zV7M%Ikt6-uhuHU-8W%azuXvdKl1XxrLY}=FwvOd4QpkVb4gG$t3!ZfG@FVQ+%;hd} zq`&wm`zh$;98|dHF^R~M9jEef5Lwnmj&#iv5_=^(&IeCO?3L^|-FqbVN_HI6lM;I+ zJI=l*CH6{ooQ9{y*((`xp1lq1wcCYI5Ru=^`tUk3WA!g({aQZo+{(x=kAw z-sZSSlbv^n%xW%jp8F5MtQPAcP4@ICUR3Tvytz2?4Ek%O3*qLX{aN-C#^y?gnEo6z z_HY;3S&Yx)Yhzrg5O+Th+exY`1!D0Fu%)eYk)6f(BKs%P<03mt&|#JWPF*+vAS#Zq zh|p|uB|t8_kNu9xaFL~D`7ZV-eh|X{Mb-WILB%feo_}*cEI3^*ijR2i0jRI#E{gr% z^C0`)couhrN}01v9YHpuQGY;ZM?h4+x{3*d@u*q8LbTW{m78rQq=a{oVd30ys0Ml$ z3=5+NPOymQDRsfJFna7&wgl(kTof=H{yJNPqaLn&$n9^ih=vV!|2_9lus*nD09S=f3cVT=U|TY;+f^SIqVc=YRXyBna##VDE}GdVz}Tjdij_X^VZ+hM zbuJ2)zUwGki{m#g0kZrhwi?GHTrew*HoVMo2nKU;kVjvEtxP(o5+sY3nGOe)8$Q;r z)WzVqa2WhD*C`Vf^W=6}^i@eNSXoBj`;lI2b=BduhM!@FQoCTNA3gIki&ztzi-K#< z{lW_LCKy^qlYgT(EpoxqGJ5UrY&vvu7fdaqFaN<#k~96TRcPkpKiMA`i|cX}pZ<%D z!>=E9QM~hqU$8?+dF-Ni=hAbm1FLl3g|Ow(7T@@wHbLI%A0O04$m;LM2bCh19Y3&@|Nev@WTq#B>_(emMBl2r6zAt| z#(C}Mly@j>vLEmXr`1&>V?jLX7lR2R%QqiIt(oRi6Ok^QDB zf;#~-CDd^zktKyaKmOX z`pW{27KfXn5oaum-$Z&tkDp(|U>tEIVu8Y@h(`pcj_M&>KDpz>`OJD?f zh=*lwkS}fgZ^Yy#l$w&t-OR+g38WrN@Rm5j+v-iBKjp@kwh!WBoO7IUXCl5Vmq{jh|)hY5C*U1{58+-An&CcD!7 zrQB1D-c5F;vrD;6Ot_ouN-fK{?eLen$=#3|#T{qz-LNZdpTWI~9-e?6cyk8#36tq2 zv(jVH+%cxzO=hLenVgG>aZ}Xj6|*=*g!Z_NkZ+jHb&V&_2$pS>nem|}&iIH?X0Yft z>weRf;`CaGW(sowmiAZWzshIHHezO0sz;`|38j|iad+c$2&K;Eai^Fwq{O*pm7%E4yq2K^Ylm*p178Hbzr$4QR+iAiu1|9F+>_Mumaf2YIg%n1IV1vf&%{fP zCvx|}FX1Kz(wvN6I>Aj0M4Q6h!mM=@1Gy`O8@}j*`A%kTGCgCO98_W4ZTQ)chqL8h z=`Pi-(Hub}RS2_A^#vx!{mAF{r@T-09XesZdPL_YOZ)2;-1Q9O&V^W3iK$TU1{R8E zE4iH(;<^B$Q!i9_zUts-k^V59}U8>QuB)XDeMC6s&7!+DEAd;XksHeA;!H5;(nzGmfdI2gr4b}2 z&8wx{?bu#eh*y+xmCP!)72@+{+)Ad_T?lb%Iah;uTL5vS9P{>4cRs|h3T{t`UbzaM zEU#RduS`%*ga6*EWJa}J+*G-tPx+?upmL{jld=~XOgRefz39mbzQ|{mz00cqCsx;< zkRG4frxfk)vYG$!V@YJj-^+!Hcj59!u^fzMRMW@(X_y}(drW3JYnm7|WPH@%HE{ZS zVAHHZuB?+dn^nwgSG}P8NtvWrEnoNVc)wuWbnFHMh}G9|xarspcombb=gu-VH$@gq z-h|SnZUWcyo46M-bvq$GdIP3zxf|FjcHGFlkG>^4e%?*!+gLZ*@f9~?hUK|iA?~{w zAeQfLfw<-t>}N~d%@A{M<(`8r-rWSbcQq$sp_5<8RE>om>u!K}uo_K7y6Yj<)nE>! zxXCZX)N%*0KY*}^hikDvgt%)^dUGA7K)$;g;;eeS;}SQq6>mMD^kVL`!<0@XKIlfk zniHp6({(Gf*J<{vooWkH4&(1F$S80?b{G>H%2baBz$EsFoS$j%0G7nYJGgI{HV;rq zwB5-$nbjTwrDb<+#x30y$<3X_h2&G+yHp- zihI$cHaAWthzUD6%J<_2z>BYJ;Lb2LZs5DPYlQm}UqcR>Yp=rBe4 zixC^Se=*VS0hD?-Vi)an1KY*hui-pQr5n&LUVAO~!Nq$*j?0kPlM8A$-fZ~LFi}5S zw@k}vveox9M^%5RmMAL~*T{E@meq0FHrv$DBRyeweA{k(LyadCV#g!+ErMq<#F9t3 zxADCp5NAJz?_KI4P};f&gU5Kx7!c!=oC>(_ zA?ONuigO_ujtAHUm| zoKd`0eo#^vpTQFF#Ng3~M=>>4lvHeAK0qco^$R9=v^`1*0PCvro4rGNV65a9beMC|F zJkwF`+{Jy*414H!#JT%{sJv$?#LpkV`&v8^5cfXFU0|kppcIeZ^AL6v{7w)K@r8%E z_b#5u|5|1)2s#sFHZC?4=>?>$-G$JsA*3fchZ71m#UlA_vad10vFu_zgd;_-VON~v zAsqSRHSQrM*prIJA9|gLV}gf(G6=7`}s*MmpD&6nt1PRE*1wa$~{COguUoUn+Fs^jM<0oUFQLV5P#pt{fWgz1mcgU zvAAp=5D4*`{iu-ZS%8+GIe^*T=9!P?Mh6Nii#$XQ@;~P=sq`LV2R9xC%UkLpb`X9H3q<81c5vnx5bg@kay+;CCGImO z!$Uf9=F8ks{IsPgRlg!l?#m#4^9m;SfQKUgpF7U|h&8wv;{Fp@gJ~Wj2isre4qfaO zEca44=f4e_V{Ag?&ZzEBU6{5NJKeA9Wz2}`5oJKRTu~}tFD-eH`H>V4?V3>+@byI= z?3&`43*dZB9;kTYo-r)OI1gd^9Zo=Yf`>4@z=c^+=7D}E{^bHMU*sW7|G*6(Pw^0@ zZ}p(D6c1rK>*a9CPm+f~J@b^*mjvp+o|5_!in93NztEQ{o-&kfI*sQzPbo?>-{syy zM-Zk5zlV-kV$iQunc z=6lr;N2c-!74(vyIc^#cdgoO^JTr~IkuiCd5Sym+H#4l4fbrMq{F_XWSB}!xBKe!p z0tGHqUcx^D6~jZw_<#>gF4sfInCVAf&+%Ld(Gb8cr1g;IdmzAFi|ud?#HHUu{aWrB zhWPyVSh-6*1dQu`z*3s+Az)ngBljQ^?QuZ-?nj{Ed=CNRO+Rsu0)hG=rvD5C3i0$o z{P<@uwjNI}#I9esZf3Hl2jVxsa9cs%I%V6HGP$x!DN|-DW0j%G6F6=-Gvr_-uaWDn zQSMdVg*-6}#WXp;;6L2cl211Lml-O`%)fb2e*q;gH@$9}7ql}-0oC>h0K5#hL5*pHF{1OC zCe>k;NtvQpCw~DqZ4w>F9dnDkm*A6xc^JhR-bjeX`TTv%Qtxz#d*|~nGD%+2YP%Qk z`U&^0Xj|_N;8yug& z|A;1t8yud9Ci1bD^5;JHG=dZ`FBxdk)IRD_q zaFD%ZH*X871KQuN{|m8p@8SZUSG9|Ae)Mm38S^Mmze;%;m+;&!|5#oq+l%fRR*!^w z3F(fe^V=||NoA^9ggKq!C6(#?BK{x~*he*I}@)9_L8B#WEQ`fiSrUEIX{cv!$f#VPrh?D zkKIb;1uGdnG>3=rXt{R=s=PRtM@nEX(UJ`@{2Lczy6iHu4OjL26|~4Wf@x;Zcj``Q z&%xCEpk}K2F6Jl`i3~+Y6z|A?lShloZ4X9BCg*G~sYxdbc-*PvwW7t_3o#9fyoC^3 zt^6sb&07F*8Owt+d-Ea2ar|e@pqDi42|Vv$BE1BnH}d>FOu3gpG*;koJB61(w9&#} z$uM5R(DN34BNOc<4DE{NcQGMe!qCYH{8mg$!q6uY_zReHgrRpPV$y|smqJWU!meiV zUIy`W68{utGilh@Bx5!wdr860P2mrqUkF40Nf{31sKku`(>))e!x5{2aTNK=#2E{27R3MjcrRak`g4cGczl4$MMQod3EUvoO|6 zAUnDW%X6BSK(^ru{x0xVFHERn#d7`~Y{LYy^E0pwmwGEu`g{fk!{{wX>6T2)X``1w zc19M&30_j1_h#|8Vh)u+%*w_bTIeN^{V1D%0u!VNEnJ_2jl9weJG5Al%YO(_fS8ac zi9E!he26t(4&wQI{)_ROuw-wOuC+9%AG+3`hD3d>PShUJs&H59RZO4i38hb|!aZ2G z+;`xE}dc+>Rz<^WMb#iu*&(s00M4NnS$jd5!2)qt}6v`=XII$e9IRf^BaT{}_guVEdkC{!lt~ z%{A$du z)g=k)t3rIx+eT;I#luGs<(mb0@!dSA7VE<%DX!XqZk_Cl#@iO&!{5%t_-Knfeht0~zfR7M0WGCMTkr4GJ5(j;RsLyush$rQI~$KHpHkkb z%oNi``2Wo-thT3G($ek|7b^L=@$vC#5B`snE;Zhg_Q3y^TGG>Ysl*QOB&BKfe^aNd zjeMAR>}vjMk-e3lJX*Dp*Zj8!uj>~6P0@BMf8eq(Im%VjTLJhMHb@)1N#dkhO}*hdg?|6}|RhG!APOCHDY z#QO*$4m{59Wq4m2=1|iU{7GiHk02s_4=|*`mx9ti_VC{@AwD7$-#iJJQu~NdtbK}y z{X5o2jN*#hu$M>sh*6j}W0pC5#3-KLjQO<4M~otN3n*Nij~K;;EwpZY#3=6CigmNd zM~tHAc2t<}BSK-?hW#$aM}*?}ZNxr&L?{}zLyYthp_nKFVuyTW<#<};e?bdGD4x6n zEu{E}P_*93ACOpQ7)*%f4%1tv{Gg4-XAHmM%ALYUT z!7kdbqdsgKCT-~)jB2wx7w^artl&GHes_~1dbFwIBg;>w3WEEoHTTughI ze-14Wx%l{Dw6NT_9O6T}`NN1+_7S^ie1u<*E+uv`_6WMvjd7g=Z*9Z@;~ ztJ5OmCZox4t^PHnY-`b8(DrDaP`}N5jfCYzummqsJgiX5V`W`np^MZbX}%UTbLSiQ zmU18IiKTDy@8kD1p>*L}_pHu7K!z8e7vk-ztbT`?1I9 zeMCaO+K=&LeWdAk9l%bx$VVh(*+EPimCp|GkAqkzgT5+=R~^FdS?D7U^5-EihDoI1T8jp8XnN!jEw$| zYrLAvkX7;kF4<{PzNd^(TqQpWKV<10&_R4~or;m4KnGdsBOnU<6ayXNBOv~Z_W76s)Ao}tc zR$rQrXv&tCFhaRLqAA?VAP6Boaz}^0Lhuso15X)Uc$|m*EZ^6KDw!wn_4z&`DnYM8 zoaXC*_|dBv&sZPP6vu1W1LpbKAkKN6e}u{Q5luP$I{(soy>6H6VMV4483?*{m#YsN z?$v)~-ekC0S*v_qy;QqEyV-mfbG7z;#;ChZEvQ~oe4;v|d&%^oB9nU+*|gsLxcWnLqq5lW zz2aHrdJArLDo|}Rs?5Q<9}VYptm04ArP`mBeR?&n(~L#N1|LGby}J3@`_>ChO}AK4r#^x7SlbP2byM^)IxRxO4a^1YD`q)TWbM~(P+p>V!MfVU#R&GnHR3qe4yWnln7ImPF19GH>E{DqC+G`K&k}Z ze3E%cnV}D3Zf8C+r0IV!mtRbgaFza;!iAg%J;+VWfN4V4+T+^A_{#|790 zn$Pjeq^RV^_Ti$zveW`cu3df|g^D%SWUz%PsY$uL+4CGYTg`{Yl~*Mf^BF}2-4^Be zGlLn~Lv~wJWksf33cGBqtBdXX~sfb%VMUNPmE@sjA3m8S04d>q^oNOHcME)b{37q*ghsTIuw3V@qalcU5Oe zeOrZ=mulGa5^?-GtH+Y7m7+ZxTM`MCn@ZDnCsF_#=Hr50!` zZ4#>3(vB7HaE?I`jIhJqGF2c4L#(TAq>JU6|QpkRnqXt1GQt z)m&S3M}xs2p8u9lo8Dd4-@*&2t%>!5ztmu5OKWC# zo1?I)Gblvtq}kV2+B?`j#<}gu)=VRM0R~kyw)6SDKSQVVb!A zJie`L*b!gKH}|FFO&A}C*7(An(gtfqc}0?RNWZbJp&&hNpr)v-X~GIodx4+3zM;3i zw=1zKH!p9Z6z$sBIMmlwUs%xG&@^F}^qxAtEWNbc8lRIB93mBz@Ok;Q-R;A5La0|N zu(#%?rKV;VXBCD>;joR>MZG!c`Dy7D{G{>mFBcM8yE4ixDczGM87Kc&%>R0*AmeQ$ z@fGRK)ji#bVRNN|ipt8tuKb#wf$lIV`n9pLt+-^Ml}&8mL-kUP2HbMX<@Hyj#ZMof zhqavm2bl-Gh#r_NK7SQbAu+5m%5>Yw1ji8()ZGx|bin5UjD7 zAI|T}8YmwwUsx$_^73i6Zb9hmZ56Ty^A-$9kGHecrA4Wwj-;;n)cDleUTtyIul(3@OrPfe+*oGTqWX)JM6w6+W+vH6|R4N{E~TUQmbl%!S((bZ!7 zIZVJ4n0wQ!+IqO&j-i5zoGJUIdUdIZz1H@U^0tI2yTtpj6`5;UM|o>V`l0c*Gg`NxM7v7kFr_pR~L3zxl`1 zBUk##da(Bt{|CeR$$GH&Um$O#ezG2{KMjst?k7)b`MaQ)aelHMT>2gu&JsUa559O0 zG|l2C>%q?VVSSn4C+k7+2V^Spll9=64?x~B{bW2C{t!l+rG7FVEc*!LYqlT8gY9Sd z2bm|GyY**W!RyAPIpc>1(^><)VDI7$gY;7 zT&=iY{)WtR@j|N@KdC35>xJD+r60ycR94=?O!myd@BwZjiDtaz)RcQbW8y1@L!=P zNtti_9?UGqPs)7g4>0tU`pF6V*$?QwRem^O#e+ZcXYuW%%y0jRGz>o}^A$fs!&u}e zW&Vesi9q^Encw#dx;Ms8%6!eQP|522lh8uYZ~VDXJ+o7GgW@NHE?IX8vs!P_=jgPm zzeH_UYP^_!bate8>8Xq;QTSr%9C7CaA#9bdR%g{u)cuBlwx5`rb?1=_`W4+i-JMK6 z6Q{dU6Qq6!s>XXbjJ6Fqrkb_I+B75?HE5%>dd(N0QBNSNRD;IGJgSL-F87i8FcYHg zQcq!CWgN^-W|0^*QHW5fT4i%E9cRITArBte0?*hbM0Py8vjh_;&>r>XF>XO5l> z7Ge|;Q&cmjE1I)&ZPu>b(&lmpCuElvXYeI4Wn$431abY3dY_h_o}R``Qq7#GXzr~N zYH_BZv9Qy&VA^VJ{6y7Ev%I0KB(-5EA-|@&AYP$W%JlSRnQXdh=4{avCWLFI|5n7z z95INIp+cZI8?f`Ay7|JZSTm$m7B3L?W2KQ+sf!ghV_uO# z;@(){4rahl28l%r1>|?|lR;wtLg8*^mY)m~#c{&@OqV|m;xBPRCllr;gGB44!Zu_z z@uwg|#5=-1W{#f>5*y_L{A_+QNGwzc*D)b}vPV3l5Vm5Hl08CDVzCAL$sX~WQn(H6 zl0D)UmC%9T0DHuCMt~{IPv(e02ERt>ha-Q~kGoM3P3tFn#LsHsRwmR>_J|ua!Zz$J zWRIAs6`%t8$sTb|i*JkblY_&d6JXr%lRY9vFFbv5m$;i^H=2=PGTE4H*s6aMaZF3J zH)#&3$J9n9PW7PjImHRNQ!YRo3~fiioS$qDcP|p2!pbMx1HTw6zrs&u>l=ThMs#_lIGcFZ#2BZTDmS;)JhgfmROpNtRdW?+Dd z{p8pvh!$|Ek)Lc2ku!zInPh)H#FI0H1E@gJ0oTkzg=|0B9_+J)m$6He?P10o;T~qK zKN}TZnj`#<7RdH+Y_5O}TjnR@LuZVzo=NwU@gWc+JcC`DJR48W6W)`$WReV5E=1uR zz|o)x<9tIl!i%>-LEeR{na#{H)k6r(dr1DdJVm;8VI_h*{A4D$t`I{x+fQbK1gr2M zHf}N#d~6ktF{}M#CfLaexYETBE5YbhoB)S(sJ|LD?%^?Ntba9XqzJ+r>Ji>g&Wb}8 z;Uor=>;%`vV=&eJ%kf}tf`F*v20s}JghX^}v3~``v?O#yncogEC|P)qsqvGu;+tdv z7ybDwA-<6!IGJca848|F72vt`lc8W$8WvTYp9}?tbWDwveu@ZqAzk?RVo1}2GV?0a z3%DM9DPkNRkYXINv`^u3qdmBvxm#JSu*=sX?c_3e_e%YPcvfKtOxXRfHH&BL7*nNx z0KfXs3YxD*KVqjwUsx%?1a0#7L4NacAqaP)_z@I0`spfR7Mu!gehQ0Qo`Iih@{^W- zX(rW~;3qAAc^2k+il4Once4aUKKMz?zbPAHlb-?va&iQm0P&NSZ^;#oqIX(R`a>>y zC(ciHpV#y7nfd-^h{O4qXpw%h`{Wd0#zgwb?(=Pdu;bz+u*pn&VOfb~qIrP{5H$_LBTR0<3~_&h za2zi&q3+s7OqgkbAT-g~B!HQ~LXGmkT(q~N8~ufN0u*KH)GLCXdTNKcPVYv2vry0|Ja@9f2r3SLhIM z0c-#?OQLDtnYj`nPM-!P88;X{(!2E2bRF8W+PTs#^{L>H zAF3uQ>lMco(efBnmi|Us0_0t8d=ztgAV8aN>0`o=%+vsF!rbG+T})Jf_F(7Z0=)PE z+JkR-0y}4BU^&F}J=iWo0)*6m?Ey+=2MDRRJ&8#?CqPKO@+kqn{aFEm>Q^@i4`9Fu zsyjx6JJAIM)rPCk1wjFV>Z4Z)h=~ahRNJn`R>uZX@q7Nf8uOzmK)!>wHe&c^1qiA~ zuR&v$073PtYk_UE0tD3)uS4nb073OL*I^iv0tD4-t_O3N6(Fci*d*M)Uaz=D)~nda zAld4t#{0|%gSepi=1)u`$US_SDNJwIyYI!h>Qja$ZIbP z>NNJ4?=fGawir&SBZ9($R7St*S#z4vZnhg%nP(uR>U-1u#zV+p^p>hmRiav~nx)dh zC-kveVLD@a&bWS_(a4-*jxoEKO-wIS%%n1Am0xvA`?dCj_Hpg?+74}nb~y~0lW?!? zCgll3f^vr9R%4doSwkK!TS!;R6%WJw`-$d+<|)mc;H}k~JWY~jhDL=xet^eky;ys&% zu+be`geZB4#BRI$dL13Y`XP|kYx-EUTc;ybXb?SDZKpv(I1}Rpw4mTDRHwjtQb#)eP7FrQc?hqnJ z`R#&HK36j+QQJ_}%rHe?QCfY^fMu|yH?g$%-1T?Glxh_+o%9)EwJW{bP;6&_UuT_@9z{(6^?D;KBUBSegU z?0-}Foat_H^<*Jb{B5%^XL5*Y<|IY)KphvK%MaG|c5&Gm;S0svcL?d?k0C-%M3`#k z6h&)mQ%*rzWs|kHC?l&hYA{9a1y%nta^x1(Y}L$U@z_owM7(*Y&>JpQ@5oQ9vLp?c zq?VNn9Z^}OmFZuL)-7l;YKss?{|Qkhq#qs^;?rLgSL_g?#TA={1)_6@U=bHh7I0nZ zS@rCTfmWbag}6`nL{N;e$8f*?XWS>;t-TRbhOFO%j+b9RZbv4 zB&X(C;XN?8fE~+j(R0E&lB*!U@Eq8jDo_b=+4BM%@&TebC!Pn>oEspTBfKCyjGcsN z&aW?ECrJsELOl8+Hc(rD0w0GC1GQ5EL}u9|0(=y)fg;FH+y~Mb8L&ZIu?y&16CgJG z$1cFx$^Zpre0jg{2@@S4PukH3z^dj3Scvrx;&p7miVEh3u+=043Q_vmL)exg0z_uF zK8($3QGm#-WjA!`%s?JQ_ik)`2>~LrPd_5;9d~lcC&OE=|(}2_}Cgg*BT0SP9fED;Lbr`Xz$6p6pWCyy@;>I`d-3b9AQPwx{ zL!tv9QQP0bZ=Mw(4)xGm*ymycJVRDej-UHhPC7z0G2E`3@+1Vn&X@nI580b<46e&J@km{{>=`|)ODpcdlQ z2c!x$5Q7h*!h`^k;s*|b>6ruMJ4-nv+=8EW1;p15NdrQh*fEL$$qZZ$G5i^HoFcFi z;@M|}4TGBU=}U0X(Fx|#seT0si&|8-D?fv8a8UlXd@*!} ze(^gjftUV98{XuOAEAXgn51MrcDVMeMrRs%5h2o%%CV^siIe}qA5 z_OS|p5C0LSWpj>|0o?W{$SnP_5)}EP&WDNZ$3Wpmk3Q-=LY?SSHC@*PFLM1}CV{go z?@K)5JH-n`TZ9(~o&;ObG<=jmS)v=9e=hx0C5v#WX`0m%v2(hI; z2SCd=&dr3Vt_JXiZ=B~6+v_R-yT5gABe->}KwkDOG;nTR0pQ&4oTn3;>sW#O^>@w? zZu~>d;bcx zx4DkhN5_j)wGjjO=8IId5dpaSB`95P9Zv`>FFQ}4FA@?>J^^A0K5o89@Urj@xVHSD z0DZqZ za9)B~X8DPCzVZ*~rCO$P>g;97&_y3R{Z`!O<~L=Un$HJq`6k&y={3@mBnRN)(EV_0 zT~#zqcnNHezENP{|AybnyNl;1o*_Kk_qjE03tVnVvg_;|oQ}Mh)z$PoZi_SKL9yYE zaEXG95Zmf{054FGTcEfH0Q^WnhKNYLA3&Ru+)fnhSfRXCNfroJ9V?WJROAE^s$+%n zIu#j!(#8rUS50mO5G#~%3~sAqh4N7~@Xge*KDlfTnIe*PtWTmj}HWypHwBGwRM5QLAHp@`Jjw0x8x2ICPwu zW1m74<@!kgj(rBkAweC_B949rO|M+Xvxpu4c8(G|>v$G%?B5U@w~i+f#m}L&?5HmR z@bk}|V~~o)0G7XiR21rq0Q~D0&U^@)|5Ad_nwl>cd?tMp9_>3M|bMuYD&CNA~UTec7$g)+#xgjPvP zc7pV%_!jiQ$a>Xc;cUq>lKb)71fVMK5S}dg&uazvNu|1Q8GcepxaX2daswwT_}lNM zb3_7ke4T2>oMIv7E<5|mna&*lOS}S5EV^|)g|;?xn|J2R=q(A^vH{*B%7-lNhIj`@ zhe<};HSRW_PZt?$oBu2orWPRG$*y2*WJn>VK9sVC4$|lJkLj1bg7yf>6Q#w9JKL5C zcMo~G=AVjg5tA)_oQ@tAlk=s;sv|Vu8`Ee!ey$eP#pDiYv6iu$f@WiH zD7IiZ+94rRz-YKH5pC;_lhqab(J={GmlQ@*y1~H#Z_KjtMs!q4wxCaCxD3Z}c*ybDVGp36Kygnr( zm!cPBejr1Sk0ta zGHT9yM|;zjT1Ur|$k$A2(L2rL^i>7BPw(~T`vaq$)Ky)@lC8_v=SXQyo%5ccm=_Jn zU?LPP=0@Z*(T&aI5?8UuI$8;hgob0B>v5OR+Ei|8&cnklr^{6Eo`(iX-UX)uBXG~{ zcHwd11wxMCEEtlX=2zjl^?P}00#4I%PvdN68{xLw^-XZ`$}U~I1{y8aAL7fQ(MIc7 ze|U5`^b4$d6u?z0$O+H{>sW!f4Pat=J>1-MXXi;I99x}R-wv>8B?+gp_{B7G6XCC8g)=an93%$oSl_&D zI_ZJ0Sl<-PfUm(i);Gg5NIx_%tZyEgL5>r=I@UK&K7l+FS~k`eo zLCmOQee>d(yh$WsY^ z9jlvLXOU+STkBQ;-=9Uo+1WZ)H;uC)HensBn+Io;=Rkt6x~Y`|fwYd*&7aH3^SpGo z?PzK~t9iccAvojpu`~y}_+sK0#9PEoqDhfNcsV=_^)%c){#V!vBINDj%^-eGtl>Ta z$CLjCQ~x7ysqUk&#s94)2dDwf$Fb6650MuT@#9!&Iuasd#14304K{#pf=m$~$4b+~ zo5)FmbDRU9doy`DfNTI?+6rCIwg(zZmtTUZ44>BcM$2!wL z=0Ub5>R4xT%!j^SRL45gUGqt-bYPuHzW{36P#tt8^qU1_6e`LnfU<>T7Q`t6II)lt z2W!_~FQmj70kE(L#3|K5yGDOrM2-@YI##a-7L(^eeZ}ha^NY#T0L1FGe+g9AQ|nm0 zeq{-H3RFw1UWb-KwcK9E+V$g0L59tBtX-e9492|e^ zHE?sTbdg|<^i3ICI9vKO+%~yFdQ{rY`z!x1a7gb(xYV&s{7(2TaSi)J$^FFXY$Qz* z1y}~V6_yg_iryjC!|QrcVx{z#!p*FIv75PS(NgZ00y*~|+?Tk2!gn{aA7{NTy$^11 zJcC;lJtx`;Z}fc%w>gs1iE-`**opK$cNIs+y91u>ld$h%earcZ-N(_um5z^b{vhRW ze#5zxa~7w>ZeyR#zD{c7KTL=v&xkg`bAC3-&HR1BJ;DPpdIZ6=_HW4*(tv0`?`ML~ zVCVGtysP;N_NzP*SRK~EEAa5Ti|{tVL&7ZY5#h=F-@=|IftPRRDf#cgb1<#agB&++ z1Xg{o5=_9&kr}~q-bs=a+XFXm@_3)aGdLFspO>B|n#FojbevG}*Aidwx56H$(}WKS zZkO!f=LLIt+XOlOuLN7rp*C{+nn+0aDW0cuH#SV;*|`5pCyOO>q66;A^EX|HZ#ztr zV~(-jnrkc@ETMn3k@UiN+L?@1VkVn8)86zjn%hp&8-vmbe<@_t*Svj!rjJpqojjM? zVFQn=bm*#{-tt(PH4S~!PR{S3;))Lp#f!P|RQotJ<3{%+#Te()5HX0Zv`X+z0yHyC8WmCKG2;Vs@Pc@(40=PimvS>)9`qNCa&u& zI%{^enNHnUI51wcrN~a!?Pz5enU*B&sc}c7Wc9h(AERr!$iV@MFs1MAaHrd?R>$lo zsSn{o&D|Yy_(rs|sU`pPP=CVa%H*|<&RGvr6p6lm^Kh_YE0$-iLtX31CFo2oIh~A; z!A+ReY_eFGafs%mH5tsK*tMt)_iHuQK1#=e$S zsjf_PH0ClmeG=;S&UCESku`d%`LR(ErF5iIrU9*SaL8}S34V>P(vq_#;@#tkxF^^% z%-cx`80^w}+RP(WdyTh&`jAe9+B0LRvNcEKs1LD%k#t8PZ+o~C)Q5mR)^GC`jNLJ= zkosWJYQ4RqPG7l~OINg^LH)Qv7mnoGIUi9J!KfiL*43-+U6kTb8zR!NiYqZx8cI59 z9BQ{unlyE|!{*vZCeUj{H?M_!FyvxB(xtD2wI@Cc@6f`R;9xcCvbBv`EuAtrfCD-6 zm$jhfTmof*-UCRIsq;Q5)I^*)MTA zMs0?$-|ZReeH)(61!>OcB|Fex*N`*NqrK!xx_!8N#sYz0E|T{wjv?O3|7lGT`#^iX zJDutEFMSr>kCPjSk=Cp^9PZC7z6xdjOBl+Hq*Fa5Z_vE-U3BZoK$Ub88sF%^Bw=|&QV%~bhJuU=^>7Z`}^O&WBHu}>&7Y6rrk$?F{~&3U1z>CU~1 z6(6t+BH`CfLBRo*h~NBp^X<+55F8L35{`(rH&4p`F8UA_ktEI9=8EJG%?q2S$-Wjn zEPFxr08AEtE;~~;BHJu8$vS0o1@EGhHkY-mOse(6-9y?^1&L=RiYg-GQfXQB}c{Cma>{~oo$zl$;Scl>QG{Nw8MOH1f$ zGr0&|Z-$QQYm9i;OwL{^KF}n_qXYb@xC<7r$D*!52lVpL;B`i~xqr~+9dzq^uSE+j zqz(Pu3E|GPkR&|wToo#a}ci}iK$mEX_$pD~fs(9fOZiD(PpIYu@Y-TD-7CT+%LNM|=Y z%noDki!$l{j%hb}HlGowL=MiyLe4^+N zq9wv#!IJ1Rf<^qt_*vf9ylZ(5;@`vp!UFTQX$0Xpj_o|b{Gf~Q9>;c`oAZNi0I{7X zM3NZ9cAi^l5Zifp@O~GOJC5xz6Dj*W`{43b;3=GJ}VLOuU zz_og4I64k%8GKp7VxzXx=GWlMDmHh{t|t=chJ?SBv+Idr^aKsW(T6lJ1ga&4ilJ3B z5JgTJh@cS~2%~)fOze7MJJGbDY1vrZAIQ{#j!0t6;q-2E>pfm*KVJO+#I%i~819Hf zN#j75t1CH$Vk<>aH5mdu?Lmz-Q2Q~(qFqmP0>y%PWA;?LJ(qQuwYHQa(%mtDR;2vX zAPsG3UCO^0fF)>%0v=j`E}(!1z36u|uo%5g1M?A)#>5ZG(Mk%qdnWQyz+DEk1AvKL zcj+jJ%mtsWN1t&P_0=CsG-uac8!3u}-fby{Yd-Bj?-Ys+6h$FTMuz-h!)R`B3dMSg zB0MtcOxAp%OuUVznD`;{?pjBYc!OQVKG%4r&mEq^WGzJzG(|c)EQNku);xt`4MkBK zX{(m>=|o@FH-+M4nj$zzqQ-Ls2+WW@pXVQyI=pO-whYm{{gcN1O>$6<##+PhrwUF)@sE4*N_IcSS!nHMp`g zE$i#Z)tupRr?cHSg+~WPQ5|xc$K8SapyS7)PC%`_tDPbV4?9Ma4rA1qiBDnDMp5*` ze&w=3(~+o56+}Z*bmu}NHfu_6DNfQ zWI09R*JU)${-`-vo0^(s6opY=7}s0-O?jhk3Xi1}MWo~$D~uFfy+hh56ibMv2`Igo zDbv+HnD6TDFHIp?OfdO`%vsQH+nayTje1$#i*S3dKT-V$fNz_`6MH zrD9`HOi=yST?;6ZT-jtRcN@b=|I~&xpQ0%03mv9(tRoOGF__Ri=1~+e(&Hbs4(URU zsr|@Yio)7CTrDSk6@SOL!#VNe4)m^8io_7Hg*+YQA%CQy>52GfHJt&=j2wk@NSNcl z#JgMiGEc(&r}$~&=b~QzbmBSjCA=ulAlb=J@U9R&E<1<6N^rL5Aa5D(xOlzf1zAe6 zUAltU!M}%f74fmS#-8{!x58a3zFi_@-6uSceFJyvZfo;w-f6<` zB#ZfO1}IFiWpt>OIHh9*@IU7hE(e0 zk2P}8wfo}wI2q5Fd`kZmWYN>(8!Ov-yW&bI&2HK+U9;dirTeaes1(c46~D&r40Jzm zXDipEbvKa8g~~u9qrOVnm5UeJ`a3Pk$7x34zhSxHDtX|*m)}Z%JbW0qi_kZ}!rY!j zlh={TR^`tqTwmO-8|pTf#)nG-gPxI?)>7!O_sF?uB^E_F9c{Z2h!uAH ztT|H(MV}ir1gwKSHoae&Lh@T6!{tOHH)F*!peL*2xwedQ7R_zq36Sj%Xg8I&aCPr=(cY>hqcO_GX!Su{4MmManeGT^T82Smn3M|}k@5bFu3cY@cblDZ0fj`TKH_TO zEB``!-a1IOER@p~lp(UimJ8T?UBQu%K`x;wZ+nPr(Wz!PMljmho$a!FG>KYSKCKZM z4Qn%Tr>47od|2L0v-#*sb_-iBLvKP}El?O6Lu6vcK&IQHj}_u_e9lk4Pj@2h@^Vd+ z>c*@3axm`Kl^lv8G#9E4TX_dMAIgv|pMeTgQ5aDxR3E(V|C5 zH#Jna5?6#18!3(9fzhbT3h$Owm5V4Odh-ewP<}jxa(L8V&}o8tZ%Y0VP3eNl#g@-P z_d~_y%UkG=g{PoU<{>H0CFPgsHYmuTa!SoF4fYt5wJ}p-v?8bL9HZp=hoWQEkbfxU z?NENxD2J}ot#yoQswGQW`87&I(`=Q?rw~O0Nt;L4XLb%LPeNZ)?N@(q2*b$w&bVO>Q&7iEE1r=)ud zMvfc8KC(8F><>q}6wfzCH&E0&YkqAu5=kh}q>$*oCtb667t!#WSCB1y`Fz@Q>wYZp zyhaxNqfYl&F&p(nEvgpu6xF!TK^ADZeC1hm$PF=I`8ExchsjxMPHto}kO?{6m7cWU zlTpzfH!}r;#r~0K#jeZtD}IHX(EGG1b~SR)8wV}Hj+85A=~imcRn+LnN2fq_U@LiO z4^)o{#Tg>e!KTw$%bG-c*=KPchBc5$qRRU{?5~W${>pp!p9;vx^N zCOyQ-$`12jOA0X;P86*c%pf@2_r#mHk8y8mc60Y|i`+rk39@szTCS4wt?)d~Tf}WV zf%G%}a{iV4mjqYKj>x`}uHcYFsJTlp@qlQQcnU73dA|94@p^Vbe0y_V}T47g=|+u3(+UiV8bf2FabA4#{Fp3;PT9YsAHZFWL8tx$IvxzayR} zIVycw(l5J4A{2ipep<3!a=ExB9g@n351Rkjd_Av^cbRaOFvmMZY7+Iref~RVi&WD6 z!tZ#Cgm3euqW49Q!*0}f1&<1DLNjjzTU!42q_|bNr!ikiN5<(K$+#WP5yfdpbvGU+ z%TtJYQZa8}JkeP$DK49W>_}NmUEXq+uU|2xgLIZlmO*dI-QK2GEJrWji(4<<=b<*_ znziQ9Ms7}vCvAbKVuNk+4;qn<@xk%ZSgJIbZI^$7PWe656y+3^!(quKoa3o5JQ=Q- zg|4^_*N|oC{@cM-97fVRarHW>!tG`q^knh};UN&59aSWQ5?QEJHWFK{`e3y`YOKUFip6wvb1uWW$tv2j@t-hK z{2Lv<52tPg{cYbn@U4WFK?3-S;qU1lceS)C4^kdRYFxoSOS)&Y5N$In|AjQbg)Kjd zzWf6g{M1Hbk1d+gc&Y_$aX@hv+J1;svXtn?J4h8!+QsM z_1T~)XNiUsA0RtKwpKwWgCUV=FgV~Z8i&0xv(nYb!Cn}0wYRrdYYweqCv17d`8^Ho zxdU945?u*3im&ugfzY#;yIR&NgN+n?ERFQFWE6~9H7K`US@PC@5kzw#sW7Dcxi?E{sK+-Eet7h)-@7(UAY06C>ln6CdD=AHK+%z%Fi2#>_MN&U`WTj!K6xo?#6wA z{4;d)l(G3}?wKyJbTA%@h9j0iUo<3t4;{s+R-Dkt#FZ_0DsJsqn~#(~jjXsMk-v^e zoX?6V`VR8FRe7i}kUQUB3XKfde4ZZVHnbBsFH|mXByw2u#&{}c@JIE^B@_}}`3NXx zDlW=H*TYxrr9aA^z(ezMjls#9x3kk6$&md8WgOjxJ1yl9+7A_{RsL`zF+8l-R&ko_ z-4>_f7IZlX#8zxXAL9N=c@-VaflKk^^?tMpCsBDXvO(2ZsF;#8dw09fG#vD{=QPUi z+j;mBX#01e5Uvr*4w~C{e}a@KuR$qjajnW+qdb;wtFd<^pJ?;jlux6lsF2^+rKey% z!&d$oJr1>zul$cfmBcM;%1qxeVkwQf(spmQLpgOYaSU6->BvY=)vertHbGj~s-{dT z-OlkIQz~1knTM6HPLa}J7%XYW-0exf@)dLhCq;2{Bayu$ob$#amY$?VB|?)>Fma8l zR8uQyEojMGVWBcqQ+h?se{9;tGBknil9JhF8r~_Ae%?0GUePERUV23;tQ}w#M7)Xj zdsdV^oqa#&ThMJnpa(rg+y;l%K|2zjC(H?5U?Z9(_)=J*pPBBlD>%B$RlVu<*JbK1?;~8z5F_M&qg1SY`{_ zMdjS}=t|0Ep@XmBOn3ure+|1rbPs%AsGKreh}nAVR-e<;KNwehZ$dkD$Te%?{KoXf zOt43?J>02}4!}^1mxLK2#o$#!ep%UBh^pMvbIggQ*l%(yP5v^63FeVyg;#Av5^ zv{PC80f`>^rEA8VKmYK7wpI>x7Q2UR)}C&Aui`?qA1X(ya>{5Ga1>L4LI|=)D}M)F z_E#tY#XA(IOW(n2++9crdD5zw(mM_Hn@NWwnCcDL6(RHhR06hgE}9F))vAa!isI|; zY8&kuGe>f6RfE#>|ZT~8I^ zVKhnkA3!(Z%CGzbI_+8PDo~!nSJ5G=F&sr#;O~ldv5GOm67^tXK%!OSsF!}opYYSGD$QyxY!2EExt-q=^uw`Y}85*)M!qRAdlRud{H zeoeEv`61ky{vMqN@w6%~nZm9!Y8db9)b)m3icgRWh}ep8^d;nLQ1NslaUe=|o4gsa z$5E2sHwEb*Y%`S;8e4fxaqSeOZ#-`8>ME6c5{hQD4a%FX_!~L}+=WVaBXO)elFPY^ zmcHI$Wr0GXi8M~dZ_zxekJ*oIg92Zxe6um6FGTuNd2hFQETX(_3Np}L2zz=hdSgX# zCHjDB^%a`^hKFJ9MO#rAS?zBNlw1k2yU!St-`U75RMr(t;hv#%I;?mQt%AD6R-TJ& zRE0bneS%Y{JchoY>fFau0#}P>(mj|o>HCx=v;x-|WgR_6b*Nl)KW3(wKs#}_pgaX# zPIV7AA}bZiztJ9`gH4IF=*}$EDLLJNqFs-WvliUb7+bt2*Q?hg0@^}a{!cp8n-Hp1 z{>Mhjm@zh#FIh+2LowwS=$rf4P-PsAL}9Zf)E;Yh4f}jb679teMkPkCfpB~ky%7by z`7c~tS0X#^tW`3Uglt);L{m7~3|-Z1f2e3RC{LsX%l`~ac1qej#VCrwQO{sN6CJUR zniO<>LDQgpv??!XahikiE6Q5If(9t=GQ8Jwvi~_-qY7+?CI;scBp2e!<3ZM z(CZ*&tMZ0M;-Q#VR~{Mnl(c<{tB?kWTNQ>WMER`E7V%r+(VF55bd)MF36ep{@|8}C z80?lXQfzJv81fZD-5Slv@OZz%gmP2^yz~c^964Sk#jBJoymMnl({X$j+$%j*a-H}& z(buBILQ*i!zXtA_{G6E2wZU7V2jDgx{Px_V&AVK?UNMQATq{?eu%Ky|72WpRO-8ik zt1Zp!b}c%ZhJ*ow^GZ27-~8<@c_+H6EGf3u~T+pg_wM^}Y5oj`L?fBQc;=$Ra%Ai%+IY1zYX zZ#ogqX2<3ti!{9W|4hIDGyEBT1JbBs({S2#8A$uj|9AZBnBh;@VnY9f6BHo1t3A|-Rv!N!A=ffP;sQT( zeEW19a>jpZ?Dg;cbfHs%uVDs%$Ztfw?{8`5K#fJa7H^)3w)%(WqEp}hA1ObX$pE() z>EG#;Uv<`hQhxns|3m&>X81F(0RN`S?5ZwE`Obg;kC0ks$OTYl($DFTC*qWEhsyHh zKmLc{J@Q$K)57_dJIHwp&bL1%I2)|b%c-f-OJIrKh4wy^kWb9zz6Vp5 z^NEXPU%|xdHkduZvOHW>wXS(K!D;S-3C$m6=g2fLfxAX_7+$#=f_aoodI%;pFH23Z zqP_yw(vM1Bz>^)3PuMBGL^LYdDRha~i|2`N7rrfeAEs~T;mMxx5s6TA5HZXYG z1LO9-w8rgDC9VE(QtR{wUA7)o7dnq3q78)%B4c7SIMk=@HHB@e4zza?b8JW70Wn(z zHoB>**nfvZI~-71grFIPHGDv9GEb$qo;ymNp`5 zhLMpGf5qF`F{+{sPL9sF8NGdhYerCQq^R+SK%2?d;dNEO=3w_4tI<$GO)CHlBx8kD zt#1rj=y3(c9XZcvDW@Jl>(9ewPOJP34!LqiC7AXPXWDD(KD6QjmoliWviAHd5_2Mswa`)-!G}L^>kjVrPFzKG}$b7vnoKny9DdOv=wfhcAR;l%Ii) zQ0{K@6}SuKXEp}1^=EY!Q#laM8|CLw$V)H6wzqQ|3H5>Y)Ih`vx1ko~XQTWc%>5j6 zKDe#&(RM=?dsQLN0TY@Xev?(7%Vo`X0-EsT%$Ij%PBX6WRP;UDv0JmHmy|! z8UqjadPnnGI98z5s{D;ePodI35I6Q2#_cK}+H)r6G>DD@=T?=MCjOxn4BCfk!<{~3 zJRDRlMmee#ENUcTEN-Y4qJvZ`Sb$WNJ0HCc)wNYcFA_4EudUPA8R+Wn@eEnjER??m z#88W12Y^edQ}d`87{vY6oW5XnYlb2vwO|U;Vl9r6{%t(HIl2r{JKhS#21Li)xBum zjaW)8`jB#a&`w~_R(GTIl)npY0(YyL?j;yZN|ACb9<)0Qo-Q?Q>0}@i+Da)L&4z4U zDRny~69bux>T?A*X);vO>NZ+n=Q=E~1|6m1UX8YcyHLHVF{J5-6$175{l`^Q`cFca zK~ni@y8l3h^_bmqB>fHkNOuizBnN+7icSGawt5MYL5{Vm7dOU{ZmZ<V=I&DSz0JH)#SIT~@sSEr)2>>iOt{Ye8xi-9wPJLhq<0Qw~(3Bc0Z^HoHOZ zFI81^4}ms{abG?_v1L&DO?{=&etXEL)2sT?W7lA|Bgl3gcJt^SDm6JO5IWF}2bnD8 zagLH+zoSrS@Ali0(V(WFjfRKQ>I_;9A$98X6r$l^sjuKm>jtdqR3kE!GTVaTpi$pv zS10MXnyI)Fjg$<-o_ZK5v9zjnXdBL6)mrrJ)sXk9H8h8963Bbi$>=Tk*sAKKK03w{ z-I=g0)~C1R^5*fruI}E1*RIl{4fn(JQ%$cvF}lf^xlrpV#&W)BubM=g&cm7FM0VVd zsU1i|xps62cOq&VN>P3*+7JFsY6~6X4_*5B@Q^N+8}S6YtZH*3GM90Umm>MRRhLqm z@B~c4>T8l*F7ylD7mNv-`RDNG@NVO+@@)(*5&`(Dcgd?++)?2SxM1r&vcOFX06O#@ndA=h0b2S#8Rrr_fcCvlp23A9 zx^UI~-{D(^3(#qQCsW)U2cUoboy>AKvVq~2f51s~Zj=S!{twAv&WszIWNyhdqOXKn zewlcLJDt4+&E3A?ynUpAIAisRK=y}E$eUT*wwVAXkCC?mcmjZ`;}~2y1Hh+0C2wMJ zH%fX)<#$mh&#`rWxM9JdYBn@4X%@)- zA$weQqwIWHR^|W=a=P@G^m*wW(o3Wjsb8v<$|YY)UX>hzD*;ZGY?J6D^CcYdyW&U0 zzZRb>PKqt!6=EqoLi047_}M2aio9@#RtvoI@Url3;V*QYGeH*)#+vgmzC5a1o2qCFgOKyJ7P;T4Q#};oc4Iozp*I{fkSecAttrE^#UP zRJ(V=p4|m3Um_lN7ySJrZ8?iMJZ=g&JUN4ft=xSIMhh9}d|OxlSSabO)WWLWJAltV z;6o^Pj{|t~5*KV;+&u>1jRA-r;2OZ+VVJAhT?Kd#hB>O;6@ce0r9zegT)&hGSpqPG zzp8eR0(gswW>N(B2@C_10>HP?BqIPmMf1o5_yNr$2jIkJms|+aXDR8?m785Hz%m1v zjmxMw(*SN+M#Y%|aQ`Nnc@p4z0A2(VCa8?b`8)c?6M?KTmF$b?yQ;=y$8abEtcQX0 z8Ja^Jzz=~hWXKQ|$XJN@yP~Fu-p>r$3SDi&lGV zs@?cV%K}!cy))fC7_E)ybz>c#j&Sc#XL&fuQ|*THENF#|&g3lse@wIA44`BMRXsK} zGKl=JUIP+`sMs0&#|H*XV}YV2-47B6fsc3#owWggCx9oEgCEBPCA1J2_$UT(kIzvy z<&uH4hM|Y5b`JvO3Og_WS-k)^V;DGiFnkil%njfKe2zf&x+r1cE_aPx@3Xbpm})Y_ zMN)Aw&{jjvFcK*Y6jC6plL}lZIg47-Yw^`QjE!>BRJ$Dz&we^eJAnD1OCFV}cH0_5 zF?Oj+RlBW?XvSVriE6i{5gqYH-2=WtlDjch%_syWSRi9)1VQ+6b%{xOot#( z_^RD{fX@S|a9#}nd>BXo?1v~&+g8qOAvB&oDn4|TgVTZ=Asik;P6&<*0v{7vAY>%J zP;DPI55>FM4Q17CI3k2xt0+m}ED+k}pulwio(EqSs&?bUJquXD_F`I786U3bYK$Ed zkWe_;gLcq?;0O=;fCk~H4*CwlLy5wf9Hd%JfpGW+{lZRxaLNX4a#A3ira>RmU*Xsc z+Dp^I`51JN2H_kGdK|zBDM!(C3Tt{3`)l^=?EBaU*t^(K_5gb^n-3SgJ;u6`bv`T0 zaph(cULcy?vQSlu9MD@Hc8%+ zJSe$Za+V}6F-n$7L~y^zlj4KoJ>n6uOWZD=Df(3OSJA|sqRT|%qD`W;qB+9vgl`HD z!{Nm|3kMf`6|CWC-zs&dXd*Hm?m%LYbhj>@; zPUUUm>3H*b9C%&m5#raxIYfdm6DtS__g~znxVLckatmBHw}U&A^C{;=&L7~tt{t4s zoOPTzvmxm}{PCV|S_DJFB<`v2>2WFNPc~BpZBH2O!!dha3wHS*ri-dc8PJU^!Z|)E z1@HnIlmK`GfD4q9aMB;@Ng(8nlU~DkAX6H*8}+f?_O@EALp3P^!W9Ongk04m+&OjW zVv3UhzN!I);Cw2$UZ2p93%27?SfbvzS?<;_P6UClEYVf*? z(R?^RtnGm81NmV@17>K0$<-18FN|v7H7D}JR%<9VKA0@!I!1ab=33qw1l};v{TR)d z^gwhl_CdBWLNlghs!2Q=l3FUS@MxIBpmGwAhUaTtut$CpMng&#kE!Vk8aSmQ7Qv+C{2K7$bj-_UL;2LxxapFq#yqCSlzCG1}MB6D&juBl?67 z;=*I;yk1HeJeF>tK^RKW78=Ck=neo4s!13}f6U5Kig$FT9ihZH37G<8>yOdV;83|5 z@b;7GLC6#sZXr_;ylv3}g+~v#FX(v-+;Q@CQ zfFLYA;38MQt3}9DP0|A_%7HfyRhSx3SqzqzK-Jvtw)x!EFcc|_s30B#olpA;!{N?R z-2e-DNoe&v4&@#|94LO>Kk~UAe4I-llTGTv9Wfcspz$>0g zz}q&~VDEsxq;m~*#X{XxcLmBHkG0Rx0^qUsBN~LE7D?7pxd!7ZghvN}+XUnq46Q$A z*Z+ep0+I%!?T^vU{=we%QpuD}Mj;nr1pYCaVfTcD(StHWR>rnZNEqxPhAS=CVpVJs zhG2Mom&!Oi+ILfLCljHEP7nd4+dP23yt`pO+qHZnEPWf8FpGo8y<&$lnQ?#5-_D4yGsU!*3<=w4 zBowwmCgPEL*LsjkISB(b+-*~4R>W2r^X;jFrfb!&6w_km@vrW zzF{Ai0S(vQyIMeXpKNQSc3M;26`wYd^^(9^ z12P_%M~S-{z}7x`yjlhD8i4zO!%B+7z(99rTQn1kmm_0^zI3j)-)~JOfWt``Eo7j_ zJ(;$|V5o1v6jV*F07k3lQ<=0JKpTL4s>x*(ORu9~so3*{u5w5}?(Pb<`!p6qFR)xn zv1Fk8Q(Z-Gv^S@(WK@$&fRB})q)aXb_q+wW;UV+1OBdr->;47+aUfE zfYVzGsnpE?@LM{r=>RG~nc1kCoJNIb=t7Jc0UO(aq=IvrWWCaxqz=hDk{Vn}pN9M7 zE)dNY{#Lk3a3@^l8fRTQm%}G^EnETCnxD^hUCm`L2WY+Abs9Ii44}huSC~7x6re>4 zSAjdc1fa_lt|9K|Vt`mm_*Ps5P#Hrl3jz9v(seO6xd5QkRIXueay~%+#L(t>0D0A} zO!78$Tj_W}dTn(OXDzf5D{FQtQERqdLO>i9bNl+F4!TlL~Kl^m{ zA@<7zA{G$i#1?`_Y~%*GYj}T!d$#Z5O$ffE_B_sl>r7sUostLfj!AA=)C>Cw@5GC3 zu$Xoptmf^4y^u-4)uQ*sTv$$fTlk&8CRj~8OMFD!!I}6I=K}tfoOd}la7MUuxGc#| zUY$P;mfCI?Ujj>RA4-I94frP5Be@-KvgFt~8un+L6YyS2*im^8PYm}XqhDQ znl=she%g>(SOvRoxbz+aa_^-uj9`qp4)+ip>{JI1MsLtTAAx5f_wL4ES)-#Z zJgyCtBi-D)=wPj@aj-woo-6IH7B2TrPKvrt1`ZtZ&;#>aC-Mn;xecxFbG2+GXq!2s zFJg361Z^{CAQ>GMK_4(=bU6$&DDk~v-8tXY(nrt>aSTdE-$l^Yb_SBsa}i7V!}w-& zw7MUxv_u@)D0c`Y!CgzlsDv^UFou3cL>rL|?Tm<^2PjTqbiEF2@WghCSg#9(ovw~C z|KLEm-)Hr8lSZSXk7%Xy6Zc_!Vh-(jYXOuAL2o}|^iT}bJ)xv2a|5tFk5Et^1|_2} zBjk<9q}7tpn7#7v3}1IakX zL(p5K5o-~SV+KXZ=;9blhs5+oB%}W$=##UIkc^2U(M+e~K0Qv9jP~q>2z3O#cEy+= zGS0jZ5{i<6WXv83G0kR`0hf%3@-QZfCL37}8~S<-#VR4BDd#T6l=Mm(gOV|&B=|Jt zmB3R+&ORm? zBNn1c5in|U0?r%7eHL41e1sULL(f|Rdp^IT;q^>1Z3 zGGr&QAL*<({a2!`lzRo*0q#QLmyLlKD~-f2Xu0Ng;^u!j?O6{VHgOsHm}2vDB(Y(( z2yHatuAW{@{OO4Wv4-NnKxV@+=TOO+>I@DMCtunJ3yTE3hKTlVfYUI9mI}a_TQK%r z5Iv1Z#>9i@MtK-8*hCjPA6z~`FLR?+FxKk0f1yG$EX0g1kNZL+GNT<11+0l`xN7A- zPa)CjlW_JwC)1$9>gqiC50+>~$I5-Cc{bX(;*1d5>co-KTl5*~1mn;(_jeRu29j|! zntKNw=>aFFWghppjg+;Hfqd6c&v2(J&%GUnU{}vs@BQpF?gZY&MQyG+2W~{^f=f!i zg7YIsKzlkLj@Q1^d_5>x8mwMnRSULX?FV(sM4c?zF4+lNsbK#U9CNuHc2LzskHfK- zdBX2Rd&TSFY|SWazUmbn1a)r{=#cLVu7;B|kAQjyIwS10f`c<~rY6Uq_!PEWeF=w< z&xWTZY;cO^9_pC#a(L$O6TXpm3h#M1+_H^#8SnSJMZ^bi$mJe9?@`Bhs@x)+pqYeY&mEjBY~z9x#c;5vMRF7l_^e_lVE5Px_F0k_ zSjX8`){C4bR+Lf)_mM*O_aK{fH!hJuHe}OPD+}w;1~9a(B}S<%{b@5BQEWsqjBG>! z?epMTHiB-Z+&p>$Tt4yrTK@K47zya5eDtqwI2~|0%DXZBE_6QSo`$XmcOfxBMN+G1 zlSPZk*9)_{aZ@!=s9A$!ZN#Y*65SlYL&+C3rN=kc?do<$%N-_9?|32H7jwEgxt}*8 zD~0xgvt!6xbR@a|ZbUM+U~@mCPSvT_P%% zQuVKl)RbF7V_sYjw^3ox+%=Gztu(xT4eq|Tpl5)9O>9R0qTEeLG>8L)Xd=fZJn}A~ zJPca{y!<_!(CD3+sE$}nQ@#Nc2OY7fk&N?^DTH<2?rhQCylU#9Ubst(QW8n%C(|bz+FpN z8UuMNa1eAX)}8n233DSd9rqZ@1D!5y(Lk8s9!$*9h#Zt_KxuG;guXEl)5to|h-8>p z33?OePa9Z?KJ*3^jShVcE}z&)aYFa6$Bl0TJ2o?}5+#7wtK<7nfs(@-T)phMG>K(FUr~r_g3_*AhvJ zm|?nSEHex=r-7dADv3MKJ*K4gT!ECAm&Pgw-L!$XCOR{NX9Ay;YQ6= z#dD#Pz-=W+iuk9^#Y6|X95mBbg5IXcAYxdFi8izoh!zqWiW6gl17iaP_YDe(R)N`h zA@@ilWo|sv(^WPl{Vpf>b(*qy1s+CUYouiCso=iah-B=j;J!k$k!`^dzD#-IKWv@I zo4bRhfw0dIt#V(YDfdH!6WkXYDH)qAxPKK%KWmzRGt2Z}1eOL$I-vt(Ku>S7BF(P6Jn`ri~kn?YCn;EUBoc zQ5+aZ#%i4Ud*jBlm*cCVl4!fl4SSs7Xa?n4q58O$LHWrP2cI{VirWH#Y(B|6Gf6iy zCXyUW)@ts&+hCB}8{=lISgF24`yn-a)wgsKr_IFsD8E5RsknqX zAR`)|e$?b|Yts+)mgRJ>!$2|)%*n$vdpQ0INsOcY6k8G)N1G{781L%vX2~J>rbeWdtPPsIZO)R>FV9aw{&4q;+=lW_oPb_* zKDd1O4vHAvav8oiszQ4{g8I=4+Ya#YYlhUOu7bwWr5_qAk#e{}QIFZ|L?Lk3%6*N* zhP*aogqtbc&l3epkocAKiDk+M&|8Qn&4T7sUU+?D79aQSlD@Psy8j0GE}1v~W; z>?zQmHmZn6(KZ7XWHCC0a&_o3aM#KsbevkdX((he7o#MjyOCejh-7qr@|(~nz@b%s zLn9Hx3?si9EjMB*_tUcE|BMB@h4Nhb6s~#)(Jmlh%YTEeq}*%JJ>cr(*Ee!y^pW!G z8j<0y9z!-praD3y`2jkrBTr)X*P_)X%>D{wquiTO65Lk#jTDi$Y}1;Zc!ET+|o`T)+IE z8yMt2L-+p*$FT>!M!9>@bjrN|tpc}IejyduW6&A~JcVk9X26t8lytgC)@+TbB1sl-W>KNL419qb*1pZbvU8sz}C}Ft0?rd^x@9oLaJaK+n=9>&n5t@8ZD1h7Wgl7A#SHz~pqf@27|5j2 zpB)>vBrF=gnpPVa$WhDmXXNK2D=tU%40HtyLi1FgQN)aKhOv1;^{MPIWu{YO z5x$qeHV$^icG%P5NT`fdV00BV27HdltFbtCl%-rVngn;AidNGZF(hgUZJ@2&SV@kk zzHIKA5<@K5>Flp&G{K&r%0|aV-V>MV?l(G`38xv)R-M&ImtiamXpuI7r^eWqG?FzIK| zH8l|)92o&u9kDSPy6uRsWxirB3wsKVe!DY~&bv}&Mi|B3CgA9IsRKqd;^o5J7Gg@pntRE8dnW zg~}-{(Sb~dze|L*pq8On!Kh;e?DQ& z2TF=PS&Vdqbk?yHg!8w11IDnw$12W}~*pr%YUn-bW>`7y!JscQ7Ew}h) zfJ7<$0X@B&N>LIdW!*&OKmtG&4Gsf%AArC+j;XWJYS>)zk@+E=*AaA$drh%?&8FBh zgps2isf>Bp&>tBDBgcQQg;(r}QSoepoZFz-6U82LypW6yX*+A4#E;~UG$4OeU}2C& zeKVEk+cBN7FxoSk(|Nol!;k2;0bTP!-|Vf5JzFtd0eXC0E#4P%4VFWLxuHnX+cjWT z?Ad~mCZC}{*EW{Q8*7Yr4-|VgHz0ph2AePv&Aoss$`JM#vytKKP|tX8pW#Pw1Thj8 zAlkY@?d3wUK~{RD_YzMRKz4;LgQ>8vJayOdR8P~ zl#>=DHzA4D)5@xxywK)4MPp@iv~JXsuy{~Fkfz%D6Yb%Y0Wy66DM8nDqV84DR{W0d%y)AtYH2OFTg2Nl0j05Z#M+QC&z*qzD$36tVauyfsP9>=_++2$d`8(O>`unFK3O=A0vz7V-+)*Xp;EThW%)dYPx^ z+EU$x07hlzo(_XgA7d2A0=>9&yM*#Pg%bZ6jo`Zvf5wq#x>_hTBA%k#*!_}#jE87t&!8FKV=JNw2B z-CV$^|BEF`7=Q?i%6A)k;h*gSqrevL_Aub1`b9rbp9vBP7jbd7jBO1-^9 z?z-XXa{b@r8jl0{f&7qcWt2Z4M%1`o|JP*X#<3#Pu)EgW;&ti&Ga1+st!xdqc8_*+ zHtF9dO{}f&A!s6yo z8>}#P=6lEmjKW6pd-`VOJIT5DP0!yfQ*c3?Uzs0CrV#EZE;bpR1Ma?HzCb1bDTR6xV87eQPW*P{%L;$4mw}qH&X9GetiHTDe<+#!K&Zx6US{w&v_|shp~FReI%*$|K6Bm3QL?)Lvzi z@@!>};;7;eiboZ@6=RA{#d-y?UDK1V7Urpc$CsrdO;Z1k+sefJt-?I~I|>U^{&yd9 zVV=2s@X+CqbD-1iZ5kW13-iq5gNL>pcRd&8nZpMU<$TYDdFB8@a>~SIRl+>nJrWzi zIiCyj@Bjgn6YDwkh%gVQ5V+H@Zowgh94co?ID?S)keeaQGsh2zY4_Nco+`{UKM$T5 zr!EoZnVSbr^!^$LpoMwr=J6wl6bkcj^GIw1r#KPjsprQURE*k~=SK>81r$(>IePH5 zaVivH9)2FAS#B?!Jjhc>)(Z1*=t!)pWyIm?8LF)}IXuEVd^{4NoPI@^hua6BWEE=1 zurkjNzIIN{BFr;K5FX0uS%i7`fslo05Xdl}4<3{Z1C9sRvJ&v#AO%3f5W#Z; zr1(0IJNygtaOOyaaz|Z-dH8qGW*kNp=o?%-5^*{6sW8vHKKOb#8?G=9ClGR7C2J6K z_}~$}ed8{F>u7zEcSx9L{vJG(Gd&CQaQC1MGN3_NG4S|EY!DY3Mwq8gAlmh8)Tk54 z+VfZvP9WqlITsEe zk=TYFTWh_)-fwZYRS5I&1xbW*aZQAI<{rYgkUP66%)>n-u`CzvM3{%e2)t{swC-iE zAbdt>qXwU3eV}e56Bn@AhT8}L|2wlL%ri$49?EfR!aQ{>c@Si<#Zt!-J(B1@97{lP z_fzaOfM-b}d5&`v=HY8Xe!>8v6#PnP10Q*uHITZN2n)r0w=fUS5&-^p249$Gz9u}B z2*KHeK3VT%?S{Vzo;U?bBs1O*`%{ab*jWsTpz z8Ocx4_*!BArO9Qu!vw4ngvS3qgLYSTg;G}|S#5UG00v2?X=qL@B7 zeLYo`-A&D9ZYOtlrf#B$VLl1vZ{?^iL;;?JM+pJbNpsa-Nb3E=F47VHJ?f!{1(aGZXYn%0zKS4t-6U*K=DCPyg)ax zn&L&;ni|ESc3*2fE*1axMXS1rLJDjzDeZAv%;VlByR*40Qr6W}BO1cGiIYKO?=Pw9 zabgvcKY|`+rhqkK!HujDE9rx0WVEQMv~$=~--WB&{&h*NZej%rS>*D|k-P}yF?@Pj zWVEz*xG&n#*&PwNTXS_20tHqD>ziv`rCmjChohz5;W8P`qk($egpSqx8rH;C-9$cp z7!R7P{f!})7^&tivD8iEB>{Qe?8Gt(9B3%9v>HYSN+WLW>Pp?j(j*|S{+?JufurT! zBc$tI$0E$?;(ulMO(Vvd?#=}4lh9`kGr3GGLh>t&1cq-REkgFa%Q~@uJ`9=b?A84x z1I~eA?n+SIL@ovP_Lq)(t8g1&lQp4-IZ42Tnza-dsxi0O2f9MupjE!}lwEnMo6!6V zxa=4-p=dT*YK27zEzP2ckZpImLcxKRNVx7-N&s% zBkqx*0smMlcLAwxB8`^hfC&?$roe_sQ=JrvT58Pg3Bc5U0m;nOjzueV6Dpb!bQ$1x z-_hR_Zsi&QNtYg3$GU|bhP?VD>kh0i=+2%$P(A(xwZj~lXZbxWzu;Py4@(Sby_@AT zy9+6}o#n&MvK#0q2_p-6U_X1am`No#+#%vRlHjPfG~wNcNu{tb8mOvq7aKy(rZI16 zN42B0zO=8+qnm({g)Eq58v{%#c!Nx(rT(g+rjhZYgf|dI7V_#Gs~08}@)?p?b9IUPwa`y)lwsB?}5l6;bhKjqZ z98KngtqZ0RXp~u{4YZ!!s1vkd2O(B@LxY#nN0q*3;2fRL%WPewSF;Hd{ix`PeRdI}puxY-d~sl_OH5~!}D zz^+h5rPp2C8FF=vjl#@U+#a=w2HnKDAac39ek&_Tb({Xb)J$avb29r!UKyus)+}ZBcD`(bNI5IBdtAWy z2D7KKvbmzi5eW;kVE4dlb5PF5R+yz6U^8K4WDbx+v~V}(%*q@f2jzTegjsNaWb-X> zP#0#w|0UMP-=HxImM{_8+0fh;HdY#e9%gX$eKd()umL(n3XkyT;2S|x3ka;lE?ZH z3qY8K8j$?pwt88U6;QSy>6lLHTQ;W}yU3Y^GRW;;45tcfNGB}CM(7mwaVH(t{8WWU6_Tok9_(9n;NM4Xt7C* zEG9wL_Ho6co{^}trMJ;-$D1W<`^ey7Hh|FXk(WPVZ-=bfpF=Q0+!fUoXtd-J*LMSyo?IGvm25}I9gpCtQAYl{XxGl zdqFa^d(2`kb5z@UtE0l~`Ka=oNmk`~$%tN~x7J(MG+bBd6K2=T<8(eYPBd>_GA?I! z5@yepaS!~NjZ-BZCwZ_djuH7Mdk@M1*mEn}@5++tacAFz+0tYv=h7j}mdHeZ46#LC zEI)0WVe?s(T#}3ZEX*2Z+=s4X!)QpxrLn1vdT2sg0> zCF|_SzWZ3`sg7ZXu`lBtraC&|dA8cAj&7s8+M%OM+*~-Dt}qL=9odJM z1#>Rz?6~Hb2C7G0+Covf3@)}bao`z#ojJiLB}ETS1Zp#K}UkWU~PnQ zjyyQX$`mBG(OXg8&~GR`EY>bC4mfNJiv57lhg6Kz#9eE8PY4NcQhy3qeRO z!=0=aW_8KXPSMeA9<(+$8%l-Qd|*W_Xhp zB$qJ{j#hXAy>(^vO~S0Kx+8(#urH*ns^ey>H!#{BHJ9|%Nv@~tj*&n`s)Xx&g$~Uj!?5OD{J#OXkf(ej#xt-1GOGu7TP_s@)_12 zs>*xY#a1~~d2~PBc0XI?RGYWa&$bt6^Ag*{Ifx0fvVxCno3%nCJu55pxQe-Z$+FVl z#Dx)Oq##Jl6$l}7YSu6=4K`%-|(_TN}9>8Ol{z195^7sLyt%I%6YJ<#DQ zrT-~g?9!-%ujXss;5twdKP1G#tu`ky5O5oximylcoj;^|lFuOzS1a|8M-$iX$R zMeBEv7jdv9T_2Y%$+_wDAn!F~a4n4G`m2*kaUnzW+meAD$8QVMKStgmD`#OBZGZme|g?R$w2Pz@I3iE8F8HjRk$_pxf6iV7I$l9cW*~Yd*0P# z;!L{aE+7xG-zxF~ez)q+XN7#l6&>xys)6!eFXyYS-;fOCT;TPx=Mnb~+N<3)T}|Dc zmBumsb;)gM8m*{qZ0m3!wrSpr3`k2ZK6Z4lZP;H~HS8;`t*h1VA`5VG=@Px{7sAo+ zD7OU5jg7@sQjZ?$QuqjQL)PMOwRz0NHFaWNo_zj_2R2nZDviCap~0cNdss>0`Xih- z^A-PY$+3oTB8~n5vgK?#WcQP+@xHIr|2i4Dud&+QX{`zd%whd~>3Z3dhCGS$ zgQ@y^vsaPe1!3lhtS0P?<;KTs+3WSsB$F~VMfzL11C3R6#roeS1BZJ0Dl3fb&R*BB z{%LXtMrWn|U^0@&;Ta3qTU&~Jo%$!qXJ_H)jQ$CR#0`Wk)Y~5#ag;fSEAnKAAP&e0 zdwEZ@l4Kh;gsMDwL*+56owoXbyQs?I&y!;haKKiF!Qvb;MasrX@{V~|Ph6+O+i_T? z`4yun4<=X4?5!FJ7gsiggROb*CwIUi zw$qh*c{k%$4ksGwZzngiS=~ccK0&v3dDA4WGg6q-Yq0b9 zg^>DLayyVa^fSrTyB+@eh%YcyTwkP@cOH&{$u?pfDlIqkd+hqDx7E0YLwY~?fgK-}_hW958od_daJ$nH9V*lJ5d&L} zy~&ig;12qG$af5>I~i%%Wp=g(8qBWhQN5S^g>}F~zG7>)i(G?)rd##0TN+pWaJ|{# z@)-wA)qcGznIaeIQNM{Q6;H{&DkUjqcNSuHzm)S(&UGwicM&4i{9XG;?W~q)$Fv>V zbG3rzd(AtVCpCLD+cY_D1g}}GQD=Xc{ap61vWfAL4bGVY)sd{N`khQvQg8v1xWi^y z`kj!KZ~%e>bGo@q{Z1x7@!-becfV)ocS3+lERD0lheM3eW5X}Hjx zkgCW}auOmGSzf|&Auo}2NS>zO$%G}os?MmV-%)BDXo&cf!cHbVWs-$(NUzcFWYUu2 ze~*2!NWT-}657Rqxg$sm^*bR#kyqsgKwctWAc@XEI6@&Zxe@V}bM!kQAkoK%@VHg0 z-^qj|o+KCjLZjcwq$D29ot?_o?_^>V59S>5F$<8J65Gqge8McKAWV@1rEJ8gaa zB>gg0H&>WDw50#}7Syt}oQ}xPsp|VSB%87_`cfLzFQ-t?`}8w2)~03T-j~rrJ@C`D za{SDk?;r;~24U?W!fwJ-Kkcac^t{)v7Gd2g6*oQufi+vsmPIeGm=+pCAf`AoDO}vI_$z>}O;+xpl0v!e@5&xrf4b;Ssrx3vh+=df|a& z%+c=V=K9|1fWc-EWTu=WGtz4>?ijawM~bV3tH}Uuo$zz=UJM@{VOugK-li~4zTHld z-J}`6>4F?0fPC=+`YAM%+i3rUMzRpVm4eLYa@F!my>;YAR&5#i7K4x~lw{mRJwVSQ z<{h@|G+}8U*F4C}roYgnH?B=dBUPp&wfY-2P6WDooO6WK()3v{v*57$~~ zw@U4Gm0dQ2L${Eu!NODKe@&Y4yILo6CLA&sdrWskt~mEYtn>T>Q9Dp;a-F( ze=?MF6%nRP5+j^~Zyn2vZj(L%HZJ!c=E6G~}=9?5uC7ud|g4Qyr+} zIxHNlNhd=juVRH_yxIYH??wi2$bgOVQfmW1i+R9g+mlI~I~=C^dcVis(I-qv$xzPM zN|+Lpp~Iy;{)$mU*+^fvFl9p}Ew`~5wk9J=y}_w9pAMSY8)pLA9t;D}8f3tx zW^pM7r9PSZV0f&(vuN1R80`_J>XM;j!G70JS8r9FLlmZJlc8K>A7QEnRTiLS=xa5S zN3mm|_A0sdZS|~?8|0_2&=$Zhke_m=shN1{{AB7}kR4&_Jdhl~gl`b0)+Zx!5s`$c zb;(dJpixRnS{@jq#c7CFV&bTXWZqJ3I6>RG;^p#r!t`Z@ z5<&O_xenj=)qB3*!{|ax%D; z{%$4ju)+i6Gt8M%@RLoO>0q9~g9j_C8ol+l+VXLqAiH3aYrmi}$0o9qP2`2-04SyF zWI2dzdcnGEg={zBni8pzYNKV94K0p-T_e$sqDtM5B)|yNl0Mp${Ex|*$WPZ9H#cRN{9%6k|zT;_zTq zO+a*1_E;KqUz`9u{!Q2IBO6C3rD5^_mYP!cCRvN7u7sW?nd0$V8g)05308d-c@V$p zx?_@>;wC8Q1xIp8E~2aMWztFC5#3sHJ|<kS(nEy4P-G2Jm^S8EUYWj_J&_#IvOFOu6qO)0DT5Bm@T1|2|7nY2nppD4#O}X(92Lfp>7ArN!Oe)ZH~E%*X-+ zw@~{Be1@@bf2p;sMwo#BLCynlv<1=wl})~So1P_^fdE0D_QhGtAVZL+{zi|h%s^mB ztc??)g&D{YiBR56aRy=qC3^53dgNgSl0_meXDJtEWMPAAH}Cm617RbvEVoq&GqU`_ zl?{Z)2ZlOCskxy?m|^kP;uj8956Xmn1Q&F zSR*Gw3p26=Le^f%rWFzg?dRlHHh5I%`0*opK4=C)M_DvlK~J>IKu}0*KNsUrm^mgp>Ab4CHO z1384{gGqf>%&5N4rg7GZqM> z2S~e&0u>e3^spoq6{>JZ7Y&d_1+F+}8y03DI*>h|u`-Yw$N=UYU66$alCzo3EEN*; zI2i|kEF=&cPHUmb5DLg;>}=}Hx$>Y|L##w40GHgrs8%4k8Aty%3Nz)&L)~i-rONhb zb%V86m?=w!da44QmX=cgSbwuHQ<@Cr3~<6s32osktiEC-EjR;>p(#o(W9qU6yKAhb zn(|6v#+VG{l@>Dwka^^dx&kwXUb0nZ?IK*Msi7yx4~}@x`*ujk}z{R8v7uQpJTR9OGe~XBQvK0 zaUotz%-tzSZhMiHS)E+QZVS}H)K)+2FbOk-KztHs=}_imB-h@?%B)H*c!&9Pe!zs`#g5%cy9^38)ov7pqc&*Q*o|T5w=5Fh+Q!i7~@;%lcaMQ`D zDRXD^TJ5UTunL)%`>kK6UZh0nk$&sj%G5OqWZDOzD3a&~L))$GoGBI}c^rp!pj zc>2yXqW+t@CUuKyMzvJAUNHdWMvX$ftwlhg?Lq7BQ`>b&Swq%8rRwvMI%C*+i>59Q zO(i;LmLerZtb0?>S%TC*BGv~q!Ns&tW8=DY zjg4}lXGg5Br1qZ#gd0b#pK8VyQ3SJj-8wVw3ZMgV?-;5T7Xsn(sP(ms{C+aZn@0brM%n0CRX2_M$AuhXD;yO>kcu;i`t zd2I%&x` z+wHv}$z$v6s2wmh4d`~k(V1-ch!ugGGtvBw6=6=zV@7+QQ5>{4*N5s#dn(3k-s%yP zOScP7&1Auc43D`qH`s>F<&_p!h1Zxs8ZOOb;$zl7=Fm(GJE(i_E;uk37Fylo9(P4# z+*IA}>S-PBYi;Oi=c7_J~MoSVJ z3x{U%xIA=)NFGHKKo8E!a0d;y_m@UQm}J8VMc}>+XT6?oixe7f3->yMosD%4x38nN zrBSyF4$b5ud0gSnOkPA1^9<)@>aTVKby3?z-Ip&%J;-P7%VhFOHa^T<+1=$IuO6(5 zgiMVH=3DBh8ZwrQSL$}bU71|{2^)OotX$t7@fC+~uZ_=F7cS|rI7iyxp|0BnXJvBW zQ#OvvkTiTo-K2LhN94Y0i@z`A8?LaM62^x)BAZ%ziXvgR*&FVxE*>+Nw{-Lxd?wv4 z=9Elw;;iM=3Aq3>yIQvkPRNCYK9^Kn($?7$t@b8Rl--gq_!%n%w`B5&JPgbUnOwJx z<-_Ti453FD5x5wWv*i(C4#ngE-UzH1_z%O!vA4q9=CMQu8vO~=0FPqwJ<4MkGuiM4 z;0%ff=1)v)cmM_FKkW6kwRZHGJ39M=3C)E6Fxi9!ghI?)nB0zTq7d^At}F35MxCA( zV}0F7L#WwSX^_NDtU48(cTp<_RY_|dDlP7-85SK@sV(7UQBYvi=yN+e8Y2;RYr%B~&-6o4gE7JjAARato4HBvE8DEn;f% zIO@i|9sPzd|5{953cU50qziPD;}oyeJ=oe>QqnjY=?^(Z91Vssx3R5KHyLHXdI={n zYbuMn!lPbGn2Bl z*Mc>s)=fr`+$$%;NIs4vnlMaDkD98@j&N_V(OD9z3l^LFo?@rdq?-&;pwHrObT>JA z>uP#BJI6XAgZ7%PT90lr2qFtUrz1T%MDfDrQFC!;wWqwgH34ss0^PV+r_<3=9ISME z+6GE}t{S_w+O3-mP#}32BaIdgfTHFLI^UE1EdL-jCOr7r!v^O3J4v0qHvskFxe`V(lro zo~J>5eiuCX!QB>colKN^QB8C$ zv9_6;I2pW+bpdYS=HtUmf^7n3 z@Q>`ZWsFl`z*22+54xpcA0Pc;Qf8c*iYg7B){YLRmyhi*xf*qEKr9CIjxtUcA-(~+ z#26=EXG6DN@`eVwT?sXVaUvJNfggBalL`wRCSOVWK)A7?wIl(LGEVDR*oaBSI5ju- zhKqY^20dMkJWo6cMhfv=ycUbtR%2+COk;JCfWM-}I_`Jt;0J+ylSSE>1Y2Tcj|7-L0_?q*|48L3SyM8@PYTFB|>H@I6$5nCl8^1~!pE22TL z2y|)*#cM6M)wh-yz4q1$K1#sV5g!j{5{wslgaxUXWNa5Xd@~yd%4TgsyD@l-&9eET!C;elz~C(BV?#{J zY}c#c`OtF4c7yHh-X_3@k+Tv00wGDjb>Y=K$Oe956!|Y=f-lfbfXl+iu)-LOm>TLj z%1sINL@02itGjO0YwhksP&Ynm66M4$#~30Q6ywC2t3BZ|Po!HiTB4!R9&t?UtsZRC zO@vs@ui}ygbPJpp4Qb!r7ck0&1w7ax@+6~%enr}64Yo5^DjzjicnmWyCI0XD@_Dk6hXHRAi zXSZdSXXj^qm-SB8Q(1Rp#j?Cv4OwSoWoLe#`AX)#%wJ?iGTSpNGlh&FGTzNNh=ad7 zGI}x^GtSD;rhl3KTKaVQ4e6ul9qH@Rm#6)d_Fmd=)9y*TGOaJIIqjUSX}RjJ)UT^& z)I=RsUx>)^E7gkB|4jW|>b`T6sBQt1C*?Jjq0_gVRK8wz8$u*s2kn7()V1OpuBRVqxw07sr;mWOFr z+lUSEJ}@aK*xLAmP1C;QG3hQ3RMr`KofU}bFfE(kNMMZG6Q*HqBkSNvpCL>iv$Yj4 zL*+EJwG|-p0&rk!BWs}BM#V6!B@TD*pwBpJZ?czlwhPl;$xvr&$On~3$W&V)OvCm@ zSHt8_G-ATED;d{h?erMi!}h8WR?Z3Lx548!aABI7-+sbKU|L~*OKcE#g@7?<8_5%_aD&GWH3-wx3U?i|Voo<9`O_X&<^&U5ZHYBH+8${fjT(e$YJ%I- z&&CHPI66LupP+jBX;|UNJMy%^1V>(ah8mToVQ&Kt*ALO#@3Ta@Z4RSRn662Na$e`c zG_}fEVDQI^s7gj0I3BfKn5I@a&4)HbUY&+jF0no?QoArM8|t{$@MmkMVYo{y%U!Z2 zOdqr5J++Ok25QS2=w*u#wmeeB4kJucL*5VU1i~~mX%mQ^=+ zglQP^NI!J{TZQQptakPG#@2zBqJD30t1u0#U1Iabk9$T4(=g;ELR(xOb2Qu==o&2& zrcbc#^+lvci+i9s62_o0+n%1EB|Z@8G&Sy7@RnhcVcaAAFR|4uTk?nv$Gic6<&OLS z0Fp4<5sRFJjSem}?9BL?tbN>#Uc51HS~l2`0}UeG|6!m*UpQRuPCj88Hail0nN>v% zbl1vBYM^@?RiObe(2*yR#E2FqQ{wIn6sBRIORR^xWlWe}l?>&r`O~o3C6?u`1{9`Y z#si=C{!3Qa)2C%a9y#!&l6DS;yTpRr=5gvYwdH;HvUPRFsng7sS4dX9Wm`%auF073;~)-UcQ^| z6Z4cOxE!|~oJ>)*iZ@bnKGB}1>B_z)Yc4aM(V2cxnp@qRI-pvwcmo8c6lvQ%vCL&D zb06BoE`|D>SO(H&NjzJj?u?}`OCekA;#=yIVrj_kY!eqL)FUx9vWFbvH|p_NDw2Ke z;DJH=BJ>a{T?(${r}YZPiRrU1&pPVqG)Q{?0la{qqu- z#`eo}DRZ?Ki@#E+7j55y(nl{5mn!mVQ*z2RuB`o;4e66<>(uG0KPqRGf}$2JKUI;o zO^PiB1-nc9gL-M~BqYyti#MqCu|**8Tepa7?bgH=BK>}sc#cACh%G?+B(J!ZHY*qD z`fkytP#48=Q28xA;y#5s5Yr;x+9wVu)T?6}+{SXGd==iUy#i-*)hu>vH|4~t)7C|3g67@*L*=ZN?!re-;kYevNfFdcee z93G|9u_z`W8^g7PWJbmB)&7_c&za-mC+gH#KG6PqTvRF48)JFM{_#@rFtV2+`^aXR z-4R=g?7wXh-&9`^TY~K0UMAKkgm6mE@3h-A=Vj+)zMW~vxG=o~ojPCjz49dmQPf@| zrESlT8By@n+r%Yvw_Z*uRm2P^e%Cg!T%kTIwidvRzX9;;?cx%J`ux}$05x&(JcT+l zb`H|!9b$$;ofSJ9>5ePJOojTg*jXsleWmyVdVMC6JwHRQPm7&_F+bN!@P;ZExigex8;srE)3erEjhNjD7tC9ZwwcC#LAF7{}%B-)$Uj+k{egIEg|RLD!!<$iIw0v z>o)Oeb$+ZEwP4Ki6sWNX>Cg7yE!nUs0)|Sxo*JxiU_lvA1Ubk~l3}vpWP|;rQs;Tg`R7vd>-Q>(W#ivN& zz2d^Tf8HtTlnd1i!%`6y8#~?Q0ry37r`#j{s370`8Ym_AVvp5iJ(;5USF^~bUx`<4 zU7#vddZHbkZr6a+QPi2TlM?B6jn_05MSD8@!4P|Hj23rW!hW|$>SxcvfOA0X7%Z(B z?_tlCV;!SyqajnUaua>-8gh=d^w{hzUQ0WD_LxRHDqBX|ii}Nd^x0X1i>$2UuFk$i zEh5eEc2o@wSfD2C8MBgC9u}9Z8!xSGEvt4oyzMQlM1{%iaSck9Ev*%-z<5PjRj;kI zD>!tf3?Gk10{uO0-R3+p^q{zSYfqKCwm4GjFqwKatdm2QaJbymW^=ky_R1N3(a!M- zx8G5hGRbI~qYhUf+GUe!meS{*O0T6l;tP9?ZHs6D?wT#thcv@!2-)4ZfKs$u6nC+V z>XOKK?{G=uaEVfJJ9*?G?2?!LT0Hrj?pl9WlgnZ(b=eft6tjJ}xU6=ltjAPkRGgcA zWlHY9W(B|G$zO}*Te%ZHivMCoY(Z(P(gbB{x3Z9CcuVTct_GZnv)LNmInY8zeQ zs3lU=lk%Um2M(vF+iDY?&3#pMti1QNb0~V{zS5ds!H=go9_Gc*z zxQ3;W(fh?>GJn5#@&e7;B+wz`7BCX+h-MS+aMU&U6)BqQ6VS+t2gC}Ow|m4>KipyT z40uy!SP_#rY_A*WFCPk~ysgbjD3U@EJY@}SJ+19EwcY)S1FS@i6NWaMWN5xa$>FB zAa86auPz=aR$ffbeo#Dht;25&k4v_(5sRour9`-MZYnmUU86m=fZsJ>F7hcBkckJy zli54QU0$X5IW6dEGc*Jv4gLmONO=aMR9l|y6~ARgO2*rZUDl{%XizMs88j>{sd`9UVeN8N^mkhfWkusXisu-p!BbZ^ z)aphEMMY`OYbSQUN2)FE3`D)g-VW6~EzvdRuP&<@_PD&|${ce0L*i21@iUpqv$0Zg zj;|JS5b&*~WA>incConDs_bW#9*}45^!Ljm?C*bI+RKCYDOrdZ~k*lPxt5*3t zn&EJdl+@K$d7VxDDNoZ3PDiMEpJs3|5mkp-k$;7(+3Fut{ek5S8H)m4Qk$`AMD-su z!_(mL4u+eDM6XA+fMsy;;9i$AMmmd4mj3Z7kMapdrQ|%Uy-(xH4rg7HxjjQl_oms@ zH>So_w;R zEl55vE&f%#Al8g8^!1O5xe9e@tO?oo&WMj9yAjzNXKA)CW3WC$t{nen%YnojDhHg^&t7HH^Ditjdg=) z{4L6uu8Db(p8X4LZ+XlEl)t?#&Z?VZT}a+>NPGbpZX^fa5g!Bx=t8pKFgQSUY!k}; za2TBM(r8MqLOYfHeO6w^b!nff-KxJUD^jB9(Zy-8b+Iut>}N;BdCGE+B3=K!I7gS# z2+Aw|D)uQrD}r?312ImQX&5;F_)xr^<_{zPrjKa;rdSC1t3DCmr2D14t0Mr~C z0?z)=#U_RN(%2xHm;R;r!?G+zXG+c%&9zy7&s?7VT-sUcj8v7fO+l)xcjv<&lL}*_ zaY%in?NDdC5bXLd@jiuG5r@=w?}ERJ3iZku1irb&--s&|V5+IaSN0E)P~nP7 ze6RgC6~?64X5^pxt@sDZ<6esN_x}`cP(Z91NBV~E#ZM?Z9o40f&-O~KQa!bf1mbU+M?8lRgWq|ipPjy)0!J5tvPAiLUBldBu^=Qr7n&` z03=$KG^IX2o`dRttCAp`jK(4VkyN$x5B0{l2H8KVrAriQZ#)~>o6@Dfs<*_mkThjT z->WZ*LvSXhOzCa)(m0iyPs@@Z?C9cm`|9dA z1n0Q}Ino9Qhv&tq=zPXe$SJGYj-<#*$=#6Cq;1!no;{vblesGW$F#%hgQ+vBFI8tK zH}0UO?#+`RJFkpGWSn~{U&3^)h*O#IJ)N{% zfuV!UIH%N0MG$7=5E@Cva_K(xS#b#Ca~~|1u!9Z8sWg7lO6hYt=n%(m@L$03Z9 z4uv$odx1S|xj!Z6RqYqrQ#9#VRgY#|oqk{1p!#&xx5_^#?#Hcun%U~~{X$7gGaxa}eZ5*b83JJ(BI8{CskHW*IAq4ThSQ{Kg}N+Gg~n@6 zmr5Z6$00P5XU~uht5?UV%=oJ_r9uUoMPImo+EvW*`%U- z!5TW7b#W@XzqZuAgotaUhtjrP5~l+EvkRnm)Mv*bz|Y;g5Dhq$&f zr-J0;mFTT2PG!hF=SoL_3mKAZUkBVZaVkQNte3D=t&2mPpS$-w>0E_+c^r~F8TtU5 z=0DGu((q~z#i=|$QXqY)J~<9ap6n$6UbafgR_xv@rLDLoCHKsnM(w!f-0YUDK<4_4 z#`Gm=TJ=KJJ<7`zBE-wnE}pb%(zaE_>DO^}jdVbLdYpb8KdO*@sK?^;^LTfI^xx{#IQ=}{ZlY_{5T~EVUp7k6;|#{>=kcv3=?ioRpU1i1 zH`DHP#_@fmqV*E8&@4Tp_QmmyByX9ek1^X-Kzp_oJx$xz9N&O^Y|Bds&c@GR_^8xh zXvFY|aY+3{RV2N-`-na5BrzqYM{{}hX_;@P|CDxN>T9Yq6vVipbrm+hJVjbeinpQJ z|07D+wpPdO*q)#_%A5PpF73oeCoTaPaY#F`AIC+ce{7eqAGgJANZ-*Ry@7oXx2WtK#_F%;j}SO6WJ@_}-8e9_enp^OOO2 z)Z=P zkE<_<GeOvPr)DkN*f5R0(b<$U9+s}*#L1OEWbh={qt77VMZ3;H)d$m4|G3%e1zspi7}0^mF<5U*Joi z-$6f@A74+G+>#yX=w8Nd>3W6wv+_cTTgMK7??vUP7_wT^xk+j?? zeX1VZfv+Q3cNcaZ*A9Ff$vJnUk3~E1Z6pitk@l$-JMd||_t|?Sh1#vBtS3v(9dDsqnIyqoUJ zc{%5aoCh+0pEIsKJ*O|HA*U?o6yzb!E`w*V;I?ZL8K>AM2C7GicFKd>am(iQ?^9-ftY>lAF%KkQE zb@s>EZz?|_MH9&BrxN)Q> zR1QW%>LkCPl}^)G9kuYi@Jp4QssZx(th6lq-%&7BkCPu~rITwZsi9!Wz;Iv46CMgF z53!7ZxuLOgsL4KNQccMjEk%xoit0dltLjyj(ce8->FP83!tJWST=07PuasonsjWNoTRWN>a^bP$iYm-(2J9ZxM&ii<{={sA^!OZ|gTA`v3MooD zZ?oT2L~}!ka6jB13KxmiY+8(q2CIDK|6}Yuz?(R>uwiMnt6g=f!4_Z}o8HuH%XGOH zxyagG*`mt5$d-GfMI@3!3WO9UBwP~G3+cs9qok0K0;Cg?5J+x%xsXCgfqZ9n4VFay z@B4ZDu&-w3Og%HF?92`hXymhO-5se-`L@LqKuuC5jh=y+~ zklr8!41X<(km6$My4wp=GkaZZRci}Q(9mbkHFl(D+Z1Ftch-|2BTD5bp;-2!c%`g!GR@TH+~@<#F`oFGJr*DZ2^ zLI*1E<+*`WSXK+)aUKAJE|3Cv?0e4bc)0~tdf@T*onS-H2$&&!{)bL@YZ)8B%Jf%9 zo$zjEM8F8)#4+a<(24>Ez&CyD{GXI!0-#0@T=}Up1d3|_>(Qe>!xoY)07ec9>~rqj zcB+hul`16K3iW=~NX1#E3f{aa$WLX@6OB>@cmTeaZ(I?;3hds`oy(*J3pD8fmP{+U?-$rbdW`l%D0;2Q) z)|bl&)`~d*>&u&EEC_Oa0PD-UNETGK!~oWp_fl*E)^D)B{DqvIf&081@Cb&TC8d@J zTu`$m3ie}A5O@flq+~%s$O&+Ovs5f7!LtG^;A_<^7`u}LPDp-23yQ-L4GVlfIZy_X z5Rd={PH(^gu`iu+o)KLO601b}n&uza5wJydjWS+Af;Dp=bv5~-><;2e>1Jd&dDR&C z#C3QXa zM(f(ytvm$p9Zb^(fSqgjg|n`pHC#RW^g+NKz~N#lGwK?RRF8c zKP0hADP;^`_4&_a77U0r0jxgHoyz_R+=d-#v!}7;QYaZz=YcDy<6KGu*paq(2E1~D zRS~Prqh_(NDlQ0Mqa|xL3l?>H0F0J_jdL(-WCg%#8Q3$I%>bS$3V_`*@Ye{oP`b^) zkqJ7pgyBdjqGvC6{G>~ zHL)L1_8=(FXuFwxgDMDO-MQYv9;7;hpf#hE6!sTN7Q{;P>{ONjl{5%SGcu*IUr-x@ zpfjUbD|?<=8pJBIKAi=-WMW_g;Fa@PSWhMfu)VT=fr!Cg8Q8fH<4FN9SO)eiV!_l% z3Sf%`wArx(zb*zwly4jr=!e)h64()?a(@^z(-d6YgTKPM;2FJ&JR zPfG`2BHaKyyC#Tr=pQqn(=y`vB0ZqWW?{d8K8Q8x@i};2bp=6_ zMya{%uT(`4E7EiG*rQZg5UbFz_hc-J&u5>fmIbj2{aHTi2H$KDRA{uQkbN4U2H@`) zdV*Mge$39U1_eBb?HNGOL)FUjmsCoCNqTmIaw%3r+-F%Cq~x2OFFK zcuYA9KG=$&9`L~m_9zI~AQ&G5cQ0dS<2r-&G4TF!7NlZFa6F{Ztz=J2_e3> zi>SEZG{}dnW@8EH(y4$GYuR7Hgbz*uj|Q0V;|GlOY(K15!DNVhq=5w)F*2A0cx4j{ za%6OH@`Z%TW}L7;m7h zk|37C4|TJ};6(`pW;Z+W`EW9K=e`^Q&Pw-ge4KCXJBXDbXpkyyhD9!>ad` zXO)S}e)^F7Udl@*6aOO;r0pPwPC3?spDBoCkl=mj+Q>cyMPNY$dw|BG%*)vuslp(Z zMne3l%h{)BV-TbfICQsGl#L$Pa|K>xvw~PAeHy@xPYYrdAUT8?At{JefR$Hb8Q}|p z3V^QI#QsDr4`L0V`zm%BEW|<30MPqav+q#lK~MlhqkrEu?28m1TmZj=*RtuakY-Jw?{!0V+MJsz+bbUznOSGS9e$$Lrol?G` zc$j&feqDY8H9>ZQxLFNV{1TIJJWXI3N~Qsc{eEWn^U#YZ2f&8jI2&VPBQ|YlEOm zAlGH=m$3YRDlxFs5BFtfPgK*@Z&2rDMRF%;m;WGtUENEY;FODnoCz;bjLbdM8_WRlq@luBQiO z?<-#<7Rh|d+m&0C8;B2-Ey@*2JAF|0vT}iP7I9V?M}JS;sZ=P=D!x{HNS7%ND4rr- zQQSpq6&s1K6&^*YVu{Y8n5!^PRH&K1nD3}(VY$WsA~*E>Yrs}pY|a0VWI}df|3#8e zw?-93T@@WrkBptUW6;yjf=ONWxN|$|dd4{loqOE*tS0PS2Vq4oKjC~>(_Y+=W;B%N zm6lf!3( za0mtYnsQ2g`6cG!LZS!QH-FyOpaicSqW z{bnI`ZzJ2}t!%AG_2nwXBE80X&Yh8!S3xKQheEfl*jC=tY453mh2^eiz}q=e3}?A| z8|TjP^>xId7oT;SvQ)S_9gXJ3^t_&`v<{zOo%h-EOS=m4%Ia$Rq;;w_I7wHnxud(i zxz$?II9+Ig!(N-wUD{sW);0xMpL1p=3ORM9d2FRlYe}8GCsoL~wJA5vVCi7%Q!Qu* zBpa#5!QG|Rz zXiKNP1upw8C`fNA5q8CdeM4V*JNg95ozziXRo{?bo?n$&E4g1Nm(6Z!=(FaS`x+%T zpoABklXaRaB6bL&j2E2dQq8NE?u+U2W|{h31~$LXBo&6Yn@{IlHn*?dSt~h*b8pXY zbhq?2H|Dn1Nq*4M609VN|KR+NbL{G{ZwE@h#sr=9B?f!3slilIAXRDCMpQ(ouB|_- z#M_u(Z1hQmeKZ|iMQu6NrjD8}n{>I5LwYf1cD9vvR~5t8U~k*w9GlS5Rd3I=WWpz2 zdZgoUnl3Y&ZMLwM!aRd?r0y+vQC89e3ff$>T0fRV@sB$vFAe*SqVyXf-^#A)+KQs$ z9C)L7ObGBgyQ*B)o)(i?D!8pWYKpV+Q`_sh8Y-m+ko0NiSWQQJd9$0XDd_EGrO%+x zpvgMmh0fHn#(G1WN$P<;Zd)HnH*Pz!gqkSXAkqG&RjU71eWDtn_%Aa+Z6a-6Id{eM~kcBq|Q-auB2IqG&R*uqiz-o~)2-fnz**z=+mP1_->}B-r?d(?+9mMAHySrFQIvtPpNXcCi z9j(=B;?y%$R^@!fBF01Sls`c2AU`1&$t;9j+JO>Emk7!lSa+f_w)aI)*0^9h{O)}T z6v^r!7e_Vx8qf;YP1Hu z5O@D;?Ek1GL2Om;ILLxWEC^P$sFHQO4k}q+5G-qy{sw5J{XuM4r@YDj0ZI-S*2wf0 zC^_C>Ex@Eh?Dvo(nAK?1VfH7vzbgoKHQM$l*g##uDuA0GV}IFpqKurSlgyB4PiS_l zk!rv46U9-5k+IPZ`DE%!(nH)NwL!E*vT;lZEW&{;@35o6s11QhIB?Iq*r?45NnmvU zc#nM*j~uoMU;Y3qn=wJK3DI{SvNut)g4iUy{3!NEc!OXPqQ^dh+IfT6A_O=VJ#`E$ zsH7m+gJ{dg>@N96Ne~Qil=2Dt4;Wq84!3^Fo&bvt>~PUyGad(vZDbJJ;-`;;A4R^= z5Cmgk2BoE14(ihQVs`Q!ijr}3K zk)QaSg-sYELwFRD;muQs1YGnJ`vh1zvqLiYapDO3fHVPfpIY*~ zMDwS5kE%tfW!|FimS0OfC;NpsD}7V)JlHuq>+FlcmD;B2g(}K0)FLhtaB3~c$@U}c~(v&dV$HqqJg=Rz8Cga{YD;;eNP;gzAE_;>irlv_d?U44%kZGCgnb$$k0^C>zI@S-Ftj! z3gD9jH%>~qLdlTqZy6++6-t8O4@eG}r7$!Zf(5%LR?a;|tqLW=?|0ZBKee1%IsuI3&ox!*BzOt^ts)jSFC@#guo2}`A|zcW z7|nRW+h`79>$7462PTL-1lH%kmXRFzQOiQu3w-k^4xDAVA#8vCIGW3mQk5ZWf2NJ) zPC~`7{W&3q8wnOk2<*=R<2Vjnfc6kJK)LbU8vwxoMai)MGeTg0iW_#AIBqx98p1Z{ zU>xUzy(%GWg3g-2Edb|KXa*GAIFSPmjSFEb{+mhMB9!TK6rFg4(%`|Qb_%%XcR1VxVom&dac?hh^ zfp2DTu$)^$U{MZ?nZ<$IY*EMxSqhu)R?p^OeV-HpgL2^NIUKl>_z-r!@1D!Kr3pVs zbZOcQ*xR*JwO+YN(apRs1(0}SI;WLVZ6Rzo-Z-B-MNJ5S#W--~0uJPnD+DGZ_Q#Dy&oAWm zQ`sSG`TG}fF9QWO`tuh9MRo|=`{G8TCESyfsw6t4=6dx>SfBSRtn@VbZ1R7kRpupj zOYfId!Ax5s-LLkuw%qwtr z$Aqv*%U;Rd1nV1U9s|c$a#N+FXvtBD)~_LycQF&FTV(Z;qtIC|!aH#qc4>Uk%3VW{ z^W*^AJGi+7xq;Hd5v49}JwZ|=z~o-;3W8iF1NdM+=O)Ot#CUkawT@dOCD%#;2G?_! zNwpe@W}m7^p^<+}HWHerM#}z>QdhV&knOmQTm?|60d`!$ts%%n6~NO$E`cByDFKez z#4RMqRs}%k)tnDP8Gx@`%h?Fs4vFTFszhOuKS(0tZ`ezjaQ8CkD_E>Ht{4M_-@BDt zE+xm01_JpF9FmeFM*+P3Ms5T_k|O~=v5mW&Amc^=OyADMLPc}{xm$5X=4k=G`yb9s zXuptXo>soYY>=0ciPA5i`iG(V3*um~f852*hi`4hLeiOcadQZA=6Hbad$<_{Svqba zwEsS?gdjaJkoM>U+zEor9SaGbdx$F}M$}2*D)QxuznEL(3uH&7b&xTvfLF9&hhO_+ zTr)wg#_qn)pWs#z<@R7kw%6|NDgIRyr9)@$5hDaj`TJa>?L zUrMGYK{elhgBz5R?ck9dxb7{kli098vPGhMLDvrp%CFkTv@P0Mns2~IQmKhof1=*5 z=GCKBM^x9U3RJZ6Wu;%aSn-!)5WeDJV*bbMW*V5O^cVE)^a?so{-OLvxdUXx8`PCl zHbszo$+cvFKul5kzShiRR$6Y3SrH z+~_$NMN*|lP^E@bA^%m~qs>49f2omF)(EPUa4JYHlr<9*MpC6kP+2ZgA?f;dv01o+ zmPn%12qN=EBB7i;mkDhGDsv=NN(7bZA{Cm~-W)RxS8a~L6iH%T3`nW6@Lb_7-Upj*)XPll+bo1zANRs>bppvS-8D^_p1DQeJXMv&k^ zADU@xo4ljZJc5_cfo_Q6fEf`)!yJIy>wUJBQ|sWsWgwDVQ2T6u}b6)4h4@EMOyJ6hlmjpb2A$c`vpNjjb_?9g-tR zhS@>j^5YlA))>VRNfA_$9IVg%7JJK!$gb@al*5-l1gL{LTW!$r{mWkqp>K7wkPBZR37qCsHu>CvJgE`n;9 zDUft)m&mZNutZCS*a)IwoexiVcg(Y&?S~K zIa(;hM34wV;c6Wpk4Gko3C4z{G@FO{21FBj>==y9B#IvsZyOVlESy)&bIb-&N@Enc zc8m_EijXH}L7reKZJrY?Pew&hg)=8|5JfE@x(K2$Uis(Nt{5z$fh216&_<99a|-TeEKi20qE-)01l2IJU@9z6hWamR z^-xDp4fBgoFOx7<^Pq-N3y3O$DuNN_m{20YkHI|=#XZUhqG7f`k9^k{gS8?ciQ)-G zI7yg1L3@|18zPAoCQJm$Fhig=bKg*ZM~f0Vf+T_)1W_^jxLc zC|a6O5mdv>fT`XFX(IMQv@{_jsD}9gZ63v6=!Ga|kVTLTGXr`XNJRcIMsWfWK@!0U zD6zinLfxV`K^j3d%n9iBBU}uL2Nj+Aj2q)kk=%-Hk2Sh(ttEg@-0e8h?$jaZM@egYV-&UdQfgsli>qo12$e_< zvNuF!V7fE|VTHhb4J$b2NH1 zj+YywnpRK+O`9Tezq705BKHHn!21_1()5%$#>j=YpfZYjsJ6q@z{3|LWh(Bf2uWGs zi6S4Wd<6Nh8DWeX)PmJfYj@1@0(XgE*JMXdUm}A?mji&C$M@{0iXLA%;V?Ke#c#$ot+C_}TL#H##xD zd^jF*bX~$xXm3e(ObYagDY{Ylu1L~LxCzvOH8BeW(x^7sd1%wnjCFcCUB(N=dOEw> zhbF=WFAH8^;4gAK>|9g^7YYx{VA!94vxr}(YM1zrxL$Lx5~IyOgXgLY?B1{b(F zECY1W)H6rvHukb8>I=*qPJPj8vBF%6RNCy0DEbTB97YdZJnZlR2^Fyv*h`}_xWLbm z8NiSWx~3H-M5L~6FNw&KL81z^iKPIWLa5xrc{cp^5=cdcKwEA&)leG+UvGp5DpHZM<%AOrwQZ;aSeQ$(a1GHeBJSF{@-Gn{H@VqBmS{C;2#%V$PPR$E3m(a>bLKqUIDfPCDf}gG?0@Pk&4!+DYr=Z@?GHGpT>5=cpdaO#VRLO|B%z$&Sc2$ufy^!~oGo z%#tcTlincBmHZ`n1m3(Ypz{6Tm_%c>d@exnH=@-5_4$7ABVLe>#lCKb(b45;@2qL} z_MycS`FM0DjvqBC-w%Gnp;Q)}%5pIk{6eQw{S(k$JwIwnz8_qL;R(&*31QH%R)X4Y zXo*4V34SD%=?5nv>eul$fZ+T?dqoINJ%p~^j6=awhdvP@_}@_CW(dvlgHsLtbehW; zmE{LdnLd8#eT^w2qX8Ag@yTerf*%Qy;1IhQX~dB}HAFrc$B&H7@`K}RDAHm`g~%db zOJ_Ya+%}PqLuq<`3}gVFu8V0>a0Z|0`6QvSibzX?i#%y0}DIE?HNz{MgwsOlS=!#0vV*f@g%aIdT=s@?)RJFlAaKrRZi7e4n$U z7QHM#_IwOeriN1r>yc4dT%u-umLI!5hRISQ$S$rhb76&v)W5R)*!wX|Xo(`PXeEI;;u43n9|$-u9PZI@kf{Mfmd6o=g)!*r%dI<)J{#xdxGoTs8~mMlN^gbWiJ z!w5m%nC6&~;obEyGop-*Y`^3p+u){|F7_u{312iq36t8XSwJ0SC1h`iq`KIh+kWX7 zhYSI)Koq45XRnVWy4aP-(A+j58A^%r_ZF=K&1u$+?;nbKqSBkiDqU~B zbCmElI|-&^r2baa9YtaiN%k#SH&%34M419bUBd+Et#7#TqPqe+=Wy48lQME)De4?f z@519}7%E^@>)0tGL1c~W9l#-B11^p?D*KWfN*|@z+1n%2i(@S{pwquJj=?1W<3@I? zy)BaB!eE2b7+L`)V^5=qnL| z$%|%>6%v4Ti`p@?`N3L6JwFQ)2&_-^tO&u5MCU{ZCLvn-i;w_}J9N1S!BRs9LIVFlo@tiF`IdFiud12*K1q&x;W33PerfvlDXtU?u29yW9v` zL{3ACr=_aF;{^6Cwot9nFXrLP0A>?EoQT ztZIuH8%nA=FJ=r_$hfq2Qw(~i4c3c%Kj_z}RVL^}pfscBLA$aB{vM zG}npKghj_t(B1*j?XgNixirZc0{ zBp-uVik}7Hphymdo5b*45DugZfb<9jxh(e22lzV8F9etlP{|0;3a~(gX#lShVJg6n zdp0km3j8SmV-$QIKnuW15t;!$EJ72&KLN%U_>E8tv4Lh71gFW_&^x3OVJ+`)U2q~g zH4)UBV!r{1wkdf#zdzm%b$>2sKXQwm-TeWevqw|jVB&~o#nqtZ;>vP ze1r@m;%1VbBn5nkJAq$CdL{$ffzk3rK&umZH(8MY=!HbyMRM_g#!cp(q-PSK=E;z* zZX%$=lldC5asr^VBz`s7q6c(K65mXcae$P`{6?}R7SNVt-b=QP2XsD}_mMs00KGYl z?;@*W01eLMJ>1htTO|eZGmxWG6C|<=NrflBcQ9(q5FLXKp)SCUiHlb^iMjVrn!I$7eG4S z96$pLaO`YAvPC#{79g|`$Ib+lwgkt{0Q9vGI~|Z~F)m{opqCcoGNuBWwh+>FOaauf z2*Q>n1G;w!ziQ^=5?!ITUGtDeqApQ&D-SA1C`y?7==bRuc@1?P`Go8%*guyi?UFnW z#^grIzqA}Eck}#Svec!5&z0Hv!(=57XniGrl1$|wcBhkniY#COeX@c-NV=U6JH3Mc zh%74uYFNr4`;>bQFj zI{c_xHMTb^rN`Y{Y4K!NtZJy9pJ244&rU#|m)+yZmM*Us?SIid4qf-M`$h5R`p4Z9 zP|GV9Vx`C3i$F=mo-7kx>sF;j<1vCdBD!sQjf zt?^ZTTvflvG&`ZnS6wqdA);IwJzP0Xj;ap09}{aZ=2f>vME~D~+x*8$FBYCF7XI$5 z!-b~}6%HRg&$1L*n=)H^BMO(k=H4%s@#1U$@6s0dkHKgU_3Z+&H2=Zj(o%;?YpJX# zsP9iTK)WMK6T0}oLHAu^k&Unazl&VtKURFP$R%QtGv08=D2IAC1;%j68y7~&^@jTe zG4Iy~VfYMhUWoX=_F&P)0xtC6o5O9g47I7RvCda$XgNIsaLBrnIOGWJr%AR{6TeCzMXy!m9AbBH+%Rw8_EU}@DO7s7V+1Px%b_AB=#c++hn|?ALAU(v(9;vt6Ud|_ z0_{KPh#@8@P~&+V$)H*1@Kc8VJnPWMPml_U!mh0f`@od`FI0qy^uHoIBqsEyQQ}|t zc?$Xd!Ow5dX((xf{$z9}_15lAPgS$qp3)hpq^*x@RLj6k@Bhi>Q9iwRdvqAtm@-j3x_7!x^2B=}&*XVwDE{yxn z#nk1s+3gLf9nGHVlA6wvMoUFa+?$s~4&MM4yB|&3OX%bE>!K5R`&)7hhV-)3@_hY0 zXdmvNxU=X};rSAp2hWAEZ(TxE?(^3BTs1uvdHOMzL=Jz=EY67>f8ZRKpcZ)2`rCxW z$gtlL6A#0NM>cHGys4FawJx|*$WyA{f&Rgi`VKVVPk6?jMd|R2*IT2B!ajGWPeIQC z@6d4>Vljsgmc|hJiRe0yqH}C)cJ&qHbY`d7YGXeW zbDHCIjFaCh;{974*(0WMT(RAaoxN~ z0j!s-fA|v0TDGpEzq!?v(iW!`DSVZV7&`W8@yAcMKqcDHYM>_cPoZ`2T&SOZNiK!C zjV&c5o>FgiT>2%E`5Be&Qd?U~QKw#ov@oAG#Epnf6n4#7>|>Wic2{R+l)1Pjt0C^c zmqZRh_ee>A?ZPA;%f8}RE&;0Acn2K$uTa; zb4gJ(a64yd58qqM#fh^G?fLHytW+2Ym454 z_TyzD_8dBnpK$}|FM(PmCYtz?W89=}0f(_{9benimzR<2s;P=wjIM$8gpU1OB-rD1 z#B9(vTtbn~cKEEV-g2u|Z&E4~B&(&nB&ww{mVAr+j=X{FR zkm->d=(+M|<^Q4KQ(|xk&}_C&ntv zm2VO+5hcn6vIm(MI-od6E+i`mlk{V}x>Gc9kK!v?8gno6GQC%>mhPheppvC~)S0+C zaf@S#a}SEJQd-IV8OXeh|Yu+TpX zk=d3;zNfs}Zp_K<&TTJrq#K-N?oI`XPF~CFH!!ydiR`AdhPJk{TtiP&*tN@yxKQQS zwl!4OSS`KIdQWRdNkcF1_SPC{kwtRbI?_5?Y)-Z_Cp_|mkZm5Hli6bIYxL#z=COI* znZEi$UwJ3}i4d9FTv->}T$9$Ho{`h#=2~hh8`zYreEOIWi+sD`4s=?SO146WF~x1_ zYHR2WyTqM7DyH1J8F$tpbl%VF3B`PLO^DaWD<+7AG^O=4So4ilh3)NpH=k?htu%7! z%xh?W5E3(o(Q$ajGlzu4VK>xgr_@<{9W@!9zwDoG7NL={;{T6d(C)&IP=lCD= zpzz#*&O`qa%&q970Iy%jh;!OjY)Lm2*Jt*)s&iT`b$niBS$8(i91)5S8-()0)UMR3 zg3K~QCzHPIN*E}`)aWXPXD}c(*3nUvmR{nq))?EJ)ed(>R&!oKvtq6o`L7q1GdDy> zhF$o~TrWiC*jo$G&jb7@f?0tQFUK6YT!=uo-@(VkGZn%Qdu2_&w=XZdzObDuX)AE0 z=9PAL+v$JM^U!{p`9Y-E`6H%yU-*$>sB3mP94(Dy8DXQ!yoa`I#65OUNR*piURIu0 zRF_|E^jQj1cw4K{(x1-kkB$uQjeTe_)RJJHL(7Ecv*<89lbL5kBCEN>!qqtX`&c{A zH@5d1n{ynU%%Bj7O78+@VrtQCP-}wu5xoIJPc!XeWCCznJX0t9uxDpE9Oc=qF3#JY z-Db{fsy3IG=P{>|57>`T%tI4l*a*cmbicrk69u9iS68FC9X>hR*qGgEsVFJ$=6uyg zMJzgf1x`F3H48ip*UAaM$DsL;NxWjDSYn!ot#G%Lrj*u%&*Ty4DjrZ}7jwCENgM+%*XC52$-qILK;a}KSBC(R74JCETdhJnxgVv$n(C3J-%1wAZu zL5CRl7%WqXv^ap76?wT{qt#nxaD`9c!>Sd?v6Y`RzMv_y&uhskD&_l2E2^vW^LpK7 zg@uYDR08tEFt(#V6;mcafr<3T!jG_J$5F@G+j`O~ zvbs$4N9tRI_Mt<2ac}jAgxY&yL1sn^KQiGXH&sn_-Rae)@ac4o5LwvbG`HI_nmXHx zK~pUE_Er>E*7q?16fgAi6=HV(+=*FDRCWLTYI{B;k|ZR((mfJ#zU(#W9_h!* z3CeVBk=CHOO|ua!scXRfx?eY5J6dx_u$ZP|DXDGLhTx9$ZPXHKIW?K0$T!Gu$cM>J zax3Z5d?e43|Ezi(0WO1@Du_eaLlPfjP>+Y8i%5SB9luuJFR&7`Y##oJJ z7BN=UtGWryv0K0(TdiIPCf0q#2@vK#s1@WySsHw|@M{&RN`yP~u9L5qdvqx>R@SEM zfJ+6zFazoQ3O2?F6Hx-DnML7{Z3e-=4~(-rnV_x=8*#)v^fCH(`UN;k3YQSl`LvFn zEq^~o{7!Pm4GW$F6M+?Yonm#i$z&n5?8Kv-}BBQ>&w#QgqYAWdOFqL^yI~tn0 zTIoNWi==8HurjT-(aqbq&rEG`x7rIEvkTf82fFoUUcZlXxPD6S~Y)ljcja<$B!Su&K`+LwY=s6bn$JpcTA@iiGEz=wZBu zGn>#G@Jwc|6tXYv&dJHI$uSkA_l5}_`dhK=NuajS^f%&UU>GR%KtVq{fQe}>Q2)t;9hCY%*|v9QhGLGFq;v)Z2PnTN~4Ia!WX_I@jD$UD8&`Y)0#W5eeoq48n9GDj6%|!w)}p?=&i;z9L1(^>jx6d=vA4AOe3e{3 z^OX>ZMmz{BEqz+}!Bx2&t*!l8#)i(`?5>t3tG%?psgk)oIx@VgHwuyEjdiy4+JeH= z%JQRvbuG@tB;YOqr zm}D!OEj+J7AHg%8xmuv(D+=>!tzA_arik_6D%5x@CVmhV3C{hgm>ocLL}P!1m?GwP$TAU=0)`B4*Yxy?Gv6)qHAHjBA7Q&tMGgs9T!S?73~+E z2ao}#CC!La2mSODAG4BqS;(0)mgezJC!Dxxbl26ndralUS)Lw+=tBvM?5S+eYKM#U zDzd8-Hi44uue0W-7xrcMglpuqsC=SUSSRD@*Tj^)9#?CRv9&lQx2>?sXgU^tG$0IY{RMpv2Q57e0fU-5xj+a+cH;_M(*|K`#34(x+npY#+YI6#?(hIMw_7(A;lJlG3mDL^t z{|q^|5fHn9-%a^V4FDHs@{f`3dPqpR;qBVgItbgA#otX%t_AdSCcld;u7TK7cK$8W zS`A^3FXIQuNmYRETgm^2%&P?Saw-2Rnd$*_dojFSt6dEg-+B2j$?jEves1D_BQsV) z?3VTLCarP>ggsmhZ~DrY1G>J3|B$pUgV<;DA!pVNVT<$lcgdv{IIMx+W5BO|$4Jge zbgQ(x;Vb7B_!8>VaOd$<*xS06K1i$O9_nRkEXm5Y5HCx=l$?WiZ*R%{)qV+N)mgxQ zK`!3_XlWh)F`2g>GTmW=>SnA1w6+l{w0JF`Z7uMEaP}HNypMl?^2hZ9tgM0;z|;Ex zd6)C|lJk23<*nieDZilypqAqwA?J4kI)NkZpqx^ZT09Tenb!Peim6!1MLEbF@mo`D(lbQh~c=#RZxC>$> zH{w@~R?Vv#Uj02>TlF>E%k_zJq++`w9^NiILywWCQ`=yZ!gASL#IHn+^n^4K_Pma8 zER*{ce!O?!wI2RTYJneb9yt3t|12f-Av{VG4+Kk(l-`Au>^=N}7Ad8Unj zk5c*Z7J^l+{8g09kM|JpYxs@SJU`w<@KFc-zW`s2)GwNf6To@4UPGcq_q{F1`cqwesW51n0Z? zSEyz`-c2Cy=DpN7Ki*C-y`SF(S>WviPrm_K)cf&%f@5p>T7Y;%LGpTlEq)SU);b_- z@#7r@PXd(tTl@snt;NOvNR|1e0Kcl|kI=YV`=xP+9?`gPLz_BJ9j`j0I;whBwL`UD zwOW;-N><60-+*9@4*i1jZ6h&U}*X{ z{S<6JXrW7K6AZ{1`B88!?f{!&wLC+fESFQ?P_I+Fsm)X?RYqB;81gKf`Fx(-NnSRe ztR%C@sqj_c?__Vv9)=xV?O=qY!e)~{iBE_<#O=gJ_yA1~F`ZCKe~=!MJ}SLl+9~Cw zR%zT;+a#NQu#b`?B}r=BS@l)!hSVH;>4k5o!Y5SqgT2wQz1F&p?##l*+-kReu!n+c z6DO3#Qu@JefR0H5>;m{PA;3<6n@It70BjKxv;!=WmBmig54J_;Z!__=*|nv$-aKAE z*eb-Lhv${WF#18C_^bFy2maL}{`zUa5d--&N9WUDl$%|hZZh^(oArZUG3}mbu-AC7 zDLQR=N^WIUuOrjb(XJnCjE>F7>*h;)TIdtiW5eDd z=?Cj@tQ3}Js0K8kR!F=J+6MKniKguE6qOgZJWJx({F_ z!2ihw=mGdBRTc|Fx;i?udP7D}hNC3CoU7Fju8NM$%jrpNGcul@J%&N`J$muWA4|375j`~7JmZ>Mt*8`)&;#gFsC>xih zA9M;yIlHgNX64OYRn=Kdp4NU}x6f+#>IciBV|~Vy%szJm+uiHY4?2Wc^v``l%SxeT zTa-eROT>sRcM1{35V0E~U?hqFo`lxJSlXkruCB0@WcGLs6=@av!9p>I^LGe26ad+I zAgk05=0}r-T`{d6%!`gK$oKT;l@~i(atic=xzVxqerr*YsUkhAxL!Y)BNln;ZlTC* zC^A7MR5}abB7jNy!Av1dsl6?|qrlr$-d*L&%joRLEOPUTa&IRMvLYP90nb zWU(3{hXnvn<9zjl^8qebLk*`6rUTq1mSzRm2M`!9O>9uhm5vw~=v3iXc2<8;Mw6ke ztg)eH__A*OU`ljsp{u{tTH>m3*wgfb7BQ#mHaTKo;+Uh;=GJ#q)MQxG^E`I_peZ^w zyQL$iypT%+&x3x@2-O>@6PUyxX1e$)p}*%rgiRw%%(>Ay)YsQ^doAfj<$X~4oak6j zcZW5rzTaHp%heCghHO?sHqiW8V*dX?^I@{hj3&#@tZ1?4*PHXJIsM>_=-51aT3TsM zbB86fTR%8GI=0A_otx2PXl>B-dv#q!qU52a_P-Ua{jQ3kgx8*l~#v@jqxWut5UAPjmu% z#p5(d=(?l8ORic^OB&ZxXw7s?9h?Md948%^M<)WDfuVkI0>B4vaNsGb2RP|qDPAGt zgo47}H5OIyc{w>v)oewBelRvVw!JaExyM+L+L2MG9~=+aJp7W7&A8}$Y$r8LdC`aJo%afPs7pCG|r;-Y*R*GL!Y};OP#}=7AEo^mVL0SVeQURInIVohyh?)A% z3-X$dChO11sWex5+AW!#`a!vvcFPl`SWr^puhq|$V(CXhmbboAit8y8BMj$+c}76Q z3kOQ^NJ{~ZcvDCt5!0M}r!;1RQt_%}6*XC+yI*$zoWzqg8^OzaM)Q&AOxAs&a58^0 zS29gZF=J%L2%g#7!8cnAzS(^6%l-_f;0ERI%Wnm}EKBZ@PlNAo9HD*$hw?V6Pdl1g z4%>UmuyY!G!Z&F{%-!1K*mDfN;0IKXgR8luQF)!#pe<5of*1RF@M!a@Wr|eAwVGMr z!+uYF8XU*zc-N1j^}>!H<}*dCs#lYz_#C{_iOh@G;jDZ}@qkd#7txUuSLtV_$@Ii| z;v{V1zn8d*XeLStGZ7>GL;8tyq;#+J4)_X4y|hp|S0epH@DGy`3Ecz!_O&vC`CAAf zl-~|L9~pWsz}BN)@W-cAah2ANn!>skQ(w40&n4KOVUd|GtFbG`V6N}x86N$$6}zZ% zg+%qQo9Nr}6lw52Q0-j$l`X>jE;;%lL>$S_AEBko&3j(f20Y?7EwMMYney|~0! z+7#|+DnXmB$7L0Zi3&{VhU(&qit?H|b7fU&ZdQsTrGdFSIx^gLze|Wj#ez@tA@rA! z-ENU0y@qv_@%>X+WSHlY8QNsA3tl-^Fl)rJ zGR^%)Z1>YS=@_qw==2|aQ*_Qy;?ns>23>kfgUwarwX zpVHKC%BW~-Dy^(>d2%{hIQn-nvM8GcpJQ`*b4PWaH^s#HQc^QJnGs@HRdrqE9NSaV zk{?E?7;@1+_8ER#Hd090T-D>r@8nB;HMVf4ujoFl9?qtq%u?no$Z0ID@G9)c54EHf z79j_;54`RK{WV(q4t6cqgI`8?0ohuTl9}CBm|A5Fcakeo(RN4|&oqd|=UPgN4L!{% zU6tWeBL+POCB!S#(TS={ovx0;8k@VghZ%=<3f0hv)mRBV7|)2WdfSRKi%RO7e2&Jh z@NA_h{WI+3d<;#1C(S%6P;P?>NHB?L71WDREJn-U#?N9j6LKeDJINLy?P9T%^>5=+ zrU^fqN}QE0w%OolsjJT}D`@xh^46?$W-9vo157DHpTRR(K?sR`zNY+w&WxHCOIrA= zL8qAQKkwl;f@Q)FFPqopEJ^kBv}HTlx;|4{ZEm-RQ!Ev;G1c{Eccx}HnKBD4bv<1T ze7DQo&xkzH(rs_-YECV$>`n=P2Q*!vZ1gzI7S3(&%c#k3<85i#-jeq09)lAooUs~ z60`{3Z4k@?}>uPqWbuo5CH7 zt5AZF(@G&xgE`M(>~AP-%uEZPuQ{j``aPa`S4iY7ba*#cM6eBzO+nNg)OhU#h77k=`Hc}mz0=tnP#*b zCss^C$3Y+vig9Q^Jd+hMVjWA&MfUn^OKF}htk;=;#Nv*Bk7wd};YU@5qq(oFJ-g6n z4xem!(UIY9^jx$B%Fa>5V{gqQNryzYLVHp>Uvno2+b-B}<$&XI8HxuL4(4~}HYSrk zNw1;D!I>Q=bsEm>1Y|GD77&jUi=}r<<0Kv68=NQiC;9Q&3v`yhgQETT@P+0q9|YeL zK73LBGWeF-{P^_6)_-`P+)u#;GH?oDAAbe7!0-W#jjw6MAz_|GwzlSRF8^ED- z@fyzo#HTSHI>>W!|7brx zk5T+4zm?kHPXgHX7QdcS`0;6^t2_CS+&|8b&m*mT9lU6iA0J5S?uI6f_2UysY%hN! zHPVldB)!I41nU-%PFX<5L_@|H=1J>-_i_ z$F;xnYpD`HKF8tvl|Mwq`td;y_jw*cb@54#-ZOkJ^kpt2`1lVV?v2&^b0B!pAN(zp z*^f_iJo5|xI1F7Dz+cbsH_836etam%@)wjh&5ut7E&rRphnnKYr-I)8jlUBviT5vs z{Mz^P$0(g29}GJ6GQXKh^5c_1%mIEE&I6wfIs^5P`*nVNI!JyFk|_KO03P`ZJh2)- zJ|Fb?KK>ej_<)e@H-LISJ|Xnoi~RN*UF6h}4BVG%{I+k^*icr)laHs z<+sX4#sA>b`F}81fEws#sCGYg!P^zCR;u5>8sI*KtC#BbuLAgj+SN(*`mq;2Q|;=e z*7{cfd`0Ezm-{9D<$xC|UF)g!e(Z_QR=MED6w>boyjSVk2)&1$@hKXY3m`tda~*~? zeiu%lbyZPKejecW8dn2^;sZS8IJC`=Pw;HjxqMWE-wAN4&Q%9oTL$p=Qvw6yLp(bH zZcq|&k{V*%1ervBmF7w+PhPJbPkD*Mn)`@ax=wy85u$d;r;szrHS`qu81h$nzwB$x zS(>Lu$r9*n>WKUhaY}YKxdrY9JxiP*mk~G1ZXy+$6xmbs3z}ZCiCmyLDwh%Wld)7e z+}~DBK0-Z0eIe`8+$=M~J;56ekb9|XG&!)V^b}br%b*{W1vIb8cN5+66yh1pH}V&V zY&wPdg<1>O!A+5kps$uWX(=&CveR;bh%?cdb@ z;q1%fqpYs}hh#z~kcHhqAnfjmlUXu}3y^&w+hm)}WP$AazM~LO>(W+DwDMG6rKVaJ z3PI`;l_V%2AT|i%0+z&Rtre{zwf0q7>F=C#pG@vE&+UAEFYrg6nR&kV-gB38&pG#; zbNB0twR=4O?DY=(K3BIl;H1|k@0DJjp0DeQr`x8Tn$Zj#EUd?C#B+!5a^G#*8eglA z)$77^508A0t37Ld_Rj409@1%M?Dg&Q3!8Dl^Hc4BZ?P}jN}-#r)%twmJKN_C-~Q>{ z9#_nq=6k{8H~uF*@AE#dwamPr{kzAXXY^@*>9>4ln8&*wk^alQANA|k+Wq?cr_BJp zAz=2j@BO0ut#B**z5YF)cs%d*3$JRgiJ2$;KAAb&H_WeCo9OY6najOR{(U~%yvGBY z1NQpvg?oL%y>@$g&5R1Tpncr;^Ln7Gqq3(?Ry7~s3!Gya-G`OgV=z`l zS{<1snQfZ)@B*gT^cYKdeafcp%xcXk{30o#s==<$D^JWT*Sw2mq?j@ybF(TFYvaS| znlSEoQ|CPj84xrGi*7EdOE1mpOepWxyn`^#JIo(HqnB!Zc@KH1(*5h4Qy5+Q#hne( zjphkcPMDfwSVdYyXLW03ihg~1gXS&#f;%GB9K|oPV@u4*-Lcl@sz%Kb{34~Ky3Wv= zWi}<%Y7S#7dN?nm`S=Crgfb65bM9}mso7I*xwEju|e%SbC}OiMGFk~-V#G<)%j#FVn!xJ~8uI(?hwd3pnn(RxP3@WT#>%34ryQ^{ zsn99M@MIl+5tmw$RNq~lW^7Kpl}e2>MAqn2;=4Msavj(*&c{mgKllab5}|pNAUXAx zEK5{IMU64FCm&zoJb^X8_Qq<^=h#qXPc2DFr<>h4$7#)W>VU|^^xVXxwuUI1=3)H8 z+EH8_o@Z^fCnsorg24W-QA}$uio@H)$TALZ14HN-o@sxr&%#rQe1 z-EIp@k4v*x6tk(`lPJH+wgOm#TuVx3Mc0-GkIVdL`D^^n`;Ge@ z_ZxxW>&N|m>35r7onL`pir-Cs*ZM8;n*s6h=X_85&OhS&vhUNr5BuKf+vZ#9o8=qh zYtW5KTbJ3^UbSk*yct@^H1e6xDW3yAdwrhp>Gj#>)8w&sJ3ZPCpgNPpgxXIM9Vo^m5gpwCmzZw>gF^F&=vpX2JQ+ha;A)2vB> zI3qYeI88skFy-^v(~^sCfb*3pvCf*-zCKR#IKII-L}^xX{xX7 zO1p->h|aD}P3y{w>u64-&k^Q`ijuNsTW9<#{M_9T6;oo=x8x;v(Z#CWbqzVS?XCKD zTZ-l}dLg2rw4|{uv#cV_h)wDat0~E|C$+biq-kF8_gv}IWi3g~P3$VpskY(!UCE7x zo(`)yJuIs%1p!_0nJwM9o$c{9yJnoe2+OVx%WTYEAK#*R8^7qxN~(y>jBm15m1~}) zFA}3ubK9z#lk!ZOomgn6rJ|!Yu_G*|!l9?n=Bn1}Zo8wRJ=08|jnSp8Wi{!g6}4XQ zxo29ZzAde`J}xsNrNjqI>}U#W&PvHm%_=o&Zbw8%X+>OTc}7Kbdw3On&WP;FwM3+X zPZZsa*%29;9+lM6oVC72zGc+ls4LEl%;}7bOrsLRA|jHy>|wU-D$O79i}tFB)SR;P z_WGpS9?dIQW_w;_cWilEc3FDUwe&eBIVrQrR+ARrb_;z@Nnan|RcWs_SkmdUxgsaB zr6t_b)wlvbw{2?8sLE)Ii!|lXRkLl4we4Zu2{ly>>6$07%C^+bRHGxh%o3fZc?Q2| zZBEGC6tgL@y0tS_^E>(`t30lz+^Wy4Y}1^;LR*bBbxD=+F(o-AbMS?hriS*~)OuTV z{d&#a_(Dr@Lq(f4Dbbu7*(?=aXImO`J-rvv)t!}_7}u4Mt@#ta*WBJ&64g}^U1rS* zz!#d^Y<1@L%*cqEHq9Y=q1B#Q(-7a>S#I7S?T3O^Tt)9WBCVy}aKUMA2izc!1x=X; zuiSpUEiCIpe2p_$YL4S;oLMWCK2MokLkVCuR>!nv=4NE&XkNq@I2)f$y7PM5@}2?w znlsBqA+DjhJv*-3mSd@?(7Z}t)Tc-5OBzeET5B}h@QeD&iu5eFHnpuPPje89;LNmh z>4l8w&gx=YsiC!2bCO<|GNgvlXR@+QCo@}ybWI4fMZ)jv%+^eERkEqwWFn!9GisIL z@0?9@Eq<GM2};R+eDJoE1?+J7bL_p`tdcyrsUPxQAXyuT3gR&aH}zsnk42 zB}8U4uWt#Djjw6wT8Cd$XNGmP))t%L?EXeXR8N`6G=HEkqSI@uTWVS(vJ*8UgqSk) zS*3tb+tM-%eqA+nT9Sjfs;Pq!%~tv%E`EJhYeufQyiIc_A*Rkc;_36$p+z|Xrp_re zZ%Tckw&mIHrqDwCT-p*5SzZ$BXelmTPoJj_uk2U= zXGheG;TI*9>(kBkHJQeo2F)XgU~c6-M?A0h_&pdU>!wYY^v^HN*A_1i z&`3x0whh{{W$<)On5|Tsz7(Dw2(yi9YlGowgTYpcsdqoyHA@R08fq^ zZFX(3KRmsBBQ(Fr51s;VvK45neBr6{CR>HpHWQvEZnEWQZ8P90;%0a%@PVh^n{5v5 zMjbqTeY34dyTKct(r&R8YOAKh)4(l&E%1V;E7rh!m0EaeTVpHNR(QhG*)>2&fd@Rr ztc71oroqz_Yi$+!0Zl-o{}=u~eo4MZ!AWxI3=iF3bwBt12`sXtl^$CNgyW?#4XtjEHniFrkUE6d6JW27k z25oyNJn0euF*5|7dJ=3u*Uq>eo_rGlkq_7VN>U=!8+a{@z&{dgS4`6`x&|KolWhy9 zY2&Vj->+S7JESeT3Z5>kx1H7YTnSGnQfynax2%RIYpQKXTd)eAW~JHwq}8s3r*G11 zcWC`rz*Aeg?Ljbc2h8%{;5Xv?k#E(^-Wh#xiExDvoNhq|rS0Cv=^st+^7>z|4ljT0 z?b@ZDPkLVA(d*#@k|5kPxJ{c0gf_<*X`8K9TO0>Z^YWnNg|YC|nFn3IF$SJy+X34Y4Non0n62Sa@bsD8_LBCt zb@23xHj}Acq%Wl?bg=c z2v74j*v?-)NAnLk?aQRpLUrmEXWQ*O z-Uw|!TgYhd+mEy#gZh^h3GsSNJ@ZZ;k3R(j>?xYW1MNwpLfRP=GE+I5zB~x3J~KK= z`%c?jsmL4pJ@~kgc2)o+v~m`(_d6({XIdWhyLH7zNINqN+Mc{wIBpD|gZ(+$b6~Rx>2qnrit&ka4HJcq0xwWb%9z zNFUe<1q2UN{PzMN=hajJo_V=ATl-f7)&7T|*T%Qn|2q`2S4}~&@mu#)K(Zdd{|-jX z-^&f%kb7zhij!rBR~{q^Lb^Z4L_s)PLd)FH4e6wu1%#b+BuK+$8)>0#`zQ9>5}2)y zJKVG#azi=sdrP4K=kBo6h+nuGXvc*vh1_WuEjQNhkosu~{}9a9;X7sgvp{=@Pu^9F zU2+t`LeWQ{ATrNyNb~TzEeoWLTbt%c{ugcy0y9jrpZB5%)3oSGTMQ@q1&ba`#SffS zh6|cr^k549$f?HM0qvp(*Sq}4d0Z@dFj)%%#-DQoy%s%~1dkK&xOUNli3s5YHAQ&| zET&ufkn(iLo=`%l@d0^%f5L-~-yUq7pz@q_O0l5LDfI0r> z{9pH%{2O#v`C5Ii_P@pVNnM6dhflVT0TLR1qx++7r+<*&kA5Hez2x_hU$bAjUx?q# zfboE#|BwHvE-z`*r~YgH{{Q>G+C*lp8Pc?mr!VZw@blDmc}ii=uectjS*WL{u3J0U zJmK}er*`$W_wuFu&9*B&w~bXxzu#gnt&;zm?n7J+tt#&Rko#`+r}445pDDk zDB0P=71E|QTd+2G+xP-$e+T_GUz%VK^Q38=wxz4KjiYa+=9QRcT&(Y=X@h(9A+JyK@`cJ8r9}jPyFt2%J=9AD?4eHD%pPi`9qge-s;YwO zS8sbiPntFf7Eyb6;NQ4^kX}{Ggcw3++thp;a@@ScF^dzo2Aq3)aVsb zKr1~gm-OsmnPi2Bo^9jk_o}&u3y)K_9!LiVSa^erKUTc~ezEXItT8U!TCu67H9Sf6 z2Dr<@8(h`|_J;ITtIY>`K1li}Yt|y^3heOJ+r|o{7kX@0`{;12U>NhHJE#NROOy7s z;duTrS^6_QynU-Qv)y)O!nU^|Rs<^H7Pf0M-i8noc!SG~qI#oEYNsxHyH(oG9$KV9 z)`_d6(H82&mC`pYwqS7kv_Lkt63z4;$btOW^jD{UF#S94S>7Su$=;RTcY61GkH94d zKj`M`43Mu4Ttm@?ljUmj9|yP1H^7E^H{>3u0qZH|8#v=Pgjopu%5~|Ov(1^YZ8JD~ zLdG^; z0}<~XS;BstGAEUUx32HViD;^7DfLjsKC_zzr8n$DCoHpc^BF8%_A=c29CqwD3b{osWhgiXqN?srNzp zz?rAHVe>v9-2(mXt-FOGF8vuMun)_;z!|J#!eTnIWAzDj**QK*>`i~jJmBFICfz`u zcY5h2=yVU=S5h$i_0oL_EJ<3fzj>jgkG^lZ^w5X7^SyQ7G2{kFixQ=qPaimgHrFcM zJoe+1b(?o7Ud)PVf}{y{@3+~TQ+98zM?B6z&L?zvSGws>NY8Up zF#PS&Jxe8V#&X_Sw%zqdezv!r&PLFQb`Gste zkFT)SmQ^%$6nAy$hS-l&tBUsqWP$A+Q>J>JTNoK~>PN0v9|Qe}Hhro4!`wOEJ}fj{ zx&)aVynSZSuTs=mbQttuuTB~Jc?QY2XZw`ppZDrsCG9?oy&WUs-#2+_u_R7;AzN?((xdqJ88i{eV% z9|*v4Mc$kKZqy2TrUgsh%W8V0Uu9I^D4oct4!+7W&+|sl#SmvO;c>v@DUZ86syvcC zuJ`bt_U*KHr@c6B`?RiUj%hbfldShuLU_$!4{YBnHC%X2Q*~|nrt0pPypq(Q!7Z-8 zww1J(RoGJ@MSwYIa5KbioIHkM9D}#Pwa|ds6e=_b5v|fKk5aR$;jtEarzdET#j0}f%B)zUqoKPztjZoV zSm{c3qd6z5G;C9%xgHwELRUF#T4YBo<+SU+jjnH?OTH9NL1`FA{542hrYzP`GaDBJL zQCVh+x5c+wVF2=7f6YwaWJ#>4Z|h2`3>sv?v0R&ybc5Typ)&VpjOs-q2!rS>*^ZALV#!S$?}@4QCMgrHbu?a>|W)`p7a zuozQv&|nf2x~tl{5XOfE#d3wFH6^#TT5D6Y>y1H!39iL-S#mOs#n7GcF+qbYD3-$( zcSTxLb90Mro3eujF-Z1-w}=P~lKl#nGW1`JYl(GSy5T_#l0E+y40aoYAX%V58u*x2 zHN?r{rw2|Emskt0J-(faUIUN&*&@9K9!H?ppq86mYgr%P5Z_eN9NSz|9W;0oyjTRa zz|6roSw9LP9K<-;`%9_r2v*zP_oy}qm6evj5Wwr<@c8?KRE62Kit60DVsm|*quS9J zGzdYl(zeH_3L`w;R%=Cu!NOm;4r__eZph3_jj!y2?u77H<(S2E)!9o+nyVX4u;^Jt zEQjralj+pF>XN25=EFPGftr=@ znDGU*8-ib@rla&NM!s%6Od|!6ugZRn&+axil_ook-FZQSU=)y+{)*ti@HqB0Eellh z6+2qvruw+Lwi0u0L|M=vs`!du`P9&ZL9V~@*#QP2ZdSUFwGo13rHo%w8v|W2EopI0 zCDC13-R-a=Ly)Xw1-1ojWr6F9@#(gxXb25#%K(l!-}Tp4Q+T~OHA`RB1sgF2$v%IG zSRNX36cn__Pt$XHc!`Iny1|haqiA_lC z=e>-R)&?E-1my81;@Z*Ohj43--| z;Fr1^q*=Wgf%Ck-_n)gvnX<3w?$XVXn$~45Sf{I=jE5zgO4rQ%nQI^pHrMA($bsKG zWARKagxEgo^XZIZkczPt;$uyasPPKShEI9$FJc~iFHdQidCT7Gtjf zM-OXyQdw(tAk%5;xF7SvQmrYKQL&MRz~dw^^FLf$Jm>f?m${4 z_95y6>w=<%%tXbt%aO1?r!6c}-yPQw_*>U99p?79nuN$r$!Y5YnG(Yx?X?XZ)~G~N zN<&JZoSt$o)Dac3fby40w;VpAZCw&aTGtXRK3zACywZ`B8~6r;fw;bHOH(w8TZ&STQ8@Uq9^x1?*J8jrw>g>B>p#=xA=PO6%MdDBCEG--8_BkX+_R zR^T^Zxt7_PWHq-}HrebsiGd%oH=E&2??7fhl-2-WToriM71oiQmC<0x46n>B4`lW> zsfcPDWMzB;Wkdz;c7<`OU*Lr5$GWWcQd>l4gTWa1G%IGuT}Z)4?1S}B*e;eqQM#YF zggg=7fM1FNf9_f!r_2TRs(zf>ZUdim{jsUpRNq?NQr6bg68J5vJ?t#@-`A=)vl1(F z^tK99bxYu%*qi47w>Zo2HYA~3=v1BlS$C8`EhT_>C z0Da>dhf!M6P$q<$5bDoC`&Q+Ha|B%H`0R%H(uotcWzyo+`6}lKtd*dC95m{m;GnQ` zbv`&47$H#EW|F>Mo&Vo!_2r=8i37d`rlJ5X5DOR5h61&(U+JdanM!cH)N3vRj}q*u zmjN3REAA;Hk~>3%jf2~tj8d^jp-I|oDH1lBkUkueJaC3%i)R5c>gJO9+wZq6m7WV1 zqYYTEjzg0(Mr1pOS+PZg)@^XhvbS=t}8gbo)4ArD@p+WJk0Fm zTZ;ZW9x^iWcxZeITTkF42kU8#aG=A`$7>J*LzU3sSrGC?lQX{1C?%x|N1CuNLtaoP zmdNg%&6?f+@Fdy6X~kErb8)+Y1sO&`@Bdex^NP|b3|y-U-!6g`Y?Aukk;k}uNHk1F z6Ec8T6h2`G0q!%L53AS&*Gl(0U}laU6LpjfR{4eL|5yaBRVK;$2PC!^#%S4yXnq<^ zxE^2O-NMK{YR?FEmPxu0n1{}E;;IR%a0tVxeP*->Sgi?Mvkn))_#StIRe6N%I*#+2 zXnqam_4y~n9fn-s6@^b2y0Z23vo`m?1T?>X(E*-p%MS!1xCIPB^|sYO(5`zI6wHQ^V9;3bcm2D5RAkA@{;m#ki9W zzbMl>aT=Dd{h+YXMxs@5JD+DBIL#ddJ`FR2R({AKA(S@ZR}%SZad3tY5xv&iVQXvR@)~SKo$GHXApk zhzTb2l?pU;S3&*;WRM24)L#QUBQ@0xcr_1>fmWYQEudBxx8$3orD@{MLVoeuDh^7U z=bkhMjkARH)M`LC_y@Fee?DcmsG*?GVri^M%f*cBX>_M+WI8)%S$=H;*v zp4W>Tj>5`o%Q^5~BXoC97;AX{OB-Q=<-wkirgrnig+cITJRIG0cc-z@S}RZPv30_h z({-k=E#=WTxwoda<=i$ zfeTPiJP#`>z+51Za!f{YF8;qtIj{1P2F;A!p(V8Z=a)i#C`^ve5>5;~cJQmbph4qP zKU-c&=Yg>=NfUMvgDM0K&jQ>z!=!DwxO3`7Yu6ZwGUTf&8DncY>!Azxz>Gj$!{19Z zp=7v1$~XuUY6ql{B+2SsXmH3p(R46I;@G^(3m8nvG1+1JgGO%$Ci~n1H&BIyfe{Ml zj572CfQFdF^ir(~0pk>``r&!3hogQ8^ajI($k&OOhTLdg(1@Cj{3?*a``<@;eZ*Zw zHLHY-UNcVrFlp~64&(M2Vx$FoN+Dz*U+`Le$os6xVc5}LfnU!IK~uz%uYUb03^G1VOF$}M&U)4mV={7;xyNw>Jc#_(8- zw<)}d`Z?+>bk_NA^F^XfWccNXHp4gaRZRv<07ndG+dPF!xW-iJLoMOBeGEtPVC-Gr zs*NxU!)cq}K0_U3;zUNcA}0U|vdM+3LB+?u-F&yGe=On1*@i7V`XLw^zk4vk17z%v zVIuxmy-~o#WoS4LeG9@Pfj~P^Q&=#HS^dPa9C;~um#Bthn17!C#IKL zY~rD~SDy95FeH;ye0u@TLm||ROm*1EL$Q+w{PSi_Gf3;|91EzclIn$RW@rPCMxJ`6 zUZ$5e_$3W)uwgtFYu?qcaW?f8ExhyV)Zun8z^q=qD|Txm4RGHLXrlWTl&IkQMZ$r_ zjQnl*1|D7t&E9=~MF0@p+b9z~wy{(+$PBHL*S9`kM^O$&x&KR8e8Kmtqpq;!RJB52 zk0}Jp6R7qrAd`&ahMS=dd~zZc;yU)%)(0@?3gEvjp1*w!zyspcQFczaLS9Gix+4yP zxS`d|JZLX9nS~7WJ10=JYR**E~QTHpKphmh31$12w^WX z{5)5DZw|xvrI)cm3XK%QQJou}>k9Wxlv&>A`Nr)x3ReUvg2QuoMZO$yPrK6fa2=VvW?%GkGj3pu3h8qD~YJB$J_RnXugqJc9$%TIyNO z+TFKQ-q?}~h0B=1eK`1D6exEW$%DKU$VP#3TrXrm46ZQN69a0jAiftyI=f^yis`1& zQkd&k%6!iQT8-5PHwZbVk&wKtp2CyY88*(AGBRaW?Y~;wVT4s!>t8^ow^|;sjmO^=CWc5@gq%Y8hPCVOPz?@41eMoRrZ zhpCnFxJaaw!7f}Hq=3hnNLl<_kXx4S5JQpe?c4?g6qe7^R7C!7h3JgiWv&%UFd~?%0aO&{1$6abQ62HD5{q{ze} zV-;4FxzO9^o|JpL98DZ(`wo3dNVuMwt}v}2+a7+32!A3D2*<_jI4ztjdQ>O&DGV$) z)?c1xgh%a?$2#PU8~9?Ld7{iXd@7sNxc&nA8ixg~IKu7dI2 z0$sl4nG%s@C-Sl^J0pr!f%WOn=Arsi{3-B(B|Aj?GQxsAJfc_+h}^ZKkXjn$3nzq6 zEP$pakBMf7j8`m(hj3>cgM17oOE}YimW+!QQ-lS_XGF0eu*lcW=?jq0`^KISZEZ4Ku_RD& ztM5l~0ElKv&^HwV1{OiO<_NzeXh+}uO$9M9Yl*z0hs+ZaZYIJNE20!v#5|_>S^o|? z0qt*33R}+LiY0-B_s)mmGC-e`B|YRRH(14bK8rX4JDcKjQ`)$YW8Q z@Ou_jbf7sN*!_$2N_W)H7F++1~HoZ&Z9}_Ym}EjL zOfcAEzQ1Op-R~u{`{zDz({5hICvStu59M})93XA}Pz*)MZG;!^_oBG!cUp!X2I!BE zh)E`>Lbyju>b;M$g>|88l7T$x2CfkBk>-N`k!SeFsNbJ)(`bcozY-dK??<$!L$;qA zVW5tGB%U6$Kk>3X>F9-jk_p}p1SdUSC}KU9%hJ7uT3k8oIs-GkL=DMGeaMR_T_=$8L&*pULqu!w6>ut9{Uh<_Sq$j& z$wRTt1HrOv{Yw~U+GLW4h2s=P-BrQkQF}TwjO);Bk!9-)tg&Bm?$a zIF~s8tw?*ZFl-r*Ma8G*f~;fzM;_%RYlNd5hVsWyDGx`d!}{eL@tC>q0i^nQ*jj^& zgw`JhFX7?1OYB}#ifR{3PdYGOCK7!tl&Wi}n8$u6tJt5)jUHPjH2ml<%VqFj2Uiv8 z|a8ERa>~{6@6_CM?txiM#m0b`HN6+57GtC9^!tCZMul9>b3{sVy*0 zd>fBPCSBi*C!la5@lp}!d;@Aj1VV8OKiJAcOAEjd0jM|_oJ(UxAopxlE96e7g5~0V zR=*8g2+UH{u1TW(%f&?FMto4ga&cC!yS-#K5q%e=g2PUGcuXzuVeJH0uw9~gnuGQE zD?qdT4z(o$p~&nHDtIo{?155`8Qka!1s(8n$8MP@!g5Z0>I^K zu5{_~jnD#baRDf%A5<`3!%yQYve`Ixp`zbGLrp# z9#0bXhF@go=GGQagD!1`;SIPbt{2zyemhE;Df+VLU^tR2LHl#~5|H$XtAX_XzX0i*2gRi0{<=S#$9)Gi z&-w{xCLVGE=>v`pp!QxP@?e(h&EoM??<?bVYYoh{jZAY#!Y&^m51K}yX?KMv7x*01&}`anvirlir=5%3N73xdrJg>gW4t2o*!!VcaRIbulehw+K6lV5MBjNJ z{MhGemIMpUY`&axvD1p4LQ2usV_F0RRFs3uk-*c#5UQsWvD4~4LQfAso-f2rs~p5f zfv1NPuIM0ex9~JXkgFkNioFFCE0M#66U+AvSqjn5!@~gk-5;RUOYT>jb)C>eu3IUt z2^~xb`Yts4((W>-dZSt=bm9|uJk1R7^LfrnM3Zy zw)><`cKSbY%3{-x*NBImntl^s04j=m(%6gxzeE(O0iRsBQFTm)op)JG=}pDH@eq!3 z7qV|q0@hYSUu^~L=i)+jUxkH+8m_d%Hr{~y?wd;P2>6~0tm^*NFmSZ#1#fYK=b0lrblYMF{s5MgZJ*29 z_QPXB(hVpezp3Dj#GQL^V?ebTMTRx%jRAU%L3!S|_d8kHejlhN8F74;dVL@i*T&HA%BoLM0;oP0yVd5!uu!=Gg_)0bj;m3< zH-Zj>vZ((dDB$=eaRIn04!9Wl;E3T?*7&}32u(~GR+|{HZk(D26h^)nX#Ck>G%>=| z{sHJ-I^qV(+xTdD>={9~3^Vwnpz1^OBYCs9**LrhHuBpJNE;9DlG#{h5!~P)T2Dqg zzdEpi2V(f#?k#vG3o8AJ3YeIquze(li0mmw3$ow?MLhl#av4%5=Fe^R zJ_$1Xnazy)z70ryCCu31Ey97PBc{XrxeepQTNw3pDhJyp^5W$Cgd@jFP@LSLwtMD2 z(71rT`~lj&?rHFK8RkBNWfioT-@=<=nnDcU&Lkxju*&{r}HP;Pm{;Q zA+A8c5{@;3Z-2u>yG2gyih{H{=6mFQomF z=z!VGpbFLG1zBXw0kY{lX8eRmMm8H!r#PfgN=^aU^(WC|97L$KK=z0p?c)c9BgXIw zodoC1j+aPo1hPLsiQ>?Pc-K50z$}cHb?$a}0ly1jWf)ZitHUyRLYk1bLP|;9xJrGv z8y1j5PrPv@4Iopxs2B9g1 zp=R+YWJVYlgu*I#@k#zK!sZjOTHIi&G{6An!_ z20oLAKLmp{9E)~lv&Dk$Q?kV6xLPDU$Zem&mp~1OBdZD!j|UXAk%pMmXSGN?iJd-t z0oVk;2%73qx4|xWt+-|a>Np_npS{=0@+yWXki4}eK_s=v6?=1d+6H_R(RIwsViaWB zp9^=>^yyp)#0u}d5oL7>RFEwWTP)&nCknhcJhh)DeNj(_0W456J`$AGpT;y zHDKO54~v;MmB1TVn5^{*lUJYwI?g9q>s9flMI|UqEYyZqWz(H6%(B$jV^m*fIXZUWo@_q9W7MH#ZZ#cc&iId z++D}ziF-TP*~!c3+b6_rCp>REq#@CsiL?7Lm#V2OpHXI2c_ zSjL|h&wG*;mChirFVydqMXm3V_HV?Z7C{wmAWzDo7P=9W1!DYlv8Y8*g$u|j&<=L| zP8P4xjhL)^ju%A6CbQwPTqciP>Bz+VFcKzHbi@pR`2n2aUuNaxssjx_7ayw{cQRUJ@*ZBU?NY#KW=T-NB4_ zXgX@p{z!cCZgJC*uN_&$mw*k}x|AJ~Sl08*dXg=T zZ57E)7E0lGB#?*C1&&(3jm$kT3COdPb1dm6;W#n4iHD<4c%Zm?(Yu-Npc*px+F%hy240@>(8= zV?Oi`;EXV99|PKpo&oiL=jU#kehm*tUzo_hPR_aMz+K1}X3Jm21t4oZdNp4Ft{T5D zCJR9KA-1LdQ%nFAa1~#`9oT~ZWrG(1q;LLTH%Nsbf{e}Y2SWD!21q9x)x~q-mLp3) zsuDvcet@`BTy5dFmDk|ek$0JhH(h3+o5F9&Q%dnWASNJO(gz0gvmATsXmtz`J3~~!?6XGM#_gsl%0N0{?$X>=xo92BYnDNa?NwOUpM9mKLUL2GUP7 zLDP43h?|b{Ybc(t8=F4C;1{Z3$Qv+fqf?BgA&=wH58=8ZCpV})y#OUe;h2$$W=P?y zglii8+ip@s`{!iIdg4;;cCodS%yWPZBFzq{eJr3qdVV+kXl{pes@A1nR&gHi0(9?=msl*L^;2lEy;WQ_N+z!=OlfnG zceYWkA8;zZ3%TD)wMhV*O<093%?Q<=TM5y9kWZCji$hkqfvU`Cy{oBA|dPWToMPNP$J9V+|bdQkT9u$vTuofRTOzr~Ep{>Wyo1e#a+>v0{RXqbzl z;g_N_F&V3H2%-(}D{6e-4Is`Yg{WsUwwr2IxdQ3`#*lk}Y;xiX4i)zr!4>{MSn;k< zTnt1udE?;0*u`o$Wb+}G30gj#&yT;Z z7EqCLf~(wsww{+IaXjNDB_?=4JmQ4!;K%Dp-1!I4!V#{Qo#L5C%L%pY;A}xVUjoVw z^(Tq+{`oLjgB!%1Ms+J(Td>>Ly-TF`=K$%<_3n@x(iNU9beF@SN%aX2y2%^WaZ22B z~Bg!uXqWX12EgoZ^QOyds7NorQ zeWLtA9#Br|Q|M=+^E?@@@M=N0?@{y~!$G4{BBnWhpcZ?m0hc58jH<>8JxR#OvDOZY zb4+wN5kXWk;wipiT zpBEi($auv-t%UuGd6EErP6-HY4Qio0EL4W_BgHw9gu|gPiy$ajAx*r#LEzsY7r>8| z(}@HaA{1~X91C6g2}3=Ft|W2+3I`-|B>~&U&w%ccb;62gdj*M5iAK_sv&e#iqK>Txu-4I{Ju{7=!7W5T%j(f=usTZEY%9ZoJ zN3;zN!6_`G9^HaRdZG0@KXB7}g_?n(W$Z9ETq=GS+#UQ6!Ia$;|&VWNgB7Te$_i!or=~0^S1}FFvxBp(=%i z9ogane;JIAv_8k47cUYTWrfy)YC9g;vMG+P=)S-M@nx$g~#+rH~K(Pv;BXkHdi?7<~0~v+D%VS zE^YLIDjI}Aa~u>eO=^KchrvN#HwV+10Aqr*W~>1rhujdaP-IYS89v08_5~dhKUXAd z%KfHLWS#`#zkC*zpzuj2sDT@y@uBlXGMiiif6`B^ad;jktibL=Cn(~KI}f{|UUAa@ z0<^w&C!VA;6i&dqu*v3|AR&DZL}W|Bj61xX95?MyhPLm{`)& z03pKLrcd&Pu@fR?PA))UzQvZa)Q}J_GZ|zIlT?%+GAvXsL1D$E6^8jCA$i}MK>Nt^ zrGni+Myd?BEHxxRzsI$8O5AKTd7n_2Z*j*yhiM^!Y`8BF-EMJZy(dyaBf|)I!@;VA2!0D%c&Np*ptrYFinQKH z3W0e?ajZoXr3x$#5JbQ2N|ftE?8~L!-(?rL3Ceh$CDQ&m0eECgEqLmBw_UV2SBzu5%(S=3MsukQ24K#FN z5z&suEo!^y)*@#CDyB%8Y+%IZfIS}ADF~_Sgv*mPUBMV}!qCM<0M7)=!IJw$%C|gf z3YJKjY_P-8utiKol*tAgjbRk;sMsO9vB)xM*ea4xI2T-7;|1ZIQ)8l*-0gfPy9BDrYwzVF6^@ z!d31l6`7di?&EnPX%_4XBiIfCfq4J2Qb7<2Krf3W@irF55xN*hn1k#atwUSx7B-cV zb-u$}SP1TW59WVC_K!PPyjaG34m%17Ci)!U?Q%8WZ1R0B#6ZQ-1+@VvVI4LGH+;BDm;)8`F5EjZ21 zu=C~>cIcdj$?sroT^rS^ql<8%q}Yvmg}czA0Ng+Jxc_D>T#BwM^3e zPnd0_dWIen?jjU+{Eo^_(v(ZGIdmM#=1g~O6|XgF0dFnYi;DNTR?JKSYyq$G_HPr5 z)&x~pOK=AqZkvRbn5FzYH@&4Wli+ZDnTM8s7;j32P=v#^ei5v7b(^;GxJ7w%$;Q zlN+vjMn!=3EytgQgUkw8&KE$6$e(d?8^9L>CpXhXK66vRGQI$8!O&++eR?0~_A@~H z&JTp6#p++`3h(_3gPVc$%^$iUJ(x#61mo;?n#LJOcWMGVKX=peC42$c@`=-UFhaCD zWu47`6>4#;@r(Hq@KDL`3%DB+=J#o&U4nIe{3AEC2k~%fz!yaOg$Shme}z1aRlLX* z>H7n%ZJ^z$3H*4@P0JU$7BB$?;L?mb3r!!m5r*yfmu~t_;Vk_mtk1%)i1MhL(NgiF zu<4ZB>Ll+aP4?bf{ZD?%|9vAjH z!_VjNbUwd(oNXn2YoYB+z7h5sgU;ijIAFWJfh^&W>|M4sY=XMSmkGO#6)@MefUW0g z#EUb*Ompccp`3Ji(Icl-auRNPkSfo>ywM*XfgFG1udCY%>EaB?T23n@rO9m%a{O7} z#pI4@>b>5H; zyB-#Rs=%e6V2DJ!p0fazkc7J)<#l`?^E$Swr?wNy3rXC57a>Jm4|I<-VM@t1^~`qS z6*AJ~riViYC$-3oDLItW->sYRtQOVz+T_$z*PmvAJ9n{lM`;~6w=P{3K{7-thkFZJ0k7Kj0Zk~-n;mg zaK5q<6jBoIqW2!7rWZ%U+A6X^1CAea16PSl1#iRBgt0pd!=6&;hIECTMA~{GBR%Th zKsxpL(jqr_m6)`r2z_TG!sJj$nmEa$ZraXEOSIt5j1uYn4}rG`Pf$?UYrWBT- z+k2*AjxI@htj@#D|VlfWnN1Ti(`pCJVr@17;5jR&NH*o>v&t9>R!AICz75%$TWm z{CV-|57n(OqoEzHelHs|xX27_A`iP6G=&9iE_C_1CnwJv!%_L^L<9R%V!BZ#A61yp zzJs|o{M2Lt@wkuNSF&8ne?b)B96{dQqY6XX3sAt0huLJk02i9EehYa~JaW_kg&hqI zO2aS82X{XJ@ga|hi6^MahSvKMMwW-O8_hslCo9P_Zm3t-(s0y=9+^D0?7(dpooIHx zEFL;)0&h?wdqMA`^1sJoOq5g-I{tF_(#bhI zTR~#itzgzt>k1GE$0pPf0AM*|^4x45`dxma)bI%;YDHN#9FJjU!6aE4Tq!awF#IeY zp9O=wJGc^9zXgOe7B7kJ6QQfrtl!y!0KSA%I89a|0|x`a@6g_g$0?3K3r*FOD)yv5 zkH>?pQ@C7^seeVaJx72qiY8E|%`k&DMR&Icf$5R8){}zVsdmtTDXTf$RBfU8! zI|u^TTTyT=amvX;CR>}8Zc6ZSEujEBZ;5P_F#!*5*&*U7 zOZ~2O#gqRnSRprH25xkA68qoE1bDi_(f<}{@4EqL|FK%!ay0Xw^x&bmE1=^oOjcRO zq+Q{7jd;YVfN6XIIAY{~YmrFCWas4If9o1Qf-~;2jNKn7P6g-=WSH2A7}1N$gy<4v zsEb0`KHyIUNYAc^OORolBjs@>fm(DCvahKe@FHYb9}p0Y0}TnwMH7_O&YuX- zENg;WkclmMp%x{$1ld`w;*^wa-MI0AX(EOEUEx*&(Iv=EJby?^ch}=3$TH!iNjUJr zxYOz&7-tC){3w$a1s5U9CG4Ek!$fx>J4>+eB@kDFyO5EF3p&uF1Xm$Dk>Na&c*3vc z*`1EVP8sr_5pA6Eu$wtN4ZGj7M16#;OfWs_5#jQrNW>3JTnRLE6VIY6B$(O{kl+H+ z>hVY2;Eg;UrMANVk$ICZYEonBxELfJO%5Lzc<4j0KF^NPjKhS9z)_hhHSVT>Fus6; zz>)WiPZm%C8#0*>k{@@|cs*AD$sK1Nm$%b5f%uV(GT6{}2+s-_1vj|jd$yt61I#G^ z^{L(Bkt5VJXrm%aU1lOya9d;lY@AK#tWhj9H zE=O`Yq|oTlM~b<}K_(Z<%1WN)V)r;RZNY~W8XeAdbdSTd1s8sROfL3=qVAHR3XKk- z%rOpflx#qs*KEvqa7ZMfnhlgWPodV~=8cYVm_CSNn!wnC*BdzIiZ%ne1ch3M6P@|T zVF@fP>)-|fgESi`e-f|LIbGwB@~D5qHDxj$< zVmE0Iz_wdIg|?3_5|d3(g-$nR2*CV>&~{4SEH(s~=^oWXD#eZ&0$}K`hsawB1qnVb zp7ZETdPt?#F>3&>*AGCMrxf;LYk--qLOsN*b&N-WH2`Vv{|jbb650V|D6i3h-xkY@ z-aa{GW6zhU!fqkaq~WqOy3<#4oRCBSmS{4<=@f_}Kys>DEkffKnjTJH#g}jg%rZ(e z2@4yY0tafu7Bxa%$sx%W#}Z9~MQso60D>Ho&PrEvP%g(L-s^*2foum@CblF}-K+Ql zPQm`ka!lgAKI9gN(!-cut96_iZRh7P<#V) z7PZ=cwYb$(>2g;%OEihCMwdYUd6mG31&Jn|^{b8`S)xfS08av`1!H>kx^xzxID|x& z$`Vb&aC-smqC}HUsNxh7X{SV!U^f0YrgJ%h7b(Sx&E7=2;tUcc9+qe_!s!!;LncZz z>1=@F43Zi^i6)VFJPIV@MTsVz1t?A-u?duD5_UnILzrmN3FHqUX$xbCCSlzFgYlyo zprMEoO(LESm{ezwEYT#?)R9^I-p#An1%(QjC8o3FCYun#kp2Y(uMYiRTaF$f12lIi8Gwc=rmBZNEd@cB)!+4ASvU{6=**U%ZhFu42=~DNpjy+aV?<9<%@o5uvHI1 zX3ZKkJ9IX^(iJ!%15}z=2)bb$_YAxC9P}m&23xDYQ47;w*uqe5A$ciM z-v1Ju@l(DLQSMSFUZK6=FtgmHQ2h%{nWtui2uBfTAFr@EwR}kQg4fpP8%1iq6RObFP$p$+z6m0l<#{U7@||#n zriQ)7BHv)1orlFOihOfIm71EY-XqNy0%e*-VQ&C8URIvl1H8>`FN!I{T6S0b17Pu_ zJ2&#b$XCrRxWtK4#U9{IZWIvoT1-3DeGLz# z?c?7?%ob1%v=@1Uh_>t-@wgFQp`@d-y62mG-0%!64K&?dk^Gam?P$$7pwQ8A-kkY~ zwcWY`jS-jBcUoh=5tLWb_dW?^@4m#K7fwSqj`JtPWD``Oq~qSzbCM1Dg(@JMY&gOG z;vpxzLPw{~%fDnc4f)gPPk}dDk57oHMjiivLPb9aRM&rkH(KMI`2ghvyi_$fSiOZH z?Noq5TR)Z06pGc*V`JZnQl1*=r22qbNncvd)<_+WHj1SI?+ZtpEWHO5Iy$<_?s%WA zQrTEa30TG_M9F82tOSLUPJ74)`EXo|gue_uN9pn%-xUi4B;)0szMU!HXE>@qka#QX3Or<}_kXq!GSo*H(M9gZ=6r zJTN^0y&d{1@puuO*9WNO7{m=8$3Qx{GlYN@$#Kd}(-j)QWGFY(-){!W=~i!yVn*HozFB}`(81P>{W=D$NjJV^2H$};8HEVWI> ziBz1-Q_Xb2GQd6T^S6f2WI{L1c(lZJ0(ZnuCTENAiee z_bY?O=vy{_dl6Lan5&+iPPpPcel9F2cE>X45bwhvop=JWM2hZMcH&j1@_0uwsR3R< zIaa^LTYZ{NTV|j$a9+_g-YG`i0X-`t$j4QOgyjDi<|uJK+^)^4RmffsFLNwFR(=_=pFM zpo-IYl<@AIf!CPBeEB5j?WPH8o?EM0ZKZBGdE85+VXsZl=73f*9ff83UF1P z{fUuXyaJlN^pYDWuMUvXw&xOqM)?9qIibh=wtnJvqtZ9TD+O!|Su9VM?}2Q8AUoLK z4V>2r7()tRX@M!q1gskq;T0QgX$ zKj7@>{T|(eAzK@Tx)b9MJ)>p{!2a|&P9LhYh@mssU|`>Q=qaNn6_H5lhYI}xtDg7* zud#vM4)ZuN8R37`2fLT$ zY6SM)z&Kv^7%>^~K7xWy^4D%!uh1hXjZ2vZ(KKPPa33C?k|5$tT_$rIDeH=nSM3Nu^E-@hpC@zU7 zdqNe7$QIecnjAxb?`W_A%j{SA zBh`Rd`s*?HxOm&36NDNjzrReu`^(KvUPa8aN9`?3|0t?m|6tkrDtpiN7EMw)q6NIc zpSWGyqy@v+$C(@aXA(}IzFyOMASldYE`y!x=Dw}usT-g1T%(49%uU?hJuw7B#Cig6MPUO z6??8LF%A}2@v(-Mm2f7;A@>ijOS%q9{Mp9ehhZm8O)G|;jr=%dXS48JpShMcO-Fj1 z-~bFwEAN!3KPvbIp#1xvhoRimvtp4{VjSG3)WgZP7C+Y*LqQ{9TOA8C=XLjwoN=^kEXtzqDX zi?9r!Rm7j_-Xy)zX6J*X>mI_2(fCM_F2&?U=4iR?h6*nz#*XyP6AAmdbmeUe*B0biIiZY zHTGbtdI=JxD(N)V%>T4qn43e-Xv>B42Wzex`qAMHBmS-cDrWafPj%fNj9EH`u~r=? zH;QBVT9C~-%el&ue*F*nT*)eT?JRM?K1BEjotZaW>J+e53&w1T8tgKLuW_9N%AA## zg~1!L8}%7c0~9{zpGa*p>hmzf8*&?OgbzOtusPfKPS3zXC4Av#b7b~(!A)fsJx9Vy zePE_(98m7impipFih5mkQ`~%4rJ1PhAE5rg6>jQZCY*rtlPwq&t=5q1%w&4pYs*mn0An+j7EY7lOk!WH;&cYQL~Kp59a*(U|w$%P!;AML2N) zT>pMx<}M|BO#i>6kHZjd$#4sQuf&qtNo00Tg&Dmizg2yr_*x_$>nUOPNng8JQyID; z!SPmX{5mL>&?`z<`>B7l6XMGBwdHc!p|h1D@UBnyR0Jb%okHO4Q*-qV(;X^;G^t;{ z!(u8IW-wY1=J-3evGT_Rd$v$5K?;!XFt|#tb=6R^^2F|iWjJwS7_7lo65B9Q3R=|m zq-KMqKc;5cn zD#4m_?K433ELXH%iLhA;~VY;~X8^ciLo+;0NGZ(=yoh)8>fVq&<4g*c4)hjV|T%W{FV{ zy&bhha9>ik*uG!Wx5ZYf2kRtj61MX}gz8B7t)%yC#eWcQ>QzyxBm_AeaFcthI zO!vmt2qsQS%Tg6$Y7##VgEe*ryOx|uxHw*z-cxCG9VwGIa9WUGvo?mLOal6PZ``i5 zNkO!^F|aFD+N3l(Hlp^>hELt&mY$7`!ErNV5{?qElW~+>xsuo~IkDHe=$ndIrYz!g z!v$7Nw<}>0;9^UC?Q9($Otl0wTw%q1>A(lJltwgd9Z)$n75KjCrbWUDcE)S&VzGtZGsHe6V7f?M76 zQj&fxQp0LFj&R$4g_=vQ97i0nKs#vAV16d9Qx5!3*OgOg@5s&+ghyy_c~m7uQkwEU z#feUEQ_P$Cwf3P{W=HBkEJW!Pcy!p=NZ4e?1yvg9%R zz|x0Y1>)O-c&ZLqni^U#c;->4rD+d=lrxWG}hWeEHIp*MkV3JxR zRU<^r75{}(f>#X~N>olCw;5KidX<`e$Tf~UT*3Zzj#qZ6e%9S znJhv^F77w7aIHse^G>j9gW(ONjKIkAW^&{r(#6}k0)uda=cO>tj1eM?Uyq?D_Op*y z5NhzdoOG2c0$cVu@P9Jru2d00yutBOj%TU}o|st}xrkJ*Oc6o2#q>5HQv~5dG4O(? z?Hmt5q`~rXu_Z+WcIqaKTMQLR&)AMbLAb&9mXL0wh)_!=MI30UsJP6%+32bEfyMYT zQ3U7wcAA=z+?_UDwK4J*xoMc%X1<-AMbP|a$m&u zm(K0*bVSTOUGLlm3)0nn`<~ag?|sEJRWJFktohxG{$4|;-&8sw4hx5yC&~t|3#7fVNIVG{5{mys+axetFP-`^QWkiHIoSNsi`_Boibf&k`#ig^y&dnRY zyu>&1KU?XGY9e3uXZ%;^Vc*ODm6cA*x~J!z+wfXm-M>Hg`GT6#SNuZ)glBk!-#mMA z{))0;qi;wZ{T~os^ZQr)|E0x`t9f#VKSS;D_jmaF{TCKLE#uzVcW%QwuNMD-p6Z0( z_3FP)c)Caa2>+xh{t?Avi%UxX6Y|Hr?!U0+=&SzBv%Di-Q`YFez2=9l{w|7=|L3W` zu;zyb|Ap$u5AOC~T$9r1zvTRXbG~cdegSGTUxUBoQs<#g%iwMYW1{c&jGBU-|Jvwj z9>J6HmXFIHHgDqaw443|g5^rvxbwe!rQyI2TJ>*8zAEAW_m!6R9|hsGGyhwg(BYLB zJT-3_<~u%hm8(ke)F5RVby|{_HRfKIeK$+W*}i2M@rWNBQ6N?7M=_OEll{mdPn$yO z<~#9QEPGvQJA(6gLhhIW8kw%?AQpyl%ZS&tvkX0t37|LZbuXKY-7w-&4#<9! z%nc`9LcYf_A^w|Tx;89RY#?f%T6Zr4^iH-g`k^qy8y2cHXyL<$6!Fw^!8IJ~mhf;G zykVgtOS|P^56>LX-@g@xdc!ouE$8c6aBc*NzXfW3$#d7d-%UJ~5^ou%sS>K_lIfM6 z!Ih^EkR-zz8RZ^AiQV>kdrR_1_4He!cEMV45W-qLMTQi-N6x}aNoAesKT zWw0xJ!9!X$smd6SY=(TxL5puLuzXIr;oDT1YWH|uGUpO+DWWP9!HwhdAuyHOipb<7 z)N{ua@6OYqT%t|oRQxjM#cbSYj7B}tn zXPe!lb?9z-`T(_zR5M7Ub%t})X;fJ49;HJ$Yn4x`aEsb+NHs&hqxZP3w6rv8adzLR zNV6NZpg~*q3Q(RKx5xoM%!oW9#>*89$j1iVI3?Ek7xyT)*4&o&oe& zi3;V4K~5eCVNEJ^Q%yl@x8XfA1fy;&75K^TK(vI`Ox@?)DrvIS4A&Vh_3?eo+l2r~ zPcOm6PI}ATf^0V9`Q?4k_?99)XIg&Ry8Z46mu+S|yqvVE{oXd+1tC=yY~>vH%n9Cl zexv3J={f%d=@LkGdbM+xN}%Cx2g9s-d)(0=E=}&_mFZP(B^qA=dQH2#S0#c)c3aV87Z`CXTXPT8)z;1 zJ07g0dKazPa`7JQpf~U$CabX?@;vc-`D(C^NH+T32OckAx9bnQp_LbXhB~YM+ z=2dzN9DCQ7p$RALKltVf9lsmiVDZ!D9shpKn{N+oVcM&TZYc^PPv+=2 z+gcQyw-q{m4F>;VoT9t>ODwu#a^l^1p6}+{bUZ289M1q56rEiK;zu^Ri5KW{9ZI|H zkw&N-g?2gwNY={uoo?Etfm`(k*!QNLvS0Il#k++GH&2{!U5eS_MbdnW4yXQX)k$7$ zOka(m#|?6y6zO@H4m}KL-5}a9xZTL0slr?dwzibhE)6Wz8@QXVZy#jr6xzw3ZJvj9 zk1w*LU4jiP(Hl6$HyELEThO+Ggm072eC|fW!1$@u^}mwBn~uYnJbdi zgB!Lyp2YRbrk)!SOqe8Z{5`G!S`Tj+^n}T{CqOc}XT@eLcMpL4(d)WRPgwqAYh?V@ z2SIt_qi)K{9=)!c^pt@6XtCr)VZx*{PayPn<9+Ut3*376s@4`G+MA^FB8YwlPi@j| z?vYCa`opK^qG9_W)2f$oZ)D&MDYBb>{Az$~p z@#0ZDj(V(EZBTJTW6HhLtKEbP-g@>{KTt%*j+FBn*f|(2G(Yg~TWB(#J;mOrfbZH_ z2>2eg(oH*g!Y1RzJhwv&c#p{Hl2pP)>UDFP#&yT z4MlA_&BOU|U%mU=9a1exB?yaiCLK-4( zdod}@i?+B#tn4+zvz0s%>pRGdF9YF+B%sq#-hp_^EU#LQtyL(Iz^pKnKzIcr{3;yf z5rCGeDX$v7t>lPQZ3g&AJRTt2QJ*0QxBOdKT|ov<--AQr5T*CqZFXsiAU;XsY2+GL z#T78`@I6>Jh)GAbI}e%^Z+AE}=>U&VA2m9?+48?`sB@FdtS_87n3(w(u z0I}l|j-8V3m*ea^JxKd}4KKB;SLG?%^IpK%;~utemmu_J9mh?RyfaV7%e7i8#beOGr;INdNU0^-O*^lrcW%-fn7}I?)7C#gcFRKd*abRQ zhf3dzaI*pa5~z-zysy(5-S`Bv7$Z>ZV&-n60sBtgS zx%k64rIA0`8SC6T-U-d3T6&j$Bg(biBLVouVtuO?1+%8VI=(hu3U+-qUqn zPdWE_m##21i%i}w<4&ZtsV+%ToR^W%70r@mu1yaZ17cosDPTOjeiLpLKIT zfm=)xt0gUU6D(Nc7Uc8OxKycxPmTb^1%2IfEl}eEB#UvZuc(CczJj!s*e?vyxcN%h zX+J?$KS>|8mLi0ryfVcKML}{aDYdrCxcztoRrO~=v{aajnEbTp)_m7#R9NHwBevlc z)+~WyVic7BJEmA{5qiyRQ_8#M3qtQX75k32?PpL;skhA$0FMVoZk^`yL-7oNS8pR# za%Wr<>_K~lLRIK{MwUu4E;iHFr(D~@YoKRn0}OqKPLGL7S!097^7wd{O3rJbhu(k$ zz~i=E8=$+z836A=&(on?A_l;##}RZ#f8x4%vgEF9?j8zNk?$P#Y#s+zX-;~^O*bF6 z=5zH1CXnez{JWx?y3A;n>hk}^b$59q=%zQomsv%@<8gZ|ppRq}ysbs?@G%-*;$Rv- z_A0^+0P!21bzK7<)X+?d-QY7?#xfA`8sNqttQ`w8eY%2jtDMVYG%#`cJezaxb;rZt z4IL#{?&x#$p#&fOIEa@z)fInr5-)E~v!SRI71C#l_?)Xi{P!E2#4D(wqU?(+W%b7V z0P)nDsRE80olCD;Ff^9DfD3;cY@rXX6*;iIzi^VTS}>HBB;U75kzf5J*Z#P>bS0nb zWj*HT-)U_h3*?hp+FSRO}2K8U@`>T^-CLv zVnof(n~+5^RT+j-*3EPG%LjeC#jQRvZ|b=UI&W%0=rLrE0<(D3qxTD;Gz6_11l2+F z3R@8wM3-uZcq>n0)csH%r_u}ra%TX(V!oSP>AXaTb1$D=h9rnWE;An=c)-0vf}N>j zxkA%!ry?^Ixvde8MlDrBd6=$?L*bjtr*eT|1yXe9u5{B)9%%cFP_*yC;&WwZNjO@C z?d`%T6XzIjHSZb?AhtQ)H^Pf!daZ z?j;tKUq_w7_9$Bd+fXg-WspB!09_WLcK)Ai{WLdO2f_xgU{3P zwJZMf*-5lMfNMaF+jT%VisNA z=+W+pmlnooEkFc>&^%gAeCBf%Ui$Dx^h|blOsTT%Q*Y)4kAbBNYY-pz*}>1)v2MZP*LjQc~#HD zO+4gR?w7qhr7-=kZFM_2O4LpFc3-!PxgvUER7Kb4&Uv@XKf7Fd_PEX~&U&U(bI0#G zUJ^N~!z~d{wcp?F>$T^0*hk;%y~b0)v2J=eQ1YV_HmI0aTbo=9g$fL8z<4d>_I(|h ze4rutHH*BAaVbkZr2bH-gf?TS>jX3%4~=s7o8PE zM_i&iX%kLb>T*QN6sPUI#xp>+xN#{nyQF7%&VDj!{(SeO@wwY;JOf;=Neu-C!~M>mg`E&6c4t&#v?$Md-Z<2fSfx~lZbz6^L{t!)b8&!UI8xrw720> zgvHy!3NM9j+68I60$jHb3l;6v*9EqE@1ihx{T0~CyJ$-hUEnx&mCuMfC-;DR?9|Th z)n5TQY)1~rvO)KPW7_PVHbEMXz$uJE{~$jws{maS{@&&vRN7w z>d%rFbQCr7C1py$eWUK|A^J|KOomzN2swo*Yh8uOf@s6zV+{^R;|(RW3_mr=-%A;m zrw*_$6~Z}FjfTeu_eT|~l8H(CI_B#I)2m&jc$;EfdQa_y@$2)2D2e}c$bxNMAPs@o*@Y{`%fuSPD@<|N+V zOv>OHvcJy`GiuAJ(Km{2nQ7@#Y#5^+7zS*ZUf6f#b;z_%tn%0B<{YaZCKz6_S%G{tdfgLmO!L819hZEb?~2&FuqQ0EQl4AukF=R(+z7Iah(` zm49~_Et+YFXGFXRO(Vlr~2A-3pE+No>8*;DOoSSXcAxM@CK265sD66zsIjrW) z2hA;&PMW2*b(8ThmSE6jcNRkx|2J^Au)X4mndPRKXSvCE7O84oKMT6)^ki{6g?sW+ z*I7;$f4nCBU6j|YacN+k*QxnJOwQfzk@G|~>CdC6c3`=H1N{Qpn;m8gOja^g8%>M# zdz+Kha8Ge}I9@X2Fs}iZ<$_?Lc##gK7zN7(DHfMgc(*akFUeuO2sW@#Z-Bki1cBX| zHy-2OaG#T2DNx@eBeE-OS3UZ%r2 zY?wg0*Yt^GnD!1F43`BY2sT_22v%kY=sG5W=-%b7hbmdFz9z#Xfn4(H2e8PsvzRgI z9-OG=2VCW!lG}Foyl-Bpw~NOKQR4IgHXVh!9xSYIim}?~J74C{z+?7)>YIoGD2emYCjCzd(+1?c*IjLjzxHO$! z3x*1gJ4D63l5pN5k}x>w9@i7+HK1$a#5q<4zhcq%fN*#4s|Pida8w6L@M~sG&NXr* zB}WkmDk}3=!o61uU-R& z8txS6X6$PO|?u+D|&l+pzSwBHio5k~$HhJxOD123Y1x-YyK&g(#Y+!;5N?8QDq8kW2K z3{))igQnt-!ddGf_s|8di^L++R{jWGM}`lI7IB7V)yMc~mmMTCQyMUY;-@)uWJ(o> zuNT1dyYi%B;xi~O?6bt-!SAZb(~}p#^+c>1@kw^Zxgg#Uipk_K&#IbsvBLZ4B2jmFs@;WsvSlxJoFkQTt5s7-qw$&!FbUmhBDFC1$Vr16yGv@U~n{ zZyQJCFpnox0bHc_VI=I`>SF7%L{t5?bvmd7;7G57d+UMYE>(|*G>*l;Q~>a!91kKT zKH|hvE_T7g8)qXGV^(?q;3YZ9emK0xpK%())yR#rF$9+y^#B+-a+Bax&aiceFpMgs zaVVaqV{V3*l0-!ZI5hwsRzD7!1^`n%iA&4K2)7!*!yAW!lC4q$0MFzkf-fj>kDb!P z+t#U|8h|VP4Uc1K7^HC?c%BwMJB81emzD%w^CoalxO8ouhpJi1djYvgaG8DVwBUUM%4AjsT(PY)QLA);m zc}bMh#;0M(HuOcDx1)0v*~m+ReZCzI02O}?gV%LNTUGXCwNH1^Y2zmMit*uj+fW%v z&!5R!BQFWg=DaXSOIbASX7RG|Qj&meiIT=yy5?ElPwdKJ!y*f@+QB zw58TZQV-WOWlJRG?+gx_S6E|@Vz8ota@vw2bF52^Fd!uxmoT=gu4d{n923&Skf zc%7q@oYrJ}uK6N&162R~PPb#rmMM&dBA58zlb!wmGFNVtn{>e&)@%;I zcd?LO+Yzf47wslpkcJ(b$W77I(n0EAL2ViN@k8!K6TEK4RxD*q5oKkhrByNUtR@#1 z?@}SD1p2?zt=X7-JVB(JwX|j8TTi$c8xL#wG*$K%x=(fn-HGqHcdLxs@MbE(Mz2dE zCyR|P<{>2GUE3OF!3PFv;Gr9yTfqO=Qk>yPh+nK;9li7gC{kf9gg z(`39YGi=Ev*npwXAPZVntg3A7Vg;Yg&MI4~YeS#WAs@C%W;dry&l{n&(za0qJJoMu zwK=!U#<_$Z=g#}4_K+etF&*7hQ)Kv~aS@X*Ti;O%bS2lwl_pdtmb$5y2K0+qE|$hp zm8*IW%lF)Evy>dVAdQQd`}5e{G_N4r^c^5w)m*>FO}gNX+jtEh`+FqYbaKtslW_M_ zLqFSoH-iH(Ze#41n(R67ec;r|mBtL=6?5#AIYGR28+V;6dA3jPLqXLpVLH|?V_CGL z3Rt~L>2Xjf_@@PyW+B+GaTl+_xTEf8BFU^|>>B#ziqi4)O<_i^U&dR>Vy&Jhi&lJ> zxYZ(=LG!#YaN{nft*G#3f#v9_jwqW=c@lK=Lh#2T+ z!h6i+Gy39ov0UQ2Avb# zT<@Ohe~<27Bt=l^IRfh~8u%6ur_k>59pM0YJ?yE_IhMoNYV;j}-KKUHeMB9uBSGX! z9VxCOKz#$MMV4>%IhQPxyKB!K8Z_uTqDGw&(40m0wEb<^w={6O)_`0MgC*r2$)?&7 z3NQy}>tR>u*cU-Dv+aT6lXK}J>ddpJ%BJtRO-FLEB+nk)628QJAXA-~W_!$V(Bw4s zEZ5<@5140<8`aY|it%{r1@6_ReQ(dLdJDTTbf()=^G1!M7|JTP+wT~LAnKbvx9AO! z0%qF-?K$(|A$pN>!WD3t4y3kJrP*VWEUb7Db)^-V&J|bqr8=II&Rlz>-P1U#L+VVq z=M8;{-U5fNQtq(@xzi+F6;tko-b^I^Kgxw2aKPTDTLxvD)(zq{3`NjKxP~QLMeYx- z+0M+SYw142Jg5%0ryS@EF*ojveS<^WrJ!cu8|JI-44@f!bh*%?9cbz1;^s3YAa|c0 z{iaUXxfI`^3A%(TnJ1`78syaPD!dT`SAsCM&4Ws#iO;zM4}j`F!Ntpa{p(?H5>isu zM+E$wuAsc&yf7oTqTmK!0-uhI7}=-C!@=W{nk-D)HclHO zVc!1M#fy7b!^Fym_gG&Uc5Q#m+GeWXlKQ!X0S~TQSQVGo&r|7u>iOTfq!14oVqj&Q zID~+VnkW0v@XxS>q zBk1;n8hq^@Dx=OqKFQOUyH`!{hD0I*c$uDR)E|QQ16Me=c@|&KeTGPK9=a~P65={& z-+BbRwdi|Kzv7As$;@h#|IypV8=|fhmHp>pn!%k(AF?DB^4sRyf!9YReE^lSFiSfV zW;$L>4{E#`yu8;-z6V18ZN3K&YP=iB_W&~sasaCfo4Yb`sp}H-z{aD&*;NT2XfmMf z+nMmegBq`eI>?fB=H%Re9b}j7J1dP(_1lIQP6>Nv)(2QQ=7QkFSDd<4g*04nxIj$! zKn;8ZhP?7tH?`8I<$J?)4{E-|RWgtkL`;#AzIb$_(`F)B zw%;~h*&!J9hmA@RUcG>8or}9OVP_b;{?y9dxn*Yn53)zD3^REBm8GV0?IxAc>15~9 zw6$NlQr={#F&odTgwRze&LZz!C}t&qE;rG=QZnDh^LiL3a#edTmsA8?dE%00I`l>8 zx-IhAyTkNd^)&ioMF-KwGN+&D4_3bEx}LM;;(2#yD4qo!1V0|Sxls?f4pX)qrgv}9 zp=;2!s^kDC5G3?d0=&DDgNGlY<0k;mN)AvfBIQgkhzT-wcRdHMf$Q}Kc$!(y0s8Y= zX7v;Jf&FgMd8FUX(c!#CSk8f@*G>ZI?m7-$&x19n#Eqyr4p7G;rJt&3cf#j#e)RCy zY50E?b3o6*a)R!P4jz1v4wrWZ6&*mhR1++Eb2ivV6m$s9NdTp!TDWUHy6L z%`M|xuc?Q+Mn_4f2l)^~70VigGTqVXF1xLV|A~$#E3!VF)iW}KMF?j&4IXO919dRB zdE*Vr;8FamfF8DBf_v~hlJ90~c)3Q7O#ttQ^Z352-g?AmHH2+e(@Ju3WlV^wNK3&J}#;)CMH*wPrgCY!m< zcrN5%jAa!jWa;>E8g&-#o&{>W6hiS=s9~B4_3g^+Nk{92{ z!hZmtD(;G@H6yQek6fUJA8iSZF{p0Z75!I7uv4NzTLR*UdeAw5_MEA9*1UKng3S!+NgG5BJ(;=X1&}IfcQ&6yh=0tjBS4jjy)-~fre*b7vSVE z%xLHH&}nS!6=v*-q4=s_!{`PkY%WRv4P>H<^TWWe(%>?6Q5PuEPksi{H#{4L^eZ)} zvf5n`Abm1)a6)>;Z``EwLOXPY-oT64@=?#h-bm7C2lmbP7rHl|;4jzlocp8C3F&z+ zupmrLfprse(gis{N1j5@g|Uii1ROD^o11EZUZz9YsqbQnv6+EjBROf!8)rDQ)9Ab{ za@jkEee-UNR^0ocqgc*MNt7$4&b*7Fk$=Z9Zu07v+E#!+2dUS;&n1;*DWqZ7-kzFn&cUdd11;f6{d!Nqz&>3db1ghWkb{Dtu@P>Ue6(dkC{?txWgzKbxlmPGwch#E!R?`!BUdcqswvqBCEhIaI;d$;HNgf;X`I8 z>f#$Mj4d5FR!Rvuzm2D3Hy#f<}Xxl#T&KhLFKm&FLi>J}QRWmY*Qn;3tWm zb~_$iX80Hed1q9aZ5s_jE$1TN9YS&O&!(j#g`v$D29bta5j)*nuF_rPe8|EJ&m)P# z>5=Y1lmBka*G`k@9FDA<(XFQHY7oq-3(dJ>wp+PcOl!qdGU6Bt zq5MsksMbaUS(72K1hmy~GzbLuNJ@8i0b*Y|r$|$ptnU zBFh>;mA)EY5)$6SQebXuSVWo(fraus ziVvTQkqbkp+?bpdh<#~1n@zgFBDWbT5R-6ahn4&p%`Qc~2RDQk(N|;58bGsKU+q)5 z91KZ?vt23rYC@s@kU_ik)gIoERLBY{eRaAI%p_UC=o^Y0!ionrgq4848ooeSY~~M_ zeeR#&GJAUs=psu%VT}w0uYqc}y4vTHO@66n4!;(JOeSXAD!Sw(pX4NL>Z?OJZl$KC3lpph z%7tl)D_$S?ws1o4S+@G4Vvc1P!yMRxFLMcJ+2Shpo@uPdSZRsvfY?i~OpzZt`O~+# z_-wBM!(`8SJ~{vfS#*6pp1Pvp&cJKcwPCR*k_K67J#y}VEq7F-OEAoq9Kr7y_WB_h zwX(!QVbUK2_ud%>s@v;jGtvkPZ4uOYpHg9x3xac3x(VjH{@!AJb)hX%rdV`66a+Km zWbFwTf9{QZk&gbCJr)|eRUmp~qI;>NpQa23n?B(-OvNDD<<`DQ_O4r zJ;Mfbn0HSPMRDyOQ0(vQ?wbtMd%6imxVK}e5TP(?vf7(Bvgb56)dHWZO_;zN(*$09 zHHhBO%O!zjOPu<9mIbCNz2Mvq2!@up7>PZoIDfiJF_hV+vafF#wp+Tbm!XKBN}mOh zPZB!CtaTlR^c0f%hGD!t50lJVc6eFRRk^9nxrph%`kCpL=Y2AY*+~P29rqNLnT7N? zfRmpgf0wI{9-(9w-!M$LBCf7gWrV5^27PSnT}R5p8&=#Bc3nRc%w~EzJaDAo3R!_f zM=`wM2y{EHa1yMpKvmMi8}qlKv~|C5ZBGxW+X&SeX)wLP)u!hfxJ+_~stqjwQ z;bvHi&%Vu2i;qjEbKWX+?YC;xtG~pmk9xvQyg&_>n;NYTpYT?F6^NJovkB|N4Bp_o z<;{AP1uL=PF5r&mnvbk=51lOk8wTG^UTVvF)qmbha6@sM!$1v=n^wcR&5G*0nY>r7 zz*)Jm(XO4yb(5|QmU|5j+p6F3;p1VWr>~4XZl`m{i_-cHo$(g&s&1!R_?(MDyCe;6 zt#Un_=?ZT!-lE&8rqY`c0HnQjmSsod*xRJC-rYsJM3rq|gerL@jtWR$;5b>S+2lHR zpB)PA`khKA2qy*b7D=w% ztA0;|1aoDa{@(R;cnx$4ZNN7Qyck&4nHc$(-P|LmerI<_9m$)#@E>%Y0`z(W#>-8f zJK8;T!AI(N4&C=pHEAcG1L=|`Bz}w=Pesk{4jNuArMfXVSEQU#nQ|$$Cb*vKR8jQo zj?nN*DjO@5*Ukdvac5itnTKqzBhMp$f(<#8L`$YRpL@_`$aWhcH6=JvWy!MKIh#PU z${N?xb(f%i2jIJmh#JoM`ksMmboVi$hM6;y`nidg1}gNSbJ7>~qKcaVCZM_?)peFr zMZ>gfr4HpzJ(em%uiiozB<|FtG&kksj&|Ll!950z++7P&kF3G#HKJxel*)sO zOjnsj6g_N=GD(|?pzH;b9uIP&PWWtP z7-CSwVSKM4JadXFr+e{UWcfGGgN7!)+*X|i@rL}o8#|<~JP_}7DGkGeXE?4Rz6ri7vWA|1~p4pI5u zPL;<#`cX7+dZfz_AVca~?!8cNfKtTjT=)TC-$>lDB)4zQ4THZx$8++h-6)h-KZ0ey z?HV`fd^Y!@gNBkgn z2}5r2<`5k_jy8fb_E6Qs=$F=Ru64@F7N}v-mK*6huY};w7+NoOCw! z3Nv`ape-l#v@-1$cc-Vz`6Z60AWOLEX2YP(mFs!|EpYIFm_|>Rvt75T2Q^IDRKcw7 zGK2mLSzcKEW$jZo@Y6y5$S61Y(zW4N&zbXG%qu-3%L}bnNdWJ1j z{K<2HcmabKi~Ptq*Q4YSZ>VR8uZ+RHh_%bR9)th#=ro7G254I@rUt_|m6pS@KFai$ zw-`zOX*rDf#`aW!V8w}r6ax3eCe@0Q@D&L0pY$Bdm>(^t~I+o1wvQDB!Ku_&s$3qnYv@aY^p!rl{9ocoXnk*Clz&427GV>(*}W zfeYMnC@4Eu=%%_&(D7qtTMBKCy-m{EenY)SPOxz`(wb)kifHeo&)vpnU8c?~(Q)lJ z^n2VPRSzI_K3=;~uua2V(e+R&q^{l*1|jM>7(4UsVw$=F+g$^0QwnFO^|-N)J_kD| zMyz6*8H(BLcWLE3ysp&~QND1hc-p1n24jX+@m?PNkSi+3Yr)X#$s75Q&|E#1_IPYIu@|Gx3KzvOZJ zvdTWt!Fe}K>hd^F_wbi6m1G(H6F0ke3h%%Dx?*4}d8)e2$Rz*O{Urzvs&Zv5$VwKR zr532%LZZK=j3xyYo9*x(4qCv5Qee%LDcG5{lLF+nbaSc6Jfxux5ONPPFbMemAXj*i zn6>sx6YSYg36K?Azjlfoj0dsGiI0XM*iZ{lRn_Am*&vR)-y`dX= zfm4|2W9Jo|iy%SJEka9Dk1$|MC(zKNpnFZ;pLv{_EMe+n&ODCEZ8GE^=@H6H489Az z1o+(%&`#| zhM_#hfMb(HEvM^O7K=xBf7anIW<%S=@t)px;5lJGva~=6t!ujp?P4yC&WU=UYiXC~IzMyPYn|42D2N!} zenz_q$V-&k@vbgi&u_QAWTF4;_K^$D>D8`g!6N?`k&#{SKW8lVcW57Z{n;0^+dg}V zKc_=vd}sXMjkoyY+DFbj>-=^#`)~FCDYAX13)=l=^KySgWOhgVdFu-Q%k3lkM&fh+ z9sWz&N2YZ^qtz?@FGkLc0A_dvFjLy&|6RGt|G#HVX%}_(IV(EXc#AJ1NJ_Su~u@0@wozO#xu{k>C7r?ifHI?jkZ6?so&&kl7R zu8VjtVo}7o?Kig1Zuk3kHGKwmzc6y{rCrUm95! zhp(p}_1_#>b}_!v`E_$FzRq3izbUfhB7Ch}>o1NhyAWT0T8qCHUx2T%>(Fx1`S{wp z4!zCog|BWk7~ia(___^ctRl;L;OnCrAWF`|*XYO4%FW&Jwe>NyTzW3P;(qR*89ApL zzV7n~}6Ekghiw<;Z*l#GxM>Dm9z_e}DytWeJ7e@< z!ul|HLr2DIaLalnJFKPHbR-PzhHi{P%jyr9tQ1_O6r&TdrTK#}#Oum2d3_51*Gq(T zJsuB90Cu7>%+Ph$C3&@1-6=!QOQG$VA*1m--Qt7HoZ-I2x!<%CYku-E(A_f5Ei+MH zv|o2yl3|zSF`AilcaoO}Qy!1v;5_5lUQ6PzzW!dBuAIjyKTHfmvF@*gJqD(DVu0cd3Qg?V|FnCm zrEA?`Nn-epJ&kdn96_SvFkMN{gaPZmO0vTnp20d*ALN7 zEXk-@H6_2loq`aP-4+GxK|>y;fTk>vP>Xe*0Wp4JiNymVnpIq_4_YE=1B{Ox=E=vP zC-!IAj8G722&CM`v^wGn$@X%2ODZY1+0pCV5=?1!jDXLh@*JW5W8-9-lM0T&5KJkD zE9+whY6!!&Au*C}>!a7dA)W@Tk0d_laT+*A+Iq}j*QQ`f#vgXa4jI{ALT}MFxebqA z-c!d$neM#QuuGn#+mqJt)lTnO1Ae-IhU=T)01J-54E) zcGF-D+K-I(Xjdu7c$>tHaW_DZp@X`;THT+0RNr}Di8T`Io?GZ%cflLxYH9^GC3yI| zXxvC}lPyrgU`>rxT@ek=+;gn`Dt4(>pDj3W-lYME4T*RQhi9 z`7M2{(A}0xX`61JP!g8pMTL-aFXG8)-f*QwmGm3fBil?H1*Ih9Hbs6II+RH8U~4x! z0)%L4Q??lv3Qlz8b<8io#2<{*bY)cyVs#UR47?0kQ5AMFg6QG~*;Pz~Skpog%!rB< zKKFxY#_zQ_5~2p-hLM6wAW4Xd3_f4NM&U|`N+gBKZI+Ef5~8LmACi=smgjALDu~q$ z6yPhE!3XnnA2axT>k6gyx-<+EsaPRNgNh73?_#it{cLU`*r9Hh_*VwhR0P1mbK;N> zTchkdS9GS=v0;~xhX-j;nGgm(BQW^YyGf-B**4uKp-lNmfhzRE9-mqh?Z{!uQ47}a zzgUCCQRz>yI*;J=Hl6lcudFXASqw4T49^QbR7`&=shQv_vaWdw-Z@9|Q^I9&E$@q? zOn#b*`jEJAVKZ~&JtbB~ZMa|Xu2gwXk$q>ewG zxcLg3heG$_3AfGiy^!3e++W*ZDrDNz*bps;KzZY=Y9C*7R>HhhHII(FX<*HvaW}o zMRaUe^V`4VU6>R5Qu~hW`u1&i!|0nz@@EfSd{f4fA!D+~E-${dJags^u`jg?{p+|f z^T&=|IDh<@u?u7CSD~4v19=yAj;*hdAJ+W%^0;1?#@4S4g^gY`D=#G_<<{k6vSRD+ zP`_QjZCtO8vGup3kw<=>cVXYy`W2zD{F|5FI&;L(lCl2u*!tV>!#~ZADZXMAIj7p?z|UqTbzHBU*!tO_EsVN# z(b8pOmgTP)JvO#}R_I@IR@^#tS;6cnIZMaH)|aBu#A2E1lF%QH8M1WNZTTt77ml7C zTR#&&%=ttHQjE{rF~6W=20qX1%e!!TZ2k05cu8^A{MloD87V8~#MT#u{&j?ZLTUNf z^w~oumBiK;hW>SA`sh*1h9_qfFD{R*pN3A#*9+lO<%cx~Pv?nGud)7}uwM10;jN9JGxKC2GO6pjytPg*izQogTb;f+g1#MbBGhb=f8*q7r%f0#Ep zbHtMIanimA}@kzfbnc7{KQ5%DZq?Z2jm^*piX{CAo{oF3ruF5L-Vg^sjSo zo;`Y5N$L2}dBbDtZw&qGq_Oj7kDNDWOjdqIY<+I%Ux!W@z9@P4zO6iLD=w(VmNm0g=N(e>iJN_PDegvzLz_GAy=!sQk62 z>DIhnX!M5A-!7k=Ri3lpmi%R7@!KJ2bowu42VC#L{+`EMB_|ZNBzMZ98<#Bi&6%4Y zTR&L+_Q{5Ey>5uDzb^E*^C#b2zToDv@o6J*aSaOn>zv86Z@q2A^~0yk!UnxowbWcc zj)T1>^tZRn$yiuAZ|uzFOUh#Fe}cj0shemZK1aVU8zvi{SF4LLOEtD$T@0D(U#~aH zHJK6G^r$7XW-Ti%%}E=EL8hzUCM=aJB~AUSX}jD!sp#Ou&9Wm?@cCo2d?w>_(Qf(l z;j`>BnZ&CVa=N;VlJJKc|0=&p#OE1Ys5sA8g^py{h#OLGy=lVe%n3M?SBCyIcl3=* zC+DS)DCSPTBJ{6gmo3emG;!Yelw|Ct%h3r;{ycgE@cF~f`0CVO7K&LiamDhbi!xJ2 zFTg!`Y3N^Xym4s3twTzN-!glCY<+(;Q?)=^?1#^yJwjz)!PHFOIF1+aCF);&R>-01 zgP)aSitvX7^@qw|%L4Qc?Pz)0jSI?$mQG$gJ1w?8Ui~)dPFa9B^{++0k_EUJO%hD$giLE~mKis-sFx~NaF&;8t&JD%fI_0+Xi9@qX@_dtH z>$~xXPs$HtLVuV)dByA-)6wc7(?*i1$*QJ58@p;Gp$!BMLKDcWf+d3<>tx;*i)AG|ZGAGQsF}A*w{I%v! zi)95ms((d)C`%lv{?+{6xL#MaMGiY+sA;GiYP=_4uM)|R_09cjY>AiFCORG*F|;&P z)E-;oSyw-W#4OgT#7Aw>Gl(~|G-THs9u+fV?Kd#BZMe@C)`LhxKSS$k_D_{{HD_AD zy1MeGVep2MhCO$^pGAMNpyiNY6&d@6bz#PCXlcl}XV-YNQ{yUy*(++?b4Q8&h_0m( zvAgSI%Ch_&X#ak-d+dTV^fMg$QH89YUeZ&-ftw$&H3ghGK^rO>3X+BYqwK3*pr*JJ zoc?*3k?T4d8M*I4Wmhg$6AnVLpdWo|CTDrEC!-Tl_$wb{cxCxvoti7k0`QhUxHdqHcZ@l_l6PL zbrp>=Y_C^#&6gCnrw8kBoF)^7pNxWh9&2ptyMH9gZ6_2R8_pcF}f zj@o|t!3KtE4JgH8JXN@yKGu?v@~5pQ?AXg-1D3hAvbQ2W?<;1+NV4PHf>6U;`xi!> zf@J0{;)Yq<;=G#Fq8kR=H9TDHy-|xRoYWbN`NT~&l|X;6EVhFq7)k=NnZ8J#gw_OG zYsR4q-mur6hYerWhdL-M`8S}tpo4qt0yRvvaO`;0=TA5Om!b zDIPC@6h`8lHubYG#OoGYd5x+%dc-r2kr1EM&(>ZG@onLn_8Qj%?n2f-MLc4b$`!@9 zGFJgqR2z~Eg?o+Lfit#A3ZMdiCmp1A&X{2-3xinWdZ3e<|RV;=fP7?ZgkF69A;*I-&Zt^UC ziU3UT9mYoPjx)+DsDXRXd zj9v27a{65LPuT*!3-%h09J?_Bsej6VbjC}U&#)LKLAK>Sdc*LzlnbS(03|>X>@z!X zx>_oo8A#;$dBbqH?1Z6~-KjE=)b3%Hg`KV}P)IQcD&Od&y|*$?gYRNmT3jtd{j$mW z)O1@m&6Vg!9-cQk>i8woU@=WkPgWrgvPeH!YV%6S9-_dJI(P!cy?&V_S^(keXtz{{ z+f6v%o;Nz^4anPbkC$d>9}_LCaV1(v7lY3m5jvDY)Uh>^DdFS@&@HLpk{)#>T1b~S z;Enb=ocDO+qe#z|j@)~-zkr*k4BfxnO}nHyYNt2AHLqIBR10i?hqLIX(;bh9>U{Sq z9n09A#@ke~nw)o#WnqP@*EG3JcUS00p6IF-3YqsSX29ctuBdU5?crDI_!5vE^_WMt z$lQ`!u_tu}cHX z^#(Y5M;`Jr1--y?`fwQNtvZzRR#B`HYvf(e{7C0x?72_4@?)fBw<%H2K||tvk!Q0% zHB0mj>qumGdBo-;iP3?1NqFu@++gUOiA;cRaO_ zEZNG;Fbx=?7M#6lKk?j_#33&it~&`ywtgiz03+0*FXm3w@rK*ck63eY*=lyy@%HA< z2)JPXtm7?iOOJqdcL8q?s>fO=jTQ=c(|rdoneZy~ziA%mUU*qJBi7Tk_hw3wdYD8-7q{0F*;bvO27_ z%Ro0vc-yX!fVPECYPcfw5>&E1f~sS1fs4OFe3I>%T*GV11x8h8pkh$V z3Ht&LVh3p0t)d)YLVHBoBK!5)R{KB)ftTsPHC!C%29Wf7-1UAY{f1YVLopCUU#g>d zB$Q%+LzZ%73HEU&mhW9de;s=sb~Kd&Du|rr%3N9jV!0<9EWQ3<(F!2;bPs7}{JKLa zKsX&!8v5#84?)*d3NX|8P!P?cQZ9u+5N)aUsSscsd7xw&v;m=h&_S@F)#r>g^z%cN z!Wl!|vUSI81|bMF6#Azy>Z;>p5YmuK#0#ljd6xa+5l)t_!O-gS9A{rfB@AQ!;WV}K zGWSvm)KKYj&|Nz#iiMv{so8L87_gzu-;H5M4e&$6O;fyNO3kRx-84(jhCZKn_J^M< znv1(*(7nHKLeu3q*$Vxxe5!CRz)Y?igwzntS2!0+!F7GUoW{a)RJH&g4LB)CHQ=OK zfelqYhh2DOkmd(as_n}|)2xdJ3zgocn#=EnJWODQ_DEUD3@i_C*yu;0Q%!o$_F2T! zm_bS9J?nj1xR)i~GU3gPJW`_3_V;xO^B&%KotUHXSYO1-*1iPoUSdC&`oqInuTn$5 zg6jSITV$+*s9qR;NQgx|c!u%FEo83sirYgd^xW0Qul?3(N+u9^DU$=+j5s3np+w zHs!#N0$!8%6~bSX{on&vXmqw*fA1M`DIes*|5cSl^Zv|&w+F&dY{;dQ?LIu9D9&jB z#l4%uKn4p249$j2T7ua=(xQf4`wht6eA-z%RVY4eh@?D^ zb*&!s6Hxr+^Z$O>hYgvOGhO+SSA6s}P#l-^@7MUSA&wHdDM_vIvjO9EOVht!ro)yn zT6s0r_~dsWR#{2TxI*^T8Xqe#QE5kO*HU}-ux*8*_Kf*!_8MV9RQT3C>}4B7eOIL*XqjQZ!a=+q z6(r}r@)5~4h+$8LQfc!JBx{Ws>XKr>FmnJ_WYEH4tg}M8gX*}%iMI8SBajA+=%7=e zVEs^vfYf#~-C&7(@U$@R)$^Q4@Winaa?^lj1&B{94TDeC=bZ}I#!|ki=_vN9(vJLq z1)n;?O+6XEy?VM6sd0OJ1m%8GPn{gnOX8&)8Kwall7fu!0Q34is_ZTEr0#om3eO20Is$6zg1^}A z=gCQ_KB~iZSv*nIEM{tfj{o3{^qQoPZO?N;c}{j2?9hwYWQ`xA)HaZCpz)Ni&$)8M zq+|));EJdQJ^mbP_@$$736O;%)S;g8zy?bs+Sd(CHU-PT3p3KzZ4A?`#S9&ts|e1y z2KJDZe|61ON*0ghE`t#w{}=UHF;ZcA&NF8Y;8>r&$)zIj@D?|8^fN>mkYJ@Ap{o7B zJXf@)*MP+jO}kl*9lkS2rn$*Ywv652hIp=g^SyPxE+6I5HoLOZz^#X58{Ckv`TwWL zR+PP33CrdEKG1{j$l$*Ql|-Zm>jT z0$06GP7ZguB#n8VPwyA5J)V-q>*#fhFWU44B4N1X+XBXsmP0P?25tky8_W?O(z4$% z)QJu34V=%oXqRosYrtTSc9X-wZs`fKTM}G6nTIm@BAl(VJ}8p`b0-tVoZ6g(wRc=~={!zz6HF*m0)N#F^`Eft$O@ z&>3)pOuLcXD`u)c&c&!}T^mHX3N;z}0y!6>6twzB-1)+&Bn)!NW***B8f+efq-awA z=~Hq#OeLK=I?UJ&#Q{~GM@GvIfwRrGn7*Apy!G*8!Zctg4<=xX?M(2t_y7<;ve0#* zDUX#VU3nnN>Z(2pTKx#@`jTNczQ}btJiM+w5H@d9QSo{0!RAPAG+t*dKG)&!;D-Ky zb6+`~hYOUGFP17)@#QY=-^1&!fD-mzS6(WIJLf7;-ZD50<+?9mbw72iayHSVe+3ro z;{NUx=atZ;8)byQ*w~+X2$(b#hk`umj(5u^7SE;-gACrxw7_bUF%}M?=~8#^yil49 zyA0>7D&5Fv>{JLwSvp zY_S?LiFQS%y-|Y==vEn}49HSL&+Cq%AGuyLs^9Fi9xS@oMx-I6ZZ<+TUH-LzO8u9e)>AbN{;^cY6~6#YUfjbr_ZfgT z8c&rB8LqiVR+{rS#vk-={oq-c1X(<_Z-Bw zI=pI$<+f-v9w-i*UbW1z`ba*4kXeJ&;Zqw#8xIxH^r;nf?U!EWPnSb&5N=qLDdo|j zRt@|YBpNQYwvO5xxM4|_u9;2_iqr8>iXA!u{kSWg9J?mt+-TU5cjMk>Iyq6iUgDJ@ zEx6mc#}wSKB@Y4o7?R1=Je7_jq*Tqj63MY^O6QHYXcCSbBqoxR{rN3S3a(6YfJ!Rh z#$};U$s`Ah!Xz(Nb>*$jEvnE<4K${kiR4IgZGW%e>_$fxxnSo@bU2wYW|6Bokp-Gt zp{RCckRw*6d$Eq?YIQ{hIidMd(CkVf7lba-p?n}!3OQI5@;#!NK`zunCh)e%WN%s4 z<4t3V#pu2qspoSbOU8mzw%t-dKut(oh(x+zCWkn9%phvtRj#3Ja8bF;b zGOXN%Vl$fuV(c3;!i?RJNjZR{0~GCf-I4oeWv0y!aJNxK_Le1%cFmG~n)5d@f6Os5 zHqJfk0@sC6uoKMFk?dt(FZyY5pPGYLxXBi{!?+Wd%FqVc;7i~ zt#N9}YI}n00|Ud5ZN2VW;%N=RZuv4m_sB%|l1tat6YsmmJEW6o)ZlK5PqNvdz_jnv z-+5&KPf{y>@_vwh<_Y*nM7MVdXDHj%Mzdyno=Fmc>kMD20T=|mH zQps}e(2s}s4X^L-S!A;yO-eS2))Th+8u%2ND0k>*M5K(elS~Pb1{wHS@KXgtY!5+T z<(b@J91m{q!C$c?2eI35?G#+vCLsey^&wajR%TE7+Bt01wQ)RnAvWFs z=R}~dDe1W`p2qjfos*`}`svtOLiE>kc}`0KPXz{a-4!mIZkoLBJM_b$#Ih^s<3^%C z#e}UK?k1WS(hlQbtl@n!LPlM^U@ES%Z*83cr&^HKxi~rkRl>l?T?cx}f3Ezy8_iR( z!#EXB^N~e$w+=!s+0O&H?lBYlihd%LU?4^1z%-A?pj}1fIA}`#uUKp^tHQy@VerNN zUNwgXV~t%k;ev3T@s%{Itn8*{n$9RAN4rNYU0aMV>&by)$V22kT@~fnFI8f%SZuGV z2nR;$*E7^)$Bl7!EpVOfl?}pza5YuE;n%@!?J5Qr?Al^`D^UzCf_sbpD69r&b3$p! zZORybq&$@Kih5ZhV*}Z#VR^3Eu-E325mk~(S^G$t-he!>@2fx}Nl<;}2Ria?x9uQ7 z{QOXS*L~pe@i-5FLG=4qY*sgjyg3wkR3WP$@uEX3{$N`Ig6MfVnk;A3A0-|qRm4v( z1MPtwVfw#GZ(%piap9|EwXxe7$b?F`fD91V%5 zX++HfACyER?2W^wj4zR2%^!pze74rY))&!t-A)OMWeZgHo@s>5KlgxbzTwpIwK+0N zZ-H{vkpnXN>ghCpv*LDqa~OE34ks^H*R0@IgZP%G+{8=AB|4IOt@0owj4b4Sq#9HF z4dPmD+gEVlGehz7YgJ%t-u1L)GhVXw`7k3d*6}2~Y^#hs?-Dp{UIn<*6uE4tG+l2A!kBX=95T!QvM}@dGIQvvIa9 zm#}YI_qGq#!JMw6Bk}{&l{>Y-*2;Le>vWvRLvw}N>W>1+v_`szEWHlW(bDT&h%{K< zu^zz(a@}aY=-aQ=(8A~z-Y5iTiKiBP_(r=YTfo<7U@$T885*r7J8u_8K4z+=6XsO$ zHQ)Xd9Z4I}mN6c3JaU(j^BOtYIqFoh*V`@U6yJQvBdK(?;DbIU4AgK;p+U2541+L< zoelQq%Szjzh*7I<4W|@(Ijp*q7FgW#EO^&+oELSubAu?n;hnh+aQy) zjcv$!GYG1VLwr-1j86*PrLJvp@jf88EmzGe@%pNAevbS= zO@A7+8r0Ioov}qsUs9?ReS9TO$C8<@J41^Ym`A?DbgXo3L=SA(gNESLulgOg6L`y6 z;4P_KjE}aXi`cjDmby(ynDI@~A_nBVgX^Z{sC(3cG^{~<2Fm^vpqM(kxOm&l$zI9m zy<(Vx4pVc*iBb;XuDj8L85SVf2E9Geb}neGpk({Ltwjj-s#}4!a{sS?Urkl}3n6&4 z9CgV%UeCG}NTzAw?`ikrsOb}4aLPSuavHA~Mj$e1$4r&Qz;M|azyr5pO z>^@bWhzt*U;S3J3(n+tv8oE?@4!)C7*S-XLH+<@(S0OE3>e26HrmA~mX;=O=3{uyk zDsl8PMXNY5;TdRg6H9Z*E2bJ1Yg_ma8F1csY{=HB!))OyHM31>o&A&bOM-j*Cz`lRQKB=fTl)}@tf07PegOj>?2k(~*T!i9!Bg(%6JHoUuQE!1Kr|?yt^$bXM zC;YHu)<6q3y3XEE!68i08{lQ}VI7Yiv~a7yE$?LQ$%M^e@Z)tn`TQ-L6&~f}VfAiw zkDYsYf1U;v1>BKFZ|tg)JT-9fJMG7ZW0wZTX$`0=a;K+rokbv_l+^|ZXCZlsaf)ws*%v&* zN9hf$q17BAO0z&Sinmd^agJFGqx)~vq1-TKTbbWpYRPl6#H@8rm;&eOU~cunFTlM7 zmE=M2A^Rj_q7-gqC~o08Ueeg5ciyKg3zTfajCzF80B`CSIn#4NvYe5`di(AQ_CDMI zW7G}x%x=#j@=}v`>SJL@HY632T=kNGOVZZ;!oGfjeOgjV!+WaggjYRYjr!-dshusf zDK4YgkUq)i)QzF9Fm}fKU<9SZmW9qm61RkAUHp{exV|Gb9l#HT^`+oETRnuaDySiN zcA#T4V?^m98@&{VD5-}nv=YmUy4jFA$tE@S@M27#od&<1T&R{}I@+qGAby&@y1ThG zmUtyDB4!14$5J=h(*IN)&joH+s;YaO909WZoo#_V*tK7WQZs$LGnFhEN)&~fhSs{I zv%?I&KyQJacfA0*4o=?hIeD~UY`n$RjR!}NABsN;JdA~qNj=(E-WrDXDLQ-&<}PZv znmY)lc)BihFS$&c@#^v2SbdSi*WzuahDsie=8M9tyYcps^l7m(z{$wuQA4%!dF-5o z=rEIKynSrJcQJMjpDxI#HJeuySfXBV-i%jIUae@g*CC)Xt5X=ljR)@(7JbtRrlf-7 zunHrRYJDe8*d_^fP7`{w{_crad0jjcY9Trn5~@0=BUidtP4MQkhgDm3l6D~A$0N!# zt|AOnfAPfisIEc^%7~B(b^#S#*0#F*qA~QgNMHLZ^c}{h?(z1DJvey*9*vLMyRJ~! z*Dy`{R_ah5?7N7sMQ4vCe1xWOmZC}e+TFL{Z_yV{ zZq%>yc_~%*2GzejD@@PJbmVzhv45avoULT+Z7Gn*3icJ5Vfr>aV|Xn^WvOB`#VJtN z%dHgC#r520O8)wNhHDHjh9|lx+Vdi~U%P}EyyY2Fc8)MP*lynjn4HtuVa9Iw$M9yk zuB+-h=R@4)a<4QG41-^&&mLdWZcz$fyNs?Qd`VA#@5WPauy28mm;3Y@wcTqwmZaA- zpAG{x3``~Hy6_)>@~95OBQ9HR}Et_>Vj=EIZ*;s)hgCNZA%Higf> zX|S@qn6iJv7l2U{oNW5cuKbPb?avgw>YD~jJ7L<0n&{^WVWLS#i4=)3*?bZFSN#)g zbvuTf#$)oP!PAy-1l#d^AsY2x5hIBc?Wo@%-e7Bqk9ryEdia+A6Y(|QZ*Y%YdbW7l zqc4MN0P;aPpq>S<^oloa+fuM&i?{8%PeOx`VnL)onX?~Wu`M`e zLU+L-l`W;q2OPUR(g+8G?c7c4b;Uo;^ru&qtWEqr*_zpu@F2Y38#h(uU@74JYkrFo(dx>2VdjRDoux zn)OfX+r{&Fz)@qqdBn1y0b$X^j#U2J2zW=AX?et?qCgjtK3%(-IbwS|;3zTS>qXM< zz}1omTYtR*yraZ~uNO|*VEC#9u0LS`+*V|SBgqqn)AB=Xx4@VGUSnth+_Bv8wD1Wd z;knTueE)jw6$zk@@s3cwT^(@H(*v6=oB5T`(w>3f3y$@UyT%txcAZ>Fc5Om!gk5t? zcrpXNV>quDwJcr2M&DV_L)Rvz^m=@2x$xL0)J0NEYx~$2m~ZkgRbI#xJ?y;J_~?JL zq%A(cdcKAYpFXa#Ve^6Rtv_%K9}qok8{Pp)?P@%sN~Z=NXXBsZg8!8zp~9lP$3VfE z(>evB(b%2{F^xTV#?*DH+Kyb+{b#h3mL;`=Ubp=aCJXvMEl@t)>6AK}w9O9iPCPeR zL~WDUm^gW3CgB%O>eP#D?S*x3I4SB_{$M6&4b<0NklpNc<3U^bnILn&WE%EvtXkq( zebxBzzi!8?${ig!n86mhYD!0P7D5eBv75A))%Z$UnyRGUpq zyzb)GK@5;v%m^^{+*kykmBu81UD+InZV03#STMh?Etbwnmt~ zV|J0#x;3b5^fkSRtZekMW;zK-aIG%bzsi?sxqz?a5>UVV{Rq^1R+s3**m{)txtm!4 z8@plVXWocFyJK|W)_1KpL+AgIK16PO>f_7>4aH#G#+jl{Isa0+_Dg#GHY&Df5?g>Jwj`^~g#J|@{G)aphC z>c#SIXbg_(yP){9CnHST3Ff7CvZBT;cGXZ&oY181vl-QiR5_8-{w7uISZke`uScKrg-qnx zrZ5Mf!BOLAf-T!jodih$Pe8^y@En7OPWn$T@r-k9aP&BCZ|zA+9jv|=gt8so;p;U> zwaXEBD`gJD?_@eBr_QjagxKq}bWX9lH#mA6=^ptio*zWUJdE(WWTtDp;EOvPnX+Po zt;U($=obv(`6%%uF?a>L^odhYYjAWquG{flcy-g^-eBZY(rz6}VW+{-<%EUpW@00t zjDC7{i?&h(E z8yp3Ws45FyorM_ z_^M4H{R2G zXQE>3NJ*JMTiDXx#TKomyhZYS=){oW7E^{}IrygT+U>{|kJ;Wu7JhRY)x7g~JK&Fx z=IxlQ-HvRD?ccl5hDPyrFfIy`p9Cm1rDzIq09{~1<#tSAY%}m33o;O!q(*v}QRmyx zU6}B?juI<^vQu)vjG45jUuhe$BIXOF_7~)Y_B13{#ew9)F51})pmsc%kqgpLdkPkW z!yucH9!SQIK(-SOb^+#IpKjn?5Fzty?+9~tqQSUel^F#zUF82AL377wm)rOSSm&a>CcQkk*C>w;yXz6(x5F9G+;ZfH_7^z!lzk>kJ9i=v37Y^n zeh>lw0~=4#s_1`Z)pD-@?Roq4xy#75vp_6?NA|bOUGBB91vdIds&MX(yFe~iqxnLh zH%N=q2}dK$-f~`cEPCtjD0)2g4b7?t+zXnboVhYH>#Ogin3bUf#=x@Kj3%^zOgN4Bm5Y`M#C{m@jD{W-pW^i3Bb6BQ=2~+ zJExfz!;u{~0ar~-i`j^Hqtic$s+M9~4B@t`AhazS%H?X)GEulI!pt3C0Uu&o7cuji znN%dC?Zs{#PATn(<0|0vx52_l_(dRGGca=Ig0wvap@~n9%h#Y>Oe)FmEbxrif^Q2? zI^sA1Nomq`B4i~Il9ufuVI!3>M}xkbEI*w)F%S# z?FV%}ZjpK~ ze%N7%+}q0AWp7!eD6k{kr^C6yhiz^sBiG+2bxKkL%|{$MbFSBEmoGT{P$qD{^bM9; zMSz)4dGK4JrxMA)=etPnlkmN1qG*`cQ5^4X-tgR1|NSEw;#v-mbk6qWhNa>J5P zzlb&D8<4 z$6gM1FQ{*jHU5Yq^Jg?2HBBr=ujV>HOf{wpwQ?5VM(OUP(-EK}EvSeIIp;%hz?kwFpRWnvX=1o}^(qUF<%QODMyeC1!AtQeed;WxeWt6XJ*0_d{^|(#3%FN(*c}uf zkeCDse{Jlhen1K=yn1Ep56nH6>IXvHr-1m0U#Y|!=oPJ@DbWU6b3dp*`#2(R2cFg9 z0n*Z_`Mmm_*7%KQr5ZPcjHjtSNHy*leeUvs;noMlRJh?7J;hl5RF;}Qrq5lVITln_ zzBbnEdGjX-oykj3H_c2t+l9gq9%smIet=|4gP253a|y`Kvhj=;u1$p2l>w^Xn-jzf zH=WX))M;r{K3>hV@jT}%2go_E$pFy_$(nsLKxWv;KLvHP|28ju%~73P87|!h$#6rd zXfY80`l9|H^vbiv z3n(s#(kCy_VHQ-L%;QmVKdU~&E+=)Euh^~A(lXj24ZY*AA9|GPJHV?GT0tn6%=tuH zryS8r-*LDQ!yZn2BH=|XRuJQ7IIf-P;0rc05@x;axQVZ6o((U-2_4C0ddKENvP_jH zf{=@w!RMEE)>b$tQ=m2jGUnJW0omMKaWI@Yt)1oo@A02wUFM@}7;PW&s5hR80CqUg z0-UX)|Co4<+_^A(Py93j$sY4b`I2>PvjXFXv^yJkQr|Bj+-5$TX>{LoQle`DxHE9quy<(`LaL zIHN-2$4UmdC^cuoFL?Y1HD`LjZwuxnj^CzZ5q8XBLAxlvqwI`$vc3nRrTkc8qGmA) zD0jFKO3x6Qe>I3cdPc>UC;P4>ovn)O%$K}{z zgeOCxRd-9UHWQM2$?7wlc?7)ae}IF|mQ1=VI}aHIG2 zw!RR$Y3ZX0B1HKG-CG-cpqKRlnS$}w!ivuTQJH{NPnN4M6X^?hSJ**+)qpHLQu6(<$LLuKZt zy6ZC+ydC);7N!*wyo86cEck>;`qTw)hyTl&Hw9*4!oL+$*NV$>-vnw${>zDBaar#8 zZ8OscRpL0JRrtGo|jz$7XeJpN1^GAE7$p z^7H-U5svCC61|@>ec=5>ox(U&iDL1)Ge7rVJfdkhsPpn8j`e|~8|WtjiuXU}3kf0G zNsplPT=WYTe>k)l7>2cpR6oQ@92%5h?d|Vbg|L^dM9hiri4_p@kZYM^FdbMet zf!~9qlmjV%Pk1~6;ZAad+^YU?{c^?M!-^-Yi$JxL7eVNTb;V#NX~>(#dySHMOZ}&s zR5S9g&Q6MuCv3$nbGThK|0LBZ2rf-b^ch(QcQPYZW6^38Ww&eYm;J)~w^Aos26t?t z+^@2`S+$8&zlPAkga){)sQyc2GGT$5)r~F5;dN5!5nB+#~SoHrbaF-?kG1h!sr(=|=?*B0z8g?8#Ue7W&0BaE;p zJ(L@;$G8klM+oqa)JRX`x(w=7V9!?|dLe1Fzr5klj?l>0uzs{ueG84fd=Lw#N0@wy z^&lE~W;%l5GXq<%k!EK2o5UHAalJ9r!b?Hg`WZM_3>P8oOfsI6tStRE|r;A4mZm#wqBWf`7C|qWa>_EY0w~# zl;;n|uAR=)cTJE^SSby9?2d;pj=LQKX^Qm71LqWLZ(*sTs02_au#|(dJsyv1%|#5hnWPggqdI}56uV7hJQ7ZG zFN$2jVK`YQTt480mrlodXJb4=xR^ps#%qzjYw`sI*3Y}( z?GRIu!q6YjB-4R-w#M@nG^|@&c+&43{rwOx_dBy`Hg5g|#SWfb>zmbCWPy|Xy`#Q! ziz?rhVh2@mRG+0FNwo?WlkM+4-97qIQ==gWeUN<3_3vq+4_W35jsnlA=e!?OI}iiF zb4c4Oe?J1=VaGIc#T*vWbN>d?Pyal^+#P02<>tZ1=y-!6@`sQ|g!cW9>3EuafA273 zxmv$4v^&snj#<_X3VK?Xp*Vt&u3~gtCCEp_ahNFb()WV@9<*6SAK-Na#q*4L)=JgTiIP7 zUhu6rGQt7kS=u}!2fMzih4iCO`k5r*3>=nBJ6%}~yl04R`wdAy>ASg!q%r09HY*m7 zeC^4gG5eyH6PwgipS$24e!KwZt-dGYt4RFQu(q8&ipy5`lvari6KD%#dgDg>%@^y* zLL+sAIj(s23zz9!n0Mrj8|*J|zbY3=e=y2iP$`YrahuMDW(kU}fXIBDnQZ1I&q znE=(VVV@*MR(F;JLpyJ$I7@J_e?x*h;+&ESOfT zpK}+y^JupCOGK5(z=CPT`a`JwYRa85#rjG1T9AE~rE>~Dk1%)V*_@6`#ftslD9z6> z0`DIxA2zeLwHQ$$r0hPOA1&thq$BDJBB8c>9UX>SUCDa?7&sd=YxVv~GwrZ@ZQaGZ zJ*e0(TP>wLO^x3#beiP@p7O%7{ao+T_K5#4{ulPE{9h69gY7H*6mD1yOZVe^AH*ru zO819TA7mp*w3P0ri33DyrTatVz}CoUDczr$j$!5P;oC9ksD3Sl>H+o_$UZkU8AZQp z6Si9HJB?>bHS={^n+ig1A8!pP&+Vn36ha3wze4^S*y^4CJB_vtNSxRl8|)75{hLlT_$ z3OQ$eK)MLw`@89+(}uU*j;j!JaQ9Emmeo)QH}x3%`Zt5)3f_yVIQA*)1Cn$K;ZiH7 zv0sD_*ufQYW{NHVR{)%y%8cd}6Jh>#fQ7Jzl>VT*`57u7u_{g)LT&c~D>lSZG{I4w z!m@9yWO?F%y5$D%#8z;s1k0zV24;><=G|%RR4u>0;h^RD-;&o zz?{Ge8F&B)&fNflliu+oG((&dPq6@Jyf%5EoblY7g1foqsCqS}R_k`hCL_ZRUD!ge z#3`MR75n-feZ~0ZZTD<5Bion8x6iRlBE9u)p=U-S0c~n3vfmaEGanR#_x=sM z_w>(I@li7P_dBA2+@@#d)6SR$RwUHY_1E~AX3WSoUvMM@z8FQnkSv-koDT}mlKnI3 zsPA6_|2JQ7WCY6ZA09QCOYBBZ@!dNkA=Hr(=-JxT6hJ=%<#~@spxl-Y#BXur@o?Uc z!5|<)f8x3blsi(w7ljZ8?`|or&TKPgC{L(W-MxlxPfS?(1k6a-w*0|Nr(CHf8XBlA zCm46{MziBJ8P^5+#?eaE-z#bK`&}_%E-QYsIk&k5k2yLL_f+}9i;tQ8j+|eCOtUUV@opkwrFcx zy_cFfzvm$B2~}35j)|7>i#A_UR%omJUdwzpj4Xy?{Z6BhAfGG1I?Yalfzj9RLYVVDi+S)IMiS$l{iq1X`k%hOKqw!K zt=nXElRn@iY5EU@z-@eEm((Js__lhKHmJ3Byd#yP@nomc7d#`jQg8ZY> zOUlQ7_GY=ZV7X3r)z5}tZNG`Uv=Zl!BYhE8Yq=8QACBtyOXQ(N zfIcomRa|hKtF`d_5bn532sh#R>D5mRnxlv3hfv2~LZ}JPPp`gZFrWj@>IaiD?^e%M z!pMA{j^;~1Z(fYPQUY~+B=mqXus*m-Y|@R$`qq9l&bUqLSe>Jm$l}%+8Mo$s+`Z+$ z*TlWFR9=8OMA2b(&`FInL*kPr>Xi{__IRCXqsA))w!xBbS{F6Wo950shu1wt;l2^}3Dm~= z2`JY3sD(&})6p7a`lylOzc3=F$v2XQSclcEmM1}Kv*Jm3PCZ*@vJQ`vketmj+2%`v z2QYSxzEVP}$KudGO*qESNUG97jnk!FwyqV2L)T+;P~!%P3WBc3&+C&Gu+8G60tC9J z;pGIqQWfuo2vCp5p?4Z*oPR53T==L?s|@O~H+DedEzI2jo$Wv+ZbI_U)#qRs?Yeay zkE?vK6wd((ei@A}(R@u|HpAK!RlPOZmf^lJHsRLQfz179)CJ0t*Y;c+Dy;ZRn0@$A z{{>RX{u93Bh&|1cm#3Qz?SZ>q^j8+XO0OQ&0bKmEC$*5r0NT}ta>6TWs3hUa&BQs3 zg*z+ptfsyP@Gdr-Ht*WA=E`m3Ih^OKSe!GXV77L)ktBEIA4x8bQg4u(v`~jKzF})8 z8~W5N3Sm5fcsUYI>Z>HMjuy=5MJLTFHO~gAY?vDN8($OUgazKgf=glEb-ytyRkaY0+U>&k5~SL@jIEfljA^z#4HDHguC+{Tit#(W|a*Zc+)pT0reqfFs4KeUk?b?$em za6<^Y85GCj?YV1%dO8gJ2d&}9J~77`-BWRUZ}dA3;b3L9$o5fSzHaIk0%$gp45$jt#$FrAlj|4fnHBy}H0A7u(9?>)>ltmzV zk`1T8X*}%=*j)@pm9RuVS!8lAO|-Cp+j;y~hLCG}5>8anS^wXQR1SE9qh<(X0ZidDj7zl2$L-exl9d zT_@~mtd-_iCrmD|;~tU`;aEQ>wR&p%MZJYj(XBo_BPk^#X;|uvVQIrtQ-%*CS_+jIPA(6SK8w_ z>`&TY6zaqcRUHe%q*2BeTiTOr2Y&`KDQHIo`_EH-8N;N{#THN8Gd>Ay2&%TqcIqyP zVX{11Y-x`U1s?sHf1-}1MD;hF@+06tDh!h@2V0!L1=-L6!fTqZ2fb3~T6HK4%ixQ*#fe%FG+YuS8YNrP ztIw*=kO1lgED#D`#CcI^rdVrgHT@8+8)9IsB!_Q{7qL+E9z9-ME83Nwd@lmlc1cK9 z?9lh=ZNoeA>Rh}d9n@tu!#XaB&*zR?dzcm}$vX@CRv&w%FslRq zb@jr{g-@AZ`E`Z;%&$SeE9_~0t*9$J-~762J78aJE9`6jv;233BhEL&-MsX+8*W}Q z?$(=cUutGhz4v#8>sF+uqySR_yw#U`Rt&aO%-0Zk)Mj{P)t zZ|sY))v@=)7R8Q=9TeL!=F^zQnCD`uW4<3VKW0))N=$6@>F7U1H$?v``i|(S(U(QX zpZn>#@1Oh1xeuTFgL4bc9e3`x&ONu=$!>3U+tjUcMYr#Eo8B$8TXfeix*qMiv+L7c zf7JDcuDMQ*6iPj_-He*|DbMJslTz9M|#Uj6; z)S+usbJTlLFGM{QbxTx1)aa;`s2;uApKkx>_OG_DX@76~N$s=R4{YDz#q*-Noin9x z#kEoGa>kZSnK~nH%H-)|W|T~wdG*A+Q6;&fNB69l8P#s+*pf+OX5@~}osnCTH)-mW zX)}6M%!q22G`3`V!SoqpCY1m)BX9D!w2J9b?aHd(UK8K1`rD7k_wIB-#k8n)S5{Ab zEWS^t#ESf=cB87-JrsXIrvVjHquPzBPIw@`{{`_CQ=-~kHa7Th$(U=$Or9~lZ^dLx zsk;2f@x52{shAYiE^AWB!s~BXmUQQ$`AK)&uw6D_a&{ zaSgs_{jIEY>9SrG6QbG;8(T7M%*0$Fa(v!YlGm>yFRI;l#+J;OmOJX2F{4W`cHWGF zl9^LM>zE-GO9uWsrs`Q;`?Ie<2dtmzliTYqff=|RGP0pRzw_>ze>S^P0C+AI1yXx}iDP{ox|?eeMz-4oxZdga~mo$!Y%_=ntA;(L87-1uG< z-@yphmll*Rz3ui}7bR8<=Qj3R9e=@)eib=bJ?r1xc5CU9WjB@b`YpSlBAa{v+}-hg zI`*%~0zGfN5Z|w3LPaKie)>ZE1sC+F$N*^;eCZ8$+l73uf~gI)nqbI&6_;zL#cWCUip!$feQQ$5O*brAbkhyX_{9q! zoL_MfwiPE0HxT_tcmxo z=n>T}4J>H#=scV?@VA1g0Y&jb(X=sB!4F9$;X^9U17E0)`&E4J>Wx2%?*`V^op++~ z!T1XjdsW2A&73-I%D8E{lS-z|#8{waa78Rn+`KjM11{`e5rZYM4*nfrXA9-p+ zi~3YVbJknIKnGQv%PkvlKaOv|if;IG?91S#eJi?xnCfE>;h!W_bRp40?~Cu3A6L;i zs@+9k%VQ>kmrcsen>e7N6V|kaw~w1PW#&|2@ZaoO&x(%1;loR2w(a7I4m_~n zUy1M0FMiecELrk1S2rVd!Ogjb>Aq4@p-&RapquIovJZH3Sb>bv;I2 z`%9edWA%6(`mefgLRZ1;~f=S96v)${#6mRfBpZ2oyZWc92Z7!VnNBb6%GKkX~# zs6dmG!!Mj~eL>8%Cq7~M-7KisV-eCIjntBl`xd?M1HJ7JETEO`I8C7Fr!amIDkb^W z&k)(mMpCaj_6$vl=%P^qONw+7EB`+&_9vKnPa99`Y0M`r#7mlE!&277eKrE|J?t;g z$oJrS_8dgMMte998|DGuxIO|t-p12#T=YK%pF438+`=by;_0`1|2!K?;!`%zdW&`6 z8OwENAGO94I`#5_?)C?0kJ)sRw&SdvY*Q!Q6iur2O}Siu`9hri1+L$Q9gGA*HH40& zo~w6ihgPa1z{lEnlCWW8uzyoPecq>j+(S5Yj18robHz^S`$EGG!|`{3`oxnFsCOJl zGWJRI(vV~O-dub@3i=-Kee2;295<5q72js;1hzgElTV1%Qqcms9XHahpz+JiY?{pG zbxrfM*rx#MxRDsKQC2GLOR#A{1|0~G+Y@2Y9ZwPoA32}V?Yytd2}27O&vF^k?D>)& z-@~#l*zgR{T(CfE0FaZ@rXt&QPMF!}ptSx$F(?aTN?p53HB{z^i@}L7TMcOCDnv}s z=tnQm^51HPfK&tZV#|&_W9-ob=(>UlqOs7w&M^8Jv>jO{p0Ai^;1z)Z1N;b%FH{CC znC(>tC0hKac5s>S;-WbWhD-x57US&1pXxLV*oiFTh4}ENQagf-2!?-ePs36B**EDB zSlFhA4Dexi3=(01pHQSzEW`G-(S{2dvn-epEP2H~_u#-1^kF|eCbq1Y$)IV5|Ddi& zrO*9Bu=DD0+?6F{9WX(H^{g$&MkQ|4Y(>G?&YMHNUAs{>s%8y{ZiL^UsZzDTo0)s> z&dN=JE&6E|Q)$$K7=nSFCuj96Q&!|XnxeaF9@PNlJTpS=TgLX-+y&IqXBM}{e__ML za$XsRxU5?vwPUJoraS2o)n6cCT6NAN!$^<%M@+>VVK)e3=%LS=-ts!=2Lh3jvft4bMKUZT(9r5z@0ELp73LJ=7fF*@5A!n`xVA{IO!p6aKglhOxeH^ z3F#10AmyZ1FQ26oEMO;2j5}5INel2WZZ2s) zQneU?UY8@HRI6GXA{}=W#SE#JjNqxwM-YB-^py6Nq)A1st&TSe1&kNiCD0hwB~+^P>3C8*lFXq7Wom3?4`l5TrrQMBoL))1&c$1 z?K~JEm<5Z?Vm*z;(kd1cOBHgfodaVe<}N~U)lls2>C@_Qk`Ap~2it2U+@*_&<^CFv z2t^{TSTV=tP2W1mMw2VDSaCovpKh&OaR_!)6JZl5SIot}C7!|DC-r^etG(4xO+?y8 zp<-dFuVaf@qF9NM%x+Wo(qT`??V2Q2|8eUi$w;gd6MPu~4JL;1?j82z+>Oa(!`VC( zEY~7R^64C(7l&VP#9djbiKfv*%_3R|sATUS9s%zNzFe*q=ke7=*Q2;XEY~Fe4GD*K zgkE7BSFzIrh)0&ung(=^In~{Nyh6Am`SKO1oh+?QfR|1Yrs0pT-rxf%w2K{fq~AmM zK-p##=|R(+hiM)dp%QJ7j_}*VG-NraFAJ_nr=Apb#|+fAs7N?S*|3&bGrve0CB^kp z$u=Kw>?&Nfk*U&@1Z1;xnCw{63lYe6>?&ls^)Cq7HEU=gNK-e=4DA?HICSNUs7-`k zL4N}WGrfY+BarSGRi1}fSf4HpS%x8)i%FEyjAl-s2(&x4m0g(ni9Rj&Wo?Tkv-~Ar z8RnLgnH}~_E75gALGz<9WcKsrju7bBRruUg_6v^r0BpNhh03#Z+GSuTP?w7ylWk}h zB?f7f^)zH|jWBgPW>=K)W7+1S=1&VR>dSs?rBL8op8x-b=l2}519y8vF$$7qp#?h2 z#mIIyt@QJ)V2YB5<2~E(AP+~`-GTY-k0?N%(4ci*2%w(fVdOnbw}RPt0BmqL;!vk= zS1o8}Xvg-jjCq@wwv>jD>+zl2v;@LnY=$Y&Q7xusWQP}1#HfFS-G{S-0ueIx z!tX_(-Q&oWYmhF+5168Yzg8`eW^jicOQ7@jjj6f$6SPyfE5fJ_A7+GgTRzZf zc5qtreyX2V`GCWexp+r@8l2YOfOzRSnD|fx;vJSuE>T`;49-=bf%v?~{roka_BLr` z@7`gFgu+pZ&SkV5*uqB`>$9o)Len_#?(G&7*{Tpz@>|wvF>m!qY;xj5`XQ4K+-843 zxZy+WLJzKR2VY&bMQ@s?uan@H*?1oEveJMX9z;rWLaZ-saGeBts|}qVI3wb~2&F4j z)6xjDzQu;hsJF<~5S@X^`#4{5GxhT&V=uKoKvT}TnJw$~G}cWzP$VymK=;k|2e@ua zuMHd$?}F}vWjZ&Mv6r-lRxS$e)#cy|h7sQu0bkY{&j!WdW+2{_kAZBf_bCn*{wDVW zERM%+wekh_&PIDe&uY(Iqw)OR@3scBMKKR+^WlQ@wT1dw737VrkHJ`ku)Iu6MqGJv)XL#pH(%gC&?YGirn4U;@|KaK4~y zP)y2mKg5<#EQ&z-VjIfS!p_9RGel&o4x-n&RgO2lMSx@Ngk5KZ@^$*ZS zeaJRk$tzZmh7Oo})myAmNBH{Qs%u)}uMauKE1Cw`)Pe9RAYJR}z?sXyj`2$3FwoPX zJ;KG2Ylt%{Q5Z^BhY;@>ucWI3ILhyMM!&+XYJShX_E%$A97%-hSk%M0HUdm5| znbgdL*;+bCCzh)lW#D(&yo@S-ZMoT~n%l8apH21cZsEw^x1ka*k`FI8R_dQJGNVNv z^8Ljj{ChT>3%%hXczj9t9ps{744M~#@H<=MSN_a!(b*XO?BgmIH8k5&>E`KkW?|0F z-vhNrm#R$PfLwVLT&V08xVM4)H>u@pV`oNKEJqq01^Bv|2))Qkm;4Qw{Z>YpuOo@l zV#l0Gd7kICjIE_jhAZueqg-i|`^f%Wpjyj)B$QT=gN``Lr%s9$1NkLK=1Zp+D-Pg} zFv=ssV#VC!CkJtl8BwGqPlm&LvM7@$vFKGL7#_04pz8m*qtuK32;q)A+5@wfTt>iG zfbQjY>bos;dy=RWEC%vxGq9dS84hgAp<(7G=AHjAn21;m^`gbWvbB;#P0?cEp7SyB z0mXjSzl_`_{^RNLF_)Obg(m8#jG3t~5^dQB9W|ck>ewaHVlWMcmloc&JS)NnJT*Q# zTduI_q0T!sB|*PaGQO?GBe=)(%47fZ{g>)|Lr{(e&sopCjGhLb=@zrx^8V_m(jefV zqrg)`Yf6w#d7%0W9BR?f8i%Wl&wRj9;5mU!i7Y+?#>o!qXMf5UDoJJ82Jb2GDOVVd z&kpJd$tvjvX&Y1JSk@*7do3N*KfuVb=lC8i94>=*Y^u}~etAwnx@i)~9sB5<2y5pU zRcQ_$8AVqOxae$N3_k8nDZWWHoPc9eB_}K!W@0;=FCp!d{V1Uj>Xbm>s*g+!0waHh zLPesdG@Xhtv{wgV2_Xn$t_1C&}p% z#<%Msz?33~J@;}@{br{K3+~iHxEF`@(k{{sle4C3DavW`KmPl;Z#(4>xNh72F&i>8 zKR_3NynMgtta7BZ?6z>E{Z4d68V<>W>r0>xXX4o~=D|1TGfF~JhfS=*emls*Wbpn^ z%NLL>2`kFu_`;;eH7iQ+g;sGEF!Mc5TL8=K)5!Mnd__kKpkAQG+*hE`68d#1>}$1} zX)k~}VHVVsHm#!}Kqwaj$W+WbaidN-ncIFR+Jd@T?M7g%x}N0U(f)4q)on*&f5C5>T+i>USYrUic)|u-V>bFJ=Ad7O;h)tWE;Hm zh%UgI(|dwa=D8nYw@yE(@)v`2o=>w@FcX3^4P}*4>13h0O@e{FCzNgzY<8xEkb$jA z?=IDQlAT2Z@qXtKJ%r7s_k^3({5nXNs{Ok2B)~gQD4zy8Pl&Jj2(;^NlK^VJpVGUQ zZWB&ENX;<4EFRKVPbS~$Ep2g}fH$V%O(?FWrSfro--+L6zof!rHq0}V&wmw@|7@OS zWi^xE=ady%O}4&Hw!EfSSQU5af1mk2r?L>WxUyTMJS>i^Bxa11XGP_#vTyqwBgFzb zG;mroK((ye(Ut16V4#kDf-g$h-Dc{0Ky>V)2t+%k36a?DVar}@m@&SAFRp3w13X#R zRo2_FPYBiLu%cV^V4Wm_kpJ$;M*}hO%OLI1b0Cq=AzApmau~1O^t-nu5 zZ+;!57hbQIq-~Q?d!Nlk#p<;#Be)n>u}^Lcy3-9EU7~2p*-}1apT|X)X3pgs#1lfM z_Gi#qI9;VxYKZJ}jJ({e$}x2P;AVGeIVMRn)MH}sj**x6Z8L;5H9yL=%2tnwL3&2s z%9(OZV4tRhE1jK_b5vQ+e84gC%FsD;g{|QW6mg4xi<`av+6cruR$hML*my&H=`>il zg|U{;Qt=tI;q7zGyu98qvkgc8C5S(rr`~LXbj-Yb`X8JiTrDHVG7gZR=|s8df{%RbxSD>*uw zMg(W~36P&RNhe>Rwy}3JulSKk!r0)7SxhsxFt*7$^>n81bF95${+t}h%YUaX&Ij$Y zf$HIt3O4(ku*E}|z=}ZuPrnCqPbgMTyn#Ali(Ix1#d6|vx8W(2ve!*15oYdWRq@P} z4GTz@Tt)MoEzv@Dvd#E*VinfT@brIzYOLB=-@c6|@@)~9ULS9X$3_=pHKj}wGiWri z2{D?rBTM4eUms`T#aSkWoQS7?PG%Q7m!Bm{#p`2Q z<5^fq7~3cFvBOGTCA7yg(9sr@<($AzG3{$9)h2+YX!V>z>?jLse1s^hB+Di-gVYI< zmC{Nf{%RXfvD!3?fUxpA#37Jut*#T`B2~YhYr}asS4w3jc3uG0T4kmXIHoS)EZ6U2OI+eFQuu`1d-)MNeIQ-CwI^cbio8{ z^TFoNTM9L04huY{qSLJZ!jF371jtohcdQ4iF#%R<;+c`iKk3_6{;vpl$AmyJ*;H); zem?y1&vw#Gs=?5<2|<`CDmIzx_7|9Bi#wMphKm5|*bcbo(OqCyglxTukt?0i9pudE z2$Ob92UJTQJi}1W%oKK@$B}0<$Hp`I2dEdl?idi{9r?0|G6+7vc3{#;=5*Im#rKw# z)h6DwXI|@*cI=V`c=fQ2U`oxNVjH=ds?b-ov}B<684A8Nti);!Jge!=nHjXy>?yMGT&;~~XSK|oRR&Ds zog_cg4s#ce)}FcU7w~u{$=vg&p<8Q0as=cY2Pw?OAO}-{?N>5zjZ&(P_ifS-+i8P#xtb}&Ysz=v1R9( zUZ*oj^JFc-JV4H}kw#JodYxVbqNPDp(^AcqpP5dN_?~Mmyu5?!IvT2_#fMN`&_iEy z!Oyhto1=>Gn2_L$>1XMV_PEJC)l-_ztg$^aZ0snU()yl4HJW=s2kYoZQFE;YIo(Fm zV1IlW>kgxn^CeW+M{?xbbgBhE&BpVTZo7^3uhG+(%{`Yz=NR_vph(lq7L0UW9)lb|Lw}WKD}nmxBGfYz@xDJxn(Es-fT~vFX51 zDAMG~^i-a&U5)}r>+6vsO2Qei92ZlP)uiwMYU^$i!c|)wKvN5GNKT=O>8TWb>N2#W z!O^O-VwjnFemtgb7{X*fvw2u@dMXduE=PeQL#dsNLzcl<7ruFH8h&)7K7YY`>f6dG z2>HOu-%rZRH5ocRmB(|JqqwC}h9(yy(Z^VPb*iTIq^I&=?s7CY9?X?17Rk-1>D5AX zY=)+J1bAC-3pIY+3{cIRAse1NTHkP)fTy-m6+@2K8*V6E?Z+0;nXPm zfM$bsxg5zeRN4*RQQL$oP}v8(4@u{vJ11K`FT-Tj9i@$M(fBiv`e?FJhL?aTs2YE| z`GBLf$@tLtNqX*2iqqE)S65xqw|03-o6+=fOCAPWkfXMImb!A%)pnPswTY&Wf%~^? zx~}f08@Qvh^#GGF>V5_)s+-b66G{}-4dAw@ZaZ5U;1IL2ht9(cWaUZ!%HmnrspNMw z1&93!556LT(-J!i1vP@iX^?$F~N~59Up?&Kb{nv(WDDCrjRPO z?wyYDP4@Ugxztrt$WGZEaL((Rt27!qPA61|+C$}=bdvLsfavAlQi&E*)=nonG%iadC1Fb@DPA&n+(m(he7ja&qbKH9VcY8{Eui{AS2}|{Wb1aVzPQYr2O(u zFHmShaueG>B|%;X&Km*~4&}BL~yHhngJQQ7?fx$xX+6$rmjr<$-QkVZ%RXPrg6Q zi#rEsBq{~1+OAV_#{+b^jh;?DC-FKQi}Y-q=fXLuU_gG>CWq$x+OXUP^D5L|$XFHd zP9!Nw>E*&d=`$C&<8s-BQ+51LEV+R671ZQLm37}_g^}fXZE##JT(ioLk)}&1o4qCd z+Gijk)M5GJjs3OhGg5=(B2$v%TPn?FWRKr(`?C~#sL4Pg1bf@Tk?kMnaCC>;bK=J? zk?tAH*+JHO(!vNtd;I>`Cx+;qCkt7iN++6Ep~2zxtFcotpFllANsebgb0SJiy>+P{ z*275)+Gg}7$LTV&&sAT~g0W_?K4*bCoSyWiT+UR4^lXU=MNN+DB7i+!KliV}E^onF zv7 z|38(sp{IR$Kj%C4KS9A09>lx^ZHcnQFw@Y(hRUXHFpJ9q@d=3$knuK>gVrXRla%{q zP;fo3*0&I#!i(5*8qTxf9C+mbIZY;RDiy_6B7nQwV9}vAvUU-$h?v6auJl#qaNsx_ z%S|o2o2CtLSq4iTV9$`mb=tKLCLU|!hH>JZgPMIzCq=pz9ZsLZ5sk28G z8ld@B9ZWq5Vo41aueaLm3Szk5X8Fa!0XK({@@>o37lsJrwdb-&W6KQ%ZJEYmS+&X3Kk z87yU({Et<5s;pUOd(u2-(GQp^TQwgC$Mo5?>cms!9y{SH-0hrdLo>pqz^JPuK)v{t z=tm9BQYq*3gZiXtG;Huc$3n^8;*uWzIM#91?$?(aIl!j$g!KVi%mr?EsHUPPj(L$!}Z|? z2OD_;C194{>8sTta*~UL;K2MxAb%G0ziL#{ABpCDczL3Y=6zuLBS=m)burZh$Pj#u z4HkBf1W3|cdJhZN6zj_+<4&-lt1<4TVzXTN^B3?Qf^9DG4LIS*c^3Se%*k{pJ&W0h zw9L17g;3imD|*LwI%vh_xNEn|Col6pVf_CrwV> zG%v!WeSho|G}qy1AD%~|Sub*r@2-&QSmkVRKgOG!>+3#(-dU$w@rv`-?-ktpP|S!Lqk$007I~K#F6v6B&%`X#g8e z!p%>LS`#Qq4x77S5mZLp5;-(m-pb$X4* zUoix7##A}#9NP|u-9|$oF8;%qaN+Cfu`o!-utQ`eY=A)KehA|MOEqc+z;Im8wzCZe zK=9ZUWV?J?n5vloL#$)hX)ytU$ziG1f?mxANUU5x&#*%qAZA^&2K1gjqHmBO9g_~} zrS%WUs*gY~>;Ka9*E%vt#%&9m`5@DJzvK~$?!pSZ*>pg__;nkS0~=5HG8yV4iR}JC zhKpyw0n~QDvkTd-)|VrRe7R(Nya>?ysshh>XHvG-hwIU^yT?$OH&Q0pKMKl`6|1;1f|)O{k!VIL38mMAUac2tINp34 zCFA{!&kqK?1oWD+DCkD&J3xX_OKm*;RqMt`Y9%xg<04!dVai_Q+0wBl2e|Z)Ee}A! z0xirh7~F|F3nM`7z%vOPs9z|B4012$HnTp)obeIJcH++X_?;LZ zl1(3>sjN88XM^FwJ8@@RxR~)KiMQ$ro^h5YS-)7nVscR3=rhoMY`mep>Sl72>vY=5 z$PPN8XH*_zt{2)RMn*EX&*bSd7q}C7##KLdy&O@5$Os#Tz%pUBCn1sWHpM3%aIDZA zFXbmJ7MqpwO~Mt1e9Sj6V#r}kVL9L#qv!qt7PBmh+`NR zO5(Z*q}x_$Ip?+OAmpJ21C&^1#6aO+8i8`hC@teZA(ZDIWZ3scEj}?=bH^S{sP;zef+TXTzazqid1mR#`-NyxY$Xe*{7xNC1Hu8vEPXE)J?49c^5(;!{MjGr zlnc}`OCJI>=f?r%41AWX#_}KQlndUoO-DZvP|mn#q5RDEBTU^fPEW`958h>_4iy(K z**}oG)p%Et#+Qb*slUft!|ko64WWMF0y!nkvvI8p$E(*`BADLFv7x&#*AwHZJ7uMa zc{#`-P0EY#g>3r^vQe|K+Q>l_VV3CyYbQj2XE|^jvtzSyOfsuW=VPrTIbr#A>g6`` zca&Dj@G;kubRHtTsir!lXy@N;*VBL)v?S}Z@f`u=LYYnt@JHynjGLuKzv@2PP|Or z)>y?$exwLIjkHTCHd*+D;s_t`_10q9H|Yu|FVU%#2&DUZYl(qBOm@CR-*K6_qp~-qCAg|taz|%1QZ*fv$YnuOrs|C>h0!!M z!j}0u>x#vAfq`EG!ecY^n<9ie>Z-gV(^$8hH|=TiB__uujn)aLIrlAJYaI=~M*MqF zJ0-2MaQXs`FQsI(MS0unJe-_y%1x9EalTnE3KP~X*T@)7qi18U^KK5o6GrPmj8WB;N%{xRo&nA&HTyxG+D+-S_8~$nXcra(@+2rG6Y}d>c zT8zj3N#Hf(HO5b6^x9tU*`x&;GtVDf%2+PnTo@vq7jpqdrr8_k!|1x^d}zk+@B_}f z2@AG4melrmv@|Pr2z8#!(29+nS_Gm69=pf4?1pgX#UvwRWUCB+5vbOz*deri>-WQ0 zu|aiMuR=9thaWh{{y>W<8w)Oat`s>*zR(YrAe`R!yyF=Nq8U3w3&Ec*IRs#2dOAF%zaVcud? z79T1p3BMkt!OA;F_<-YJmBYd8MW}nJhV>6X>zfD!I1bhYpq<%^T)XDkI9&VBM1YR8 zmyIK*NZum1?KO&JWM<4;R4hq`_N(jHI2(SwNK0n9{mXkzC(hyjzKGLI~s{RV}CHz zSCx?ZM7^e*Ky6jTm>3clQkg+0w5c;DR)$lmL~jPSwGk1E%bLYVQF?0&H%}OGoflgq zb8m};wB1o(xLAfe(R~X+MdMBg-IUbH?T-4=!kxtPdozo>OD3L@RUP7O<)tO7n(+LC zNJ7;35|QK$+a0y#8@>eS)o=osq#K1fg?LA8`Gz^ALl9jo{tx7GXv``6fUUfI!<^D{ zhM7ZdX3*I`*i%}_PT+c{)*_+5K0gStmuS3P92aElWO$?WcU^pvlsh2V>9a3?TvGNCBJvTdTqfdtzY z4z#Qij=*P(nOU{tIyWM>q6!_N2hZ$v;0X3L@z{imW+%#1a9RqwH z8^4TsAo&HcNbo_5kjNKug=6pcgY_^2X{ELMeESPzf9viyNvc(GsIX+%-y?psUWo5) zIQUp%ao;coBHsHa*mG z-bg&3+r~nD(*^I?LOut+XbzL2GlIG~g~;z3_>dn5%tJ?IWVd4rp_+Q+@gS-DRbJM0 zespOFb&Mf2qtvbopjR_J_&%)rsihHyc1$8qVc%EW!WK51yCnTHw>q&{OTN!YX_G;F zhpjl7P}*zgk_3Cnn1_9uq^ZRzl4rWZQJQE<_;6B?t@%s3$e1EKaI$8<3Gj~QM8>~q zvg9tpZ$kN37*pOP&2Jujz}B3^Z=Z5gY5X~We*xV=;0co>z#YAb`&>KOklvgP(mz}2 z2LcaE4n}r#CK_Q@+#QrKc|vUI5UUcGXewKZ6zJRGC{A<)*Dis|hM8y5H`!fyx|XyV zz#X+o1pk{2;bXaO=X3OOP3{lij?#25gMpF2c*VT*HAgj89Dp2ENyc2kpaCHFK?s(t z$+-Ld*jO$ZZ{-e0Um|{F`-1rPDaZBY!yl1+ja-9*YBXRBt57@DMRjXv>hI>%2nooHur&IEGMkI zv$|rLLbjvwknHF#1#-1sYq^=vzE+@UXDMw=cD>1d=zD;1{s+~%MMwHObfo23{xyai zCI!2;f7gcY0;w_CCU-3V9v;j~!S3U_`D}=I${5>kwDGGk^yA&ghD7Xb;Ugb)^Z8)- zfg9`(aIMPDm2lUbz=9*^(uk5-hQ189R+Cj zm;ib|sF&g?XHNTp9h|)27u$GFKIIBYJcZCt6OJTeH=fZyzf%DimvEaxT63*&h5cSjvgt`|mSnXLuJKrx>gQ{-o?z3^Oy}<2IC?TNiydZl1 zOQBuWx3WY>bfTaZK&sz3Vqq-rOYTovIMdOAs#5UD&m3Pl=ndzplrCz=SCrRpoNvF&*7KzJ~McSjGH~1%P)_BA7J4{9d1er@Tr*g>AVQj zPPCv#oVvnyT3#Xpo;>T4#mmKuS5P41-E=;)6KUCod`nw+hFPbQZ z?3ytoo#Q8r(7bZNvR}{|Uf(_FE|LM#^Cm?g-B!(I)hf?3t5y})5*nB|S(E32p* z?W&s6a!{9lOY^LO`nFh(UUFDb8W~C&3PZeye3+wCeL_=`Q^myolFf(YLa%&_@?%$S;9{7cSJm&(9B)>ApN^t`Av)6F_{?Qnf$ik~mptVdqr%HceX#MTU- zQ_$Kp#Tg6EVL1|xHCt$v>M##sZ_niU3@1dlVmK_PMbQI$i}ElgleKX|1ia01*k zhPN;+8@G`4VJ2P~fn8=N);<(C|$L*&L0WbtY6bs|xVHE||P z(q}DjhwYH%9hnpyODQdrFj+m)W@v}+OvjOK7|7R+=aRK$@`}`RX|OiOkt1C>$lN5U zEi(e@Yhtngx{zwh=r4KfW6Uk`P;;3+?gK7=~%iyk-_rjHCpoq{sZDa!E zg{{RV(?$k{otv=d#VmZrHZrXl5!X&e9%A8T&tslp4;`GDj-;Jx*y*49N>qq<9yi|U zW6#VN8+%Z2E_OFozwt3&hYY{qymL=Mhb;PqG2~Uu&26w=mgrk;OLY|Z+*3Dkb< zL}p!aw=t9Fw}+YBls&E0_l@uDZtuxk`2;n8+L{+bXqAmWwNf=!50ekrkDhR~+Kp!8 zbE84~+2yoiR%-pLGlsRPG|`rF>!it}Ln)hl@FKifPxi)}rwQ3$qf)MF%ktK63fUr9 zEQVl_P^_uj0rZD9ln)1GWr5zo^n6854oCfg1vSDskxXU4ds2JY)xqH<=CSgXBZ51vHC)rq3^KqoHr$F2vV3f{nr$$TQee#%?q*Rb{k7J zz(V4VE^d5QiQPqARp6qC`_%-m=t2bHUiplQYjxZHcZJ zu1YlqezOhdlChhok%%tltw_@MN`_w28p}?ea-lL&#zAZ48P2-Qg35biT6uyEtO3zW zAOo_KXY0IJz*E}P^=zwi8+yz|5IagB(?W>Yf)rn-K=Bbd5?h_Cut0c*6nn}4dyzR7 zvAujJXoz+$0{3QJFLHNOtGGmJ#X!fs(04?JaOW;?Z|KS*3{(E;a#$p!QdM$a|2-nj z0{1S%w!Z9UgsRcPJl6J$FtmLY@R*LT9-f7_j5IU!WqFoLvxG-%b*=$rznE-OyQu_K zkWPPF-6Vr_F2OGB@q?GrTZ}#aHw@UQ%)|PNe(Nd_Z1DC?kizLjmznBKAegLUVuDJs zghp(2JT83FK1?tNtn_MDZ%T{+bv!OK{cK7!(EM8izLA%tlTFQatK)Ft`KnDeWaoZ~ zXD#naeXRxB%GENidc$*Ux`^W3)ir0ZQKz2sg={XDfNd{}xDi)urmP05&l&^?A4mb` zNF3n{OvLk9-0HYmc&9dukmFf%JE&$+l%}PA3ap^pV)Qv|J1s@LV%`wSRn*+h^q0F9 zdx{WJ|3wQs?D;G=FkuLFBDODrUpvK*#R`$x7H>5cBjgIT&qn_ldX^WC|z1? znMbGkiB2It-NtigS0Ys?DwWfQgINr)aT$IfZir87jUS18A({GM2zp}vO&+aNO;6V0 z)YkZINEhN({|1y7OxI^F$YC~;EadofCgq{1Ni+j}q_D>feZ#1{9Zs?FqFB#7YD^P!#1%p1y08HxJv!4iV2E zoFEr8|5aLnM`HNK2@&9qrGs?Oy+-KH-GEL1{uMgmGO%sv5YF)7m5iE~TZU|jjT0bc z4;(VW38-V2Ki+Dm0`79ewog5mk-m^slVJVe+7zl=X4fIr= zO~PE0-|@L_i1&noZST-Lkd+hoDvh=NHUGT{zhKJ+q9~uJV^CFA;H{Lx56N47!6N*C zEgT35+qN3&n=io;ec690iKIR3Jx4a+5vzQeFC`-M>9oWVLmc1xT7$s=???#rc*Y#2 zJ&nXm>vbXi^cykcpQ)4FV*P;-E z^>gHfQD6~A_M6$)d`#+B;*KUZM!?%5gY5i66gw%HJ$ACJi=oYaDjgLQMFGM-|n zGEoxo*k7TO`_NR#%x+(%9JW6h0kktp`4sHwSe8}?9%fj^li98 z7}Lf#kT$&77kyg^>-kfz+iCBVcwpAONDoX#DvS;i3m0``M+eXz@E!02zny-n6 zcxS(+gF*bYZVuzaNxfV$hOs1XjWBsHj%M3dGlTqJ%>#SXSDtUfPA7h5HP)^2Wf~x` zbJ4JVE`MJqTcCFAjNHuV!!RIl#n~KFVj$1Fp>LVsod6nYZC&flrlXaPG?C+`H@+F+ z3&pnR^f|szw3jY4aOU42sPOySBG6rALk(vPwmS}V4`_%0oohiwiP_X3L9-xyF}Q-n zLQdEpVcK)74@iK?k^QFON08EUcE1*hnVKQ1R%nAc@ePe;;xKBEALube07*Ua8G3*YjztnQ(}NlM9t_ zMp(n!BriFlrKEb`!TtL}a9uUkBPWLjjQ1RYlB;V{J-~X0!X6-R{n4pftZIOFB+8al z4?MW=x;L8#7o1Sd^aws+3znN{6JVx?d_d|R7+L-iRa(eqgw}hGAC2;gN%er7_)ie8 zr+VZVsN+H-@g~&+g2r5kO7hz2sU88|aiI~ z$qXdfgI|z-+OaPz@^o%UdIs!y(M+-jvS|Me%JpQA0BSqXHuGegWDjh62_0pIx@^=m%a+ykR0?K7e^S}dyOhH%t6nc2$GXVMl9YwVkM4)O+m36hWQP^T^Red`=$O-5$hJQil} z1h-(qS)T!LP(E~Zj)Oq^Z(k*-|NNXm%OqxE;VFha|Xo0=6IKYmj`&7~8iKTi~ z=jdiFb_7m2KOSa)!aDzX3!#o?)}qD}%JjT72XHJj9X^CR+8H;OIy}#$M02NVT0F6G z0Ugb3HMWUbyjiU~uv(fLA7X9QEL7uh9BX=k;L~sTLDYh5i%z!pYD){mP9*RzF0KG~7(CHQEcWfvx zZT&yUS4r@XXf?eNZ%<*AzDx1}+iNPS%<(9*)O8>_w!?ho$q#1jcuk+j`Ka$;kmEsb z;U^L3b-boDZJhYT&|9^M^d64@bsVO0?~aqxfL>AASwU&-2^~+4vDfyO3b~ah%+RI3 zV+o)HELVAFeYpg0drn2NjOijo=S~FCr%&rUB}hk=;LMM8nSWkXX1a8pfx0~$LpPq$ zq>St|`GBKKEa0R6A3lTpg2-o5J!;~o5s3G+iIguXr=TL-c9ByUym>ML-ccz;_dFTw z+Z0fr_m$6mc*NUe5qiaYcQ-cDhXmICDx_I?wUJnBsN8WJ1;PIYeN%#G3ls$#P*Y)J?E>b;n2=AOnGI+W)tqg+LCM8q%d)bZ=N8W z&%-PBJ1j@6Y$y3Hc>EqjGD-0JS)YT2aOW-NCY8O-C{sM+Ut{z{1Z@=V(g~N*o#*&@ zdNQ!&4;PzxHy!Y=1_!33^@{x%%hjq~QV@4eYW39li+h`Bk+>IqYZBpG-F)Ttlq$APZB0%T!hztrXUdz*$-Un!aQ*bMH;2 z#}vn;N+Wm7Zx=r)%EU81!-% z`lGiM0wWqJ%w&>y|5jMlSGusr&!VZZeBVDHm%cXrnb44wmMjtXiA^C;_jz5!`%&9upp3Z32}7&d z9*jcbUdznh^D4~X{TRhkG48AJ0l%1l+oFT5^;l2rK4l^jhwYfe5vN_M)JV3pSzYTf zpXjBcr~i1kT(vtDLwbDY$2$e+7-Y-H%gIQSWom)!A%}5VSj*?F7|H??sRMf zkNa@#DY#n*5&-cRQMLJatfHG_OP|)Y9_xu-EzphX^$=8*o5flA9Itgbk8`sCy)sI- zcD-Ww0Q=$fGISd&>P%MnP;OXkga8Xl`6q)TnHz`2Z+}_ebUqeqJ@ym5oC19WkBuDK z5Zuq!1|&``_*Og!Z`C3O%3;f;fW4HcO8Pn&A{ZOM<3v&->g(}BeYA@GdQjiIQa^QB zg2#+#btqc}_RZut5T6(y?AeC7#ZtF6z>5a1#$yNMoG9(duc~`z;4U{ZX5?2b?c&Ro z%`0pOva{IyE>9AB$<79_GhSDzVbAhjku@siW&s{!;^8e@BkOPJ49e%ft}mTjc&*Em zWa&FMGB6W&_J(L-m*h=Bw#1dU$t||p6&#Hg+?y&2nFHc6lDh>B)>6fvo7tK&i}hWU}0k=(goAlcO9H6x2C41@+ag*tqB} zj435N$j5{&ok(flgL{Jna(ix(z(Hq6)HCFf(&iAh0)3Y#U} z!B-D!jjTyBi_SlhrTJdPbsl<7Q0^sOHv5+@{#k7H!g%U)$S$5r|D#mqJ2wPB)Wvh< zHRr;7PRbb~cA$1F%yH^j3m;!S#D&v3Ro2d4(SKskfT=QnR_H3-4cjp$p~Q6`kxQJr$%&-PFiYD(O=6dG!UY z@ym`vwg*0s89eTl*tz2GH6K`dMw<#THui2kU&Xf!_sq;PHDpY!)2%^+1G1nc5TWtt z)&nftN(&PX>&z>W0j_tiutMaakej3yNt!-6i4s9%rJzYFM>bUPE>pu(k zi~*GLS?}MeowFU`D0c+Dv$J*yC&LJm|Bj$ESQB^YBk=QVJklM3HrSGX*qd?|%1RB} zu9Gj&9xjxh*0$~D%dWhEH{}OR-M3lac)=gx;(62RnwfV7^Os@6sBH+|@|C`LerAo` z-4Vv)ns5EeEI$7xT=T@QHMW+SBhUmFDs1Iz%hsM@0y`_c?%5GcisG#ie0*#C%-u8$ z^4dw5@+3rmCLPcZpWk?6T0Wb&((5hum-RorPMG>_)Oh7DQMZ) zrS%8{{}v_uJ8*O`H|6ool=5qhon7om^0nto+JDPb^0mL~3zq{s%!NLS+q(1bChNZP zVV0`6hGN;LR|U*PIPmN?6(3sB-<|MCd|9>UvUe~nKA#{!YQxjCx_qjtHpLtgfc zu@|kjmaYY#>kFqCx}vX(Zop3Geqk1#e;G|(8$kHuUx#4HQV3hcE2-JIY7vqfC zj$F_MTnd54J)#_u~bGMrdu&V@vj)TyC@UGS8?Q*8?lwuCy^Hl8^NY z@2Mq{ZOpM%5@x$$Amc}rCgw4?_s$Z|Cgik`iPsJ#^U;Ppn0t@8+hQ+TdW(CmLS`LX zgkiO3!>%s%p1umcO(~Hq2{&ANvkRwSQnQjORz?P#_8k~$voa_a#K1SXV9LHTR#~^# zLhDUP`dXixQo+(2UAQd$YwLvB47V4}?9Cg3A^~S7n_ueXoKYew`+y<=?d;a0kQg6) z839idx0jcA)?nRUmx;v~{l&%x)lwi+#nI@Q=%`edjWceqo38F9aU=q(-?&j!JFO|M%3sr176HAOHt{U7Aa~MiNO~lHIgOn z??#Ug%*N(!OXTAM=>H(7E~ojlZ&FZ-h~Yg(z?tik$Z#{W@glS9xQO^e>ooy8OB~sa z9xtE(x3#{2N__sEl&_a-C8jLW=LML%X1P$E|2HiCz*kuMo;{j`Y~da=pjtDdWi;+| zW;QDHLqZl4Wa7D+{nifPu>)Sr+H=`}lmi@!EHCuIP(JKh9~Fy!>Si0H#|4P2I7yI| z??bPU!;bV-R;k%hl$(K;S+_ zr(Fhc8Gh6DaPWQ_fLMLY&kOh6rFgQH5)x! z{azef+^I3*X^9m}+y2wWDr#9)W}ECqOI>N%5G!T(=*CB}Q?242N|EGppO$*kGEbTn z_e8cpWW6|r*FO>D3WN*a^~B|8amiV34@^5<0_zd2trXmgfjxnl&#Wo92g!9cnYL1E zk5G|JJb9VlhN-p3cpipOG4w#IwMV?jM6S#%Pb_QgaorMG57Bj=PP9Y=1;u7m%d_A~ zP|37Pd7N3muFxzqn^Ju^D+bhya4=LU)ki!_WGrHb1DY+tWxQ?D@;T*Br{rF%S4P}0|qIR ziHP@>b;vhV(BPpoor>W-tCX-{WFj(tD$^2Pbf2bnWSDTdfMLoc65_6)6uIo1mQ2XW z<&p=iQtVh|2uJAp-1{}52++0&MVnGw6=x(idFS47J*u7=Gyx$k-vs0Oksl&!+;oCbEpulUTsTLvTJZ`!{@C_lr6l6A&?Zz-q8??4ste`kw6K|xvPeK129nqB z*GVSt+jNQx-3VyOe~>#y^D?Z%lHA(2SwCxmpX|a(ams%|adl5pyay>@O}q5%67Web zm=Z;_QxNc|m44%(Y{KUK38}!QcNcuX2Uf14f-ifabz4>Wabo}!n^!mn5&^zyWR#wZ- zik5+3>8_&jA?x`-EBr=r-Zwp>Z!l~@Pak~RI4D2>U?WgBTNusp5x9c+t z^fm`7F^CnnqgY0|)FOg?v?_S7I4kv%H>SE!Di?8&nTqfKgORfd($D@`!EpN+`c@ZB z>1o#eX1Amikw{NX_lMwrBX%1n|~8+@C^AJ`e4YaJqsXBBU>M2J_+_4HHcuJeJGgW5S!Z5`MF~? zW9=zRr0VXmI>FTA-te@35b`u3H!%T?SL}7z(YMbGnc7qM#}^l{qt9EAmlEqVyM0=YOz5lmSZ`UmtheP$ zYkZHN7_w8Ij!!e|yotqV>XSf~?H2WP#P|1xtKW${i#)tcGl^!1Qoh6uAd?f`R%Y#ck5E;-UKOGZ)QupM zmDgQw&Cquu>QPFC@9&~7ol^7?FKdK*mhu1sS27T|f}ls3CA;doCRjIbL>`Bd!;3`C z#9^~4>+VbSg;Qc#;$@BOrPz^g4|@ci4#;^;d?@G~hV(Dl!Ak;JBQ+115~cTmY~hy8 zV^u}bzzbY9P4TpBTvTg%fm|S7CtFrN+Qp8v9*4A2lY81cS-+ry9OWWq)*BII1m*V2 zXqxX8`i@aIUUG$tZor!7U14^t)S2Z zk*%>66B&E~O)-;tJ-?91EkR#AkE=~apJj)(p0Ebd9<-NR@7wMjK@kt09r-Ahb!rV} zsE3$+kS-^_87wrV%X^p)&%f=YSNLapSP6He?c=?Wl0|T(rFHS5x*+N ziO>phkF`Q1f2!SVi}qw|%09ckw6&5mVGtE*F|spg%jM$5M(7FH2r7KdoEB{xHhlOOUCEh@{*-{+7}@!_XKQ_lE1WBTq|f7ogcDgo`6jech&;aP_iWl zmxYOrO$+qH7Wu(h5glnl52?r2~+E3rw#)uP#&nLaz6^5R<8 z8Y(GZJ7?R#a#mxLNZQDwA$ZpsYNV-0#Zi&pej`zti!&pKE=KsK`^|kjs@a^RV?Zlz72hl>l+huk|dWyl1&p(a3sipmYhJ zUZvy74%d3NQC_rekI4q)ZG$s%-zF${SmZE}ZhF1mulXXg)2O_z^(>Z$%(jXCsW=^eXf#&1MmToL-y_h}j-IzbIR5oI0tNyyD$Sytc zA$!*3LdT<6FeER>0 zsH{whM8l0^fND~mPCI$b+Q8dC@FvM!!T?vZ+$KM|?KAcDQz%~Rz5aXg(Up}OZ)_te zZ@N0*s>gY!w#h18Kg@mj?!r`YZ{z(y$Pem#rOz!2o=-{yCH}C;`d@lTaJGsf69?9k z!_c{x@c>M}HMmQ}^L*=vI(Xxfn@TStO!t2T6W{la_Vifj5C^)5Om)^eydChQ@NPlj zSf^uoIQ4^FtX#}@3y@q2g71ZlF|0(TSd{4ci(M$+j%_7|;&Fe$W7(%vhYGP5xlq2d z3rh_&?>$Ngdx}v`ZGC|fXP7OHrTRe*Uc{TN>n+6+nw8k3Qf#mnI#^a-pHm}_JnRL)O!6Hs~{3-1cL zD`L>I9jJ7)+j*Cb=Q_!rRPxF=V0o#^@`r$ zc_}zq$)7-GHhLgXBwF76DhOeT!7YaETln(^&r!h>N~yuq#2S=Hctar+u;-)@c>mV4 z)+X^%!&$NWDm;p{!2^oT+|Px|-RMKVc6KVBbk;#${_=Rf4Z%Ad8^QBe%myQrI_DR-7o@!rr(WC4wj(&UD?s}4 zr^g4(+A*jXq#YHa1v(K_7tYpCOlCdaJ+WsotBB9ps7=Nk>gAV$XkC1^t3J-f^Td}y zd~Q$t$#}};vMsn*lO-(P4Ln&ik{_1H&)~fUpgR5=?Ar9-h2R6xC*AI&6a@UWAbtMa z5YoNKlbGPlr89$C&RZ9p?b5yA6OvBBSx6s+tt)+F9Ae{V1!Lo5r`D_W)`|FxtNIK- z(_~gWQpIOGy&Hfch2|+flk&XlK>5DMgB(d_Zi~UXG2kg)*1t$(&AhXb4Yn(2P(uV+ z3g4MV&rQ4+Usc5}8q|Cr=1csMsfr)|3;4=Q&EXKm8NF|U7iPdbJ$lp`4au-v0~n_ zZC@Gk`NA9Jtnb%Bt2Od#B+97K<;5ZdmK-jjVCIdti{E#ew)jkm_Gt{T&aL@g-*%y7RAMCg0t7NcL>d7ccwfF=M`CGd^GxGPA+nqH4;7(WH3o@H2B| z0FNc}@N44P4TuALj#9HsbFFIL5j4kg`(yx*C3Aq835NLUlc*^~bmHaYe0EF=G+dJt zLAS*3HSYi3Vhl01ne|n|z z7}(hZ9C`8SA1sD|0+KjjRSuU%Z_}b6E1j<8Ph*n z|4lS?Q;Nk(_G9r!!SX{`K~9@oX`8Ngn5g(i;w0G~{QqrmK|R?%SJLJ-O?05raY>Tx z!B=`*^Ha(87CFI1@~Jk-_K^2XQCtZ`(Ua}%2;7CNpq)TG)&#OMi<^;CNc9qU4=ph>EIHon9yloKYS_l=%vpDS4b zo33>6yjm$twa3hvjJ;vBk)CgF;iawNCf^=1>H8ph$T_N9XJ#&Op_Fi#YR^~{TZrFG zes0JJW84wAc1gA;?X2~^d_&<+B-`7y7rStN6(-ppXMGjpXw+nT3vK1Vljt3&|JX4$ z1k;o4E!1<~MU(A2WE&d*Bylz*)6?zk0G|7fR1ZYDeS1=kGT+k0PEWSam1K-fo(Hc1 z+isHWapDs}wVrHmp`Hs**pMXK^M>Qml=DhHN@HUd?>X^^N3uO)hpfaP_@eKNPl;qE zr(`Clrd^(zJ|Hb+Kq|zeEMY=j;{S6MUK*9|PmnCE-^p5|}Ye#hWYy64F z-aEMCA^rM|pO}5&$f;8^2d51woRWXpEt7{`nwm1?*n2PTct};ZFWUF+bnLws;eVh0 zynSy#1`$$t(dEBRA2ne_?zrE0kPGp<7X0qKWAD8{ephtugpBK_q?g@Z=>6_|{^R8H zM-0F8rpec&<`;PXn1?}1FfW!ckiWYmu2yt zE>BVGpGtv@_dN6Hc)Va`sZt8GddfK5d8Jn^ieVb0XBnld$@Hp49nQ1R2)u3pG=fNf z?ajCNfL+uyt4032NF8-UF+fqe_KM|5ZI1U2b-!0piO{i@^>x1_(V`J$gupvFaN}uX z*IK}*f^w~6Eh(q8@?J*=DXs{1tnH8maYsa5Q3w3ptmOzIcu;@V8rQ}K zXzvUF!?0;wi?xqCpIIAmtpA#=k}iI__u4sdQAwnEEh_ci0n)YRwV2o-5Al#Vbkn>R zmaLvQ^yPh_hBlq99=hP)o#Emy5K)ySAKbtbKT*CUTh-ygS_;VIxK`9c*#! zcH`LVih%E%q~mGJdv}_Pr?6|<*aANT#A_{VNxVSsaG`gBc=n;?XV%gitaA6uL3dpY z`db&uyK1`M;>KLX;A39aq37r)CR4laQL(6*F1EyD)rse7T-L7IbB&r;k;SC(nf(UB zy%dwyTG(>wZ8F8LyVj+ZLNS|cNg?RtvDWqLg5h15D~(#{x@%l0wNQ4~Vs&6^mnuCB zcB$K!1%otWBe-&=e48on+3LU#<9di;O7FB~SKtbpveE3cC9HG~1(@~v;;F!{^Q2AM zmDpp8(8@kMqoxq3FJ@A5kq%op-kYMU*4u35q{-BttT`L|X4-54f7#XeC>G#)B{h#z zY+4rY37iy^(Prxi6i@}p+g}b@w<~Rm+FK?)wz3dLL$egijaMaoJ>jP(_QcI+ZKd)l zQU2Y$GGxu3sCgu4E?b2)S6=~wOK-*7k?_2JO~}I6dBUa$O{)=Lp7$gOPJUGBA8-h`myqN;^#7hc#I~%yiQ$cL}nsJIAVR4>p$+M|n16<`N>{k0U zK8NC$Lg@6Q%e#uv=kKLrGy=t){3A)79}Llqt=E$)x!(Hu?4*)~kW$kaYYjGe!CU$X z3B{gh$xYtzrui1fJp(mWp2_KJ$0^xyIcaU`D6-{JmwiwqDO+S3ry`tPl0=wlkuXPl z9dgAAvt@)k0x#9hXBi8}uCWrwzd=>_4E7Qi%a^78Iio99e}=s-T&(eEJMC~6x){)T zb7+2|jS$hl2kN0jL|)aN2aET-pX23P#t5f_{Xi{8cw8r(XSJo37ZfIi*G$7*#4oaH zmq_E&UJNE?LmC$w&KB1XY63JKr#%B2{+ERrbDz+RZx-pgLB%#u@r0qi@&-^ZnL*Rv z(5aWTyRJ}ilgGVjsK?sHn{g?qzx~M&>H{9pSqrS1|CgxRyM93k?H4)cXUuDx6+-+V2a0WjJoA*aLc@)_nkJ-2Cqkf^7qa#X{Q;Py9z8iDOg;$eht_IBnce>j z+z}|8ESzWdzj||&`oy{r>d$xa4IrVm&QM>u8`SUKpvgsc>O2=J57!5b7~}UQJ~S~n zEZ4srIs1X`0DJMl)-J!w4j^$w9AJAz&^63!OB3Ff^V|W9H^_L=5Lkp)yLn>3VJOhH zsAx;P#omRD-Z>tDg{b!p;|yJ@K{^pMDs?rNc*~^VTt7j=Wvfp@c-(TtC=|b~1?E}w zxh|2jG4ZaqO|)3vbrQ)A=J1XVXNbg-b6hx;#QJxbCX|7$>kMw5yDoUbT)1G*cCqQ0 zx?-Kg1cGQpW}wc5PPAZu;b27=i@R2cu6!7w;QM9;Pc=5{00${w)vQSdc>^Oj8Pm}; zDacU>XPCp1To+DO-etWZI2xI8zdpBsb6jvg>{iL|ZB*YQqcf}eHt8EJ&}7&4-A?NW7t#|d%>7dywo-5^Js$ci8A@V@KjT zLBd8)x~QF_ZW5&_Rm!#l1eCFXtJ#w-YUVH&LRH+h1Gw6lc%6;7oox&qg4bnki}zGA zD|0hSA#WS|@vYHmC+pehX=EF5LXf(Ngq;J{p_eqdIadl=Z1i-osK^aFcGScn&D10F zHKE;(;Avw~$(xdtm^j2DtjpaN?`mZti5a;Y_)kFgw6!5*d-@o^rH2==t2czW-mvc+ zSPxNR|DS_tXm}D0@t#t~u#j0xs2|aWPCEx*rsYbW+D1=J z6WdgiT=mL6QL?u`tu;jgye(4Dd%hF|VwYV`ehsgy=veWe((rphFtQDrX%?*=?|HHi zNuGQWUmM!tAg>-MgV7;!VF=!nhIq;9FT`_0IKC$X} z6&a!l>p4=q`#nz@61FmgPA=3SvT7DJ`UMy1i>JW*o+}ecx9*Ced^%wJy$ZHpv42j# zI0WxYMqq4lgN69K<3apw!*t?hW?v}6_c5zTY`0uH)hsd2H5F-!hNa$!STd_8AjzyVY#+iopf^4W-Iakd*%Y2_F^PQ|SUvi?2 zeH^GU%imZm@x5OrPlD zDMpr+n-`~reGg$aQZ_hOd{`TgccC{IkA`T|@)F41UZG0|{0=rA=YmA)tu!yiLXyj- z=?PQx2Ug(6y71Xp?z|}wE4#v5+m8t3UAq_p-NmaI8N;_(D*wm7j=B?4@lno`mHm5D1aUSyjjSB3c287~ad14C}Y_S4#2}Ul^d_uZh1-$ z_4t);Ku6_K@HW(4UkYynx@8PT_m|xRwavEB%Uge8GjA}oS1ttYCRb^?cEc@xq>JYR zSvwuIU9fWYx;L3h1B2F&)QE*&=EBW;Gp+~WJZeMuL&0Jggj1hineW0cFwHjdhOyDn zSpB>N<+&?l(uXIQ^WH|gH;eEm4AS_Soz-(z@Y|d>h#s2E6kKuXbBwXn^E;vBNAg1ji6or zg7~#Sx}>%h57tQ+u;;F5fGoOeup!;HyGKr<^7f@j>5`S6r$TtzU>fL)!Si zTYQ!!OPS6CUF&V=#3DToN!Bij$&h%AwBQEAic1I#)q?o9lh-_L-8|okT8l=_(AE+lYLL_7&3y(5A!}R8fDJ> z1?F2Y#^>G7wLpG5yUPs44s!aJ3`d90`F)-_V*(;a>4cLhz3s8ZjX1daqadaM{y)%t z&Q2{BJX_e=+a5y{ZqyS}Ru;(?^^(fYw8M0=DNw)d^FvG>*O}5rR@IF?;BJ>~i{GU$ zK=2+rTnvu<)GkAM{@<|nPr{%sJ6uGg-}V0}vY*;_^aIk{zQ2opVP$TQB?@!s9VMP+ z1|_AdsjEH!g~YdAwkXO>_pi+2t0yw2i#qE5WAt+qe2_VQ#pDxkr_VtA`eTEYnULy2^jUeKyFMcWLLz5>MVUa3hb zxni!`QC@uua^12MXri*^De8`e zqL$F8b!`K_Es9!`7kSJN&~zBdV#8qa+W1>w#oe<~wdYCEfhITjSngwuv^ar1@DW}N z+L4DUJx*ZcGI%cpnXiRuQv!S%b}RAgpi?~t4Fn(8phXGZcT{yanHD{o&$T8cu>suR zW8nd8Qept}dSd{6_W%LwTnMY*N|XBOF{+HlPP(_0U~E+>ZWtFdu%Xj-2WZXCV)>!-N` z@Z~VQN+8TW#;=3YiPo$nhQGtbQ$J_35)$8%1LBL`)`^#?f9pU++1iChC9u5b;L(u) zF~*E*tx95(-`;uz)2f8q$4DIsI@kJ@#0I#{8DJ5)lIb@B$Hm{6C_~4`^lS8^7ZRqr zcz)%k-wC4D&j$7TwyHL4v+=jOQ1jri;Ye1F4J(#hgQk!5vzN(#T^V7+J zKge{U={P0!ZG#sT!4!uU;F42q(K@$*g_{8~+yP>p+p?iun}!hN4qE%R*Z}G706Z*d z-v(FcYm`FCowWXKF?gB_ryJPxZv%c1XrJ~)2<@pZbR=jut=m95%ElU%v1-A0YGnaK zdx|^2U7Q>J+d2sC@{xTt{)DO-{~jACj}lw_S?&OoHKdCh&aDSSqN#H3->D|qr_*Bj zLBxg2Jx3chTJ{H%bfpU$Cl+LKYb5)>nPYz)U$^i!tpi+afHVC8VCQ8UH(r~!$Qvi& z)SLF}TPF)R!^MvWQGRPXWW^S?RPj}%BfSYD+kmrYibgh|N40@Ui<*BnF z8yx5i=3!4rsckUyhmf_O>W;7&Bbat@B>p?HMy_7#2^U+!DeeFw>m87DtDM1#6#vGt zH*W|z_LEz~rMVl_ff1xVUb9=;V?W77KFgKI8`@EoU!s1Qn9{sMGbv$&w#ZIzdfz8$ zt=KHB3Se>^g}O4+-Uv#kDUoz3z44~^ffC#8O^D(syg8)=H6*qKMMNTLQ+Tu0m&s6c zK~^qAd&5%JwEZyn^u*BKXDRc3Bn_)lP#N}zqV%faPX$etF>vss1Xx1FdLTA#UU9%q z8AEy>B~NGJJa}yoBsLY~?%S%9OC9x1?`x!ZIO}8D?T|(TuPuraejI{zzeEugO8&19 z-$O=9im6JqduCAe;F4ux_dArNx*6rN3)K;=(2o?d<4O)=bG585}ZOa{G0yQS3J5sx9M|i)Apy;wHj2bj}DS( zHLO%PoZfh*B*HY|9`#ljxcB9e>&&}HHmY(4NKL+6CsnR;f9IPOGtJIt5tYZ|kpkt( z&*_U6Y(EDJwF9sF<=iG#3GW4h3!e?ap4b|jJDOJWbeLSQ?zSQ^FPNP(ILmQNrL&1?#`r0$li5p zeaJNt1`u-uDJmh0-~X$S#UJjDK(Te}S8{IBFA3460ZtiPd{-CA#n*go&TRz9-o7#@ z^Tm)|S|exfMsc7VX_5q`Q1TDzLXNz%inV^av+GeZzwzsbNe8IrJ8KQbZQvp-1v2}aa2g19(&8n6pJd1V!9{Kz&!KzF$KwCtfRh}zJqOYM0eak0JjlNEk z^4F_8{}I0iMqjr>Fu~M$MB)p@*lYNP z8CH*dk^%JKYxs|GwO3u{UTq2?NO&Xxl?&+_R)eo0We}O~A~$ks245qL;CpPE9(-+) zm%7LwgRg~bTITAGg^N}XzP2Nba7W;(nf55o;YZ*cUJ#UhQX>|5iHqdLGGW(nE8i5Y zv&(eH)(zWY_~EVbCiWU9{@-Z$$G$&n&MP~==Rul{$DOg)2nR@YOV#Sp*LDQYg+!iU zqOWmV=itcn=xYcMJhGwg;;D8s`kLETJq5%|d1yWOIxU?BmQ|kfh_)>ge9eZbQR4OB z>$Eh%yPow}@HK8L-Mz8cmF4R0nE@_#3E=6O5Nuq!$3VLtf}NH|;d9kRt)Vj!f=$|6 zrh<0)P!gMhk`)f#;0L*Qc|#C@-JVOomkjCYQpGd`Xj^#E7Wci9eX1EN>4q@l{RWdE zN*$K#v6|&NS8Qopya$W7tacu9*s{^Doi-BTp4%sDwm6ITo-LX<%5F5tg86@;bD~ZQ zCACoR$r{g4Qs}tau~hgHa4<}EIWRpW(r#bjobADctE#8|YRJWsV750tIpt|rb&0cSzf%j@)d%9I& z+Bh4bGP3gIyF>7v$y^xP-R8iaK7qH3^@WPB)eoFY-yE=;SD*=wY+W?=5gfJSPt(3R zU^izU91_s-(S(e-lYV;BH@gONQFSV$2@X#EJd(Z#B8t`oC%WsKJ%hPC_4nDOi_u#o z(glZxEZsGmn|L1#0IO8~BT?aQ+F@EafH}I&uFYJkoSI%Z%s;}Z4=W2H-L;m>cgi+6 zFv#UpNlRe)PWxUTa%`TtoV2qUjtpQzcbFBdb;F5mUchM1ZaB2a%>nJ=VQ=bMq(wjG zv?)hzRUiy|=9N@^z(qS#;9+c4Ql0jErb_*=RcaU+jvzS>mjwYtiSBH*i2|ES1! zcy`Frq$5MokwL2%DUfH+3nSQz4c~br5)1HR&!BvFlukP>E~~sK0@A+hC={6kGJz+3 zG|EjDKcUu7&tF}DIt5w~L8^3z zT;&B3kdszCA;6YXaZTbMg+xC6XnntE-CE@Z63}ZL*BgdFKJ$k{LXj@v`yba2Oz?q7 zf*rk)e8dws+>F&Ko1V}IppAW%XBSxv!b|=@?>uC*M)X}9_LNS#NaUVjglg)xr-byp zGsy_qpSho4)=FvR66S)g>D z7K)vk*`~n9cUl>{@O56vI2Y(XbMb9R(WIp7wYoOhxfF-r@hn~=v0t^Cuu5- zg|=dZ_%t#ka4@PhiXUg?$sv<_ypW%EMJD?YlJG6qIq|ecE({^u<%^~)+lA2m;3mD2 zzL3MyWCK2OLMZ6`H5YN#`FzLYgChK(+Ki`2xwWp=^6 z8o4>Cd^^?!th>lR>VcOUA4T$Q+U>G9*Qonr-Vwr#*vyevT5EfYm0m+utQjqnkh9*#EhdHww%Be)8(h>@n_ zEk_VGAYS<4)3h(juEEog<$I94Bk&+}b2JeQeW!=uJq?+7X?}~(=^lO)59({@1HaBw zkQd`~GJS8eVA|xXV;s>+^IIO64B)BBoEi;m$vyMY($T=R9=0*KrzCUt**h2T7W8y9 zaIJlA4DKn(w0KGjT)^)G;oB#N5bo*7ws~n4lXj)`(O+`c-#sDIGZ@}93?+aPG z`#1~fDZ`95d=E&Mz}P+ARc+kN@4eE`;>#@g58XttWc(4N4;db^boYTaGyj(X6QF&^ zM^TGg;w2#ixbL&@@Y+kv-Wf~6P=sAK_tj$G?6I|aq#+BBu&0itCmzuBJd5<+Xemhy zg5PJE0+xU%(UVY?2gsHQ<>R)@gWu2!o)cB z-K3m#_*j@Y80nas-6nH()7g&cT$o^O(s=4wu*))YQ+QzW9_@1HNaK#CUpNB@sWbbq zb%jI)Lk_Gv9gR;kk5>EWs+qSb(ra^H&9Ir1OA|^{wmX107f+CEBkbE2rXt=7vWq(C zi^K^iATp( zOMIk%2=VEy2Vj>Rdugo9p!dqLo0sO|Y4|d|av<0K3(g3XK~WSQ3r%&QTzfaP$r0Ur z7|5P~vSv)S&=eO+lR~ca$H~fpcovIOoPJ6O-DkNYG+^EAkHa8lh*-=Qmhk)GUuldX zM@pPFMcfhkVFc4A2cqo?oVtj{dYc@JPj>L~xw1_T$*&v%^7Z~W7J8-wHP0aW<8bjX zUrA15BCc%H={ot08)!Pi9f6BCZE~=E&qNo`HaS7&gcYf{pG zhF#uFN9<_E9VmfqF}Qa{cug7DCZ;}qoIF9y-nf9GXElL5 zRXQfFaxY3OJ`R*uK1{Q;5*^2>#jfmK5T2KWslfs95$$d?GBQpr=)bq{)7|^Ul`}w& z{&)L4+)LJL@*N+NX|U|>FAPR~#rEuE2QQ!Hj+exBlDCa!m?dLRsCvIB*bg)Y zKgofMs8dpGQt_*&;IxK47(%!k2Pp}&+a46ct2=>kvBvj(NIxxdgH>KAKwPNk$sXlMS2JCKsJTU+Q-if6LSd^XE|@PvLawSiAy{jEFEy;tAOmtj#q%ag z4TWco^LpCRA#hhrkoytWTOuk=chBNAD=@uj7Urt@Xu_0X%78F+Q-k zmn2ZFr88*XcTC9Q1N?u-OD0f_MQD-yiTCQ*;0-~Xnb|s*{Y&4glH&~RQiK*End~jJ ze}2f)ef|%ImU6s}CVhm0%7<46_)%d6|F%l0CFmC!6o)R`&(4GQA<2)o7&;l-k>rD-gW* z4oHX#dz&H(I03Y4ZB1iH?+FmG8f{JOhla~0YH!lK;ENp_zs%;z zsrG9MqEyi-<;fkF1HkOK8oYtV z1-YW*17Bur>R&lXV;y+aP+i>jQSv1X1|WK9Us*Z6SA zM{C$f6_OdhY*CdLydDfWj!l2HgO`=>+-Nqv~oJen~J~n!7I0u`aZMrpKj{(Fx}}C34fVX`O!T zGQgGY0GzwzUEAiG0=c-dla_~&Uh3eX^bM}M|Kstf3WjUJyF{Z;5uPs048dS@h)d##@uz9 zVZ|an|I0=YZ!)xTP=6%x=fGyGXJ}iz=Y^sBi5c34czL;{62tzjnl;Xj5OBuqxYl?G z^8ZB@otwA*V>P%`wttK3j4}2Fq-hIVKO3*#zF(=fY6JBgF*J@aKilj(zwo*uP~W#n zvyGUwZ*l!G@|x8(je&t8JJ&qjVs#z5{iliFa)*1*MR2;#5MTXml=#Hv5aNH^8eh}Q zuCO@1^FaLWm-UmU*>=nAE|g-&j73r6`He59)RA<(e(z;~+nfPJ>8`zAnzG~8vb33m zY9_p<@16`W)fqta(6UuFEcisqEeF)F;9P;;>OdDQwqe0nQe_umX@lxzFwoz)P%43C zADGTD)*>c1uCPJhbeVjLI|8rGyw{>TXVPdUUKBJa<+d%cZS!UBWEWsEwudl2jg#>L zO9fP|K?K-S4q5r;e0Kn{CpL)S6{)@_cEyw?5i$IwE}mD^^m)J)d!KHsGS#VJrXJB6 z%Kj2&?HBQi@!Q_5^q7dveTh2&S~VE#C@SkSDHLC-ep+Vo;VxE$Vrka^jp7xoTWi%2 zn|7EBCCLNPT|&O9-7H(dw7BMh>X%`r{-ulOi^AR(@Wt3JTJoe6jSN})(AER6SA-${ zUTmCslP=c>;QP6Gh&uo&V7+xY^w;RfxxOh&wXd5 zb-HbL?4jtv9JAuVDpxS`U*zJsbkcI0Y+1uBW0vB zc&y<(7ylzig5mR#Qt*A18CmGLE|g>%W(4R}>;cHIZJi@!NXk*eIj!;JNL+gUiEvg* z!1w8=z3<*6KOh7Bi))`WUBpNq(ZpR-P60GcVK(@}1GNe>TgXeH0*@htj zIuT?a_zD)^PX-n$7T=6?#^N@3ZpSD?Y6tj9q?)^?b=ygepfL{No-L7Z!;V0@_|>g} zU%Q=lfS@f=*bx)0K)TM3EHq$DH0+3%jR9p$5zreyWQbv>!L=qz>kbbrW1|1Po3NX)+8{lO04nG%2GN$|=%S^5(^$s#>dA_W!0lWG40jc0`Ak_!FnU5}$BLzvKG#>z8ocFMe@I=VLlw zf5VX5&(F-tz4r3qX)xZ6uG;XQXZw}rjJtlqO*i~%0{;|k9iB2EGjl*%MkFOAmLGdWhlg3-rtbkaxH@ez7HYYvk@MN52t<~t8HfG;^wkw zvP3#eKSecvn6?gI9Tzw zbAVw#Xj`8nc?eCOxo|dCzwHOpF1vCe34amh#=Zx%jk9>yTxb;P1FZ3iV1XMz{g7mB z?H1};3Td9*njBsG6J%F3btXl$L$?F?_Cl<^HUdj29J%ZV%I{^)Zq4Lo(Vnr84ul!) zXt4tPd_;97Ml{2;g?e^Ee&w|h324G~yBeRGRF-V+92U{t?{lsuYG+6loQ6O|Xv#1Ht)7F-=>xTR)|!em{XHW^ z-X%9IR4mF1&!v!$sry8QnIXefS;XMIu+Vs(8cEE}m>*#tCNW=(=rR^rTXqbiwy>@np$0rASE5MBH;P z-V-K+HK%A=VMYp7yM~@Fo_Dk?)vUjI3Q50SGq_l&7ZBQy1{X+=?7JO*H)kEFuUdpp zFCvtyo_PcN`cMMmfj@-c_*1&L;r1R<0Y7XkEV^MOOj8+5f0v% znOYc!3lVTCs4l!fGhkR~cLyr$XyCtSp2J;ZD{jc$6h1Z5Ek41;^T6vbL{KQDpy+u= zPSYq)7yD#GyaSh&@7znva%Qw0w}fg$zR_u?ZMq@O8DS9_di^(s_PjeFeV(p;rgrXb z4pQc>INj`e{xkFpGDu|l#X9LS^WhGD5${^uUJL!J@*REn4n=QKC$7Wa^aAw`hXi#M+a7QKC?zGy+-+!{IaEY@#^ zMtL$=nZ%MN9ng|3?aZEJyx8VS-V@DO*}g%`xwBADGG2^(QucvlZ&YWJT#7jHuW2zz z7VgQ#4cP8^uh~QH38ItN=tMKfV4WutQzoxpBmE^n^{A*!Ui79uw+zrqD28pU(HvFF zeY~KX#;HdoP){i4QB8iGT|Oa?=S0b#|5nJ_U6FXv$T5Sf{_$opJbJ+QCfR=uS+yq( zbLwS(E@l{KMzjzy_I&P=kO4fIm{MiM60_yw{vtL2NOsdd)WQREM3r3^5RAKh#0vC} zKrq|)j@IT9xVEsMwPV~{JrWD0w;BvPSDI$q3QW4w8jZzpMb;L(BXF;b(>jxC7n~~c z#_LY&>a4f?fbJP!CGWtYoxfV`AowEDxIXJtL|zGFL2>PJKWWz z-MT@Aus^4Tr6j&!A0%- zNP}*(>W?+)Jv&42mpk~FtJ=^l9#9#99_wHbsU2aYI|4b%*7dS>I6$%XrV!+1E^;EXHu5ca zRVZ)y9+c02p+pgkfNTp_YV?fOq_twd5#{o>L4X!grys4EVzR`9+UOasxz*izGl2nL z$XVCm3*jN}@1kv0mayMO&w5QMcvjc3d8qmc4NSLJu?B9 z6!_|%JUJTvckfU)PjZ7BUE{Ub!Az65u?(<%kEStarBZimOmn{y;V?+Gk_BXv z_K5a@XQi;5Mq{cAl_V=%xc5OeXPvWMJsM`rHZOdMIlXX>Gw z5zcZ)5auGeR-{{A;cu=~UZSiNKERC;7keaG8q%yta!U?KF6^K$T%gG=RHl^#D?UY% zKuKSRnqZZc!l$V5Oc#FvnHmzTNVt81#Wh#_rB1kvaE3bqS77q2NI0Khkph@!6^w7l zN@){wTH4v2k$kY?etw@Qsyw)$=iFwN=^h$DlGhoysDgw#7C+iCruovj{EKYjHjb`DMBXH6W zjYh?-(x8i-J4W~tH_l6JF*T*oHE~bA2iXyj-8@r2EJ3@WUd9Mi&IUFau${eyD%gq3 zgSIcuOtae(FUsp?+P=^x;IdM)=3m^RlPt(PTHnrrcV5}OU0T(pCtlr4D2|^Jg8r?G zrc66;irKKd|Jusx$#?6AMQh&@&mJP&;O;2N-=RKw;q0K{izExyvxGF@pm)xO;R>gG zg(W-r(Gav}2ccM6|L9fStDZjT>RweV_ZOW|HD>CVfUi0>wPy(t7BmN`=lClB7bW_( zU@!yGZK`kZfveXF7pU)#((2i<(jR-^=PLVN6XbFwq~L>qc3W{0vY`+;!pa|#@ez47 z_&p-l$iQ9QRxW1!tF}tOSw$ID@%y#x(A;z~>kmA&mfQT)ekSxHUtUUoNO;vJVFP&X z9)8Z(|Ho9Q%xCQn38h=`y1sThV45|v*B2LD`yYu?n;4#XbF(@hz@HyT{8*T0X%2Vkyt><888ANC@zzy#!?0Q z{~SWO=k1|yeHNOeN_H;=%`>frgvE6J1id_;GjA zl9Y|jk8}*dyXG18NR$=MrUAOgWpqZUQc8vc3DSR@wgsXanXH2k8=ze5Y?Bhp#aE66KM0ot%}SF*(y(3 z=foAAP+&1V2N_Ub6{XF+U!R%M`Wv3KPH#cQ{R}f87HUReYjY1*EI3a}=ak(#o6~t8 ze&!7?W5o;J(zi!P!JNl~m-M(>(3+JAt zbc4HqSL?0O=xwu3hf?5u<75Xa3VcmUvANPnVM?#sof0%WbJc=9$-#>IY(^>#&nQTP zY9F%KL*n$QDRjQk--Xi$RvQl?ALv1r=IsN67I#ig;qi@rE}AsYOt3W11~LEo7` z+rn@*cXj8Yycd@vrFRfHBEb{PgxG&tP`<{4p3U>!+{GIJq|Q2>$`s;PFT<@a9j!*~ z8mOlMULa4gf#yBH(AC7CgdCgI)BZLBx-F3sGN18lphhKyKwa%mGHn+oMMJFFdsz}~ zhbD(m+)DjJ;j@=bN8aiyKymz|cuMxX9OOK)wR;*MKg8OIA-nQnkUiv_pnOdzzlP1O z3MgE9#v(IyOAg3RJU0aDseimwHRrOXIcj3j?QS8(wYcL^-RLQz`e1#(pKdrtcSt-sI_ji?LtxUNc1JoeiQ3Z~o~;Z*rBt zMT@Ey0ZJ=(0C?${z*A`de)J#1v3m*zc$JdXuO9rDMfA`j;-0#{CG$eCrK?R>u)nHg>DTY+Ef2Hz_LG^R@*I8 z5lFv8t5cAh-6s3b#tU7>As3SUzaSDOOrY}_e5d(Rb)}i)I~y->;KJQmFNGYS0OUEnT#5zdc_3V6DVG9X_b(WZ{gxrgRNIng1>aL#OtWy$6TyX>aw$SOBNS!n(?{#)Eu?$Ch`rc5shNW7 z@(GW7AdY*%3##g47T~!eW&K+E^x*$YPm!c`zndl(IL}*sj(~G89 z(mg)}@3|CB!JS!cm9DDwMJfw3)4Og6iFz|dQ-D7oW&*uvik;c>KZpkeMN`^ySY zDZmc`<$BQ+K-(e)t?TQ4*t}h+GJgcLQ$+71Kdv#{9BDPVu1{-R{o|t{p4!5N%e$j0 z=Yn2AnVxk$DQB)ra`Cpx{1H{-o`FspzlPBbYK?gdPIST4Lr`NLb#rgRqW3)>lrLkG z9`EAhM)of3A&X||>jOU^Zs`3dN&|+v82&gHzZjdv(((xFAlb2SW4*$>UHP%@2n`qk z73Q(sSIWJBZ>rC{kUc-f0UO8MJbIfuDG&>`n5|?YeE-cAMx&z#dHxi|4|H(|RZ*Vo6 zD>Qa%kv&|bq&!ukq;vI2AQkmCPN?cWrC7aRvhE{XFzKB)MRqFh4t|bzhfv(zMN*@v zzdKqH+GOnv#VHq04LPL*X9T%iJ7;6zmAgT;l=+T4s@K>}YYW?1<;g%Jc|z5;Eyt>O zuxN3!CN^s)WV=bZQV_0&MCax`iO84jFKbU)S{jY~t3269PG=Fs063TLfP5;cQ3-Rj zJxUYj@~T!+5F;>5H7rTgltAw04I0x+69?}qPYfdenLL-}*je@M1^60;>cYj^`ctKt z<|qiwF2r^Hpq#LL!1DUy_(4Le&S*)+`JoVV5A=fHT5TeE{y_Iq5EQKSz zZ}xB1NvG(!%9DfmNSg-BysxZR zpY&M9q5p-Yix|hjCd)yuJc>fLg(JOtxx@b!$yUYFu!6|m%f`{dpdE0IG;(}*qzmN* zt2vjEy-{)V|S+zV-2Ox>y-y_UpN+%)mI-)gtS4&Vi~?X{7?6g44+1?-b} z*3GIfbyv;9Ejt3rHp+Nh0eTBN1l_DLq!+?QdI$D^vYmx%VWgmByfu-IAryO&Y?OlP zJ4Pv<3+^uz7apk@3hdgwSTA9B1z;ZEmS{8`Z&Jpg|ZR9>?qiD051UT zMc=D?ZIE6No6Ou(Xh%7Enhm-1x%)%#L)~4!3#7+&W;{VwCI(ny2dGNk7c#;SX9S5* z$~{`nZCnp%!jh;r{pb+V2Rm@E6o$r`$m0BG7#!S1J$FO<#Xb}YU2jXfBwa1XMMqGZ zdhTX`i&_sb=5WT32=SD_MV1`?gT~Nu#Lx5Ypw=U#bTbEE`F`}^`yL3vdvXVlukL_} z39o)0)DMZ%sb`GUyRO6`ysTyit?F3};0H4lA!*N!V25vfHtB6@&$P^w+xOzG%=o~D zkAPUQ#V5uGW2;gkS(#k$vY^}^&qy?cG(3+tf5Sj#5$y<`Rt)dT?eh4{Okg#!3?Ufi z_(;%EAH#Z*`$ii;@(NbXXr1Og!TT9Qda^rDXy#cgxsCXf^T!#Y<2MJ5+%dQ(xi>%% zp10ZTS<6f4!cJdN@~6Q=CY-*aWuExX*(Yyd2L;kRiml`K2ANU}>q+mz8b0IQ#D2eq zySbq|_B-;8PPxqO$?$v!>c6=PFA(s95VyH<7wj#?9|a@XV)MHayqs6Xx9ETXd|nOD zyJ9rv->TzjSX>t0`rBHzHA?%v#p!cD)^}Z?ajl^{zBHt_ylHRhw14Y6C-81AT=ePyw~pvfqPz{*|;tx|B#3wl(?Yxci8q2qCE!? z&uiOubJfPZ0_Sg^W*thwYMJK%5;oM#C|4ZSFkJHMaZ`qVrGJ?M_nbiE!5FrFB|&K! zQhX&1MIo;YNJhLSZIX;Wyvf~SE|y8wruq9=$lpg@!@!eZG%zY=N{r@*H@bLQ^_gPL zBC8Le=9QLP9Yaobk<^EoTa7}aDJB?K+OKQL)v*C?a0ifmMshU@jiyAa)T~95iJ{3M zi@)9<0b7k6Yb?Hc5NW5&OUtm1EuhSUg96F0Mv>KrCuV5L)iIzOq$SCOOs+PhGagrL zkXnj$YydAvi{F$7{?q#{>nx2 z!>GOFYA`ZTy^s|+kHw}nPY!AgG5oa-UL>4(ouaf$Rt&p07abXLXxBIcEb34K?-$8_ zi~B~hBS(c`y*Mqgq#R`qd5d+a@{3SaowT%q0#cUBJlX0-kG{8^A$)on`A`3(PtIB|N3Il%f2bV zM+z4rTggZzttSr)YHZlH>^2n%+2Zlf+4#QReJ)xj^E-MT=`N0cJ}4N%T`YFiEdf3{ z`32jKt0$hH!iJy_9fOW_ua}%q57U4??+)P&G|H?Asvj}@l`fvbR{a`NB^1srmckKf ztLR8IF5E1>)E$A`W!FoVdgbf z!_7Sd#7p(a>1#uXFLv=HKJM)p@ifZ_@e6u|ti8w^0mSDXZ6nK{feS@We%jGNjXAdc zg)W}Q*R8ibzT+t-*M<;Z;6l@}_=R=RTlbr&zk2<;kgGG=9e|=<$-6P?X_pbHsc&6S zcjW5H+qR5yN9YIMHtSeJef9ICo+WCVj@5Th@K?BaN?j$#8GL0QP`|rEr(U3*;g%bh zay_1S8k7X@3ab)6~Xe{*wO`NXR4uVd~hKcIY`Fa93dy1J>4a%&8$32A|=% zA(Xqin$h*nHBiLC*cW5y4&LQfV#(h zwN7^y@9Ame1!X5lpsTd9m-Y@tM~1B2)zjp@4?IyK7p0dyJ{R>Xm4&;y8r~b>oq1=1 z+;!in@{b|c)6gio?(AoCQDZ_$RdRpL&kuUrA_X_6? zlCDX=Z}4nvd$Hmf`P4K}?BGirP<(%wV3Hovo;H(O-QcN+yqq-;v7#XyOteo*fxYIj z+PiM?o`y&zt85(KW#qCy&x(fe+Gd*+=LSzh9BC^W-h+yUQX08=vc78S?+u=ED6`%O zr!ywa#HNY4E#V4%)2N6yc$y(u_`EBqp^$1CCZ%>vWP(n$4B%>paxW*3GG#$pUSdVV zo3$qn`O%!)Qw_P{6%#4NAqZy0XgbVcwu#)LlAcMqx4}~liC=aLWDyp(AnB~eU0k4& zE*`}OPcOU+r0*)Qq)THWW5g&78K9M7h}XT)T)4a%6f`W-G@}eNwWk+y>fBr9(DMI+ zn<^7ezf~ukw!Q{WD|H>X}KRL4&6ga^rSPMYup_2106RenBB| zg_~p;tfvo-#M~vnHn+TTA_U6#CD+8u%RF2PVQ~%sXH!Vv7o$5cO@|~Gw?Jlz7`7dbiWo9;Sc%zq> zMa$%_FX<*j2@|oqET?5MvQtYmLQNkI(9zXG`PA3%WTFw{A`3F+?$Sb%QDKG14lYv8 z_$AX_Ag_jB$I&!Mf1%wmi*N7ZX?ckIGDbY@F3Y=P?fd6zPc=4(D`@AA&<|^$wLtpO za{E~NT8ce2EeILm5O)O1-z9&dxWU-S0{C&iR>_xZx@Lw8CHW~ehWyHfQSzI1spLzJ z!x~R2=JU7kYbMmn+0*c1?CG`Y*_#nO;g}m(v(kK|`8}@8tlG0uV=S4HX0XN+j=A`n zI@=kd2jT^!&i~M_^u_Z-S>wsZ3?Q4a%JPR{NMw@Wz@)ErJWp@n|04e3_{_NNad*e{@3ywv zHQnM4f9>$%!#i~SQ`cX1`Krr&{7$gP)^65Wl?ZXRNBA z9}v&n^)u!uJrRii-1Rf|s`vyTite72deC%~_66egyC-F2VB<4+Y;Zq@J1hnYD5 zUkx4wdmKmOH#>hf=}h_Pe&RR1@SB16IloDi<8sF-=qbnAQ;xO!1Cx7Iy>{QE?qP!- zg+cd(4_b7j40?=80(X%7tg%&bs~#~gv*w7cK38J*(N?)XjV{n69O zOpBzZrUmY$`Lo@}1R(0~kKUPsLBs=b)bD==q96{4U;lm*zA=6+2Qx=E=VO~$ba$_+ zA+smjkL@7f1&3q8;~t29ItPI$?Fz@CLFK_H5|$P&?*2K-Vu zcE*HfJ!nt7@5APfXAMYAi=bMfIh)ak;WrOGI4N0fj{cibhvGM%KWOi`{+ohM_{}*F zO^U?E;dkKAHL9bt<7XXzSFft;_D_zF0r)cdfT9i<^s9&L>#0v%+8)0d{BS6d#qIE$ z7ayLK8k_5ez+5z;oN>r2ha|j|a7p}k@lVB{6SpI7X57i$n!4T6?fAnR4j+Gbr>@UK zGT7VY@h*9tcXpoD`HaKfJ?zHAjyZJ2q1POm&}m_(%R2t6<6|8McKE!*Lmjf(Z)rcZ zeeZV5+D*XZugp23!{r@EjlwdrEA2ks_=q`=^Z}_^Kk}S{EAX3#D(yb%zZrEoe)C26 zI7K7zn{ywrTc?jxdKrFGUNPy&s+vb8ogjOo|8Pt`e)#<(mM!SNDZLcGxnj1t-RT1| zG9wweS*_SY^v{+pjBu_)UEwXg2B3qnFRoZX=1=_Dj&liSKKxO`EDj1$FdT@h9yQ-? zbW!>oS$2+LKrH=PbNmvB9&@}o!s#d-3dFDH7{+=~t12D>#JV{~COIfX>0lsEo@>9B z4Ua|T(bV)vdXy!Mx){H?XRf`bKk=K3@SAPnzbP1m-=tUBtNat=T!`O1P!&2?!3Fru z-^0f#Js-b0`>{~E#^m8Qe|XH^VtqZO1M!>hF%Fq5c|;^Tr}Zt4{@LD)^MDxrxVe4N ze`}h|(v1#;OW_0mN%RXO7YVK*ayyXYAFO zTp-H+V8pb8qN6kih`&As7Pb8kmPNIDGJ0v#a?!&m-E8XUZ2a)FC+$0?|7KJcepCLW zy=?k#3NrDVkDj!bR{zbY4E!ebsqk^q@tgae3LU334Zi_#R`FBmDo(|32F|ljm%g6T z6#VANdC_rHC3Eyy_|1RjMfV54;rr|>qN5@XL*DVdNH;y1U>jBXZwQx=%myuI`J_70BU6@PzxO58_r)8*~GzFYUhUq1ZuuK(@&Y}a93 zzUlI4m+a0TcAnPxB)q*hA9mcKOAjsWbfD97orXax|3k;~JN&J~JsnPJ|8D!6+aJ?z zRl8rc>s*yG^Tgqu#*|Y8c&OTb{N*bq9n}lVNF9)t27gngxkIJphu}y5thO8Z!87Kf z;YZ+(sVVmBoq^x{@)=9dPyA*&e)CNDZwjX2H~XHkd-oIL+=1U*_H5`}1;52_=06)c zPU-FVP5b9U=_2}dfbWBT$` z>Hza+yVW-U@zsk_%H^M0KXw)o6@#t^;=-4H2BM%0h(Ej(-K&FH)pbC8^RwpoH4wj? z@68cTN9iOWo}2$O_Nw?-Ky+9TJ&%K+qx4!Ju3TW|NE?un7D>-aZFL^eKil)T28iVg zCY{NTCHhaHh%2s^k0n7A#6>UN+^g#Jyj$aV^$!X@dLkzL^`Fega!`m-6M$&=lequ~ zg(w;i#IZHT{Bux<(yM@&Qu8x5Zp=6!Hq{up;^5{O3q)$InFAVFCN!|tA4~Ml_HeEQ zqN3JN9{s0QhZFs?MU(>Z#m_+$lmKyVoiSoW2MeELjKeJ#tpKvZ`p|q!SJrHl`4;7Z#cmI=G1nfPivpgd<(&95ouh*->HNNB)L- zJ%)D_Y9m|x_K<`>CR`Z*kNArCY*_s7h)e2L-|ebyT@GJ(_$bI0f9QHnmu+2UbUC^6 zyPa?9e9U2Q9#(kh_lG`p=!KnjcB<%<)p2vjTRZmZ@aGO=J9KJa)Bdt{E$tp@mwL#i zLw;MCm)L1kIYpdhizc0!jM-BLWaQvWZ>{P@|7@;CQ91nrN4+vB<)9&@<#ZEFeq~a| zK|{ur(`&Hdl}Tv_4Jj?B6CtwLZu?(fGjbBTDW^noGVLocx}1K4hZb95QvcDYa=Hq> zSZohR|4~6Xy#wdHYNZ$bN2AK=5P1C6(2uqa)fznXkxI*H_8{ChX_ zsygk_Nk;0{hb<^i#IVP`VK?okhJ~R%Hf+ng7?$QuG4lM>ur$=KcZa2j%tqQjl2lqw z+x#hShSEKzoaXr7y=jGQeY(d>?Z%T7NasKU;=cPJ{fQKbsFN`fsiH zWAx8a2<`Jv0g`#JvlNuO=K3AKnbPZ=(dn5%G54SrOhf*NB|l@qMdh&TSG~BzaE2%` zp){73)3V=T>Cf27;&K}L$1k0fdeEC+T28zFO3Wg6s9k+jgG$MSH94wB}Y^8}iFh^0WZ$=-fw44_D zZS|of7MH^)U-kc3`|`jjiY)F-GMU_g5SVZi1Qi6rOeQBmBmu%r5|YdeLmX~M(w+N` zAj}mHyl_`)JyvDcTRd0~)KwAJ-St`p*Y!TY`xd-W)bG8juI`$iNhW;X#~<|MRlTEL zRd-dr`c>8J$N7vrtRLJS4833dxFRY1bkpI%*!zjcmC}XJWcOh3edPhAbm22OJs5qz zBSLb ztl{6}&-i$bJOU5X^OS?!@L{)k!iWUM-nf3bb?K5)=kmOT6|1skXKPP$ec6b3lJ+F< z#gVKh>+O?X&}&*)x5+M5bvNfMT9oo1CiLi`UURg0DLH_AiR3MOEGH-6QM632skv;E zrD=;Jr_8Z&M2bGKv_;;sw0L2`qOy(=LrM8RK+X};01s0t({%8?Zu9IBX?i|+#ftT| z_STMyrn(Wy`o!A#uJz4rQf&xfWm926(T`k!Q%$52?yL02_@`{ztrFF&TmE>}iQ$hCPqntbgk4a^Ej^2U>n=CI` z)lpk$UO^K{^V0LcaUYY+e*)h}iqA z-2A>?_JW?xRn@k-^~)QUnAebfD924+z{k1db9k6)n8E{}^_pj!SL@k}ogKaPTb8wz z^w`WUmRMg>T+rZLx2e^&WbukE3m0u^>8)Im@fun4FA(}F*@}->$kp&DB8;PMNp)FI zcU`G%p1i5IqIqLy=fe6`8N2m~OKO`}&2Ou!-dvZRaTPg+ay}s`{{|c1pjpY0v$vY# zGG1qYWYIs~WPco*z119@@fPtwZo}K;dVIV?{*I4#Nz*y)yNIQtB9=5hUH?zh5XQ1% z7P7ogDxQH%?~z7)9NoY3nfga#OxLk2*Wc7)o}G9-{iAr9vt(n{`X;-rLwMa1uhl0u zv^8z4wY4r-zGPkEjpT;^fYhtWqxiT6uAu~<{8`T-yf%q9utcq;^|V-9sw^uu)~~8C zuOgNgK#p_&@)zpgk2Z`W*2D1Uf60o&^>#xGx%qH?p`n$$i^TiL$;0(+hBngt68u$7 zF2#pq{~a&YcN@lcFeN<;of`{RNUq+pu8L)wOFGM2oh>b6+sWLQLC#px`!YEGewvlc zz1nM@Fz#=9zG`Q0es{;hc?)W*$99s#z+k8%U*W?}lKuyeN-_l=MNZ0CGOu=HzSNkv zAb;~_$Kv7z?W^ny7D`DK`b6P_m9&y#K(>+rFkJPZ%hgUl%FpU|iW7<*lPS9NZA z*W%^1^Ya@DI-7gD7tLQXaWonF3h<30GhV5;oBqf6Zu}0`^>28kzQgnyBQ*UT1-;4y zIh!jw{++Ma z8x4jca>W~)Z;Ye#G0{LaRn_S~fLO#hzOTg=gkACcq8_dZE| zyZ$aXUF^}f;jd@mo@;Os>jlW&BLe0L6V72JE6>j^c2&$T$?X@bMw}1s@?5L zJj~c-sk5QIr7o{KTll_b9?~ZY&dz+1G`$N#Um%yj!=&^i_wKj|gtES>L=!4>PnpkA zp@QoKgOf(>J|rJ7+J|LCk$paS1o`wxeFlQJU^IwhEenhW3j|D;K+YG)#Co*8+h|YY zQVt%i&nTc$Fy@_&QP^N9l#JtCQ3{KY!|CL&H)Imad-WAY`%sX$=Q@ZrUGrYOnc0N_ za*HigA}5Oy$-+WQd}UvahXSB02Itnw826y7&X` zE*hl^HA^Ln0?Doq(5w_RtES6LPW!OljP7FLq+A4UiDoHev{sa&kjbu&_DpichiF$a zx9h}*%q}JTfw4eQqCgfUlH!lht|acRmp)>4u_y;@g$R)X!H*n_Wrj`cIv>LEL<7SgrcV6#-RC`HN5+;#V7=q?jT^o(gYlf=)tT?pc&Q`TUKl#KNv zN+cDZqg}BerQ$EJvi2TG!RD2Nh_if~z8VFxC`BPNyDrb}F_G7w3#5_ei{$A>yAfpX zkz35MGMpc72C-O+dTef?)M& z-*dZcaDS1$PqG%yqGS{vY!@Z7KIw|@v5}4EcAfa1+hxnn0{y@$yqzc!$=D}|5=rq7 zXxBI{63V?iK#h+UMd>rSlX_>XAU z7%s*06SoV3%+_389}Wgka;U#3nfdG3PiWU@E^*ZfZWjOwvvWcvQnFqm*>eKz8pWkp zf97`O7Qn|}*X4p;l#GQIy{?c+#Y7le-1sxvHIhqA_(ip=AS*9Fj9r{8N+cD(pj{bU z%2AMlfj`SEn=LB`aH>JAK_m-OD4CRB+cb%kpG2d~T-?JasZo%D#`txOi<5PY3t<1h zqEREblwH5FFPIWk*EtKM&{(_9S)5Frwfi?TYd9BJ_Zv5hhH7E-V_e#uBUpR%VFPuUq`*z6iVg0?{?z}i^$Sp&br+%AyWvVUZrIapMYWYWU zJ-|5bNh(kLI`NN*MF~d|E=ZUW|9pI7d`jHCaSqe3rkhMlV?T?%BzBtd5G=Kfi+L)h zJ|-dh&gdnEuMN8mMN#iZT?`P)>9E#hGXpv>o^Pr)#!2QiwHV@^Sf+k=qJ^J63onycl6RxRxDP|2+Lt33$b zd?!Z2P_LRcAdB0BSk59N*Mgq_`V9=$!pKaE!vkPWa;;IC!L$s5#qL4e=66Q!u|cpn zJP6!e7JEusmI2Gnv8SNL=|Sk`ud%#d24R@ngV;@n=@dM++JoTD{U%;7gVKWNO>2Ub zPR@*zCc=je>XUw1bxYSOnJqElT9n)tJ9CTCA?PE~3OKiE371n1|d4-cX}pN~_0 z7@5W4LGb6~c(taGC6bkh1>F`e;ZhB^U|<%P2cV%)Ft!QeiW5+rSp!INdk_nnlssS& zYdi@5l#(Uf#MYnnZVw_ppJ9@+$-WfoEa<~%2d-?)ad`3})6^8|to}0DJqY*orqI&$ zm&xftyyqJ!v~>MtvU?ElnUfkp5+Xh?NgYs<+k=qLk5Z|h`cqfqLCk0A5bCG?GPykn z`n+j~l*7h1bU=c`N8uX{USnkbjRp)Tye;VzE%bYLj~Q;9tseq!i<)sje!B4 za1IU+B1AXrtDmubuv!>iqaE=Y#i>V91F6$t5Ydy8nS3C5ZPM>aHzh4iJeEi(USnIr z*!TnSo8yz>?u&DoPMEGW&5C_H)*m~S4kFAk55+j5e~#W0U26Es5c@}iE$V-yrRltp zv2HJ}Up3>VPsxI z2rhkl82@Sxf~DGnSkt_8KDrqMi_?S9(@WDOn1|qJXb>!R&sMPqISb-FZ|!SUdXPcz zyF7?eJ!iOtc$dMcbbAoAdhPI2aNlYVVpx9}&MRpUhPgcmX?2cJK3vDm{M(E(Oj|zh zKf55)LnD;$WPh0exJrha2h8O3AUw6!tb9yS5+FjrA;IbZk*aprYu|*J(-E_T&<&Um zhBeUTK}7243<Pp-=tQ1)sMB2iz-kZ|)X;!^M*eNmKqPDQ|}!u zA<%1Z?st0-o|-yFY53)1)rOA&4+RkK@E{_!aSZ<+(O?M9BZEI-jLfSQAgScvWB6Ec z5G+m)!cY&7g#kCSP=h$g(fZVzHjKjo4<6S${o#7F(aAiQ+Xc<@2Zcxev%*$OYt?Ez@$RktV(3!i7T2XUY#gYq#6 zpULe(=;sE5lmmkXXw4YBiZI7#gN8uVkei1rOFf?Yr_?zB@;pCfT=J92b;+rCtV80@ z0P>ub@NPn1!nF98;(Ovp#yuS8q>+ckvBzQwfIMF}o^PBS^KXbe42`}o+HN>$h`rh{ zJL)|$*K*C&SeF-vGEYpTU08O(tlT`jz!TmDh#ck4$j+h1D{!*XoqG`&I`%aB`eYZv z0$x^rp%Ow?SvZ-oxV#7q?Kq8T;b}T8oXl9(dJ!0U_%taGM{+!EKo*A=fuXiZ+%R|_ zvaQOBg_nwf__7!;4&3vg7mZ=d)^J@oAp+vCZ_XGnCA##S{7b@KydRijY(+S|Pd zSAFUX_F)|)3xHS2*fURo#py-#YWtb&TdZi&4;46>dC~423oI|3nid4Jo-rjz%fQ8V zdlA~YV+!kc2UYwUF9KbUOkw@*pjg~qguTw0%CxX`q8wZ%5xZ1Q=EX-AHWFTQme z>p+w>CS^~O-HSli9|q3k^a8Y%tT>B#g=>kR93iZ?oi(6xrx!r0yQeALLwEz-UPP(7 zrYZeH_)Ilk#HBtmjX88s2D-h7OC33#$=yAJJBKcpDZQ)1i?G!0>8v{ppU3V+Kpow(~AJrHwDo+f>&1klw!EO zfKOH5@`@=i3;W{Zh6GZRC8gkqA-v=oF9KGt%3_0*@Oj)`#H)Ur#mAh3nBF?Ph+eIn z$;XC+V6l4<%er?aA50H|#pwlPD-@ZXopO14oB8arJUtj2#t4HDW%nZfH8qWo8wbJS z^dcH|bDESjnvO)mvh4q6rgWMiIw6`IezSax^2{WaR_QiFo^{r{o@+G}iD1c^)5Mkx$`KbO#e>UEkZg zxpID8Z@YlPO5Uqa6aazAx0AU!Am?s!EU#Vvoz+od?kv)0RnCKColE>j0H-c3Kv2H+vJ|;iqK?xY3b)F`D(XxiB1q~g|8=aOB zAF&dAMHxOMW%(%WOCsk(5k4mu!6W9<rXGt!*TEB45fd)REVKXsTs=>ufvB6UOYP zf0T4CXj-+Pp{Hw6Z)f>NXJf-cNAKpIF;9@01t9D}vJ4*&lR9{q9%t+`t;qhEo_)j8 zl1izh#J0RWXUwDI3FJFK-p0p6xqZ64;d*&cR0{I;nU@P|6 zSzvA)OWJqNcJt)XCcTi(ss&PAPeG}zr+#!S%Xwrd3Nex^fZGs5?m{8aEa_Ojmo@R(GuFUI_?O-;`E%jVU}TQY8D)|~Ss z0I@S}Bgc{NSCV=*IO-RcR8h9WY#ehi#fu-QOj3Wglo2Bj8L9r2MD96TN;cG!M}Y}+ zz7CI~yYxC+HrCr+P4x?w7F1^3qfczCT3%jITyJe%Rh)4vvCIKEcar7!xP#Qgqv&VG zkz3X5YF*ydvou%uP$iwzCkh{`q!Z*I%K44F0}s=WG%H!>X*C;@eu{#y?AqCPUX>X$ zo>1WQC+A4xE!L>i6Di*$f1dO~;@b(Y#J?CnG_JyQW$b@rha0P7c1OQz_`+a_veM)F zJj?T73H+0}(zI+#0fh%NF&Je#S%g_ zEwC(Z%PO>LYx{J5D3TfAfRV}Y66s=NZ4Q%y6MG9eR3Z(BUdLjaWhsCo3bb{1h2=M7 znQa4>iZ?;=jq{|8(J)_vF_R5;>M^8))iNX7Qe_1)IXq7q9)mwVnJ2l8v$Hv$d%l!W zNcnPd;CfbuveWor0K&=nGeXJa*gVNXhMu(}m1JJfnM|f{l9P?Itz7un1yV)<6`l*n zs?n)$L68)c94wrY$=CBFE4glgbcS)Zg-d(`B%-;{<6E45og1I zFMEa+&Rm4>dhV=jh+tTeoCCBO*@ab*JBM7q5GBmub_`!6nH4dRAI6NdY;bg=H5>DT zbd^lojzT6ii%`sTX2=Ngk|qX*z_j6L)?_1|)e7wi0itLPG>}}3T;!0^i=}gidyUgF zq9#QZ!M_PnFz%WJKgh+4rE$;_;cPBjewLMkd-#kun;cwBTdJ5Y#ze^1i>0+B^Bvig zrt&aR1vX;YC})7yvqH7@EMZy;aD5_&gNs!Oy}n-%x$XFS)v4T6eJt>36Jj}S+qpR9ZDvbmxUO} z7_5clUP;c_T`n0{Pmj6)1ENb)KS|x0YE5|=R#7LwIk#()W0LMjT9NpD;x&oI37;ff z4kzlo8y|qv?EV|q8+V%N8B?<6_zZq8dJlrF}nXhXiCE%fQ&~*eUhg}dk_a^s}fiM z8XQ)6jsh^Tdl3h=Q)PiZ7J}*_ER4)OUk)tq2eE|Ff-IUA#DNu6b2nldg{cM?pOLv1 zz=44q*{QdU&K`47KX%cr388`t_!^3LIq3d8NOyi{LqXm7s_OwArs}Rh-8QzqC3+q? zl%sS)$-EGV8N1fbD+E~bDfl?VTp%+RhZiwp-`XL7!Ur^=l-UK_2kvR)u!|n@W32FQ=x&ukP@mG5h8HnsJCs*JOgFFf#W-A!vRP zGz&cR8x_ivt91`cIVg*6MdnMt9qQ8`39tXPK^0c>S!*vg?YHpiM41}QLYuY z%7x%VXKcFh5##EZ-(qf#SsMLK^q-;&4X+u_GsK)0^)#^zoi!rX?!$=l$#wWzbh4(BnNbcOz}cV{DXwq#i}mK&#dLF3I1cb(I5HDt_ZdL>UF-497_4%a z4^eKh8`$crYT1B#++Kvat=k~k2Ct{ai#WG~8zk%Cc^qB@x=q-~R&3EW=#}X=T;~Hy zR(#+Eq#NnpsQDl=kHd@TwnL|=2jOi~H=T+em$wIaJexFMN4BlT+YLN#Z_@l0naA!$ zyj#&`=mKoG01X>D0lQ7B)RH$N8^RF+nYnGP7twEj*bHy1nwE`yea;L$3-7>OUc|zE zzZt#@oTY&7TMc0WGSjlg3&=Q9u|Dezj`^xdT%SJG}lT6F`$xE)WXMB)ve8H5F^)H3zezH3T@f=S%f%{8Y=`0 za~>cDl+R+Fw;6a|s+HzwJlS-EVF(Y9Sz%mWz|4`e>!1OsdaN8)AFKz++-HcBySh%w zF(MB+TqmVxXx#h~lJ#E1#{FC;L4V7mpjL|lzt@SjD57h<2##~tOJ{35*%Yl2T7(>> z2zD=^QSRizmuQn_|$U*5LMhLeP9Gn5G z(fjM9G@CAao`&sUZf8>RlwoYGcO5A1Yn0}o+gO@_k``I`wH)ic2&g;OC_&_avk1q~ ziYx`{d>P<%U@MzrKH*9=7iH_m*(`Fdyn)(Kmy?;F>|R9Q?QLSCV;0+>$SHA%&&iwx zv3L#TB8!c+c%2p)_c4}gFCz2)Sq|7%7^pLGuu~*>LdD5k3qth9LM(>GFEAFP?Ag+5 z$yHxP0PLww`Msdsyf)0l81a@Msk#s&^U%EB3z zf+{%oBFBOQAqzh~ARHOS%PN@|dZlIL##U)KNjp!gb?DjiFU z9Zl6#D}?ARxm6apG76%S2xMl)09hM;*1O)gF=v_ZBqIe0A5*PZw8!`K;sjFkZdxfT`DEpI~z=Cu>54J60?%x z_v=Tdx6KbJ2ie{(jRT3`sqFkLnBMbphz4727*h(;^`CZba9oEpgxtHREn|0=6qnvM zFI2_39ZUsm@Xv+MJ$@TtJtWvCxym$3^+`6lvxBSn5LGmf>{3*egsLd&46lOu7jAV? zH3yXfR1}fSycG}^?z9wfLF1=)iYY^t1%g2};)&l^rU&y&(~{;xhq zM_-mElVfw+(#b!{I){o_uJ=X zkj%8Mj5tr_EM`4^fsSvLhKIEt=0XMdnZeI2%nfMg8&tz!eJ*L-29-PW>>g7}P<~R; z4lDANg{q!K#o3mP`O7UO4b6?Z>J9#eb1|?yYJsz5X}>#w+5|N}DgIw~rmd|2Rl@S5 zt`8YiXRUFntX23$)p>SN)ta%yfU#M;njqmgpu)ok6#}j z7k77DmFZj4A5FH{S7NutPBK1gY&NFF+#6E~+u3e_?QCBdb{eKfJr~tT0Sv-_E+2$6 zpi8F#9qp|qXLzM?eBKOiF+FGl92)%f1~Ti<-9Ci6H+!}DIr3od5r#(@Vb%B$>wd^9 z&NCzHL9lz4Pt=o7hv^}DfXr-j_z>-WnNOO|10>L9={zM2k1{^7`vC5)4s;Cn!NDU_ zJyMG1kVpcYJ_Ns?<7Y5#C6ExoP`eM&?^pYSCioEyb@>qfe%v24!H=NF?L+wc^1!J$ zvBrn+_qzgOWkvFV!#4?dlKRA8NO=VZ#y-&pk$4=wiNN#dDe3|EI~j4o zspxU}5bfS@f#~ZcYo#r(bti9YJ7-ypL(GLdsuik8i~j41Hd~pShiK~V8eN4 z^8AfW@#L-xDV!f-$nd4kff$9wYJ>3l3>$!aV8Fu3{7pd!{Kpq6Vd9AwvoJBulxyXy z2tEY8&%KDwE|~xuoxz951u~QC^dac|PZv=TIb&htz7Q55^LBus_isQ8MQnsO#pOeo z`;v=UoS2$vqmZExxj<%e-97}p-*Pd9Ei1*RNU0E(9GfzoUhP8&ylE%hfs{?co8tB% z=zYUZRc;R4X^lfJom@)h-UbLf`NvKce+KIzjmGgqS$G`Z?i&UyV=qyCpM$r|gwvv4 zKI8NuKEC}D)%Q7BxwIP#(E?=d`=P+{f~X~uVJ;uS<oA*tXa@t-hG)g9HIbNk&(UU_94!G?q%A$2p4Qn z{F<&Kpk!W22(rKNGVL3Ni5Lh7!=p49hYvvaePUpI;aEnI~k9Vt~=jt4ih-Z0?kE za%$^(8Y=8t>*nGkF9aMI-ba!kNIC!}W;*OgJ;0q+JPehLJ3M zq>-ig7)om4QN)huonKP0Zc%xCX=QJa9qhnoA<`pgt^0Ocf;xA2if zPQYUl15VGc=&9ONZ7*MBu?ryCv}4Qx6IwgX(P>|j@;?CIH>3d{pOcH>QN(b`0=t0T zPh%SoghTTW6Pu5KD1V2N7QFR(Z)uBxi0Hs{jJ1hNJM7@i_q@$n?N8pZvC zaTKgu*t?{-c5_qJI-9g`!@~LVI;1@FKlO>?Vc7@CF_iPK{V7B`79Bn6H}d<{u)Sc^ z2{QH?eEvuZ;TbpT2P$OuY3G|Kj8ZVw-L~A#_MV=cxqO zMDDr<1j9X&l>b-CPmX1xfZypK^E3g%5!<7FCKIm(MlYFz4?kHA50i(nAHJl`9GAkX zgsiw6|Jcq_zPhZ<9G$X*yogLb@&!Hu`xCB{jz=33;DS1k5zlfS7=4j>awa>EdH#|u zb)}o0lI+m6f zZq#3-=|=nrl0AQcwHbAkXw6Z(a0Jb@{zaNLU^b@@fpX9OMVc{SHoFhOag+ZVL7K~l zfVi!Hm1Yho&Fupa9C_`pl5N0jH9o|+72G6Q2h8U7t%Pj5Z_+w-z>Vi&tWnpKP%`gH z5ZLy^O&JaOS^FmlGgm z`P9NgKa&MQi1a`L%5nz|!9;Cg-hlsDQZtL(w#m8Zn^K|uW3Ko>^=l* zJ#;63P5a5_^dVep=-vp@+&+Y8)$ff^@){qavYy?`U(~&Fb{~SPj^4#f+D|rz5AjrmcSn?lh$@hlPHw(i8p%F4{fKn=5J~mf z-TWKZPd2v?u~en^Xs;0*piXc2(tRT+nSGUNd;qP28_&2WQMA^E1Q%t~PYFAdtD>bF z;0ZgVRP9p|DTZeEA-XEbqfHwk$M+mQfLFoyizyx74oa{4Z`Ua)MX=SQpme+1TSYRI zb*Ek8xn9qvG^Lm!5V{%yq1PtOP5e0Vl0;j=>j~Wng^Sp_b`_6`b@_2lG45~LCz2m@A6id5MCJA) z;Hu|ulErE*tip5VVBHTE{U}D3u?3Tr>h(th+v|UmU}KM%uE1n4vKmZgY;Hdytn%+u zwZVBE02Q_gaY4$al9evbk02{@pEOm`rliwofncOcW^8sJ;;i=E53fSPALJyGdcPL* zgwLIVoC%5oQ?jDehls01_lGD&TuT_G%E#00L(ml{opMUHx_pScI&r^Pcabb~`w(|k z{XmE}8Kg(81nx~`b-l*d3v3TOAi)Mb(c2Nc>GlEoN}X)q@I1_wmwh6okU0+``c%cs z+M=JRckJa{|Hd+CIUj!bz5Aj&fKd6N_Bl9?Y2*{eeUph;x286#+NJ?<+ zF*0v52+BHt|EZ}$RMso|#b`&QBDsA4%OaMC#Hyp{JZ*5otA>%8d8>Vh#<~L72JdmZ z55ZYqJ|uo2VFN&DEeZPqoIU_&sUy7dI6P_LJ#mB=Nr2slNUa+l*8B(~Ji3WZ*EA@Z z70%^Dq}GoQYp+0L9=i`=Ta}N%c*=E?H-#+yNJ_+CN#x!**%a&aAwuiUM_{}ZF4^rv zFjnl}wT=yN4GJJG=(9k{{Ih^)tWAH{8Zai}f@(;~fXrJJ!m%FzyXcKbdYnGQW0@b- zTGe3m03eGrKN_rOVB4HN1Ytc5db9~Zr1H3ZfXPxn1r<-j$Zzgr(g@xrBO6-d+Xza% zkBNiq$Vw5Sb>uOzvI@huV<7X&S`R#P9~Ubt5|7=7h^(t07o8Z1$LT{z*73*1%8JCZ z#s`=zvh;wIlcj-N=*BKsKhn7uuk51 zDh^-mLl{=g9_<5#*x9fj8z8eva{FAs^Y9)%n#L$VvO2DUD8T-o4@jd8(a|4}Ju_Mg z@ClpvCz6(flG&t$RfdfAn`e(dpG7-rTS{E^(xs&f^Tin0HhrQP1KUd8JqS^g^T6M-jW5X+h3kgdPe~_D>==XH)6O$bFtbA)=C?~5nw=dhE88{*r-PX9fjj4b?M}FJ4jy;F zopbQGoy7kOY+}cv2#i9k$jr`P5E6w`LCm+pZF3;!7PxH=e0n$Y>A~k3%=_>Emvq=r z#ICBFzu8_n-)5^STV5hWd{fwscS53YEJDgE^2F01*-hTYhlBhK59IYY(R!L?er?y1`PMDHTgqJGty$~ziJR81TTTG&jDXDSq=|=f!;CT zi%VlSE|P;?a8CGNUXYv+mHh?tK1D{p2zd{(QmuKQ%{(FHUra~dhLSB#$Ksyu20=&4 z0n!8vh9}4+$j5@ZqTkK8EH`~qJ|`<4o{hrT$^-d;&lnP#vhJ*)AV8N zG2<^r6C5x&+Au$A1;8OE=Xlzj{Xki&wk)ZxU6@y%SG5GXR}l^w1Z6>NGk#%$&@=rY zrA(C$4XU%S%-Pgk*uJH_X{Ann5L8DUN5j+zPPNDjMNa`jsFWONkrGn*q=)5G0E_mJ z@{x-FNu$G}kyNagV1mA26xx|U?tN8?H34?WVku-WPmVoHZ>tW~IP;Z$;b8P?484+Y zK%n&2s!+ixul|22N|FXuO>eCXRrA^Z2Q`lM2&*O-7>$WY~7O9^&Ra4 zH4F_o6}htNUkBAMy$b`;dtQ@Fwzi7!szpOdjYbzJFb?a0IwRt?_M8QC+Ee27) z;cCs+R^E@Y6;h{E)?89ANs9(nmIE7{2m6ARp)!X0-TY>F%$@p1!OYYOi|h14rl1C> zzELTB8btGv<41Z%rMIpKDGwR{*8g)WOoEGI0Duo0Kx`JRm87>V57qVyXbX?6%%|tw z1(l_rYB5zVW1a$R<-$rwRjq4*wIi27u*0@227~2a7!1s(%Tk?*4C2d{%R|ao~s)qy`S2$ zwJiz}%rMkVxm%Vs<(10CoA4d!x0eFI5b#+0SC*p;)$M-3 zSCY>6)Zi9p!*7ugRZ+=ogzxktpz?+HwCNGV*(l;wH)p0~Wme!vK;@M8)d-0qQ-G_8 z7IJ)3jUO?U7rrkBCTR%#P?hHQx+^;;r@GuD69 zZ;4KW5n>LI`P+kF z!dpI5-yWr>rMuCD7gZ%QHisVpg{IHd&w`S!59_OB#%A{;s4(pd2r;yNE{)_N2HZQO z1k5`VnZj|8p@)iyggCI<7&~PP4SX{)*M@+@x-Ya)7n%|_ zUJYc%YgIK2@0EeXDtA5{U1QcHR75_?2{90^{a3v_O zYs3(K^Of3Y!)J5)5jMEwYyOq$N1EG@NWq)FR@*6j<>~U1hPLNlc}8YNIQ$3}eB@rW zohoelcB+!O?SK~~>HD-78yCpJz$+-3@i_ee5hT(+=`5wXxlFdZTOA;&WUdN;fl%FS zaeU^ho#ySrim6zp2sX1L7hv5GVK`r;?t-Df>nYuEb20 zA6zQ<-}u(};jnIqhc4iyg5SjMip?>;XW@hxu(dR`Q47V7TN4v zAP8sZH_|jqHtsdV{kK*HT@8a3XwkuBR=#dOVsh%gk(L`FdTApQhsyxnfnRxWgk+YL zLkaAD#N>SNjWksiZnY|(g<#=~%zcg!o!Q@tCc#+=LFa-fmQpg~>hdFEXZN?#vIr(2 zVrR&A!6s$n`Gh#m6v_)G0hybG0G=)12_``@Y{L%61!V3e#Pb~dE~1wZ!c+9UG_`>H z8im7dnlL5-nF)9K0mK7MjGbO`eP@%IJeng9334<&P#~mKa6dM;uM8A_{e49H5U*4B z10c0wtZv1V|8pt&9)|FRGpzYlZ0{u_bK?-MbMObiP^&ByRusyT$G6@15v?=sN5D{n z3TR5$5#V?f#?)|JTwaw`ATup?KY(@Aw`|S#+s)+KA7PJxnvtIys^jOQMY|t?JOBF; z3Z}AHaS1L|rImx9{0Qrr@e@GMIZF;bcPNAf$lOW<{ao;qsD(Wpdqqga{R$fTQ0rQ?r=K#s?;={RkPl`h;Xvy$TTYa7E0q@NETt z02F~&m79{z>oAkyKSO_Y#<1&BjW&2i$i9s0%rJ*Qh>`tgfGz1#?0&=<-SabaM7k7* zAE8BYzl7rfG!a?*ODK=ikAR_vet~{VC(Z3gjL@)?&>se;q}2EU76e6L;QG|9P=qT^ z!glE3Y_V=X!h#N+6qh*IK?$rQSH~={q^0h_@*_s*=&vx?nfI$SiVfY;eiJ)O3qK*k z?nj`|MZfaSvY%`YKLUk7q=JL&C!5`mK%rT`MUdw5BT(qd-#DtLA8Bqs0)@W%jraHc zWUKKbMrg(F9LUp8HoG4&LVJJLx>g9w(hG-mo}^^few}{A2>tDdHfD~@?Q?)yJZsEg;C#+n7O8O~Ha# z#4*GoMh+5GWkNxlS<$A7#uUF76ie*PMx2rAVwAiDP&^(sA)Kvks!md*BiLd2NHs<%cJw25bGFO z6iQAepmpm((7}b^^BWUYpHqE#v;zwj#QQa^6?~Kkg0`#!LHmAc%ODpg1q&(&ZxJI0 zS#&5#zQ|a+76e(_S~EynvM2}+oen36lY<03oQy?V1A=I~JU2xiHcNFpAI|BD#>t`} za0HM^@&5L7@@R_OVytz8O#0H4rV4&%!?lpgRLP=Da%n0WcPIK(2cUG_RQ5V zL`{x(+yPAG=)F&RMYG7-q;5F#qf5$Q$2a_MOJ5p!qNoXvZ=ey_m1jm>jnl5_sV}B> zrkqUKld>rJKgrFo_u;yva}qyFloC@D9!!`We>DC=xX1l(ajQ)4n0%(QV(*EqGM+Sg zjAz9BCuU{zkI~mhPcr<=&=~by)YY)yIWN{3Ks4i$Ve&L>v~STJr^seER!U}_WtSho zj4-09r11mG3>fWyQQaC(o*gEiG2ncs+K)KKaq03DMIH1b1(!kvDEDZVg5G^r3~kT{>v zaZxfi34w}J%n?kg_9HOyFJ^g)GQWfJ@*CLtX0^pU|P74X9-)DDf756Ik007xX;M@BRWVTUJ1 z2AjmLg9s@vkhw_+JggX{Gl?F{7Rr^Uwk3of-Z@G%X+pRN2tW|wMPh-V-={RfEPY;g zl30su^b?{94&UMSAxv@GXw^PCG_cahrO3s}jH}C!K*d)_%L9i)s{M#fEFYsbEGC5m z(bW3jWG39@M|9$?V`RAJfd`FXEJcq+3NZ=DjH}y^_{5m8qRYYtjS!N!ZLC_0R5u%u zg$gfJyyWr&D3SbcY_Lf-zDyom5Fm4t5Q%6V7ttgHAKp1G*d#Wd3o!}E+)D^Qj2Rzn zQeK!)6AVOw%uPZ7;+pXhO+w7!>*IAM(UD=ONj&1=^dsufIw80%vBNJyxPZ(|>hdG* zaOZ>wZOQIOsNu!OgwPrkjEylvgaes-32}z+9g~E%gps$<&>F-gfy}*xNW(eDBZjUJ zT=>v&X=;_)Q2A(8XA&hd;cOZwMGYB|dREFg$yG^piRUN$A^x_w$4oE9eq#L9I4ovr z^jw1-E&^CvSrY51?PbH|k!0>0x?fC)SV1+wgLIiQLC;|stQ?BY z*OifzML{e#@%*tnofJ>ODM1I9`P>xIxI%~;hw&RHi!#ZusaOH+Ajq%)reY6H6)T_+ zPR_+~rp`D{4ia>7D$bzVxJB2WC0GPQI(C0wuppHjB3F71+K`%~2K`q>(*6D&pxd3?Q?U7Cf08o40L%wR#Vx*k$%U=bq+3F?|DUj%P* z14!DF(Uo!4mGUt4wE>Po3Q`KOh>=A>FmTByho0yde$_F#)mSTY%g!^1mhlm|P9P_X z0?CsGETW_sMm9%_PKVcn4wXX$F>;Wgz0oMB9t6=~LwQWFAU41a5yZ$rf_BHq7wsM@ zo67&7O^|*`xjtn<@^i_J$s?5AYz>J+6CO%9JN}3|L3-EZHBF7ZJGRpJvvE6IHvL>o zdGxo@*F;Y+JY|rgjz#?eCP-(;x&nxon4hh7oAA2B$-!{LhkhW<$V!J0K={Os*^#=< z0Kz9m+thB83TIzeu|wcwCfpf7G)1dT?KWw00sSV2Z~>W{gdmIOZK6rxhKK0|-?l2Vx-L_D1h}Vdn9kJpNw{iY# zwc=>ZF_#`nESkj0%p_+3;T*5b7Ag*UG1k+IT-aS9nQ?Um5Zz%pJEBR5?zsJI)g&r~ z_5LBkfy}*xU=PC_!Aqb!oR=7xn}k@8bLT`f39%io%u!8(MhRhKdN8(V5+`$$5Z#e= zj?N@{YmLZ7%Lk(m#?>7Fa0j{goCs~n9xy_-r-rH~Q7LTb5h7fL0lES)z%@2aG^qea zR(gB_2%}_fQZ#UNr$sc$0NK7tlc#QH(;;dS8^nZ|1Y{;W7LM4w3jf=Q|6LILD_jE2 zNB`?LbvsSbWN8_7N^}VqqIUY9mQTx~6RKs={kkf4J1-7R2}ur0?bk}GZm>G34%O7{ zf*(~PbMPq{qvO>~)qE7LggdvRA2nwBi!y7pe(lhd1edA*BI!7Q4g9ZZ(vri``nBVf zGHW`hXSVC4>PkXIYb?6Vx&)fJUt@H5;Re&G28X- z*V>E598Q*|iRRNp(_gwjFTqwu|I-rap8?wb0&4PZ{6+uMSm-Z}=EE%XKP?MQ)$G-5 zV@i-CTq@)P|7$5UH)W<~QmNE7N~8H`7OGv#M}KL&^p_@7Ut%;ylee8J(ehBy+Mh3B zZu%dk=|od8Iy-cKQu8&-H8)aGyXp6j{?z@aWz-o+<%JW!ouw?`>IB6qEkXSyh*4>} zR4t3{mmnF7$x;^#;Xjq!e>f*2W2PojE0so5I5}g&0_2&a%h_*s9k-x%yT+saqUlN| zu2CmK%N)+ZT532cA}zlk`TeR>n6dbUy5iF$Q8cB25k(^~Ig2LKHm-_gxi3cZ@IS#2l$bGwrVCV!k!swoiWHP-d4hjwVzk2O*mPO6 ze7Xew=Sa072OE!Va^%op;}QgmgAEgm&|Zx&zl40j0=PNcnlQXPOQMn|>Y}Iz=gLzJ z(S}Fx9FsBlr01H%93_W$R_r6T5;?>0Em>M3k2QVA&SbFs3g;ho4q3U&|GPNo=gh$R--%Nk*ev)owPshznp`g`)kB6&>o=s zOcf6M$_}Y(U4gB3G&@jONL;!;PjdBE&s$Pw9sL`rSd0>XA&rZ{!sTQqK9-T&7Rz=x zy5o2JE0v600$yY1WRojWd~i?=JBgz-dwpG1`})$3hFsw^mGSJX4;^iRaHLf#ua`p5kT9&0$waOD-o>ZwuJ<8sW5)I+IVDqgKMc~sK% zN%ImvqxZ5toKTZsh`%*{e%z;Vm&Z*pJ!fh$4UgR)doC=<++bV~^GVFk7;E&i(GAh* zhI>7{cjnMI8p0o+`&ccna? z^1w}Qxv(aTD-t3PCo>*r0C$?iR?2XdGU(xn1M;j5;8v40m2&Rjc^m=UYjUtsrignR zIbMm|m#9X#@(eBzW9GO5u)lLn*8_O8GJ9y?Iq0 zoDCqg!c~fF zSb?LroQh;#!LUaL3dgoj@A@6S?T@%*IPF;z04*e(03~|7Hb6Jbtdes@r4Y^z$D;s_ z90Axkqk44W#a{F5^0G=D3tUr|msOAtaF!rRoXpL~y*1aluziBXN+PtIa6Ae|(G|dr zHb1zq4GfmY9)Mjp>LTvM(Xh+Bd9}Dmnw^y$g3W?eGfL*I0C(ivv08}yLo&MrBRDwE z$c(EyfE#p7H4!8KxIt$}jj$L2QgXtqbTBga9&XWjtwvZyg5<&++%z3x5|Ft`xJf7b z+=wROzMQ@1iYCDsBXlFRPBp> z7I0-)#kQ0S0IM)wqGZO^6_^TKZPtiuZBroI7gl*{C0|8SF>N6x74lo65mYxcY99yH zRVPV_PbQp*KOXm~>1gch#=|ksL?1Lf9JLQHAQz4B8a;`88^r{+jiRWCEZroJU5sBl zy4G1>Q=nbyS5+Y+98DZ!2)RWvxp$MimSnyoo6>X=V3)(t&2k1>kq~M{(Pq^OxRuq$ zcOnTgRI;cJE+^%=MKZZ@a~LZyYrbvw7G^|zs1eh)s74?V958qkoF*8dl0|K7U$#h6;f3T32*%?kiTsucoRRM!ug?5GW~f@RIiCr1EEg%x57 zwIZob9*dWB!g!I5-gH*b;hi=#W51f~!stSFYYsV7$8^Pp>iPwA(I%*js1)d2cZXMLy2Iho=OH^tAHxf-6UTa z>)CQXlca6NWW79dm71H5N7$GkNXR>xh-lpgG61)mQJTMD<3?-lhTILI?7aWhna0UM zQvW>>;fPy7Dup9TrwMRGxUrt~x;jCe93*JpX(;GC5Ja~uR! z=#P@AVRO`wn};k-{VMejsf8(TrEE_*J^AtE4ao^fw~osj=^h~9QBW=&CmnVf35)R zd4jHzM4N^g^`gJxM3z`an-ZSqWDfy-*)kOvE1bFDOXIF&&lGsElw+z9ntn>-yZs8?9< zK7lYSc?!(T5rAD#>UjT&GvOeIX%nR(Xl4GaTsR9uKhsmmOr24Wz+*89Mvuq5&<|k;ZGw4>#7oNi7&wJ#tgXVVxU>lU$*bUzR z-dFN8Vq=Fxgy6$hK(Ste$tszfjQgXG_9!8jLGi2&;O?lRUM1u*C>}=u_eTA>7o!Et zHrU=rKT0~=D4Dkr*eIob*>?R2%692~Ie`qdHsF^HOEMTCxNmCZc}h5BP&|$R?wY#$ zJS9E^;7==b+1f!TEI!1^+*sT~6}MH@GYFow0o*{fVXNxMLGU;NxP9uMTY0o`-!>)M z2phox?`l(Eh0XwOpBleSrWcsmNI%)u25`Sr_cl3~4P^Vt<_O>hsW-MM4guVw6%MZOlPS;1}~{{$K9)TQl$1i@>~9o)I9X=VEy}NZ`XaE%sW7hiX~j6z1HlJUj+m8KMC>4-S%e z^ILQlE8{HPbe@mqkUU9v zMMSztCJ$etpFJvBEjBunMt2VD$GCNQ6)k1;?Q(C2tTRp-hw0tPhi8ymG(yN7LMC@# z8sbitKS$|>m^&Lgm(_PP$qA#OSqoW3bIH}0g}9Psgm@`Ft>H1eRHTQafGM5oT9x0 z4E!*+XdBp(lSMAOTyf>uIx%_5W}$E`b4ZBAD9RvAH{0RkIX#&i3u^@khR|yHdS*pRs1@g}SFKRT zRl%-M$wGaA6=BKb$oeq8z^v9>)r#a$E2Iso6?A-ttBk=`sN`TP!jj3M4PmUntl0&` zvXS{BDb$M98x<>*A(ieGi!jpCk9^4!8x<>t^46+IfS$2Y9{J!E@|I}R;|zY0dUL=$ zd%|N3OwqH%Qop6Rc;yP`qP&jE;^k$zj%D*FJgQF=?l76~_x%U1loO&27P#sfARAdU z@4|wr=BnZbS7BSHa2d+jnfgTGhU2kTxat}(6f@weYj|YucU>iaVJP|=)7`tuRi9&R zt}4%KtGCq`F6!El-_|sCA4_cM?y|PImRmNg5U#kHa3=8(5OfB)9v`QZzvE*vc?}+u zCg~aF6)V=;+FLs+n(8K;Mia?_F#&V*go$M4pMWouEW^hHQU?#yc$Q=4xPUos!Z;=S zksapfvG_6WtZfXYB@KoTDY#eYiXV}ci~ueosWgS@S9^)-~A!HdX2Pm6hW;(3g}&RN{PS>8}sY-wm~ z+E{CAU9fz~y2Ks&L;=B**aKH%gV0{M8XF$lNWyhsE4$^XbW6*Uf`zW7ix#(v*H}Nu z#A%5Fo+#}hvK9mw9w6KB@d&vF9+U3VbBK2+-A@xC_>Py%?R4v)EHjUbW|SB27fP}B!M<>aNU+_@Pb_RPlQ;IXq|zwT@jWaag@bDt_$!l3XCH16 zf9@|zJSu!9dmruyKmD)r^Z_Kf`fvmIw!bPttMHQCeX#wTy#7}?X8=hxeYnB9@FqEX zfK2W_+|NyJQY2Y#VWnd;Et|3_-O&fTxyg?=DIvM=ne2VIU%UKfrF7vlIs0&X_H8#S zehQz--iMpBqi-2dlB*B*V!Lip{1jf2yAQWsKX}W4rK{<~jo0Q|6+iVS3HMpI-^wEA z;2xMC(#VJyZ0BS)h_m&IwC*m|PZ(`b z{e-)tFTP9h6J{EZA3YYSP%>5b!DeWvu^}|B?Rl`tJQU||VhbnX#XI|OL-ee>l_H1F zWbec6(0{yJsfO^GoPD_a`HO)ix%+UlbLl+;7P+Pmw>sZ)kK(-W>fC)%km;&s)~*M& z>}C&a7y6TZxOOLB+?I;%dXW6*gUaPC?6WW^7H41^u-x3jJ`00lu?MyS%kQA2YOsc3 zUpy>oZ`6=8QkSK)CjTkv@x%`j6B8`)_PDL4zr;Rm{K_~yW>)lCLtoTh=vjAQux~ns z&}smJ{`4!dnf6RaUy+C7tR5yU(Ef6jiJ=yi8uBU)noZ-uts7sJGgy9W9xU_egInbA ztMc$fDvzd#~j9^#(2AnILk{Tk!deeUn+1jiVKCRES7Q4v7OUdy`sr28wwUEPDsU zV3?ADW$40cuw@8>p$9nyTSm!X8AMT^=mR|RnzyKVr&IHkm-^6KtoA`RfbZzhTcQy1 z+gsF@$-qNn#FxL#Y9I2$(MKFfrFw}x@iwb{C0&W(&TJS?PQE6e4MEaLyi|4XaOdOz zrj_399$YF)4rz|}zC#T<4aCseFL{?c2Nt^Fwww?jt7NfU*|;p8mq+&PfT;Dscja^N z-I&M=xqb(0m=u%)N1W+o3S?0xxnl=4Efd6e#=t>tvpvi-z_Y;7BY;s4Zcz$ZUqXe< zO#8csMwTa_)22g<8sTM5vmtIuIB{HQ>k2ufMb&tzW#f4Pzx1-ew+&as^Khv@sI4nx zC5Wb0u0m#Y3W4w8q}fO7bR3h*2G&P>tVKce+6ss8>xGb1Kec5nx8(*uYf+FN&Wxhh zEQsxZ9P+akrKFQR&$K9E_Xz>&oH1NdcYswJem}#kHYnr}gPsV;U4S96cSa4lWypfm zk5l_nr=`4<(gl;6rvO7@O!{k5Y2ufOSHhJo?!+jiI-+u}oTiu6yI?5hkh?+r_ z#odQnI`%%mwa`~Dv|bpQ*9&guNPdvl%OF_neYlrn(}Ub&gJ5y?;Z}~v9^@XQEZA`c z*FGcj+Q*$78T(H`i>nVeay0E{vk&DHGjQ?UeYlU~x&5c$vDJOJjbqwFyj})Te0Lx0 z;vg43q>L&jKEhur{HWzCvuArB?$r3?A*H|TFB5LfnESAh2}j%PgU2N~`(Q5yjJDan zii79EI^=^7%R}i4-Je+4i9x;*#Uhv{SgflLcUvrZM43v5m*nn)?G@yfM+PivO&{)@ zF#TN_K=&sJw@PgMI~zc=k2F2GRctey%o{V?DZzHj9A66X#-g`cDAtQ-)U`QI=4}qQ zNsN1xwK<+PAd9mP_egX+%3AiISnPecU*bj3f-~MhvAFtRvjo&AL-no2g8g}0=P;ZZ z42s{~hubE6kFjPxD3+Q&E3mx(n4EnIT5$hF@#9L}?@~ix*kAIK0Udp~U1HDUd|n+k zlf4f&OZ@z}(#*q4a`xfgh?NKUY`7muxD{gWfe4atBg9{C98i+G5BEJl>C(y2J@Q2Q zHib8Absz3^ICqcIhlbDO?!%o9kL*#LbzHSxj2Alk&V)>(|DrexGd0pW7c;R)=lM}X zZWvOM`hQ4!5AZmOq<>huI~%k~jn5TbCU!~XR?uT>Se$rmAT^Idc^tR};G%vt8ZnM=7gQfHTRKHiHD8E!* zp|o><<9c8Z_OQaE;NN;@tCeNK4!?2oXfiA%u`79T8{HF_-`}icEm$IMODFoEDBu}F7$`J)I{9DDHXVt3 zM%XS#R%PQ*2e5md5vSgW`g(>C^!eB`LPzd@F4U2@l@fxC%7+l<8TYKv^2kiiAp~~z zJS+5eWG2@TLOEZ4Rv0*unVdribZo=vN;Rm1&Z_<}&9%5}Dj!1p3TVPq!P5W+2YzAOyG$V|?mjllH5M3N9{X?tZ{NuD9ZRzmBhlYOrUU#7@) zZX7~H<@c`$qdGE^X9ysaB==RJvm$Q+okIwdtU3U79(=WR4vtJ=kBDY4=@LyOi-Q@V zlKc0w!7Sbzw}@*9k&@~ILLZE!4?-hBAGWuT%;X+IEaW2x#0>%hhUwAiW9#b~LMY@+ z*y_?b80GS(+A8da*%ufNRllA38m~55g>Cs$;A@0m|- zeyQQnCZ2ZS^np8)yf;2mxeq;%mQRF1K9(f(Kn{N*sSZC?Bdc@!zylfjRJEJo7{_lf zYG$9R$YMP{bVr`|snC~^nKt^+9l7^YVTeX%^7zml`3p$GfyeBx^cZdFgA~ca+TMrG z$xWZJ2~NBhHtYW0ke}XPkaLg-mTBH&X{zMdwl2%J@FMx5np}Lx`>sd zmTyE7k9<;$EIui8h{k^@cE}`(l=;vhdij^FEAUe!7}CeD#pMHsD721klGkLk#%@Tq zn$W-)NwYD?qQdAXJ@2d2P}t=|M=AMA94C`#qsNDiQs_=$%uk|7r4JmXr08q*rJPi^ zczoy^ec)^19o_e>_@zW&L!uB<<@BL%)cB1sKa9nMzR~*enOr{fjXv>>Ft?8-34Nop zza6(amk)iT?ca_o$>T%c=nLPD+qz00`bL+3C+;;Oc7ex-zER(If}}-1i2X!8C8BTC zrv|1kz7sbG5t*Dm@Qsr5zZY5;S(3|#ZqVO-FSIT)lhcQ8(0@)O3EiOCKa4BM<3l&- zZ9k0Lx{W?`gWhvU+)6}joyUi6P|abn$0P0>okQUGB#no~2RsH7dN&V^&*U0Hf97oI z9yAGNgpqqt%$IesY+020CiM<=tvW-!Ty0PtSG}qFv!TwIXEYg`jnfT3!eQu-88Quf z4Liw2$1hm3pips4!7J`m98m-nzZ!k|zZs1B6Z(hsH|V#?(q+p?>-l`Q+_2)h^Dm6$ zjJL^Z-~@DHDk@Tv)k(aLJdnZbWgJ$`;4r{%cqdj3of6KM!2lAFe#~3#aZ=< zt&ZH5jHWtgOKE?*Ei-efIsB#sLN(Py4x*ej@~R+YU@0@<7?phS;n4#di5J`Rbfpxk2*|C+)-E}vb{ zUfkK!Gf9yqGKLH`8Cm-M?nw*5oIwP$_QbMAZULAf@(jdKt6#fh3=m?J& z0}1}C^-Qv8Cm;LpTN(Vn(jF8@a|uYjLjPHQXZ>B~(_EwS|` zlt{p?aqZzZ(>q!la*{FHGsEH;G?M z?#bu99=25PLt|Nz@gw7<#+8QG0T#FbqOiBN4*o(cU96HrN@Umh8{W3b_~a5 zJPk|*l)DwuN(o=kN*}t}{x0X4n=LYv$A@k(PodxmkcC%=+@?`*1vx;Xy!^ngi8+x8ch{@># z{}!waDXeq%!Al`JtfQBqIwMPU`Ov#HS1oj0WG1H%{aHO~q2nSmxqaxtdRfi0P~^x= z9v}LwmTAUqX{8UnQ~{09XDDfOOFcgDOF>JSF*at##SpL-&Bx+O9l8XJSv1N(rPp2o(D;wGpC{aFRt(@@OqL+{p| zTAqf}PpTG=4}Dz<9Zy%}lPa>&hn}w*9Z$U~lPcozp&#rp)I#5*4r6Fw$FEMXhh_or ze33SL=1XFrp(fIeqBIqT4t5$@|*hKprZ)6~K%F=r1IhoQUVA3wfwQ zf8D!G=%UpjK3d%B5I%=&N|wa8?nv9Q7C=f%mh)l`AviS6j>meA$UsE+<@|*Jk#hj= z2?Fo}}$n;2h2@cIna#!#e=A07?HJ<_%+eIObt9cBqMkYLoDhz!pC6CZ$|7xm> z4a88eXYv{zA(aqF4M`U47U9JR=^~JEI7r0^WU}Kki2UBahA%|apjA}uo!2P*3}nK~ zW;=D%C&T86d`e< zIQ&vrB_LTUmu&hwRd1Cj=6eu>=v&~&mBHv%hR9Me0yi7PEpN3ZBf{|FsF+)0vW>@$ z#JB;nRBbcF=@080^#OZT?V1Kkvm9G3wd9Bh4 zV1h1gw&I|o4qO?31TewBWLL`)qK*>N`Ky;GT|P9?v`?cSNi*3ujjm_Jmr0nJoIV5` zyf968gCjG!d@z}SanpcMgRWV0IUl+Q@56XS5P0z7 z=@fDK5QeaLHoy8b6hlzLw%Mnln9GL{g}%;fSRMB$e+gmD;| z$>{@70x6$6t|Ye)aR?92rJH8R=NM6Oj}MRsL>D)1>o)ojSA(r5IQPP2V zVn5N(UC7XYSb}Bqgno+5aN-aMh7A~QLCh$XPipFk2~33kmN zSCYqvSc1>z3;h(ix{W@B5u`5=`U#nEk`opJLKk>^03!&!`M+L$5oBV@?ADO??Se5S zveB#D2f%{s9;O{N{A$FiqHi0$NwKG^w~VF?y5z!BVj1Om*limCz=+I~hdZSeyT03OfTG$hZM3*KE_Z|iJ$_o3G# zmMHfFDga6_bnTTDu z;fJ=Iuzx2RdM+d1@Ick zrHh!z`g;6`0$9Fb+?H4R5d{$3Aol1aH1zlp6Yzy7cgJ~Rk5aRPFgcg|5fhMcuCOwQ z%;fYVCgA3Cg|%{MmSz^tW%zn3*nLEuSjSk^Nitw(L>a9@#S4MY5XfKI)u(hWt`Rto)?> z1Np(2XJYP-*%i|kQ*3OGvB%6t$A7z*SCRG$x5dtXnz|;7lIuE}z3rB)6~xyn-PU%C~QuB|De2Z3ngu%!T^EC0k?Vv*(k-E|9Q@@OU|!1mUudWgaTZv|9^J zy@`DZjS}bd6a~}k)J+MjV2Y9)>)JL~K1EJ`MR{s6w|m>%iYZayWhCzEDYEdJ5_k0! zF8rnh;V?x-uIPqZ?jiTVMRgx#CHoI{#i|W=vmZY^-W9vRz;YoKB@O0f7Isx6I`SkK z0mGeSVGjtoi)_Hly~GWdbu2+rQBr<>OLARvS5uLs2lUxYr&Bj2J)qAe2T)EHc?B-2 ze5S^+r#fTR`V97C2mDyC&kPqLX|+Bl{HCPU`n-oX_ip=xO!Wp6_gWGnC|)OP`k~s_ zNG@JpB~5Ty{0ikL>?kOz>+P;BsU47{-I@6^E53baTkOM6^l$sGLP&{K=xy$CWTp1! zBsECdWn?LhBsV262;%{AVk=bpXJXt2mj}rTxTsjJDsrH?J63IE>5_KC-wTWnF}0ej z^E(sF4K3N_lFrp#LiVDJA@Uf?xR@zv+64Wl^RpihY{nlu*pGbrV<-D@z6bAI%6?o4 zWjLKLW;ULXw~$eUu{cDLWTsTGEYWK7jBDF zz+#^)+_L`O>lP~Jvlpru-uUHlzfn&~)DAJP>1W!HAs|<&S)ndc^(psoPbt1q#K`Tk zN^<_8tCL9KmgRH62%3*(##YE7w6Bkk#k>WO=RaY!1#@SPh6kSst>gnDDHFFypaE4l^EG$l-o!gU%HVi^T)flnwllJJw7SFG#HW zQnJ*rNNyOQVscQMT*$Gya*&T@IbP80OxJ^9Vvvl<6{KRIQY)GIb@yVj{~xg5yMK_! z1gqJiZrlZ;ZZ?cFAKkq_XLbWvR6g{*^ULKbU$cN!zJwhUIlhup+;-gQ%DUtB@jC^Z|(6nA*Wcu9IIfRa7rklq+8(s)si9gm9ZW z%}Bz?(vBzDi}?QP?K@Hg|5?w&j#Z|_QVI;l zF>ErSaU29jBEvC5Au=&8=I4<0XYv&!fBk@pTyiGAY{vE-$)lF6nqLbwB zxFDKzF6Pex=}Dud-@Ew#hxFNG>RG&-?C)z)l9_Sc)5xK9Z8XK{`D1t=3wt}t(|X-a z9oAy@n8m#^JWq=mJZQp{6p0L-Iw|t*v%|fkf^d_KX0Al<=y_x4m)n(C-J4&M=S&?8 z(+@ToCOBpXhars4kRrqk1`TRl2>tQR*`wUYtgy*J^LJwX=Z;Z-O;@tp-J0LmS&LRh@n|bc=u+K67M3wXjqr|& zmQO$8(RP&x7OKchPCw$&J}VKX$jD4CKjP6glnTb9$V^T@;?YRy1dwsOi=z(VZqS>yP!aZl z9#te13ANFm1VwhZ0A(fCGLd5aet^P}f4KNO4t9*N21;oI;~e}2&~Y0iYZA_H^!O3+ zR#71gk}E6ND*&}%O0>`xA2Du^R4~9AY5?DH{NjW(hSi-&7P}HLZqwYtFivty z2vKdlmDFH`wLoWBaiuY;2#{HkjebP6y;aG8aAIeSE<(GG73uRM#?7{o&z;~AAPir2#|7P}B0y%UIQLS$9ke#E}Ddl*)ccAk~y0UIS3$V{%s zk4U(eJknmFpp;QXY!<=tyU~xhxRsl!`38*l5qqWIkGQzt<_X@Laz7&Dt~3cfe8?nz zI_P>r=q|S(k#S#{1iwXOrY(L%#-*7BZ$V_Haz7&D?lcS4;a4AB3gYsBb&1Ol$hh4W z;qwxir`C_aIJbpg8(Kc#HesY7t@4$qKH2Oj`LptSZt0l>Nb^6Z&o#{^3=uZUFy4y_o$yyx5;=}k<4!R$Z*7PmtmKo-B4nPXEngxyMeDw zU97oEKSTF_uxxl1_NYlYvHTPXP-k3W6vxlS7E^g(2SU&NhqLz$edr?ACXH8#GZhdlZVW+F3V-`D2 zUNTZ@a*|70l9R1@-L`q>FzrtbqrQYXZ(qk?zr&O@Zz0(TYOT|U^YoUcwKNSRrdtP^ z=LzHRRBuYGq4S=7_>WCIWE0;^{?ZKn;Gu%ZzCcgxf+?Gr)OKfYL3)+Dv)d*yj7`}{ zVp^bim1HGe+$0Mw>ng%aNX&avTcc94~e;zkK1%6ZURc6Tzs#N9I%Bz$K+*>qSPPPT-8cSO9TH=Jfaxa#e*gue?|QaYyE?^ds)- z!;6LGbYv!vpW?1A5!PHCA?>J5Mp#cc{SZ$CT8VCz-RE5xOTOAky($(GxoWo`VORgVRQR?u^at}!TQUP@QofztQ3Q__X9{p`oSVVVyyR343=n_!Udaj^CuXr#8_58Vz7FB zY*8!T8@Gtlj~J|1eQd=vsUqcm#9%G)pH?l1!MezQ8nw9mh{1Zt&(>v=Qq1E=43;Ip z)=!fvQt3ww*3|*F!=6+Tj~_8uKR_*PxiKuhh}0A)ER)Lph`}ldii?|wOin*yu^;4>q%qw8*kI`YA%| z3SnM|%;fO{LW|sX1sl`Mggb!=sN4_eEb@m!_I^&Ph|`Z?EnN|NKPOehhcT91M0mv!;bBB(@&pjl)l0^0cx3=FTyGKH%rZ{WP8nZAPXHiX zp?PO-?zUK>*TTHB=}0HywqeZxE=9+vd?_MXY$k%buKAt#X{JTc{vqudp@?Yz2q38I zo6{-c3e1EeDc6f%^GPX&IIca{pN3+t0OGj*GqRTP+u{izj;r7Xam_FZ#Wn^I$MxV1 z%q%AMX5=0da8aHB;*;ZMTmgh_&HFtY zl4Hq1oL1lO$E(W~K$zC6_5T&(j&v@L7GC zizeFuMP=P2ObwBloB@i;x=DCzBQv=I6qR+8@YY6Vas~jEMT+-MAc+F8_Kqvb6F?x= zZ5Ijef8^>a0|><8b_k2A$V{F90|-Y z_LSRz6ZVt{*Rv25w}DPB(mL@Adb+1aY!Us-H^0qd`2e75Uu~zyUrYSfW;g_b#qtUF zg{1AB{8X~=9U4iv86<%(Kb8!>!(tpA7|`bk2U7s}Jw%pxsv&3pJJgZx5fv(ampZ(G z-)@84gJF(zDS3pL8{Va2Hi=?ZyvO|U08n;7@EtntB<;dTIV9u!BoQN$g`+O8mG{0! zTe(q`%e~M1@o;{$15VjQuf<5YA+l61$$g)yS1F455X7)pG~l;d!deM>P;xk2Kp-Pr zz)UuMKs9rNNI0W{jkni6U|0$h_4AIxiohWdRE-KzjVnH6SPByYHB2o-2PyjzN@F}qp)@X0QsYsvU(o6>3Y9?xF!G3g*?*KOR4$51`UmS5h(HHK&ZzDc z$l;NQ0-31?Fc=!n>BNq~ILvq38OjHex>-&guNlH%2xR=+k5Fx42UV?1RP8{AsG2zu zU`Ocjk@gjc5y?_90-5als?$u&o%E5FiXwxZqDTvr9o1=YxV1M<9=aG~L@p8(S=jS>Mex1OCL-X1auzHdaEGY9^2+ug_!Mw8cfD z+?hR0JxFY6hS1?~^(17eT(YT$s#geN=&{j1^zgChX8`yrIKV~)tP14tVZzAdz?-cU zjugU!6`)w0!k+8pg`;$O*?R<4z!t%VKIRen#Psp>qzQl@?2S3!_z&YHaMHxfd^aL9xdMQMAf0y#tB=S`&H#cOUYbY}!Wz!HYg|d500J4Hb<@dJcL`?k z$aQWEAb#QKUBZ?(GLt8Oh=uic3!P=YH`G};qlsXT0OA#Xf49(Ck(rzU#4G&gZlSXx zGnEGrp^$ga1d9`hBczk$GGJJMb*KpN)gaJk9{(2tdws za$|I-j@K{zb&o+Vh(Dr5-mLRqddN1o&X{cp16wb{U_D@ zjRC+Tkoi}$z5k?&cmfDd*m||_mY{8HDhvQkVqGr6Xcsc2Fqkv-F8Rsmry*F?8(k!;iT*g+ zMj$RGoxFB_=WLbyAcVkt0CA}mWJ_F^itJ3^8N2R$>I5z6Znt~ODjc@zT1no(1q`?^ zxhZk~F4#$qr|*oD?I4B>xLib*!$mlsSyDn046}e83@y1SaqchJMs}c_t>h-WTtNPc zmqGFlUIxg9&)VbW^HkT;ygo~RVnUjmZ%eK6mKNLlP35UMv+GD)_RcufRLVnkJcXEs zUiQQLIb;L5=9~66N%5EMvGcEIVzSBreqL^`&N6q@Hap#I&1pG_C9{4{n!aq0ll_kT z^$WP%MApEs`8R}@$j-`d$jEHy7%a)3bt8EPS@)1F-@@f;vJEb(Ygx@EO&3IoT*ZoK z+LFtQ+Pch{c8T{|zdQV<#0#yzf}B91R}$lQaJh!8fQ#xnCVTT-NOD>8UHb(xvg}y< zV$!q8IE&nxxie8d_c-}56Z+yC#<=f#L{{8Ef0VQ)wK@8W3(N9aB&U4OyPd3o0miiOLz%M;K{sw-1`mtEv;xNHxw5)B3BtmN*r z#{NXfV>etLepB+;4ZiT3l1M893!o`EC03%PVfa)@@`CHqX`3!%4h_f^?^KXWb_4|Fk!0H$;CF?TcQe`I}}?Ge`YbaA^Djc&04naV11bb8mCK z+#EPqyB;#c{0T4#{{c+GsSGgzvu=FWmsS%mU9YD;& zMNbJ!jmS)%0KyeMcuJT=BQsS75UH^Kh_Dff%;X6mQsMd|;-cjlQE_U05aU<_h*T(g z8ovMfrv=1?c??d3D*z`mene&}4;)CxcYgv7MWBnl>x*q{PTIXd7D%bPXMtC z1uqEWLH05m{DSQ&v>!q2!h$ZK z1TRc|Nf_;stMdd9yuiOSZtE%o2wr&kC1H{nOA>+?mcJ}WstWZJwcZJEU1tEn3&EF# zE&P&;^qI>bMQv7(k%H9j^)#L}Z;j0R$@Cf3qMdvZ=@!Kxl$tpP+bT zQ;{21%(_KVx6o;5GZk!Et^nc< z+HR3ZYGXYsVPap`ol!A&(hM?J7*_*aV9>Bo|E%5%`PUxQW9>B zwM=y<30s4exwRrvuS% z5w@ENk%j3thzNtkPv|@qx;Jua3z1oovLNCOuKa{0g%G?WvPT`-Qo<@&V1`)MT{284*>~dVm%0o^d`A$G2+w^Z%#>p> zArxWZx8pLof`~=v|5lhz$C89#gg3^QzhQ1rOb(KNHBYggy zxBwVKk_MP$hhYQY{GMNgR(a<5q+Z;SYe;mHin;fkLBJ@4zFmjE+a60^`pHYtIFl@o z@P(hh7e_RcJ#u;tX(GNi2xchxL40o}QN$TUXv2L!hzsgT6mbOs=nz^^o3LT}2b(b~ zQ%Ie0we$oL0|6Z>z%%G9jFB&o#k8uXD?d`6E&ESQ zWlVOALw#?|(wJE>D&v0?S;o)Qi@BM`zp2wS*K7KWM~r_o-YVa(3MyxC6~?QLI}|r5 zUB-6ReO!V{Zrp6lmoGJL(44v5xKeeaajsEoILYmiy{US|@TJBo&sMY;-Zng|c-`=4 z)ju?4hT9F-a<3UKk+&MU4Aq7r`5WrT)YFtt7|u7WF)T0`6>hmo|BK45|Calw{(ZGf z|AJ~jahW1k@u2<@{axHS@>zN!|F^tSKP2BPzg*v=P;$-sTFq4T4f^e+`V{rcdW-%{ z{WR5aE>kb(c4_WWHR?{tKhb@pdrfzc<8%+`_ULxWx9PSjGZY`|TGb62zphf3ty`-q z*DX`Ns+*%6)@ii=r~O>}ciEGgdhHSIAGNn=ui_4BcPQf(iQ0DUW@VEmRjE*HRsW#P z*KW|R)W*pVYjvu}x63|_{weya==YQ-6#r5jk~^Ybh<+scF6Hl|Npz38Ke{%$Bsy8` zRNJD>(F@^jjPicXubS^PAE?sRN7Vs{yoll+P!1}VX#T1?3&Wb&e^V5TMN2{66x*9F3#hcex(Qf6=qD2}yvJ*4hIhk3V@=qzDuA{!C z334qI*O=uWASJo8q{-P*R$tnbueb&Y*{Nynx}Kszv%636G7{1fiW|%&_S!UWkNj06 zWDHo!yUp$cBqXb7wW=m}j-_qAE zzl(bSwy*Eap0+)!p}IXjH?w}QG(~YOvLzQLSd!dDsmbTPrMv^Djo7j|b>8;*$ZWR(zEIrQTo?LHXrG`7iz)Lv~A=2TVI<{WG-*aR(wSz7Y>>WTp2BmCAr*9NXWxM~R3#+UDb7Vga$jj}N>@#N zNlGVYr*(IwwwX$k3Ns6{6i*@{sjeW$n_SSCk=(2}L}e5ev~~=XX7*bgTmlkO6RR=? zvy&Rt^=+k!$CQKQs`qA3-=0-h&{vn=oa^fE<({K#-7PikuAbtOt{Md$QAuTKMHX9T zPq{6VTZ9)Os~sm;PxRQxi_t?B8?yD%N*o3AR(!> zq&uNAuQfTLS#dut(oj*G&zHN_*5#HfP9i1K)oktNGb{RXG8K0sA;mJ-W$tv;+r4hZ zZL~~BLTfSK(wvc2q_|aiKh=L>Rz`PyS#EqFRbQhhi2K+lG|(D`K=upoC<{}H76$}@~*17PPgJ8NXTxgNbl)SweV@> ziub8LB?aDsqW01v7q57i7HP^ZD;Vf+O1Gvc-cqI0nqt!061(|~zSOqdJT6IX6FS+_ zQ0Pu=bF|jva2hO{(cD^PtIuvtcgHKfLqd9dM@qA^B*RgX!W}_Ea*w&HB)!Pel2*+< zkA#$dtG(ViFkoxS>**{ps1(1-MR+Qq*EveXO z>dfQ(l+xId>~^N-q-P{>J|tvhbq^L)s0qMVrFelZE8lMsXTvx zt5+W-$G)F^R#N(4g}d2iZZ9p2=gLuD(m;l*){)=h9xUJrX^rUvb-B%aW@&O7mxF|i z#M1WCB;M`l>g6&uk9U&%iGycydEvQ5nmNlC@|F77TY zn9}X8s^!xw(sIkVXOWPa-O!X?pHgNT?BSk4LRLqW&05=Sv*tE&bW%!f?8{CyHw-ou zxVaZ7M^Q>slDjLRurr6FZ)23J#4Po7JoW*Yqq}Cb z2D{}(a`mr#F@)=W_AAu?CQ*<;$TwC`x2 z)&5y~2OzI5(ROL8wZ+;btx3B;YvfKw{~G;W^ar|!qF;=DH2Uu7-+}j~SKcR|8eJD% zCNGOli?&5Cj-D1R(;V0Q1M>Dip}AkPN3%pUJ58o0L355~re-^*TCZB6Iztt$ z{IBv$<=e_@7%W(E#nr`Q6kWk!GmDSU3Pd9mUx!)rpw>8JwQ{6dOm6{Vpr~TsE z;{5F``JEX}Wfj~Fl%=gUDIqVtDI=jr5s!p|^7gF3B3pk|bqaSi5@1pu%(%Np3m)Wad@nmo!?kOM0uzxhp6~MVqUutf8vB zHeIouHZRXrTu@kE(Vx&X6gh1luT2ppoLbu{qEK_JpO3P1A>+ElFDSkmhNkMg5er;NPLj0hDDw30xT3uvwTM9bU zqv%X5NzN2?5Q`Kv#9Pgo9sTCsCQeQj=`77iYN;tN?XKZul+fN-pT`#@v}Dy!m(f9z z+vu_l7P|O`ifV2KDd4<|n*NNO`RO?+@rl{qy7+ePV_LMzQkayJ({F9+=4MlZJC!dQ zbSDhNw?rMLgtC5fc42#AN?yO*O$o*B?4~w*adw4^Gf+ZNhoi4FAt9;26*Z*VM-D8Q zRzN-~%2J-!m66=mTb5ImmZzj2b4g6Ul4)L)mYG}RD9i5elh35Ga-FHYoo)R&Rd&Ve zB%q`PzByp|L@_W3s3T~^9pm)`w|;l>+^HDJ7}rG zq`tI1Yie6p9@j|BC;4-x7WQOzJ910o6H`(-eN3aQ=Ao&I%`)~~E2+xuZck5X$RBje zqp^HRm8qv7!JF(VDNx)@mZ-g!X>=q=vMF*^q($vrH0^uJpI(@n-B;{PEK1`xlbh6D zv&=+ZQ+pRqqc19?A58Ccbv2b|+qniJ*LW>w{)WYh+e=a_QXAWf-C5kO7{y{)aa-bG zg}tkzu%qo<(x8Fzt0`Yia#`D8ZCY7ko8kbuN8?SMO3AsV!Ggh@{<5Y_#U11~6pQ4d zQ@IJaZb~?nb3lF@DT(%$z!{)-MthUD(}_lsMnUm3YQ8AY~!nKmb&~D`7SJ9 z*q7ek(wYhxXB!kp$)B~}Gg*_fI_pzv(h3vHdbp>^S6c5P**>Dv!SnIZQm1ln%HAaf zI&UeUDsF?@iyxx5PaPd9dyo=NoiHnZlbqCf7cJgP>GqD&26I6|p0`1<774jcO_qkL zjO-+SKyeqz*LxRHwIzp(as|jIIj>dr6S)fbwh!ZjEoiRmYAma3F}a%NP`-w$)QSpQ zVM9fVf=6_3&)+2CD3It|`=OygWjwl%pgvnIWZYo$Ed zNx2o7RfP!^t%?W90fTp;wSj7!(p=VFn(JsxZ%d(kDXI1pS5A3hjYDw*B_w1er4;tt zOx_~J6NEE*EwV33f)U2-TX;La$u!XDPH;6Q6)OHrnvC8>wq{B%ZgBA4+`@t0>?pdd z&(F>6t*!2>&&}}4=TeT0{+fjBcD|z{RlbFs*bq1K{QRWOj^2hrS7A#TH$Zt3;=AoG zcWz2+vRqFI@wSBcqKdxqybd{?6Z36@e0*(ImOZ;(PRLm?-i6!akTI{bpuW5@v8o}n zRIZ?e)=qCqY6IWM_sFI)=hc>|m|Ng*)lZGXMiZEiE;P)8!&NuwqjY!ba<%``Uaw7z zemA;5damY4I9wH-SET?NzfP5?{0AI=umTQOZRe&c_AAQZaMgYCEI3^C3fYXPN1~&) zL`6A+=tBF$H19H#1=Bg2z%6N79dARtKjdw+L29)TWM;*51rceko$g(cDBgxc8!Yh{ z5;3wABePQdL4clvRkDm8kZ|sDIPPHQbnhAtGGSZEq8Y7_9t{41jEJVyW{cq7_5=Zm zPL59ZqKyy^9-HaKyhD&i45AEdb}<+)h)DBuXLu3TF&0x<5V7UEXL#|%*0GpeK}3^( zH^YnJQ;Z3`#G|SM{CLQ0yyeB_*r^E^IUq4Kk1Zc?G56<@D8Lnm$S&}D+ zSn#)IOPV@b@yZ~=z~kq5@sQxLB_Ry_z+CTia>pF+A~2eR$IxV2Z83#mT0`WLiu{zc zRA&&8;s2WBMd(TBUf8%0C5c54C!TYLmmatv-W#`wD+s9ZkZHf|*Vfn#S$3MAQ#$-6 zCCV8@Z22!x`=k|i2N7vrHrH#KbP-Q*Efj(7L|?+>x@BV!QRq|Sym+ST7WG*1}Zk(r!9 z8!){mm4t8KNS)k4D}A0UvSiDPFew(!_f8u}K~E6C>E!bH<2H3;5CQ4m&ljeL$O?Lb zfJi5~3qp?u0y;+>GeOk_vN&Q9gnr+G(1^t%7}FRw`Y2f}0wDCzbh)_<5^m)5cc7Pz zb;U>|q>o8;*(a0t`EyP)kIlHyjf|47AAjTDpUXNI!UtI)Nvrm?wyc^tmC}$0QW1 z3?d@^f{%G~@u}vAe>+C@I4%LEM(sIuNbG&u!_j}&e5L+HJymtK(!u2^s^mSgK-3;E zjCHAYH16nt=(NKb-eorUHUrQM@_oaJH3=BGN+a^{i$0P}Bh>^lnV;zmDjRpSV~E?V zzFFj{Oz$-O%8Nzf<3oXrQb~*~m4x+@*S7S}Ad9lRoglIeL>}1PGmAWs<((!~E{cw|9233-I1e`HfhyeR47oRFkM zTmm`Fp~T*TBnf$hq!)6iq*hUqH&-gj47suK0ZUs4l0@@Xyv8?pI`Zg}8CJRGQ!%C3(vjqlP#}{B z-{1qFUL8|!7Abj?HB>CZmeHYxjwFwebp4yqQ0IF+cKw^|hQJ%|xb z-o@2a=y8Tl$)$@dBumA>Y>3?KP#$jsaoiX$<*xclS>0U?Od zKM?z)`-A?3YO}6iSE=8o-=e!taZLG*?p58l`iC`5>YE^fXj=5J`W^KS^t~l8Tq-YLYR*)C&>55aGpb-mX(M~*Ib zzr57hEIY`L%NOpE@+C(bjvR*{uwbWJCVT6<@bm*;lPUw0RkRNCF% zR9aFuSkz>f9Jey{_VAmM@Q|tZkgc&G_EwTR8#H3ECuDzfU#xuE3uOE4pwa5Z{jucZ zTe_x^4R=7LHMeywA&=eyO6@_KeLm>>$1}R($XB;?&7XOy6C{x&#CS*7d|4d~bEs(% znLZzyHE;%q$vOkX+>HOk;6LlT+I4cxGi2~KsJ1q?YnE&!IWQB{V#!g7@yK?F?^#YN z=YpJNq#rL!$@QrJ67mf)vOJ{ZwWqhoE||+Q#FqBg7nRjDw&v9oNs^MzJ&Qb#4{|Yk z1jnA)9(&f@GwF{qM`uq?n>VqrwL^N+49nh1_W#xqE7z?ci?H(L`Jl}yBkLJEY&|KKBO=Ry;?@aQC+q#m-J_j^3`WX4>PEcys{I1zbCim4Z`(x!ZekN;XLxul? zqNMar(71}-z5MI`*ab7#+f{aIFi1L5Urm0VPdn(YIq=L+Y#lh0th)syBrpkw=3E}T zU{O5%0WW-SeOX0wYP`3ux+=T5qqRH7o^4R@da~I6`FJ*F?Y6|$?#14l!TM}tD z<0q0gziVD8t~-}RT@@8`Y0Prt>qe*HB>39S)<36j)BRg_z3zPNGukHYl<4cC*J_S| z*-5YdliH#BKy@)V5ARhLLp;(Tw@7h^B1?W;-XotaJ19$y`U+3V+Mp~84#Fb%35$0r z+MHlr38}oSs~t3FM96w1A+v3SD~RzzGp*hgBTCUk`=d+Q1^ZEd5Ce$XtX{}MKaQEn z8N?8xudK`rCN6c^qFE|jTuU>R+(8T{O0s!Z2`bUs@$tCc8&wL(tWGJr5rhlI9Cxq_O10U;RHF8&(WS&xi~T{2JbKYSp-LEglolVR5?#GV5H36d zcMyY-_QZ#)gp05Ur37q$e-Pr4$jSH#Rl;bau7r?ElJ&k+xJVWs90VMZ7ZXA%(c2ap z@HDCvki`dwu|-P~CsYaJiS{LiR1!802-TMg7s;YZ7*cdHF{Bc^?FjEBku0i&QAK5r z2~;WzVkFV4j?fziQp6odm`aq)gu8+mT6E6Z&>P1}(f!}(Qt`qF>g z^-`4*g#15Y!YP>vcLy;7`0TqL84M<`!rHG zBa6KRVNB$n4a_`GI}vX?a7R13ltZwh_Xi=E3G6h?Jilg1Uo6@CSdWq{IoG>u}x8z_637ce?tE^NQjWDS)-Yz z{ts+z{;Ix7RwGN7Ez@s5M<1>GR<#-TEU@FLRcGKvMSdyUg((jxuT}Pmd$DMn@hI+e zqG!Qw=?}W=0F->LZjpjl6mnO<`r;eqE75o9IPDiBb1vY%&5&tWVR%gTDDJ|z=e751 zuhhor`t=Vhj;vJNsR(MF(ZjH@`#I(l)=FJ}j6Kx)`((G{E=jg0s+AOM^v<$b9EtWi zQ%!YMy(CI~1`8UmI(1XBWtib7g^N4mR4hE49MHAL$~6kIYjY1C`uS*4Pu$|))3sNX z#cne@>TAJxl5TBl$Vu+$Z7NPOE@ex(kA7{7B@0$`CX?=EomQEZJi4eeZvN}6q&3l6 zWwlg05)&j^>24wii+kc!dzgR)W-w7av9xm?th9ex+KG$)4P~H1BDtazE(xTtq$iH7 zFYD2e?vkFFGCK(ZL1rUEOFI{nFBW&k!mi_2XbE`czgP~Wwxyl($ZN~tpL5E3Vr33; zKT>0M_0Lq#xQx|#=tN5_DOlEdHrYQHj1e8nLH$?H>WtmaGA&eDO*OT)nyRX5lcd9@ zTq86pbW_qDQ?3?n!Xbur2{n#7hor?Z9pN`6Vq@A*-6T!Uo@uf+^2*uJoEGv8UYd#K z9Jn-*va>oJ;IhBsEckUZxeqUU$wFk=Og7-fL)>s#$4*PAved^r>Z%j!Ye#6pb~uuo zQcYHn10aCRTim85JI{fRg^UPL_d1qPp~{k2o0ynTV@ZJH98Qgc=}dh~Vs(POI>B0F zl{8%UHaU*UzeNm7;PQ8}d`ai|M7bP9zd_=bLtT7DkD8nZ4{Me+-kNBysjjWINCZq< zLiWH&6!&~b&&54!JxM$Zo@nvX&iQjq@s4_%C4R)voMxsf?S8)}RzBrT@`4+N%Q5nw zC7qkdrydv)Uz59*!N9jrE^_RDZLwx(U z%gJA%Nh-FTB)|G$d$0S1Y}p96J|>GQdy+^?dCxrZ#?$>X5fktt>g-IP4N8I@!+^z~Y|z+Xz`}BYO-U~;Q1uCyk{0<(x_bmqwOqm6F#@aq_PsG19rAbl{LX+jdxVX zTk52RpJE-j@Z$d1${EbW0He%ds)m!X5-n04UK11y-IR)XmEAm5hqU=m8-FI}uejJv z?4F+e*5?TMHvB+%LsM(gmfY2ZWj^Sy~h6+s-@?10a|B zNVcEvowlA?C?MIM6;2upS-u5lhJ-8?C6dY1Ebza4biQ{Unff}vj4Vm=E(68;#a?Mn z61&-M!INPUNA-$?EUkbXNTP$Ok4c(EoXO&I7bS(eV+2V^9wF)X$?Um{OC(QoKu` z8+t%_td*=v4S5(L4I8BAObDAS;3UQnSy~a2$yKlP%p|)~;XP>B(G4PHY2q8oikaag zxRI@)(imAPjd;?$=$PpOA@G{dBJ%W5r^1PFmemfh2Zc)tkw-|%Os9{hlRX~D6`3A- z&=Omhw1*|+5t6JK-oWlDt*U}+qhf|)Rv6zfmK%OD>@%FBe_r3A`%y5&wP>e7SlxQf zCz?i$0Ss|#RUfJ@QE8R;D@(a|xeK|o7569#37J_3bs{Hi?z8nDOlxRSL+$o@5x~>|d&p?nxGm-jg_o zA<{mC7C5{L@DN%{tBx7iq%-Bnn%GP!>W6XoH`Pk?!^z4Lw*3{RHjB9Z9mc@?pK7K0 zMF6BZhcPt2yH3(&be@eYTs+;#HGBp(zE0ec3w4KYkwav$%OH3^v?Kp*DQpT}e!g2x za_YTH$KR0;V?h7S^3USZ!7R?Ia}8rm|9|Vll(a=|nl03C5Y``3@>N)dlJ>5spT1#??!TyUB1_9KM)aR- z3{#21CPu52AOzpLhcT$Xs3}aPgs?6Xzd1se^$lZO|NTu9s)UjK=QM{@62B`W-!r>N z7M~)9`d`=_GLg~S@$>|CX+uP^IMguq{~ZX5n_ysJ^nYhzG>N%XC6O$ug!uuu)(KU@3;`FmhO2~Mx>3Rt;{~I%YZy}oyww_}k~Q3B z#Z(gW1N99+Nf+~@N}0`~oqQNm0R-D7P{}!r z;s14}P%lZo%cF(c1>x=><^y=#G*TstIs9=`VL%poDToOI=9ni^DYy;Tt}#ng!Vi3W z`0LD;1M$M^>o~TyGfU(eM#G*-~8%krcC4d)ixla%gZ1QgG`m_j=(V0Cq@w$a@K ztVcrUzKdkmgz{m87x!K4UCEhkfZ>*1;sp#h{6!NlfE9tUxrPB?OkTU#yJ}pvEyIW^ zUVe$!J}z7NFye}LUE*B{Ntprjg@-|dEeu{QiJ~F0r~$%^KfA=cYVu`jhY@vr-lbm0 z61{CrMDXRPQa~0}LR|9xzyvCl4I?snc`(#VaA-1S zvk9B}KvPC$!d=4%Ro)R4zjWg5u+K_}EUJXq<@bXVsN@_5^fD$9;So0w2xq?kGKosy;e;Lw8zR*4 z3FQAr*>%82RW1GOCcEhyYC;J~5NwpNyXh1qbVz^%$Yx2xLP8Qk%H9njg(eWiLbk=i zQB;b(po03zQ&GU~^I5Q?pkjZD3QwQUir>sBH)l7SO?*Fp?~>V>IdkTod+#}O{%1zG z3=z#bw|W;TYSYwhtP8Sm8G@RZyL-Kh2xLC)R!yQIwd`(VU66%Ih-Ef;RFmk>EYc@? zNsyUTYsW<()#2%N3Uwi{9a-UP5{vS6Qx0Td(gh$jq}KF}dr_0sHk7@Cr)p6xrv$|0rHN8R|OI*rtN+G1w6~cKSwYx(0Qg-0^K);ax z!vO8r*h^y;N3V+75ZM$_7rs(os#_eE7dlUn8VPc!3c)LG?IQd*#|{+{Z7taZ#R+UH`%A^EbaY4N#Sj<%6t4KdpvxB zQHdEoLu$;3E8%3sFTe*z6wfj4*lBMAE&V_X#jJMjv{O)M7Dm{N6oDa`0$rwLv{2F_ z$P^U1<7Ruo=Jv4mxP*{VA(P;L$szEX7zO_rI&@S-NJwF3(Yj0}H$Nx8iuF^S&A^K? z9nKPPWV}C_*KqMCBe(R$#LD&QspPer?WH8;qk8>jU;gwQJ_%w&&EAq<+uV?8t!T*r ziw!+koL{|Q!8Awqs_KPvyIBmg9g{$UOHHZdQNFgRbeT*Zzs0_STHD`Og)t|S6janF zpgUuGFmBfD8JTMw%9^Hi^ZktDlS3YEQ#DIu*@$3d^5CuA+)4SJPO~^ zpCLKkG{_L+iAs%p9nJ;}jCdkqd4xXvf$)6&_j;G!tUIo|Om}|RD`B-^F`@T|F3|p0 zyHlI1`C4<8=Aw`nL+TMs()B-U2jDqj`bv|WH!fJxI#bE7tZQsl$fVot!{9U=d`RJ* zXVOE|(rG%C%pO!*2Le2|-cHZ#slS2mdKM|`Ky>G++v#!2zKPg65b1g89rTQ$k(|AY z9;XCZI2mQi=F?O;ZrS32ckOv_jg3B9f~K(rrO$3XpMYxH%*Gp?1Mwre)d^A5TkigR@j3;E7&wx~(f+y-N~_fmYl$Gk?xUGp(Kwi%(#>H%S5Pu@g{1@G zm`m;xLz#-;L?(cUI{Fcsx$p0YSUV7x8Fs%tl|Al#G7LbO#CHGRFwEM4aLmViTM6D5 zTL)q>`|T4il|C3&)`37w$3F2=>4S)^13{UuK`ZohbH4}K8ErPj&*Bri;ts@MraoXF z561%dJfDUWq&uOK#mxf%raDB=G{XVoL+hI80b{P)@1^7?Z|y*2=Eo24!`y-GvUDI2 zGv`5iBZLA!uc~BbS4jt=FgqV)hvoZZimhWYh~kx{ z9ShLy<2w@xrQy8D{O648WYLQGj z2do`Q_P^c;Wstw2YR?mD!@jlS)&N)wCvbBz`0_yw3vec(y*8^26AJawhzL9h#Aj9r}ZD|K?I0ZRfR~y!9MtSBgOdc8cCx_=I2YI&>pCmV z`8nDD_A@f8zYCTPBu6^wy&ER1OSsmaKyRSwT6P07a9pIB`ID*+0J8jAYR^!#2TMGk zy_QA5fFF@9{=<=sypG*K{yVQ@{i(eWZrc#i`pefb-vATD;VGCy_6;X@yKViir?w=Z zE&pnaC%0eE0%;it1I+1yv2ovUayK>KFg5Y027`JVZ(uG4egN2|A-}IRl#F3I`R+4r zvgc*-KKT6x`rr;0om{embrM!5a6H4m05eRlRI;p=+_Hmqa**g`Dq+^KMNYR)N@Q6L zBa<^2e>`&Ox-hbz*x_h;`#?~8mhgu+* zeA6$Fve}^cEvSgi3E(DT`9Hn_IP(}=>wqlQx90)?_E!t5I?l@@u1C>I1xScpT}t;FCz)8$>v0`(1Is|_O8^4*q{fW z;C|{!6C#76pX8b}PpN)__hY(Payt^X_ftjpMMExWl;(iLu zWN{+Mr{z#kO(jmm^t^V6`zf#{n-dW|W1b4yyHY0tc(y;q{nV2t#Or(|G;KXBq7L|G zPgDH_XdU%QJn$&MRjQu0vnLTH*b-lsuyi0&XV25TtAUxU9SF?%0he;oNsPs3uznfNsb=d$`jAH&@oN9+)Eb(iIgX9tqexTgN(Jf;ikjvTiTU5{I9{ z-s5-09c>`@!d|+t=$lAUM=OXV-)0}n!Ulb6r3FMnIoCMB{4yE1vN zTWiT#V@=PUVYiPM?*C)`%JSK!0(*@)Ywn0)WGm_!N_OF82ze4N`UKYCC0Xt9lSjn+ zi_e%|G^3=gaba7LGGeg*k1b1P)~#L#XWrJ;ju=EHyaY-Il6<@jAgkdrsed<#+y%MT z*0uSqE0>Ju$A0Weyeu7siusisK|SZlNx10$M_I{8GnRQ~c`u}d&C~f{x-Mk}e)^=&I#qJ@yQP1t<5MJ&i z$Kf*S5R;fa*R*b7)9TiFtEJ;wQBSk}?0OuMj6^+2jIV**5i%bykCR%sOnSm!Tq z0Lky(;vX(#!g#(v6Tl)ZTO7nsT7M4aUR-j>?N zZ?tdQRwn`@7rqlzlg)`p$a~)j+SO7gLLVdFg8A~q)?A1^&F=13o~k<9}@B9*EW zfsVV6^J(+efJ_!A;u?QBF6M0knXFDkH5Pmz=4}C)EKUS5-uFQ-nh>+7{V=E|n-dX> zWgiCZU8xfRiibYrgE?^TY)-%%C%AAO`nEVr8I|gR5IT2m4^Czz9*iXVH zy0yZ$xr&{LuK4XI{-_6LDsm#8V)1`zQhOr_%w%;Ug5tja^4woNh!GFW(egF}EAi&}TJOvr|3wx6LBw}>}azcHQ4X0bY`8kF6uXBJ)@Fw(66J&53Xe@2@_d4DOaPCxS1|{L1FUyp`a6u{i;XK^FYR z?|kkbY+SQVxh!=~j8KaQf8ztKCnf|}=zkB&WOX8(!uC5KjXh~X0L4Fg(}a+Tet!hj zWOE`&qV|uVy(@JhEaIPk@Npg3CYuw15EuT*H61-C{6se&)fpB7A+Gw9KmUQ5EKYzv zkWc>PehSQFbt1kY`yB5bGT|zO?{)I#EY2cn74mwSA)f3%XJ@OBz-mjJ2ygi29G^S{ zX0kaE&@k(-pj|CM#WgvbFDq?XW zgrV*jdmQ^DVs#>f;n`#CaqN?b#fcDx5pVvjRsh04n&12zt=OE1VR-#bdpdrR`(zmV zB5%jF_I$&SP~A9aE<;R{X*UM zI*%?DzR2rgt^Go1eP}d%k@GcYHQ_gEri6SRvK=zikJA;qaH23NR2e@W7Nby$!~|!2 za06L=NlIk?l62wj+V!EzxIT+mUAVh;I#fyRvxvooyKA$;{#GlvyS6LrZ?s}_;qKZm zVM=qd%-`%tGCc)Mw-nc28c?&o$&=Fg7{ zcHhWgy?Up57qPf-`^~Obeb~E*)rI?TFX&Yt_AX*^4F-{vaAh2KNbe$67wplgpX@?( z2rY@u9NN3Q&4t@{Z-%S4t#^?!7jEX6BNTI=J#KU1)}A*)Ne>0X$gxOeP(1u22T>Cl zSpr1s!mYhC5z4rrOt`f-Co(9L)rDJodm@$8pqg-N@3-DG;nv=wsGyo`F5KGN7ZtR3 zr7qmsi-}fDL2RLexlPStlVG}6FV1f?Tw6qG&Coo6}A=J6DRKP z0Vi8~2WGOmaDQ)I40JJAo4CJ6+x*w7N;J9mvwHRo?MWx@^o@-Ts?+AeoxW|cK|5RO z!kxY^V!>^~I{e7fa$c%OY%bX8Q{M_Je%~BVRu~i-O#;U3)J(`KCcO}tJSB@4LI^Z+ zn*m-3(r-aUik!F$_`5-&n^%2m#p=X8!9{WKLg;HN7ANiy?u&!hPG3c=PTViN=Zu&| z_o4eXC+;3<&x%=eA4JNWxR+RQR?MRNAYyak&f*bhh2F`)OUPm;ZX+K155$$y{$n2& zgwx{0-NSYN;Zww()Zu<1sKd%gMuJR}s3Q?tC|1chIq0v^c2%NzI_mSND3}IV!Z+&O zx`Sb#gr3xXs5!3D!gv1th^>p;Gw{$3IXZFOz&Q;WwMuhZNl9(F7!YKG>^(nyc3mKWNM-%!XV3M<`B)wEkg%g)}GD}3WW?!Sc=C0LnaZ; zBqcG-1c47Sa*{G|IQ}aGA@#6ggGQP5^d*#G;UuMzYL7EA3THHt+|O!c0i` zW|Rg1QdVkKCdbHu$xH?G(Fh&v)>h7BrE$kQuE_)PFNo2WwVz@+^C3T;%rIY@< zFCV6FH+JdYb_v&?1H}RPR8iJ1k$v>P>Z_lznNk1H@Y?nXw1KUIHx48-E>#i=V1WxK z1u~#w4T8l%Kft0hm%!kZ$)LZlWO6D^8BgB7ROwHQ+v@dXf9qOZbeB3aIr{E~p@3vd z6*#;1KLMN_eCr_>~3)q>@R>DT=cjFVq}31sG7^hd~GTGK)V| zDnBD<;~0U?_>r@)28@X~uA>ORaYE(xPXQ53RhlzW;q0lOWq?vgvJV7QL)N`P5 z)Mr%fSWvt7mZo@8`5C|-DI=u5lX9!^4g=yG$v${R;3oHfMms!4SU34|)?pYwFrK@T zC~`FtS?(|=vkrgq+Ik(iVSpu00CO)E$_IbJZVH=o(+H1zQzWvioGkl-+IW#r^F65P znyGfxL{e=`huI{(SF#$=oZZy1F@?SaJcCB?p82ucC^7*AgM(jHHzNT!EYBodPQmA;!*Ypma4~q64 za>SGMUo+q;`>JRAjJ2-Mu#Y|XbvgPq#ba)Egv9NJvZkLHE;o#ceLc1%HZkVOm}Sv_ zMDLBB6ZIWz=}v^Qrt2ezLS^-;h^X)bH1K<)K1=t3ZmaHsuvf#H!Ulvs8oC$~+uf?2 zrunzVtC5nD@+Toz+;hx?%yDwX@zprVdo%A%hk^sGfC=fsTj3YOOBZH2z@_pP>h4vbb>5 zczdM<0s;|rnB5> z{7ojJ<*uo~G%P_GPi@*ign5=Ti5Qm)H-?)Mc<%x;SzWjl{7M4%Q{d(-F5LV*e@IYG zB`)0V-86*zDR6T(7i{p7<3ob>uGEFQxH&_)p90%tbK$=2j-gzWaX1?{^z{sRLc|On z_HAJVGeE89S$GeRd8|H;It?Z8Zu?4DT)2s=84jzciea#d0tOP8)9S*V+`ETy&jn_( zxNs*I)Um~DU?!^zcXF2wmo(uc;A@!81v|Oop(X{-Kv(K(9TDXCaD_bwfpwR;aBp{D zqGArx6`Kq9b{iAfYM*_I=wTB%SR%;6vvj97k&i&l2;ofpjENE=78h>vjv2vwADGGN z!cE@x5iB4gT7ef!&y8DLxaE67*2^3wH*R&oZZ9~D?LY2n*~CI1)D3|xvAM=FH^8y- zBxNLqG5TaqsS9_5zfV$3eHO8~aBny-nUCIF4Ras+POFClUAP;3f3gTj;TNAKidlF zw|A4YLETX5!VTTawET4txN(~cw{SlMO^e{R^(kl=75QmM1=fSORkH=FHn6G?n)g^i zJ68LF7RkGZq&Sq6n8@cNp(43qVC>Ja$H{Bnf?)%&N<`Sp+B_`9fTi>_PmnF%x+FcT zwm`gZ)C`%dJ)u2pn9mA6XfB3B_qDORVED*z zl&tU;3?gRlq~VYi-mZso8g22T-l1@@^0aa|(O6NLlUXI<<>D$BmTbaHP;f4e!6zk7 zDNB0X3X)jTJgP9gGOMyWBPS=rB&iwn0dJ$iSZPkrDL2a5`Um6-1FEVsE30zM6_Vrt zg}e@V-Zge|8ZP<!&lC=GT_^$5J3YK}w(!g#K~X=7xHQ|lqxVSYhFs?mo*R4Tt+rp;K$3!O>jwSXZEF6WMx-Xn@lTL zN-i924;N0i_%=p=f8eTxlmu;Rgu-Sk(MGQwlx$$N;mXsivN0A8)fOag8_eVs6vddt3LliGuS_d9 zmseG0`IO!Ggu6riQBn~7F*%E+3yzaWyu442FKeDko>|tMoCyOc1L_E5O5Ggv6<3v+ zWvWQ8$gGr0HuQVfP^-NVa`KPTvVpHFfjjyRDa1SaHaUTJ&q!*p0>}iahI|qOC-whW z+#E@+DueK+$bu|pvETde_qTfFMAEhq!yPq7u(Q_Ybq_A>L z{N(7Dgg`n}b*O;Ti;_SzgNBx;Rf->_E=RvWHlb(!O?KktYtn{~$R?(HLME1_*ht#Z zX;&q*#fLoubqUDcIjgU`GbL2BX-&xLA4?2;ER(+1ZmYP`#6!KL&Ns*}m z+Tk)~t~!u;X_f+Ir&Src0PHT4A&R595cYDxYy}bs2ORvBXXLP-Xqen4h278gQataJEyU^0+($lp~cBZjBd1=ts|e~tp# zT%p_K)EsqqqB$9SLAKn5xR$87N;>rp>w?JeD4ByYA{CXzg}|1&xjyF5NSLoj(VT3N z^3R3HmS^YkyUoIsIsOAjkXg5FE`+v>nCIhOBgQFw+dT38u`QeC@w?6XBND3n z^+!BzZ7zhmd^oSy2OhyLjq_oJRgMF^6K&F7A1KZ<&seyY+{$0KH@DxW)^SthD+`pQ79E71-@Xb$_f z(``_&=Eb0}x)4#5Fkf!RB(jzEZ!qgm zn*Tr&WYG@7Zze3@?a&Z&W*UZWWnT+2ld-xGjpJFs`@?<|Y35bi1ewV!cL6wu{Ck0t z&OZqY`7_7Za`-2~>Ow@$yoJhmI)>JOHzq@?;&hi0-!7XAu{>e@VR-41(taX%1XkVuMJ&%#{bB8=iqMy6cM*}T)9OMj&)@;D^cIGhC`iIj1k#aY z^HiP1F2wRE160ExUPx=3cM}1!7y^jpc?nwCEDVFG1B@C!5lG@7^1m`*jvXVWvkadb zwi`^b??J>gA?C4|(im;@-O&r8eu}y-Dn0V8$hOGji02~eAp7_J@It6>euI88L`=8n zE`*3_eOPShzR*JLFAy=Eq4`FWc#URE$jc#idDesfwz^Zm!j#4Ml84ABDO`*L4r8Qr zcOpl8HrKnJR~f1Kss)W{nCm zld-rFoAa+?eh=A?bidWF9Z+Q!(`Pq=b4FXc+5y|7PoCNiC9`&xyAhqU$%=CtwLf%+ z%C8-e$>5KO#f@N{kF3gA>O^K+AQ`Yt$XMNg-2o@EK;0>H;<#B#EPqa@3aA;Veq~fs zA*Zo;E7{zL?C~z;j}L1Wwx-3GNs`GC(X}!+0)5Ub<&P=IKtIe~vvyU6lEp|v+|Pm% z-cAngfWxcIuN^@aw-{kS50-G((;w4B-BR$$r+?rBl7`PW&9>F!@E5ng3S73b0f;=;$_$lta~Wng4G&R z+mXmjrr3?3qidGoO;Uf9Rz%=%i7fnv7^F{^DPu7Mx{36+;a5YjWo7d-QC2sgkjO+E zx=Q@WjsbQv2gpKo2*_M-!}~8}vVF&YB{6P8=$ngW=w_+E< zkA9enw?xR8yDeK-%pqN!*(3gFPA>XQ$UyK-eLm%O(!{ILg#e^IxpF)5GcCzvi%;Tm z7vhnA%@s3L(=yCLR|=vSkDj!KT46VVucrGB68&9Gm>l0s)_Yc*anb?P-O zH>8BdW7ezLu(M5*poQJ6V74-I293;^e83pKWSFus6a|n;{>=&|H=iZcoCGzHtqjya zYL+zrgj|A*cSBagxiKM^k(Aw{Rk#Zen)nkocXJh$Uau>-$kvOCalWctt7xXSX2YmF9qyIb*4m?)gYM^ywaG422RDB zmMawg*T`-fH%}mWW@Wl=Rr{r&aBB)wLcZIq#ACR}M2?yfeg^-7UgV^v(@zR0F^xB6ETIfP zn3Ze77q?%+(N9|kk!#bGfs>#JCDizaJsga~bOGhMkwF*q*oRDxT3bhu{mWYil78t* z97oPcEZNx{ay6w3a#fJ7#1Drl4rWx&f~;>i2LQ$JAN|gzldb8>z!;f<NC+i=O$Y>)+Leso|gXPjdxs$(Wr+DP;eFaaZ*=PuR~Kg$O7fFGWo8d+>}IS zUSu;0P9}}_wT|`c9>pK33e(8hPu2~EHYciXEU2@z*jLRinXZ(~^K~E$dzf40(CRy~ z5fWK8LXcG_4+7j=OcbZQoWL@vPL;@V+k)J^ zZT1TcY5=l9zq7mAUXq?uTe;q{pwQyqHeGwE2@ch^C9>SMAa`$@{Q?Ib0V@e@XQ^#3 zTwPbu++@ivo>{!quitFmOe5E_&n2?lHYbzDIZg2R_zW`kQ<`WzQ#3wkc7Ds^X2m>f z>6}Wxw%K&h$iE|Mza_HVHaV65#4ba>IGCFUHzq z2LWoTJSHUiw&>ibFQZ&hWO@#TCW7gOS-cdbt~bQKW69 z0`V38uEL*bE^{{7@+C8=VmHE}j{CJ`qMzGtQb1->RyX3K%$3SmwJm%v(hrEQ6eIIl zgc|@;#965T6sF5U6a5(aN`c`(W>RHt1Wlc;R3^w$W@Fc)NKyu5(H5ep=2fw<2)r$; zSoDOwPP0TvpxBK#s{5+gI*9$4Nvnl1gV?*4zJh_wR9oB#s|u}V>mV*e&(L?5QRj1R zL|K(q%k4l^9foK(86dNEmb(#j^=LI)>hf1Og?`F1?9DF1j~4e-kQuzn$2R|U9XB~k zy_pEfYFNdVP3*@E3SpMpVV|KaF?V(&LhHpqtqW@u6E4G< z3`=g?O$Nx~HUfT2jb)sz+aSd<=m$%!kfc7)j4TusyAj*u?+U%ltS0cHbG`G z7B@n{3TkEBvgu2$dpkz;1|ul!o?5;xW}OxFw|xDUB~}SGH)6!Jbv%5kmI|;6cdD;bg?3HBeZN?J$E9LN%IeI2{LQP>ZaJTdhSGKTen5OAd8!Y zP_wZOKJ7?LEww*T)h?62?yPP^o*k=)h{=uy9x^wncjoI9YKRembeY;MG$?X-&+^D)5&bDx}4V;X;Mirok~ z`^~P5qj5GiWs>#|nFWF@Tm+ai7&C0k`L&-m$4}}O8DbLBhfG!^s>v3+DK1UnN-l!;6%36He#ZkKJyYATyaLnB25$W`*1^^)fi|w#6|( zAO3#$li|Cd@@c`e(Ggchtd7WsBhAl8-V@nD0d4?Y0|?uMhymgMjW`)`B;t1BIJ04K zbRJ;WY5@`?&mrg5c7g7);=O^&ny>n?H^yl-tPV zOy$*CMo39sCD}P>1L;5;9wGO@rT@d6HLW_kI;}jr!VErd1)rOZ6{aje!c|JWh_jHt zP_&37u7}GKlCxg?mwIx;2Bk@# zOXZ2<&b9HQF;25l#cvoCLBpq@X`p52%EsFUgW@pT$(O*V8qsKiEd z1AG{QNTlBt0AyxSE}U4XlK_N*ow}R{^a3+k-3SEBxgw}0n;T(Z*IfaC;hvi-b0hBS z$14Ey-ZPWUjXZbWt+*aj$f)D)Ph$PG{~5_P3AHVBi|jWDh9 zD|zn%YqGczm-Xb8+)sg-tZoEifu@1vgWAo}^jv?ChHY-dU_n0zk}X#$BZF|3xeQ&rrfm^q^5qCBAYVNj?+nL*Vv{7{%0hr64X9F`?-H5B2d<}OS zGQl}-5!~d>S=<1mQYSVmUV)%3KZtH7fz_6{5k~d>HE>o1?`vQtn;UUc^R@@=YN@*% znC{z752E+1X$3HacW_O6oWf}sa_w4AQe2c1Zq)h?dVb$bdg25i6lp}xH-mFp-H3Eb zaB}zcqz<7?ppJ#x12b9Oh-G>?xF(w$!AqlDQa{<o~)$Yf^lrGT#tkj0!1flGNFT#TwRB68p-BO(VD zHvpH&K97%WG+GaHVPBbyZ2sD{x)G}cwhbii6}Y|;jb)hlmYAQQNo)(c5wP^m3Ll4y z#i6fErU0Rpxe>9HQI3;n(M~2U%hAn1ATvj_xe>B-U3qVaK{vvbVk`WDSu~3dTM0;E zDU(`V&W%W=h6>-%o-sh+3_@T)7UKrNN-u!aW=SdZU7gwcl9?34D{aAw8w(8I8Qg~P zkVt49B<+135(z~`?~BfhIs>WwCP#h-iG(hK)P6M)(cur%iW_(8XXw6!q`hN!#f@h} zD?-Dxw`=D_XnxRKubC8biWuKW8m+T=5TkU>?fltlyhD7ipkgr8d*jx75TW$%+xd$( zFq6fD_@rrf@aH`+lhuQOq@8#0H%DM5iw6-%KlP>wAxHUl2GwNqAjasfJEh*?n*%nA zrQVf#094fV<|y4Jy*UCKX!9VNXysi>I@@|f;JFEd9O?-w+6W^H7Xp|F8evBU3txiF zIfveCj)O!SU=3x&XlMX=kpk5Nz#@`(H_gq_Hxa7`P()!e>Am}d(cNlKj5>GDJ+KlOG%p|Z{s|OK5 z^Y7y$wI{Uz0aDeTy?IM~|8xv5$RnZ${Ushm0{wL#pLGN_!sbEfPwD+Z9Z=>$tk0A8 z^Ql@-nh@7BbRXALuupPjrU>~Ldl1O8ZXbVRXdduk5;z7AB6r^0$Ne3c$?8F<&X@P%%Ojb97X&%_ZorX-T z7jknJH=t+KA?IBOCs}uX-N;6APihf6vwW+hmaodBUfA3SmU(ifzzHIJnyNG z(0!|WE$)T5&&V4`>Jnoj@6q;;?9jZY`3X)N_AA()(hp*0C*b^Ofp%MHJVeiaB`Z?w zL!vO;hUZK*7kB0k*G6`bsbeoM!t1dQ3+Uf)O(BIf8xk}l$?BR7iTV^4Z16^09-o|) zO#fI_)9h%RTQsYsrdkS@B_)xOAGTn~;}X0OQVJJ6D<47{C$+?f_g};EZ6VnNv?O*Sb5&hM%`{V6$;_3jr5Hp1`NYt$AyJc0&H}3@kEFf{tqmc= z--gRLk_{K@7-nW+o>H@RjcLKG8mR=x;IaNcmZ#OtUO9Wl^ya$E!Q=gZlsY*0VxoN9 zl9-grc;?TotGBMNZLD9=+_q?yl2b9exW+nkDrtBN3>ikY<0XN3(5zKtA6}}-%W%9bs%%=&I#a6BlCXlDLDuCY_B~*= zF=M(|C4&=|k#FB=Sw@WSwVcyTBop2TvB@MKFF9m2Tqa$@q!%r!TC-r$dd0jzoU@xb zyDlcn|3|6BL`*h0g&mwk&f#SWX@i?RiNyt16}Dxru1`~%=1+4htTHOAiqjVsS0-N1 z)OGz>zhFT{+S)bEh05y0>&WXkXs#uv;WCPa?j${P@*9@SY-n~=T8)Wbs)w99Kc2W*7c+r7}1b-zEWRE8t@A^#sG2PQx0|D)u<c4l-{mszt5mzwLXYt}hx7bdfyF*$JWws>vwJw#D9tRp+?Hhe?s z8#eqA9;crH+4)Y(h2*1mT1Lc5IwA%?c0`$} z(L6_H9aVCmNXnL@5UczrxfL(F$P;iG#mXe*FRe{)s7N;dS z`ac75J4q^Dc9T53+(>HRGU`dnm~WbwHlt{5p1H-72gRR!zIOIGJ6AA@>Lpy!`tA6{N2FQYnkUO8`l zw$e7MXkmF%rSyCz^HMflKeo(nbL3g(*EN(EC%-^ao`<{iGAVf;Jj(T~&CFZZShs$i zsY%|;VS31czwpKI0@R6u_RohpQE(Xzb)vwdkdtl{9Oq84LG8{_FDMTsu`qjnQJZOA zfumsh{5ENv71X>N&yXdZ_0FJ-LqE(=Le?OHNU7Zi!N}xY}^7|BupRV(5f= zPN2sN^_<}1Ir!v@u(t$7x{kaAe>OqsB)F_0zrkfxBh!;_nbERFY0E3mkiK6D4&I4Q z{Cp^+@MVy*6FXiSNC#Z>^^Bu@=Z5&n33W`@wECcP`3sfS zki>t&1$XDR6 z&&eftIYmn0qW_W^+HX=*e0a>q?2r8uo8psWK4Hxi&YY89m{T+lE0i@C<+e0t7>#pc zJ|nNAk}nRPenlA)HoAX^OC(6VGJ0p!gOSffychnh{xAI?-9=%OVFpyCSx1a}E?m}G z5TV~%({2Tn=qWvf{C0k$3`~bmiV+ie0rmhuJ+O#^O;9)^*NqHlF_lbCeWPsG)wCBQ z-gLb^fn52mG9W_|$)M+`yJ=!%SyK)vd~EFy^2N7GBj8sp48Iyr9H(W=pgO0(v8g72 z!GbL7BL`0_*MMb3qK_rt`D#k1``vz)0Wg-5eKhU;j`neh&@}UVUriZwhrXL8M)uL< z{GMuB44MkBY)P19HkD^rR~c8TFy=0A=cHzew3NPGWn>?9nA^k_3LGua#AyBILh}< z0$7@neKZZef%a}bXgYfxXnNuXrU^hxM))rk43cf~C99f%ykiGdlrK!WbBC{@EP9Sd zHAyI9WLXjUmTAfZO*puS7Y>F_gh!Eym{K$85f492f-Gx-4gi^KeRStd<WVywB7NyCBQzpYS|y(&cyB6pV(2a(%6h$7wa zHb(UUxlBe5s;B3o(lRHS0c>jKk#>s*VWaHK#X99Ec= z4KP=V@AQ=dG7IXqc@Rf>_dC6sgwWBE?@A`A?+4%hGBQ(c_2h!ox_2d$;Aa&>CYi*@ zOsds`@X@#4#oQP{y@ZI-{P&cLv&D@AE$sc%%_JZTlK?ZS#(H;`LH?KMTCLt1Z|A}5qvUw2vIp!pfC6=EQ0a$#^ zizD{M9z=U?Kgk2Iftf5Ggm->+k_TV|Gg&Wb+^h^T9n_(~8@LpXhf?4csH@(y*5s9+;`fgD}hL zy&S(1n91rvT;)@Hxt{_vSv&}&Ot>v*b0r=`PAa$YU68<6Hpcuz)O{XG9Cl`AK@~;R!8cKq(-LhX>(9xBb-1!(;IvfGF|5 z($@l&2YAafvM>n{Me5h0@FJMjbpKj_06_2Lmk#^*QZm!i>OrW{Yya)_lZH5>**{BP z3s?YVLMAo;_dX*FBN2GC`)6OjF^ld21;yeaQ+0R$j#HrH>T+522M6wD>7WM(i2~-qO6_=ojg(K>9 zq~%v-OfRz+1U|j`t9+}Wz=nX5$jwo*a3Uh1&i~Edi2)uFbfWr*AS!C}Z@oGZAyL2n zCYuE5+UPjS8E?!PZ^~L?G6L>kq8Z>h;-I|MgBYp8-+fIo(?bb8OSO3rGFY5TPw6(Mfy|Vbco0l=|DV1lWr$p5z9s>gNws-ng8n5ONg1;_m{6p z0dD~f`3Nr|YKpuedkLn<;=I4?B}x`1A#Uo&H+nS*aZ?S)d`-#_$E*C5i=@pZ9>h&O zf6UjUOk;r8GenGx9C_5{LEO~HH+wZH57=&g)7K;xVDcMFG#n+oG!LYHeACw?I6&3? zi-C(;bu7&VsfBOJV+qqr`n^?gg3wPB9b)(}_DpP8%+ToZQMr*t5w+o$>95t@74}5v zYue8=|I|kG&uy1CPY#;Ci2!EltIJ&MnfH;$APb)zahQDSRGczkN@hrZ|yIGY* z^Uw7_mW?H?$qooV*0iq_7FK*B1?b@XJpdfLw;;$qs_y-SM#CyV)82&E1hU|i6rck< z5hU;Ju1S!6G+lp+YAP3+az6FdltZUse%*uA4V3JoY4fL`X;u3Q&;)lifsFo4)&$wu zXlf%rO@i#BsrEA(eq7G{lt2uhvj`mz&05>_~g&3IqbHxF}!v;!C zO=}X!ub@l}YDg!5r&4c{HfD>dNP2YU2T(fy(`%*lSKMDRfG(jqz zG%BP#vl_tVmBvcnC@j16IORd#2AI64q0}z_^vq4p{#&Uho8N8F_xGDRrKMvLsRZ)! zLl?SQp;K({39gRo6uqeGt$tqcvGWE!{V|6w!AU26P z%t7m{(}}&2<{FV8c}78IACyurf;6uUb09EL{SDmFvxv=$Ak8136@VfciBa#MHTd96 z9^4yoR=e1Xu*`)z2dx;#exr*fU%e=zo{jMWER)=$bI@9DeG)150upnF-odJu1-8WE zMd;;Hy@S>G3(QpFMX==oy~D`d!0hVg2H9Mj7onH2;X&O{<^|{_X$W`V0i2$EW$_}~ z@|AE$SNs>gmT4K?Be{&srvhGpUy@M~4xf;;Inc5!Cl$y{s@03g%gqsvUV^P saq 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

        YP`cV|( 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%0A=}~+M`|)@qNT~uo*i9$sbbz%2KO} zQQifcv9A=@D0E@(5Y208XGN5`a8LNuR{JcRqrq_o0DI~*7Kk-n z+nqeOI1?_|_-^2M8NAgLM3mUmyAUJOdIg*CL^Z*S@Z+Nj7b0e!zk=-^M^wb-Lj25` zSF%OHh!k7xLNv{#SF+vXh>F-;h^_e;YN3;G`&F_-45K*qD0d;YX2DhbP{)@^y4~+W zY|XB#_)P7?WD=PttS-dXoV<$f9(|aM;@-W*1=t!=aJ5VlKZ?=84Mb_pRUun*Y1hHA zJmy*p(hBLM!-d$IKd%njQ~^?7?LutLMceq4@2jA6(%}MZ4S8xCm(+0`TSKt^jN=;K)Zk237vf_MT_etMf>vj7AtGk_wIL-{xBvq~HebuP z+`+4}xd7-wKDahy>sGrE$TH_TaUv8{Cz}hPD`fX|T+$KF#C_3x{bX?=KIQl8xZ*=G zAtGh@^&y$8F2tbReLc4mN=k#_!M{2{ok*JyMK$!BnfqGVF=g z&OuPQ$e$zMfutKxMh>toOUc$|viZctriYVMw=3CRq+;nRO;vW!a%+2@Y_*h>LwYan zn+WO7r@~_si`ph*m9JKo&^1BD(#1N1*6wI(w#(K~G2Q+@%GOXZ4*wrz*|=l627e^K zJNiZ|dPzwasMJAP@X<-GhDVxxkc(9=(=4Wk{Ijd?IEh%_mz?%3W7O0(FS2NwGmKqw zMUIm#Js|TNGJua0(VAMCH5s=mK>Qjk^k`;?8nk3_!pCfbW0mgF3Rkks2E2! zz(bwN%1wP8%cc02lSSA|OC~3<+*lHCgmP!Fay#C*G+CK8hO})0vz<+@fk)a|OiHi4 zdqw$*;u=$#OzD(!$z8y+V46RVJW$=4{y)mLp(#^Y#rJK3fLw)!UvKJqR$xHCadXZ@|7}-SD`ox#~f0Wgn_zIa~06B-qTzs^W z3V39-vl7Lc;-zNmvQAx}Y=}#0@&8fwHj+BYK9sYL9KuI4`34_tBnm#i866aY81`0J z!e=b+E$p-6qo+n0BA2KyjOYm8s@ko*Pw{NnTX5!dALPC5*8!r1hA&vW!#+lzu`)vg zkT@EwEg`k4CMhriJe3p}0bY>F!MNrz=8M!8`JSEE&6lCJQ0mdQCL1cYr#KESE&v z3!!rMP3Rdz#@uYjP#Lp8DvjeYaI<~%Y}P{#{X9`uX z+$FahLS2Ih6=b4G)np^BC2u}qSAQsMGPvLcu9k&1|Zt!>FUe!($8YhvDZ?P|^PVGNuh}L#5 zt+$l)Wp=l%l6oJPX++>DWQ|}(kn0bTfd=zo2o1K}3K|Fqn^}WVpR&ovw+08GnleSM zTgW5Zf3|4l+yQ&a;7Jh;3r1h4q!B$pLPh0<#sd^`|34tUCZGUEk^KYqY{2-Q70_TZ z%4wfO4<0m5yU69MgWyyCcxVuaSBN;u(YNKmEz9Nm-F=-&e;9U z$Z-4j$jV5i+O0k(;w6|7ehJ?lzEJgos#!Hgd9yN0@rj}VkX-v7%2I`6O-h0cTKM(p6YJN;Cm z!&0Ddk?gXIKs8r^T0Jg5X?bCgQv(J{`FE;^ka?0f8?lAw z-OCOPcoF`^`xVi1Wh^d48eTqppJ{Ak!d@XNFr3>+jdG|A)b;!0z!CYO4Ufgp(KOx$& zg&l@LS(vQ`!A*!>d|y&=+zz*1 z(A^V4vB4KCM@tTT4md14=EdW{(B&n(4`L_3gDQtDB4X~?T!^I1>mPyn#C^s}7vd`K z=(lT!ZJ5YoZgVxz?!xZ%9?}EK^8NbmXfkUn-0P*SqidPa9;|W~0xxT~+RxuKSOh;_ z`4_|eM|_CDt>w94yD<^gbclFU7XLehv^gj4rMULkpJQ*1ogeehn6)uU(KpdB;tf$T zkq<^1)gP!YSI0!$8&MYiUihZ)b5(m)rOIC+5!O`2ONx@PA3+?+8Fd4s!g3?>aPp(l zBnrE>jC4J{DI_1;1zAiF2u199)GiVO(VyAoD4-OOSt*Abu!-=!m16o;ask<#OiqG` zkn4^zH$oK)9+PHNT9YvYF(v^u0a@sW*hSA{(u_(=nd!xlfKotarFz^5W<34aFf*#f zjc~@E$9+v^rU?%Ng$wtV)s2Y8!;eer4p0e@Lz(`oGeKr5^|}GnNM<}S%p_XoM(m>Z z3AvR(c)(JK2^a6f>PGnD?@#!t6p(6|ml7#k+=yUY`Q)%FA!_l^lm04UU-z>TYAU?7 zZUio#y*RgO>PE<7=~KQ| z(gjxu$l}EzYVn?@hP4tR70-U!S0xr`J-|vp7Tp`ciW{DmTS*TWSn;BvUnxo!Douq_ z?>s$>N)|W55|=+C@7|C@ARv(syaGyQ!mVyZCf@yw+)D6sK=v(GO2F@W-GECZJ6yx4 zROUwbVXRwP!%`{iAj_}4c#V%QtF3N8Ai{9Na0iEH!Wwq7+b*($F%kM8pC5=2lWeaW z5sCZV!{}#m0}7F3dVEc$rzc{8`U&`2g&VPl*Lmb`5$X=su_#%*MT8%I?UAb#EXkA` zAcxR+c3)!6EXcfm%Qc;YNv5RpHMxHD^aoDkL@z@?;(o8BAN|=tb4&!30r zhSd*nh?0JX&VrlH5A3n~=*JH80&5b>8LJxsieK-Mx*XLnljeR6C1gq7gO_S*Vl6HR4$K&*9OkG-ZZjF>BJfUvk>nB#vS=FodGe$ zjO-)H^(;N*Tqq>v{zEPa4&p?VWhpB$ND^cpN!$KGj}Eg%>n`}GUBneO;Ei~;pZC>C zBFiNqH#u@~=NV*5M|U{6;h**vINV$Saxuj!8ULJ2Ll9u1y+1%MBg^HIHP6wu&Id{K zoIm_|$^KBM77o3ofZozExKEB*nc1k{bH6KoaJ1 zUMvN&3e*ImWz!>BKe2-BBlees|fFwrtk@U*Hs3eonsr?nZNc9b~5nlR|f<#DNLL$p0F>Z1YQgM^lUZKbF zMj^EFRk=`D#{``5LuoA$gmDZ7>eSpr(Q>7fP-@L|?A~ zt%nJ=wTC6g2GfJCzWl5Qk|e@X`t)&2bs zv?wD7NCYxboYevWD7M?zVaDO&8^aQ>2*^16d+e>Ti(+1iX^t5Kp+4tCeaeG)n_;7M znK}wKS}Vif4c`zxO?9WLNcod;y>gP`pNgen-@)aAQKj=?n}z7R&bOr%0v&AG9$!8& z2(p+?5RUiq+tN0R4bc>D8BoeBE{XKG89r|X-DZ_qVcoOn9eaAnZI;E22tDUJe)Tx56Z^gUAtkx}VMDe}yuCGdFdbA(dc%3*; zb0e(ptoNiv0W%pLHv&r;_!__0jX1wc-jmP3K^6rTHzNIhea}y&fXyfAhTCsbt63Rk`E*+ z$!2W7Qgk90>lDNbzVpGbDpADXhjNun>H19n6LzSRl0{#q5W){7E5XlV>i1KLl7&iu zDJ1Hn!>WWp!p%ozDoLvWU*U`_tc1wIcaF-e1Y4eMQg_Y`YBOLL?2ZsIP5RjO?Po@%tEHecR0x+IZ zvQP;Sie%S5X^@gFZ~RoEs~%w`Kq{ z-0BASqO>zTcs^`?zT40fNk(O~s=12=)F(fI_&adi ztfQz3dXhs|T*A>m^-~5l;J-`pcSe!z&#n(A)81*G3*uIQIEq|&=~EU|N{5S9Ej=!j zi{oUR-sG(zNuSZsVatUW&u8`&Bh?BL6Y2HRc2sITCF6J~7o)>8M$p93-5I28wtarn zmX`if{vyIAhrwqxEh{UFzKF1vn#LUM^1PMJjjIA)gw8OyaRu$c&#s-Vf$Nnpa%B1k zLxMVyo8{oTV2(Y4jMBFyk|~$8q>xc_FIJP+dbdTy3<|(_PvgO2CD2s&2Y_=g`<%sk z(qY&-DbAD>9*dLxn@Vo^oLa0H#L!@C>0hv5Yjkih(}NDV;W?SR0ww93EQ4 z)~+G8uk6`imqI2anLPd#vkS{9H@N%fLO2;04su;?`kJazAXM4$HS0*g4)YRq9?Q+b z$#}{um%_-z^-{+L9;0AqsKWimMKEv!+iQn3%2m8DsY&8448~c|)`{~g_+qcr*7S@p3^h}!S zj+$WbXh)E#2{@TN@-5ww<_k#`-^nGxj&v{=+Mpys_L1cNj!McCl5&sBB?)(?pH718 zBk7vsRMKLQg!}Eq86rx&_=E>Ff%0^55-4^sJCq*aCOH&|7~-QP3{U6X_zAh? zH$FBE#e@KppF%TP-3Tu!{GDS5hLGe&K*{aDhpeu`jS!O4zw>)F!6n(;2pXw46|!}! z-3SwT;uOEZHIyU-hNS+%B|Y#zfxp0oq&T9txDg7n<$rMbX4@b3aTEzR6el7;DCei4 zIm_J${FwefetT{xaR~eXaV$h#aHa}3LOtI7AGa7X;RPo)s*5Jr+yL%?Udz1dB@5w< z=-xwcg{bm0zvUEM_G&l6J$9bvHVn>Wa|6JG{CJuLM`Hs%joB>!2n3mZMCES4bbvZ6 z+nKWvKBCo&?1}ghaYp}-P>@-9iyPq{d;b*h7Mzi&lPO4*{JXQd5&Y5pnt%Y&A~;(G zDZ@_z1fPD@+@*EjBme zJ?6d6JNn5tp`$aw-3SEihg9X3*9dxdW)uT?0%{ zy~!~`zLKP%HtuR*8vk!;t0|l7<(nTt=97ZEN;WB6v=jE(+y5;&K`E~}z~L{*Ohm7H z4OINfzlYsrUIc85-;%a;AVn+{{Pd$_p`Q&(4ZJ1oGNBZNtfYu+zfzPeRJssK{rZ+% zrA@)NbhE-PWtkm*NZ65}<1pQS#5KWn`1@l^I868B=qunl{3}td5cKoG$W`jo>f6+X z5#K~y6EO>}!`s8hs}8CfRBGiN%EfRUo@RCcvA+LyPEn1GDEA=nwqq17eX9qtA{R|? zq=y!aP?5($a44<{4?;tdCOR~sxNIJTg0xHw-Qd-pX~6aBL`OzwS&00YHOWEa6|sFO zWXPdMhOl&%?P39)%es!mgRqZnlO!9#RyKGMaJY*i2m$$YBt?v367wMbBP-28QF|d3 z(@M1<_+w|sVnr1qbfo!AkD zG}(I)d-3Iu+)lxnEFOefWdFol7o5rJL1e|QpLpwnGg&+dOwt&l{+TbLgL7Iv@xWQ| zb4YPEPaH7a_H)Q4R(fKADdN9;#t&Yd%@YGm)&FJ7*AeZm%01Dt2HnSAMcF6G`=oAKYmu? zr-{!e-j#SwMsbC?uwxxu6}ozy60|zC^pL#9q8HSuu;8%-%RrF`pcKx_{cl zm5bNv7FAT4@{O`P-ea@r^-|J$vNu^db^+Oq1=1j>5_R|HIbtaz``y*3gNn4qtaQ)iq^|i8F#<5)OW5B75 zJqdxdK*$LQqy<9wUH%>SY)qa!PD_P!Y3mDfb?Yk@mK0jsI+yhJws&?Fw~xyrYxeg~ zRLmnA@nIml;W16)U!uTL+Mbu&l;3P$H;x5#BggLEm>fAy$F#j3>^LWdYrD28Grwv{ zVQG1F>B7#&wyM^J*%m{}&#WnfKQ8L2YqKsY%xP?HNI6NyJl#K^JorTaa|$!*eX@UI z)?9xbx{A8mi`uIli&iZe$KsL6n$)SW6n8auc4sUv88?R<1_25q`4%5~5{)g(AkRJC ze5(CaMSc{SGJa+!7GW)jO2{i{}!9RKQ?YpU|JC9RDa#wFv=hLBrO!&wk= z3m(%T6gxF`$0v?B9$`AOl&4XB5@Y7s~wFQqk}^(tn-*7t$+Qx>RB;~=FD)RCqsj;skd94%BoqP_^i6CQ)`gm*w1fvdwO zC^jo@B_-QSW|JukmM8DXoka>!7ca@rty|ht-&m19o`us>;u- z9zUN%gJVWs3C0`D{0NnGnA~YD>C%TM)Z^-@(oxwE#JQxeI444m6~O> zO{+@B=a35EQ7@o81xGW&As^~-d*E0&fm>2B5-igWGl4W$!U@PyvMA064tvaLPc zg*`PZC$zDWgNAA^uG6$NlHlI-Q{ z?OOS){4uLy@JCrBiiA(epD5=)k4~KF2v;a7$kbWz=V~$!AFD_uK5V2H9$Do~j;^Q2 zxGc}u&{`$0goQNe8~jmTNhLXqaxNs_;^RFMeIAJWfQsww$!J=-a#2O;iXK_Giv-qk z*^jbt7YRqn8W5m(n{33#J7hOJ(pWr2SqYgT6Fz+O&GQ^n71LN0ncil{(u~HuoL0>$ z*}7vC`w&S9L`qhUI+JM9LHN0(2p>~O6Fk&>4jE{*Cr=*5qSnY{$toOm4mpVB{zZ<$ zBjV+-Fh#_}Nh*cnrp;~Ya(h^!6GGB|lyEuR&VG&F&VDNHqS({1Zn&NO9o){I9sMqZ zq#qykOjLbTEJQ(ErT$gDTWyXw8qp8AUS1FH4Np-$uCgjmK?K=+#rKMx3Oxk)AX~CC zQX_00#Pc07(p{wrChZA2?Q2WFnET z2&j80iyzG)6P}LwGL?A%P6wxBi4;5OY=+B=3+6cDq3)r?T0ID*>zl(*=7QI4@gQ>U zjXC^eE;y6bgSfd_b3;n9c@QSoKR0AkD?Nyc`_EizG^Ti9Q*9o=#7T~q!w`~-teNMa z;mb9%by~Rai3ko^e+E-AGV7e>9z@4^<~eBeckx@uB4r+g#+{nyn1#E`5f!m|5GJ>L zK08+$Q4xy=F>-t7JLpZ|5f!m|03ZjpU{{6KTnx4luG0~fw|NjbcX|{%WExSCN>2_H zu_duXrV$mfc>ps zn=)1pLf~E*&HJM-lSrUq@gM;1oH4;9=|ud`3J>7j$R%UwZ~!TMd=%GnCy331V7B+h z1Z|y&DqrbADBJ8ac+d8gBr?C)JcwK)XK+cHWN`>j!zXZ5uEm2uHAOO?mK}1e-@M`+^TGYELE~ z>}!o8?TpODw1GE7T01H)%=lWUj0s9{Q zV~#OQEn5g= z;Me@W+0WvSYpe|n2-Bp!p#Zu2Zk;~L}QWB(po5%U|(zx5G> ze4iEddQ@LjYUJaQR`n?e`JNYXJYr{rKKw24ai^-DfspTU%7>K86+bF&P#D9G63v42 zb0e%?Jm7z&oG!tjA7bY>;VY1>4J9&L8(O@GUOUH1U3>gD`mF~RF>;i))eGn~a*0)5 z%P>W3UIeVYW2LLEk=3%=tAZk?RSwMZB`F=UEjBL#)^1uQYM~#kA3O&nF|uer!q@)0 zN;H22MasMgW?NQ4m&TH~0LA3BSUm`ByRAZ4Yy`DfJP36Av*Ir(R^dU|TY04e6C;gG zF`EZKaMI3V9wz0v<<6F9^6{3o_z?@K^Z-Z>gs?1?Q&9-dQaMs35I@(xnyy*&WZ#8i z?~J3P6c);Z__^0s(oEI zZ5}|)k?U+BTesSS7`fv%3da~qCz}T`a)lRhNei@+onXKhcR?&3K*f>07jY8|#e~qe zM>QdttR4ir9n`|I`;?(KmYlD3jG|M*P%;tdwpKfgOoX<9Oa#Zk89~q{*gObkn~)K* zos}MhuU(uWP8)`hgn+eogroyHVKF+F@!d?h2LWp)9Y0G6&Sdc*U~Pwvw=Ou7)zbh> zU+H-3f-_k>2v`G2V~9mhcQY_4234%WgQ&It)AQ~XoXO@v)Y>n4Zmi%;t35TqRBqti zD>#$QgQzt)C>ujwG&rWhs4FIMKbVe0=0m6laBF02CLO7y-+aeIi7bjBPOSxsuw@Wk zD){-XMG?t&4VX2t@4so2J$ddD9gR^bo2NvP;q*lu+hpTk(AVlg5L=JYkq)7tL@lB9 z#XZ)nFqrJ`NGwYDHbG>uo*eglTuWSB?7gvtF(+egrdh1FMb894+q$SxkZf~xq)L4^ z^cCaV`QZ^s(h{Khvg z!&Qz5xU98oej8Dd3NPT{$lun|?_nr?ZC-@HeZQ8i0Y)TuwHL8)#Z7FbF`^}l*WMgblFf@SxR;wlwr;g|8Zgalp<~KWI@!Dkg1fSXOPbmy*$K9k63Ehvu(vN; zxZ*=GA<%6>Ye*)m7olx8xAN8vB?-Z7KMW@c;cH9VLQ1lE5wNzWEoAE|y$Dg;TS6x) z9SN?J&5NM4=u$3eL8-74Zl%RxnZ=8sw1cHEKyN6eGl!0x@Z}V+RWBmbfRmlq1ZT2( z5t%k_Id9@nbs{p2*12_g$U3cFgs1&Whznk)&5Q7~vsZ*{=V~v))B0ENo)ug%n|CxY zeF~EJ_5h9x=ssUQ-m&8X=_u8UV6~i;Vo8lB48s;d=-U555w;p0L6LGV0NG$vX4eu9 zoz;;%XE8lo3Z|If`0TGQqTLG1{(`<%FT&pTl!=YT2=uji5d?R->@OIy(u}3}k}yU^twVGgW%QF)8h|))c^bFz&SI%siA>^hBRe=(D_~k9{U1Dq{752UD!)$e+_4$#Yj4{Zma#n)!Vv zq6V>!K|klR_3S$lzlAJf^`h7F_Vw&L8Br0N7kr>MUHlgeS?NWG=$eb!XEMS{mP3)J zpceX0+bIfttMH;n zbkjz@HVZDv=0%U_`x`^HZnYOZqFI;l(SImO;1MOeF5!~4Y?9f@Bm&Hod(rLr+a-Mc zg-q;|0%J-{7B4tDp&zp7d&e^14u1P4>Xgxu;9{*_^mE?5i5o3Alf{dk%?H+SqXlQG z@PaRsL{)L41!uB((P3Fz6|$+7-W*{1XBA&$3?&Jjl2fa>q^cUpXy8y0v9v8-bV_ci z=88X1?Zd=9a%En0O1@joHwD3&tX_0VYHGNhhN=#ol2F|ka%&A=U!XYtqEInjr`0=G zHee*&;z+)!mL5pxNbve?Ui4BzbH|Y4T6!5~D9%bRx+-s}<<<+Xsm+V7%HL|a^)z*0 z7~#@2h%ieQFS;tL>Y>i&I^LY^^>WTk9(=LPi>}Ijb=-tLOqm({-bJ|=y_8Y)ya)T% zDPqG~yy&HbI@w~+SCWojEvfLLm-6v?-qn1WMC@^!7rc~YYy)p1GVz>};Kwras}Yr6 z=96Tnea>6p7N|4_p@Op|qZs*k#iAj4X{Mq!dIvolou-(4chB?)epyeI842PW^agV-IH zIYgEnxKpQrn9g{%K%EMbM2ReyNRD3yx;6B7gAf|C?S{)8A}?7&j z%N>|yrwb%OZk!adv0r8{sNARtDv6POB>khG+N%>Jm2UNI7%bm{HH?vcgxt543h4kL z)ac70F%ges2@S*d6vRY=>?3K{6;x6?nh1je&b!hfaxXDS0g)7CWVs|kCWpJa#}fCI zjuvoOwV}N(YaV;k)y(+`9wj3L?38RJT-@5Lne&tXPIlP4^~5o){|vJESknv;)XD{s zcR><*hQYmLgwXPS4m3dy@C;AgM*Z9^fqw42+nAr53N&VNSDNIx*3Q;r=uN8&_ z51)20my+N=aIG*T{ap%xlSC4)qh8h~A*t~?VMx6JK2oW_a7o}Yl#&v4TR(8zzQ$QN&M`Fujeu=q>rnk8wIz8&&QQc8vA-&D2 z$S`_u_J@ca5jp@++QTQpb(}_3g7RKvvEsPmZ;IJrACU#F+h#^s_TZlCl{?t#n)gb7 zr@qYFoL$&yy%Hc@8a+Lm|b*loP-3f zvfPWF$m_az_YTfv@iqd}7hSx22WPT+(GxkpoA<-uOcpPCB6oF%lvLqGC*;X)J`4nx zWb>jEvdA8?b(LOpLf&iV!@y9I&vdv~^823d>QW!J*)!lIn6>~4d@ zT9l8z;w8;Z-92eJMDaH$Rz%X^p=Q~v$-X!2$&sTzrz(*@U&lYbWPfOC@Q+38kImJ1 zb!0KQA0@0Oui&GPe1(EGF^=nxtxt|j-ptuQUZ1Q?zKkrm5%@Nc3-QrR*25#Km2woV zYO{8gHB^KqUwg`b&adcHQ5!iyFsJa6=az>S%%}}OUa4XT&h4Isxu7UHFwG~LiUd}QYTn3gq*%Nld$m-Vi!5Kf+D{&)YKH{da?)g*Ky zJYpBIwp~kBRW#<;G|XKpp0Qsu}!wKf367oARzyZRHo8Yp96x`H1JU;Ua%1Xk1Fcf8VZ4=@2!Qj(>+$k1x#^Z(w{AK)4u2VDz=?Bu zFmchXz3F4*KAP&g>zWp=Xrg@%uwKG>`&S$cA{EF;zciz`Kw8)UA{}GM~|J(Sy@owWa z#x6WgoP5wW!Io^vNIIVMYSR9so012T)+enn4mbP;r-Pq{)4^NdjBqg?IL6cj33pol zLss0^+djI$atLx1Y`5HF={BDY`3?SRe#M*sxejKS*O^|@zXPX@zqqfrVrn_nqOY-a z{-UPUi=A`wg~_$Cu?s&6kBhC0Y}^M!EhV?YMSh=?6*b*y@ium=kpuLPC2X88l|m77 z8#}SrH$QL9{Pyw+cgsrQ4z-;_QttbuRoU z3?lVS^3MIeW5|&Qd(+0S!t_G-LPHxnKuDI4hGXD^r|tjo{@&MhA8C>5z}!e(?r=I%e$O_m|!(o$d-^+YjwGk@0YudI>XeLv6*vobsM> zmrJmsWpm_@!l^~e>Jou)7-Og-s-NIj-^cnt7k9DtE|ZD zbEnN@*8c5H)aL?H@-Q$?A#HdmBv;|(Jjet9TCsamkRqJqPGbkM`@$*<*0x+meg^^O ze%8}Sa!J~>5kWSL-h#ZIoR&3^&bZvOHqW6K;qQfXI9PivX*&af>fqaOu1)5-aGSxKtkVy}bnrUA%au zqo-?4Nqf_XyUB6n+Y8Ax;BptF=zz-}l7aRKk-6}fc?A>pTVHqD7+Wn97Pg1@Osz_O zPd@6(@&$bS1gtyuK^_cvhu)Xc&fcNPKSSjQ$CJI8=6WXh01{R|*?VL0mFU_jO8&p( z%ah03j>6g4kyyFd`d{lc)?CY@mKB!x#BFeL=Z%Ew_}}9L@e|B1n4Oe z8)mr8P^kY@-=e+wqjge%308wGP{w`Py1_>uWH0m)j>&P>J zFtH#1-aA3ggD;0A&zB0NR)2?aAV+(U_}6SEMJpGI-ifJAHv8EKQHRXgB$9e zSa5^uhq$t{4+%FJ{G6*P{Rb0G$=rMhG}~|}#*DfL5Nh`0A+<^@9HLPP$Xq4Fo|U|y zRtXA>X-q}~C348kH-KQYy)VR63E^mGzo=G;#Z@#a0hy^(Ie_@I^)L1c_dNt@=s{pD zmxEU-89>0=TQ9~`2_b7`ha*&?!5gjc0v=)A0fe;O>6cw8(Yvc0KoHx{e%a*|y^(hSVQUqEla8)x0D)@z1G3BM zM3NAiHaOS|ffyz1cJk1HdjOzmieq@i{~+{m=txI$>8bLwi1@O&l)=ekX#tB>mbHmj zC+v>jZ+^k_zVT~gydgtx*UgSw1_dl8Lqxnk5kf~aj@|!(5|_=v=yM)@1jJaeKo-N7 zBn@3uo4+!@pnjDSs+0r7=-Gm!q)JRmOBSW_*5pHoJd=NX2r=!3{&?tu zhNG)KQlhrBp`8{o5tS9lqFA!~BM3(~^qWDFZZ<@1i#}F{%~)tPUacfbR!Q3WF$T8# zO(2Ozk|+O53ExvmE{NZ&gY5!Yl*Gy8;KbHJWXHcSeBW;bu@L1RN-{p_O_c-Gv|&Cy z0jN=skwvkj<`X(E2Cks#--6L_)dKlJBNbH0DoG3fO(p5Mq+^ki^6+)3)(It1vPx3k ze?U@0zYZkPiG2G%g3*vgQ#23`nRBuziId5PFRva#F8IIRRxnx|SMZtt6Nd`5(-3^TGQmLz?OL*2XqB!T(Ui)vjf3+mzPSEC&u)S076R3paC$ttnmGqD$Q1#kXu zFE3V!r|84S#Fes_0$G%VWU}M8?jhvo|MqqQL}NWSW&i)wV|GR#Gb4*4$>IM|h{igU z1W1O3*{+;bHLGAsqm9`~>uzht%*dixIshl>FtrXQM?dTB09`NQx>kLz=<38%-TAaK zm?%^ri$cln&#A6!L6W_@3!dLEl;@YR(Av3LNtCRTwDk)*(|sTbUw}n9t5!PgdD*VI zh*8UXk;qb=0$C+i`m*<$#n;EB^rwuYmD+!RG?Hf}J(tvG{aUWn-e5^iye=_6;e&+w zgoOBe<8#e#nKznErn^ifa0>S#Tr{H?Nhp+7q{DZn|Iarp)i*?R7GF&8g@W+l76Qx-2& z3VRo7GzBtO2@$P7ey3I`pPs|gZ~>XCgrL^4?_;Wju-3!h_woW=?9Pm0Ja`bDPI=Yo z833Fse2Q5G0beFKP;-TPxql@Kd?_D>Ni(f7GlxRL;R0Kv2Ce~M74 z0N*28E?&vpH-Ko`H-3t#65we`$7YWQ?~91)~)_6 zhDz=MgzLWko7ze&FN#(rexp_nAbvONceRxqv|_TBt3bwa_yz#WOSb$TQzb<3)*n!- z#J-Fg;XvkALNxE=2h>(_YHH}Q*9$*4?HfRNZ~DQQDj~pk$H54d=*L#8QjT(aBiQ%T zgK8_WLTXwre&pRZfau@ZPsLOT@xM<#rKkj-JlJ4I*{w4&vr^>%0)o^3CU~io54@-n z|G+aY-vA(l6*o}!B&b!t<8LwDKmZsfpZ`tJ4|}3tdTmd~9HepG+DXvdvk7N0(Su$x$M&j>@A0Z%k;2a2jb_8Ah8GR@8m=|0F?bA94Vea={$DJwbxM0mX^IOHYyWJy$9lfy zkkx1%ZTU~~dzfe&{KL)Ujsx9kW~_CQw4WutUiy7ky6z(K>-Sw4e?Q}gu8hn+>S3;1 zQ(s$1vGQ$`MKMIl0WEpd?X(6UfzLX8-1uL8RdR;za%*W{FR&YH2ZcacYk^Nf0r4e?09RcZQB?~;Sa_YQdvFK?5d;WGW7v_-wWWoDCS zb;qI>Uzcyjs(EETPgzcR=1-A77In5ZEGV3lKX=KR%paNT;*`x0O8tSf|K0^L@$bo2 zdi{>oSuMzw1f^T*43E0YAex)HPRjx_TD)mK9e@B@0*0=q>K@ zbaswdM;77Gt>jj;<5lDlxMXgl1J_A=^K19YT!X zboG+s>-t7qyWLoFZrp8H++5T*Arxi;7Ut!!C)(edx~xw2Gqm2Ipk{tw3z(xw%rTxDTR3cjZQ?l#6(6 zjqqGvc)~M)aM2%g)hfZZFd7$-xk`v1Ez66cQuzQPNDt>pJnlmWmZw=Db21ZNIe?JT zv+^arhLz0`bszR=EFeT>n_TuTI?UOYwAGB+z% zBm$MERSj%enF67JmG zz5zg=DyyU8RS+aQYnl`*h==ggjnmZnIh^Q}ESQvCFv*^`)DEXcU?-cKWmih04Il#b z&1n%PqxwbRlK0BJ0|-LRIZu-JOPkJ<2B(E(%dOl4h(f*VyaLi@u6bsUQ*xz%(t8-z?GqVq$||i3{zhPv3>mY}D6^O4K2f zP4ha6DseKmQZ;b-zE)IXKhv0mmWz7>q=72n`p4HXRjPz$3%*gSWVd6w8jWxubCs3> z*PY*}Rm#y!9Mu%ajH`FR16;p;BRVLiXy2q54mwSj%ELiJtrIQN6PG45LN?ZGO+n+M z05pr&Ptv7AFzC}EmkjM6rak0Uk}8dWvjI7zGgTT~z>i=u90c`yvQtkv1$ZLBK_d!4 zR*rSiLtxMvO6K%TBKKX>n@WC3m4vd!R;6lrejYixx_{_SsU_az?jH(nS(@Xu>U4=_ zB8Bvm`A}dv@|cuNjyxtMljUPl8+rzjcTblf5oCWlm+KrP$;aU!XP1-af1qAtQF)TnmCB>>)kVn4L|6SXGyXGpDN)NS47(;}7<`6TuBONWx@r>(a_vF-jO7%z+2 zj*tdTf$D_W;Go5UIW&=0fvnYo9KFvsh&(z%>VR9s%8fWXQ*FdtC%$eqV`gMgDA}4x zr^ABkVU2P7Do0&`GruM>l1Y`)))*JaDzVZ?n46?m<2FI@prqs0^9>(bwudpl6y5tY z`h~1UtZ)W?owsa{rIhNk&{3m%L%#rO138$-2r#aU(mE}K{f|RWQ2~N+CkYlJ_v02~9>YZUVGg~tC z51j*EpFJthCMBYeC*Ed0W_|@>$Vuw~Q4FPupmx!dh$jYw@eJ$z$p@{Yp}x_1rct^g z-8jJfeFG@uduTZ}7ebZc3o??dsBSY8-DD{Zw!K3qOBvvPSd;~qekex*m(5U)M9MJB z{+%OtA{zI3sA&T<8CU$lJ9w<)C8*^gWn^xpTi%+Q0>?^Mc0o>_%7wE4D%*g_*-)4W zF6TpGBDkCfg^8q$sSLSWv$8gOmEBoipJx}`JA)4~sVnOW3S4!L8mF_!(cZ9N#+u%y z(!#-eN%0tvvk)o?fl>@~PY&*eH)HF#wuJPW+EuxAjyzY+Nmel9}kz2q^b&LD*a4&WS%3xmBGB<2$g`~7Xp=l;1=A;ct;K3QJ?GCA1~jB56Lr7 zJqqqRhQWu2q_!^CUSF4AAZR{#G1RmISw8aEBxov8_L`M&q_-}w-kDP?SYU83c?;T1 zT_d-tsadtM-U-Ve!GwbwBYzYHG(Z_2DZ{WTWhm*KER81LSGT2sqxL3z;$`skzMp&3 zMxM?I&-Z^?5nkLi%O%O64b<_QfEOn@h@Q!L_ST)Phmq)!82cSYP!AQb+QbMA1jNEzyvD@g6wTj zQD*Rb>9m+#a!{??kLcjy`4SdlJ$aWrkXz|TXmDu0lpT{LSKfen{Rk5_E;t4A<;wn# zDnDX`>lR2@9Qovm@eQljj{xC=&D}cZ#S2x9 z{-PM-5c3P-29ceMq~Ry& z*y~4}FAR1NIkrf`YUwBHy~>YJ-}4sJ8~j9#ynaOX-n3Y@-BHDMbcZV2uEGyMUh>mo z39HUK2sUDQ2gF8hKOlD%&+5LxeQBwh%y^WQ&5g)f;YU30-X(&3Z6miI@w^vj%M%z~ z(@H<$d0)?_uLq{7R+86`c-|cQNyl96M?CMfb_r|EpI8#&c~|U`@w}-DS{b+LJcDP2 zAMv~gcF7py=#AWd#Pbf@En|$MH}d!a!Am-K%LnA6H*)(EpwSDlB*imHgGlb3z3hIA zF3#&WL(BDdo^*&+eiJl$_f8qI99@#zZ-hn}4v9mhV4K5T6QU1`lVu;4-ypo`_ALeX zwC%Odcyd}!n_0$7Q3e-v4{788naT0__0aoEju;-&a=#9m&2_4yD9pW~70ydpRr=$A z>vpH4ilXGw>{A*pAj>KZYyhsGouW$TMR&BF9(N!P5`9{1*-38eI?L|FK*C+|e>Q(% zPB%?AZZsS)#ObH&Hp08+aCg3Po+dMg^Qn)P@!N@}IPVz)K?fo3yyUWe2fpYS*vgw(K zJhUSlwn$dVS?`v-@n!vIqoalF7`1UQ`4%MEb08NNnl+nyBOQ|*_NCciA}B$W17|MS z;SrRdyA)fKX%$it8MV0Ad|G5vEaEf_`Z$aBad1lCAo4&3cqVxtPM7TQ6d7}~oCUbT zVam#V{EU5UzxrxxlB@}BMG8M|9ttx$25gZU4Fk2EAF8}2jc0dhcde+lTCzcfsy zE<|u_C}i@8NAeE#^`9AbI*nvbCo*A~lrfL>2^F-QH0BE)7;)|80)=H4tuPLyHFTu3 zCfk=uOR25MeNvB!`-ee79y$I&-!RZ&v{r|dN@>Irh&TaiCkL|m%1#_bD9k&&#^_j~ zFRB8@zJ%7I3UX_*yh^%&y!T*FG8y#+csA7PIN*b`x_{V8U;ikLI>UyINr;Q9ZJq5b zb(iPXH_1S1)^83zl;HmY4;^z=skO8hpa)CQ5?YhODrv9*mf6Hp1*XZ~+#0EiJ)i0V ze(8}g&Gu9{Hu7GTgjJhzV4?xC=Zr{F#>r?W=!(}Z;$*UGSXUOQtd^iqT7M>p+*K{F z_+PG;utFOXh6-0nH#w`%Gh9|1hndw{w~_AWTk8ChH{ha9+28l0&7PBzWx zo=krKyw^ms4z5Wd9XGa31`RT}v_>!W*~6044v%qU4mVC#{FriRg52k&N)6{?3YSai zY!weDmU3v&ntBYCPzEJOjt!peJfhpuI)>c0Tq?$J$r*g&N2b$fVd_+}=rn1>Vi*st zMdqSd1I?q5O;hEGW*1s(?!#>OSO&b;%EHO9&bahI_=P+ukQ zNX~(Sy*;+!Ne7Y|pbpgC*2Pft_F79p;(JgBYGT3*39V4{_P+QENI88cl!o{}NI5;u z_!8u7I|FjIH5knLpuR}=KUN1S?lN%konxx-BT&1if$f~w%>@oDRR%WsE^^5jMYkVO z+J_t1&gqm`JbplID?6v<&$OkTSCpHLFG3;Fo6^k*$m|2|_5+NYY-nVgs8j46VcTys zN?EwQIVBdaA0gcKCbo$>C6;PG;3mMlE)9g?42!i`*dPKh{~>Pi6IC<*!Q1YlGl%z>!j9` z4z9|Ni0jr?*&z^JZ?7K#*3WZE`&M%^;Va0&GvoOYPd#q6Y^Laq+{;I+ebUGL}v~;kywOHZ*4oNSg#*Y(jay; zt>bwd#eSC8ok(o$5*92zk?d+e!laAZ>Bi|qjl6yYNe{Gh#{j-^BX^7PE7z&`Ri*;V z1Jk)*2ttN1DCwc`qJ6LZxd9+4ISNJ1L9Xk2vYa3%M)h6cqFL z5hOii#vka#>qo$J`;0$eu_`~JrH{+I1dt)QKDbq-pK3Ef<_BwpLD3z{z=ei?`-*IK9Qt}&?vD;mZWlAX7hZK75)j(sHsRc znyQhVp9^yP$3vs1isaF$8*xvT$3G4loiRtY6ESn;&4a-)R2%Q*QmeIoNs#9bQyfEUpDp{hZz29DA)g_-vyuR z&mqNXPTZ?;-8%}0*t~u~Wh$?S<*#8NYps+viEl3K1-LGR(@V-uh3;#B%s!q~e#B?K zD#6{!S>QlIG!`H;7Ox+{nRXvM1DwT0!4;ZbfXrAb{1*Ys4j-5uSja&i+|Zmimm@6Q z{?v|^*TWBN_z{&kqYoZoMV#BTP5+n$2#o)Z2_aXDnLq}z``%sVcY zCgg@UA|O}7qO)m-uo=Jg{ybN33I5QT^4!O-&L%JG3}KY}y$HIhA=HXL^6 z^&=Q_MGd^BxF3L({?-U~W-Fgm1ZEznf!7qUkkmS10-WIqKpf_oM+D}A zdRVk_76)}yXjvTc7t8HO_~k%7%ra-m;aSzyQRX-K zW|Xa7HpHdenKD25%jBKO(`;|s*4r{@(dlGO(dnZJ64bZaAMcinPJeE?&Xi+()z~c; zown-tL4B*^I@5NYBkrFhd;7U#Or8L)qB<^@CZX%tPIg@`K|UJl)P~~ra9~z`{{%27 zedu!dJg^_(b5{T;9sZpcJl;TNJe2{AQJ;B*G&#(ZPaR6^n=SAFS$;4A7_z?j3V0hS z{jkF2TAqCQrBNNg2=;qdz~@2XiKUx2fC24kSF(Q4#SY9)bkzy{C}gHvMF1n(w_FLI zZ|Fz&Fv-m^N9o1>WLHKRNI(if%wc%r5c>@^9UUrqrZq!Au;Q<^m)2%9iq3nmRlCs0& ziKUx2fU)eft&$@bY`|g@E{Z%C`ccSyeumSR6f530YF2C7>5yweZ8j*+yp7%9GBZzr zRT03D_mQn^a@mhg4L1#j0GUq|2EWH{V-v-Aa)m`Hy}=bSpD2ulU$PB8XKc3zIgv6Dd$UYc9d8bnvA_#CqT7!nDtSCHbn^r- z^j_B~_5&psqV*H5#1Ozp{1ct*sgnDNd`l=~rdw421M`_(?5R36-Mj&e(_hpT?k7Jh zhkhX=Y(U9;elTqRc2{_Q;77W4((>@{T}1$+_|9&T$4)a%YIuOm`$+_zZ7QCeyeM{q z?m7C$9l#j>zq`Zp6I(Y=07L%g_k`yMjy%v4Wm?_%i85~hga0@5h<3BnLpE9-e#oXO zfLMSZdL#%%uxBB*Zr%Vu1C)np->cwDxI5UKNY<^9Y_L{i5z!oajGlEY?1q8N4atxK zat%`uGL5C~(z3+xGq?kY6-e#{^Rlf0243my4|_GyA3({hcTWI;1FL!ke}Dth8Stk} zP#DOJ#T`J@z=2-6(v!y+L$gXhLI#FPQuYRJ7CVhRYQ_j;)(cxpb@7_s+ma{Rj@Wu3 zaPw4BV^X|zk9Dr)e-OCIgTT#YP%HH5gj$+7XsP)pKx$7hy=7Ww8e{ysu^l`?4}vG? z8~u#{HTXmqzZG0TN8`G76b?332XL9!LL@jt!=MHbgv^(-yiv^}$V@YD0OLK+6A5D7 zoXrKxtFW6Qg3Q<|0vPidcY`#J0~;VI2C&hMzPdL?=GJC$AC}^1^!Uy+a>oslMb&kF zuJYW8T?3iP@B}d6^UoWk@tn;$B^y?Y;n$qZ#>u>E4Ei{4l*V$lQ_|QIz`)Pe8^gU( zwtSkWL^Dtzv);S`4F3H4Mk!luADS{w!&bo4Bvl6>0Hk~bOU8nI;3Ih2AJW(x!1&O> zP2m}ZJgtyuCcGe1?8C@R}isO%+ z*c*@;nP-7_AHnI^{2QX+g=GO4@$qgCJP%t9K<_%yN zYtyaa*>oXLCm)ja%C9w92~K8g6#)!veRyklHremt@4AXDy!yvb*Oc4B(*kTRc&sC5 zlapC*?f?Y8$e(TtPs=Ixh7qvO)V)D2+VIO%R1(PCBoGrrlMEs^ecWLsw_G8e&hJ^; zZ(jJztrEb$+|>b$jskVMMEU+;=72prd&T@oT#&U0*%%=ilX68-dsbIg; z%s=A&!pYpG7&lA31V-7lNgBcjNE_wYBWItJ8LuaR0kr*_!qdoPQ*WHMOYWO-2QY{R zT`I3gu2RIk#>uR=$^Zt^nl6zhs+H6{%S=iBEPDeOOnc^%@GFx29^TlC=FH(6`>Fs0 z)Zn3%tB5XyhjLn%l%nd|5yQ6LfD^jjwHa)C{iV_f{!*a*1B5Z!Xo1Y969RA0KU?8s zzuTO)^D+rQOai@Aj(l>v<3&E6a_t1fyjU(*|qS#RC|M)bh6%6fuY)fIhKfy~&d0~q7e^@krx zHW@K2=?!4iZ+Smk8-oiCJww#DM>Q0&kU(Z#RRk~y_+&rZAILmm^;A4uJ$C?Offnudp8Ob|w|lMYyH_MitUUI4Hsq zfKBi}=qwL`k9JsN$r%tJoS3a{jh&rOL4B!_EDnxPJdY1-`~VKjgv9ac^@EyU%CX!WB+JaO{K3C|IU|1n=BLnV3_Ef{f%Ay3aO4Otf6_v+D4TKa? zPB`r0jKnrWSv-L(h;ow8n5bMXs&-FU6x{NVa3fMHa5N}nm8iXYs8%j6>dd=TqVm9( zjP7E=;wXxfRic{jqN1E!)Q2Ey8Z!z&3SodQIi{u9N+b)SIGJ?L?H)l^R7g|cPIYjx zckGo0ohOTh)ki)g6=hh>uvnRlyCG35Z;g+E8${-Ck<0IvMZ(Y=Q|wMi`hp%NWzb10y`z$WE>fW$iw!NXjX;H2~ z7Ugm>lY8WWbtyZ0y6{~*Df}*8>TxtQu54M_wyYzij%RcY|`4@l1%P9w>2Fr3a>@D z%Z%htldn#8LBMD&I5{3kTApOK?zNU$ey|Wre&QPdcNqiO5!-1+;d1jg;N+NY`oy#q z0!Bxn^h_$iT`n}}^?PVV;cIkRaj!szWPhf~9YD{^!N0<~t$)9~CWaRbdz8b#5B69o zWcE4s1OO^SUf3_Mp2BR3TUyP=gQWpP$ejIV`;z5<_Ko4}b;!$PVWJAX=q&I-rnkR(b;E{u~7hx}L z_)SmAOvj1J1?J=Ef(KZ43K?=F-$QN^ksA z31rq=MF8PAKR%)C?HOBMI4Fr@<7`0YmIOo&*|i;}qW(!`Z_jvLG&!QCOCU2|PXNI< zcReYaQ;{8xPpZ0f$>wwi5S;^E^1c13Y3d0eK?I>WjvyMy55X}RY;~s@D3JL~0)hu*uz=t`l(FcQHY;gABAMjv_Nk4*8$eu7>b1(; z;^G93v*${!Eh2q7uT|!jvE|U5go4@%na?eveGXl#7@GZ_t=Tuz-hj-f6%jvY zUZ+f}EH+>DE@sOxDE!Rf2kyXfU|V;cG?qItsMuIadIA6e0^2fx5L4S5KwuEqb`Uw*DUIN65N646tccwtOr)L1imC&M7rOdS;XVH; z>Fy06g6Ok9iPMRJ4vK$NYs$!cIsrvQ7G5t#Ebw>r`-HDNfy}29z(Zgu7O~jz`-Zfs z(K~X{I%Astfy^fuAw|DlFHSJ_Pfvqs*nrIYM_5tCPVsg+1+^;!2rasIXV`l~qd~c0 z--t3LAPvZ@H*WypMOKIgZBYHL{%mq17&!4g|nV(DQwT*!AR#Q@n_0QHN zmM<*VS*9eue}Z#KSDMBeUx1Zgy5R{!oxz~@>l0_`KGkj4x#HetOFwTAJuuDBDW3zj z*>&1g4{$oJtxn)^1Ir_ERf~N3IgItc|P{dTAfCIZtUitOSzA5 z%pYx~$l$1FcMuUs>;JBNE@ifuT_XtTwZAK$OU4Ev5cQ%!A$uO=OgUnP`~83 zl0ar`RY8OzUGuyI5OHx3F_iQM5sma&WN#79LEf9<9IOZ;AZg(tWx>M+;fmfHkeQP1 zAYzjIhaxNqpx9_8QLwU}Ai|PB`a3%wDUOYk8Jj1FD5ZZM z4$m7COZ|izHYH`IJBX+y=Sva2#ZuA}1mF_c`jWiD0ZTJ&)bC}1%#`#78C;1T%-T8f zQntY14-pk1fC5xj<+pWp5YS7c=ty`D**IfZ)f+_2(!derj$sbATxZ1AMj`V#MA*{( z_bGEI|4tpGf>jkVpF>10S@$VcWxoS#OFi`pna?4DmumMZbI5*&on-dr>Rp=NAAX1#fXh+=BLKhlykU95&Jm#2%Z4kD20$oAQnLCJxrhh*Wo;S+I zoY>;nIGOe42_mTJ{0GC9q`&8@H#E$hk(&i%#^w$puIYvcBYG2HaqJ0*P|_1bXw$LC z-g3hzH<1m<+>(fHn*WzbOVT9Pnz7~aB-_QIv;z`K9a;=aI=NHG9YjADI3Y(p6X5`$KH`_ z(bbW8JV5{;k@4^1`G_c5b1#%Ph|r?T-aV12dKV5(Dblby1GgymK?eak z1d6gF=T9ErkVaO#he&Qda}HW}lD+wa+aJh$N&rNpy!o*@Aedecb8>xw5@?jw8!Mo z$xkcGjZ;(78$@u>wx`A3AeO*#psST+WTs?A5Wzv8Kdm@Apf?O@(&_{nHXw6L0ys!{ zEA2>uQY?|%4<;y2_)hYh2>a)YVowm^Lbp95+7|nd+%?N;@jZ|`h;X4Fo)KsA6x6N^ zB3!8WS!J^=D;YlErA!Gb$=77wAi{<2em2s!G+&R#NO`=}d36vGLrKp`S=FN0Shlqo z*T!7}wc>P(p{m;zx)vzm_LR=gOR-r;+v-z3X64x+vo|E$CeydKq!r6m;fmv(@k1eR z&j;qG%^~wvbGy0J>@p8E{cL*AbkH39R%pA$X2|Rk(;VFL+bJU-(9%*VIA3bMMs)$A9>de`Gg-JS6=}w9wK{|Z!R!D z$WraLJ=&ROvHUgRlQ>A=6&JUE*_9neovxO6w?NYxauHtY$PI9rx{`8~6&25#FO|CU zOJ)mIz%q_U{#d`VW`1*LYtI7L;*2lJms>i9>obm#q^t1y6&VNDkr`h^G700#_uG8zTade^ys)>^m7P7;@)ss4{NtRadUwlG zUx#z7=ral%aPe_AodpPn( zL08)oYOXfqYY2Dh{rDeVKt%a4Xy}sPex|+PQ#o6hPl9FYcGcq5EY}2*2 zac)`X0!M2}XZpkBDrf`uPa9m!`)N~BV_BCrEuAGNFAK|_-Rf&BF6dagv^Y0io}2KG zg_R3C3d$PWYgQJdKS&0y?l_YiwXRFkr{7PGqaj};Z(X>V=TR@K$zHQ0uWg2>Y)S9Z z^2WmQ%A)qZ?jbC#z3^jqv!l6Su2h@X-9F@bk_-ZLe~K$>{Iz{++FBdRS1lUy6yz-5d;$3w=V%uj^uGBhV>cNJPh92z zr3nwG$b1LMzPh7lB5ooF#kI#liR?)1V`=C3R9lgw%y$sRId$u6cm@ z%*vx@HASfcSta$eNU00LQfm_xsgO1;2NvlJ_=hPFnFR#0O6uOk2wmrgrJiZ=VJ#s@ z+6kH1psqM9GeJ?v1OVVzH5o)IWYTQmB42IjKb@jg!LswH+~bb*gULr0Um6O)6Wx%+ z5#8ycT!E~TJI<<+3%IVic*i4f_ztUY@KicjCjxr2SXy2XoIlB~A%oyZGMT=u7x zj9&y9F@BTCXLm?=HxzPhvvx^?nON}H!9A82Mn@~YH-#*SRa!H#dv{6W;E|ZFJZi;K zV@`3m-7|k?;T-xjD0<4CK?;R~cP{*oBGciS1baECgIe7W`VsAUte@uHQYyLcwTsNB zMe>ndb6bWYaIu$Vy7<53ZOKmCKW%-sGm;*LIyz=ZtGNKuYHqbmPJEpL7oSgPOh}9m z#V;^_Wxm0D0RR^-Go5XG+Sp)B2A5|gq=CL&U#R;)cd2fC+!6S?opFZA9YSC1=pO(k z@yJ(QR_W0cQVV^^69(NGoj?kmx4vfuH8APmO-w$DT zU~C?55P^=b{eZa=m_H;oPgM|5j|?V@usyj8GdF|-lWLZzcO?%;R0LN*?-#!ko{`wSyMu^heB+hyjKt>g1_8uK zCchfKE0G7+&=J<9WH!p`AmSCTc~y1y$FPhyh&aX1fk#={&=949Jc}T6dm>D6(QDFp z_0J~{QM!YOQVhJt>J^8>p$ZCAEldu-dx8K`B)`4JN+>H_VT^`~i)Y+f9z;Z<=XD8A z3PDg!UPqz*=mJx{ypm6`yMqWveE9W9{Z2lr${?Z3 zY(CHQj%fo#qF;na^f1FihD!a95Q(0dKv9Lcaj&s;S#=0KyWQvdgutXjfL@7rJ%?U- zLx@B?dah3nOxBF`L12=79>J1IYM~G!5A9=pa$xcV&DwzeR5#(1kEZ!2qpw+ zgUHR#Ut--k&X>%BcqeG@4k3zg>bMwUD?^AHyl$KiN{zz^$O)u*Lx>WDArB(@@xDinGggCtaOyYJsK{Iyb{CC4RCa1{$!sJPlenw(O%*}mOpPH1kMdijxp@&5CY|P9pmxt6DaBpAu#Uu zW8u#TJjKFMeC1B0WclSDLR8%H>N zNBXG@ArkK3SK-A?Y~8#egu#vY`j6PHI%EZ&^5=?>fRjU~PvSFRlt97;f2j669NwJ!{N<^nq3NC79J40xTT) z>v!Q>1s1$9oE{Y+M7^bbFHPKV%8mt#p*XG+>M~oatVZkkSmYRs8)L;})Bj8_S?)<0 zn$oUcVA-Bh3YCPv)a6Y2km~R}8aZC6|#!G!8b`%aL*(D_=0{2fQX}fmgxuojajU&kWH*Z`>7Ltuq zN$KytA^IW1$e-5qjUl=<(h&V16IsyJmyx-h268HwEq1mn>Tnm7ih(=JH6#_<=&mMD zV$*GrO?%x1#8*UXdAJSjaUYFJYF6kZ{51F zdT3=`X>sGC+LrqHE$$Y3&)TvQU+l;fR>w)TF+b)Jb+b`}Ls<)2D zp!<1eRL)T7Bf`+r^{E%!|ORMWpJYz6`@`xN(q)ymI}+QpHk?%5c0QoK@@8abW@)KO9vWT?6E?SON z;1zzHQ?e|l)zj72(Y$2H22z3(aWQFwi}_5}Q|B*GiG0Xt5&~K#tK}@rim2L1@=jOZ znPee8Oh&1Xg#h(RN@vB?53#K;&Wg~Fes`h>m%lreAwah(`n`0P6h%LpvQR66S61+a5bU~f zc1-;c-+Ii>cDTymY4lYqT*uaiA_+&PpVsG2%)eSE%FIaY6TXhIQvU!U| zk3j5x05MCh2OeA$u^_tx65+62OgQok4=N?|RU^P;$+wGrbcM>fTzsvm#H%S6kQrBH zXgY8$UgD#RJ!KGAVs0txUcK>J}Bt#5bK9+{w5a49t zWx^278wLQ1efQj+1Twh<>JnaXrca5GIJ2M#x%RfCWIl4gF}}$>)D)Y?8v=Z+V$OSa zgE_xlxh}9uP%KquB@H2NRogz&3tFy#s+X2Xo>?qD(UfHQ4gc#Y))``BjjpNEL$uoi4P`LC47*uIbmY_zWAk3A7Z0={iq&8Ry$jr9B5Jq!< zaK}^$1Grrkf=V?(k z6-N=yPdSA!f?HZ8PAT+F(`;zD?D8Q{UkGEkcUOrj;c2FbwX-_}VOy{)^RktU1e~Dq(2$b#J6fQSZ%y@QVY3vpLH}lSSDMxkDI_y?eP@CALV{s03uL62@cOri&^; zb>(RHCM7d2UkKx|ho;9=2?MaR3PqJrN|f(C6}gfivz1wYeBvX+ZSl5rW38dn*YG8kgC=O>j~ zS6MDfye45F{vq>=rVrpVpJ*7Nw}T66dhx&+qnVE}-x1t_7tyDObkuk@X+z^b9f zX)etSmap$?&ZtN}?B_nloQN&-}2GzB?XB}uBI2=WymiDJDo>IE!1t}H0pH9{v&R!Le} z50V=Cm-Eq?SE+S^G#KzY(n_Lam83G*YP(ihd(UAc}LhbuZiT}NrfQnDx( zDq-NNiyWBPI+&C;z*IE$UnqA$-f4&!HccOpjvki^L+*5vq5Kvlld z>T83Etl$b(uU0F_lGSO&(j0c8Sh9OHHNP7qb^Z)So71M2#6EHwNsO$Lw5^Q}wVV&t z-mV@hE6t&i#K@u~I#eK&eIK+BBGw(4qA_TU*q-8gvP9-H1Vc!TlZ#^;T9^C+14nE4g+U(Gi{(CHGBlvrY3 zo^Ypmof2?zCSH};W}AQkFN`=rVCuVgo8>mhD-kEOukwjRL{SNyl}Z^l0we_Q;@w z;jufn)d$nt+Z(dj{IfdK z%&)Q_#L(al$9E1QUme{rWaRKEtn=QP zZL1ggDr#Nx`g+_2T^?uQthTn{1!VlWokvMoR_6%f8Vmn-No)HMeY~BVj(uzeN_xAy zHm{>Qzrj9B2=8QENPZs&!+vIL=M>Vpdt;hDqn^y21iII;?!sKc@wkjyk~p!GAK6?L zZX*QgGHN0Pv@Tw}($Ukkrlh?oV+9#K0mi$WoDUbXmo_Cw3B(zG9oHG}S|v3%%#~KQ zbmZptE}h-d)R$l6=xffrkckZcDCO0+Nu6tb1=;g5tH~i|!jf?yxsvQVyE9|@GR6@$ zns7vRcy{EEi;F9Z-3>Wi?ndYE$xNrouj5USMUKOGxt{yRuSttfd5bkjoq&J5$^OWE zZA03~;dUlBtY+8ThOX6~RW+`>m6^-QDS-?N%9L#^{8+Ze*VbC+c9u6}t{^KwX$#Z<2S;gv;yXs&Q~f`X|60`RzHK>AGC94mfo# z@(9XtlJ?1PvpCp@!)6v{ZFmkDIvGanf_ro5Dqly}tlo}=HF?VxxJx?b%x<3Bx~65= zFmf;p#JtDEgxkzsyU6ER7JbMtVck^Yw35vf2esxpW5zt<$2E@1O%GM{8b5U#%>rb>t){Qe5HO1U)g zg+?VH^La%K;gTyORHDc3v|KrIZXDkpgcR<*GNwuhDLi{igi17_N)+LWN(d@kza>H? zifGqz@$!(;9)uOXwI$}$iAciIt0GjQXKtei=YE_$h$X!1stA?nK26KTtL6CiAezv; zHKvsiK)7*hgi18mY!u-fE#N&FR26^ zaBCBj(Q7z)T2 z+-w3_+>sLhwRB704U*`Ve*SgJmY%UtK#o=tC95QDzm7`k0!cLagX>Qbl5#N$ua!i} zDoGdpiAw4ON$A`nqppvTlplR`l&q4p>Uxk=*WUq>zPa8vF6>E!l${V3RjUKuFHTko zDcR}k2Uk%$2%&D7<2w~&QysLkVGB1_unW=f8Rk;KR8IzP|Io+a5JZ3F`#Pu&F9Y}mU@$ST%6SwF- zOzcZ+O7tYnOPpiH2+n>QH_OJL2uf#uP%L6FH9oBT~$MM(1UmU+W={Ca_+cN9H_-e!B`m^H~#7~JI zXPc{gIeut-y!kuxC;EE~XXytU-cS0-{HpnB{S)Q~%)8AyEZ+i@q60AQi_PbmCmL=x zXIR&pt@`7ppDeGKKDD-5{so}Y=S>gkn@mB|PW>&mTMaLnHg7QXBpo%?n#xQwOm@>K zy}^`X{LT2eeyzb}dg9-N~+@5fC!g|{|39Tt#ro5MO*lJFBEM;%XO(|Pa z`cfKGDr`eiic&VXQqHngr3|udwT?~ECm&D#Ao)o06Up}^ZA-o-`Ksi#*4vZTB{wB| zlIJAnCZC-=IN4ym&-RtRd1+3K1c4^}cbZ`g{@pjXq(0m3US%AIgoZrd+(yY>-?XsQ zI2H+Y<#qWrjrqQr|UO#T_#j6qYV@&#g0>C}GCTHO=!2Yoy-!hM$p8TUpuAH@CPs zySvEn6A~Ib*Ho_Vn(5AU=NW!DZ39r6db>(o&NW3#Tm^>jsE}f3QJ%A}Y<_c%;WH#O z6)xygY0NYH7YPmX*0g84vu7@Cb{YOf3FW10+U<4Si>29yBS>g2o7LQ1KC`ag zXE%O*V!}FAdC-CCDTVvQyTXfa-wdI$0N`+3tgBy_2vbe2aZcAx%i@nzH01{S(otTE* zNNDIQ?pj-$Gpo5^fpITo$?x>p9i6?kjv@o0EK*N%>Eg9*^Ll-Tok(a}Smf!PIjhHB zDjBY)GD;S-H}-Vd7Z)`euBI~Fy=~JP=2XsXubi)&LMe0dRxO*oAg{~aZOCQ>r@MSM zEcVvA4ChgTv%EKZS!2U0PqV(Byq74=JoEDu!~c`^9q>(8+vCk_GfNpA(3Vyl3_9GUbD@ z@PN}GAIwwswm0XPOY^NAjiM~F2MWfgVuhCWEJI&zb9-)AyYOA|p?q+r(%6%g-j!0) zR<9LJCx6HXwSvQBfdVj{B;|_1bir-pM#W&g;C=GDVlZZWGh%6K&T6YqD$^$96bX)y zxyr%x2|~I+nsO_(sd=XEyrNp+CFD}&U~JNUS|NQP)s$XsX)4wV^)y3QSzxK}NNTFr z3jawnw3aecV^4RltwOYbJgXd>9a&kO)Y+j)=_(V^Dx4=|;YZ{b<)B&Bm}1T>>g%gZ zFSLkekOI|UW%5i!)=B%V37w8Mt3f~|i^!oe-X*l87*UuPZAB{i31mYK7K*V2r>iUy;m zA+=H8E&PgnIDTLjnJ{4>GMg^3x&~{$ttqELUzRQyrqB)f)`qOqzLe5I;bxjqTheLP z8g0OKRJj1=pya4hVGZg3X5V?4~Y# zZF0R${9mlv+|Xbu>+8{E*5ruon9C4FRvCqjybIr)yAUU+N_e4eDQs>PI_@- zcTSd}Gq+VtS7)=Oy`#0>)NkoEi|OiY))||Py#p_D zTA1wW=DNmqrdLdtYiCYdL3(j}mL+2&Bfb(rI1lmSD=?!iv7)B2yQQm5*C4)}LYVUl zifWsa4e3qd-!P-TrJ=Snr7x!@lM(-j8LiC;xrOz~x|GapG2OuGx>70`liARb)i1Up zL_@Q+q(zgJq8lg||4yrHEbQ&qY8r~u6D;CRinXRFx2ZSZoUP3l7toAWOHXotq19Yw z5!2aIS6JUtT%9{mY$*{JAw)-;t)@F=tv08uSNs9Zs42+Isj6rn>}V4kF@qzy5SL&^ zouRWbsj{f3ePeUBgnoYNb!B~)B5Rk)sFO$$q@}XGt#(k?XwzB6e_=*bxizJwJ+Z5= zI73{88TA7Vb$U&0ilr+@Oy_SyeR7_mqj#;gwOyQv5bXmX$!#yrZ5_-OFQOURgytHn zHKif5Li`bCY-}v3WOHva&l8E2_nbn9=BYZ5JnCMr)=nF}pjl zH6g!P{2gXA)c1AUY?UombA?2P86CMycT!<(mZq~q{0(NbWS41-ota(QYK{17TBUCw zV{Lj_bzpjLo%l=DDRN4!pQx6A6O|pH=-E)qj(3nhkRbt28zM| z6s8HDLB(Lwv$TJ)#5#BHg~Y zEyHNZ61B(b7C^AIe8d*+Z1>wETCy;ExJ3HXM;u1em7n%_@y*9#%!Pd9X&p^h3Wu%p zU9u#$mY`;ROL}408b5{@32jtj9A5PKn9I2caJ>avhS5sJ z>hNNjkF1NW<&kxvoyt+im@GrnloF>GN%TF>xAQ6P=h|U3PPyCZHPxu0yKgPGp}Tb$ z%u}}S9g`xoL9y-iqKLi=`oZmbX15HZ70TOty_n?l63#No9W>E8jCLsT`^F>*O;7gh z8zG54^y&PVVbaIP5t6|8Wc$4%6tR{3y&uDirThKZI*bMCi3^nPP5%4 z&4F5>_L0TMQVcQRM(-l-Y&S`>If7jKOprQnwT~%vo&_y^Yah)rf6Cb~h$G6`rs0`T zD{E+ErUN1Ha7vx&doh}3yXl(&wQd_4gJs6y=>Qgf8J8sYtE?~bWY>OR8lDEVx-a8s z1_Mb+ezeTlY?dTeFkxZ^6N{8(ih8+Kwk2p+;KR~aBqzi_f}i@y!gxUzIW;j;15bxn zN#MZ`H08p{iU+JAu19xRJ>Yd0Jfw|&bmwG`dgI&m06ZNwUL{6Mz5Ssi`@xY%NLmH9 zSbvz<>`|DuJZQaI(tMT3{hS&9kadD*w@!&q_R&6N8}QLS#ccBQ{{Bhi9}ii30HqL6 zQZ>}c50AVm)4IOO&z$U0#I1Q4Ur4VK0H*!hLDV66WHcsSs<)JaVq&vLVJdtCFg0Bj zfDA*;=^q{$%`i4bY3gW^5bho*l^KO8+$qrP9Z7A53iaC`>VrV(+fJ z)Q#!+N4c0#?b}c9+}WcrDITMkHn=g}_tQCV1&gNorL6h>eofF8L2dUaBY0Fa-(;#4?f=kWQ+{Fk7ReF&2qRE}j#RLuL$+m3+lgQSm zt=%ZESnI}l^;YhPx(~m;IO&;~i<2DLN~s$FOt2aw$l7hzah~l9Fwtl+zL;qCC`^xU zvtF}(T)VVnE9;Q>h`LuDp}I|#uKZHjp&X|;pjae7CBIs(lHD(>4muuW51Ji#Z(zCf zcj*S{CDg3)M|i%E79A2b3%?WIAk>4Tqh6pOr=snP;P!;(bFV%(<|hK}<+7h2`9uKE za0^Bo0q!Tloy~6creQRn`}gxBUoBU$w?&^jo2@lC4CZs>x97*aoq&lP>3(4}N$jTW zLlR`WNkSvJmtPo7QnHWv5+w<;*;>|NG?KgI#WA^rR&oD&k$a(Ye-wO4(z`UREW=sbv@} z=Ex;4TRC?n*z9Q_a-Uv7wwoksB=_W9&D{4|10#m}wY{X8IE;pH(+-d368mxUgWNR)mSMDuTX%Tm1W7x>hCA}9 z1=%c@28Y2e4#u9nzMUEmZdQIdJm&Qct>VgF9Zetm$@Fc>qXmdYa(iCovP|d4IuyvJ z+3rz9BRSz~W3mjb;?}>$CCUBm^&*L8v&b#OXe4*^HSWX$PxqjGCA~y}Ak(}@iE|*Yc$YFfdG}}#51=PCs$e1LR1K5Gvy-4zRsmDXe$Wuib)C%4; znxqsTOJhnBWV=Z!g<5U9#w4i(z&_tKnk4qv;=?7#c5|s1YAwEFG)X!ijZ#VyWV=Z! zf?BuS!6nJhtCMlKkgihJX85m5zzE=9OFG>)!!DF~_Vu9;4nS`D3b6BcTIbK;9LB&S zjNe*X?SXTpSKJ#!#FMR?1-r@C$<|20on#**(mSXIIk|r=9LztTY|SJuM_VTe=8}`q z05gZ2$7D89M?tcN#6com&DOZ@$F-rt@vBJTc*r}%<{f!pAav@uXXuZbl+^mvhKAJS zl$4yruBO6_fwe6a>EoUzu~V#lX-XGNvc9oilhB~kb1X&F3hzP=0=1kRnPOcvC8;j8 zHdWuyn8a~OHlDSYAe(+d(pHe2NcD2k3VkrKwhuKa+Q!cp2^ z*b*928dFmsRy3!ni7%23k=C0@%_M8o_6bn)1Y7g|SFt8*2vC#UkeZT|T$ie=<<|U= z?41Y%w6hgHUNjgwb$lD!RB}U#E+HjRqt|dMjBhy5pt`=@cXkiW& zN9qDfcQzbpN3zM>cdP@FRaZ@9@ud9!pvZrlqL=_E?0bho$&RDe7&jj9|3Li&d6DAI z9!1KxM=751?k+w0j;BlR3V#z%1iAki8w8zL%7l<*N3F}ChaqmX%ir^$O^Q#X_S0Ty z-PxnayZ1dx-Z<>05(1~Ld)L!VcZI)+CxR?XVbnWL}*WrTdqfQGSYj^f2Opok`OZKuZ zsqrc9CHpZ|jY^{21J9JdC~i_Ll%JHZm&eGSm$l0zLHmNr1Ah(N5x7+Psq}K`Y{_eq zeu+~2kk~BxQ}l09w(u+AwL&fUc^wc;4tVOO5K*nf>_9`D@Bgwc5P@%f5_8Hrk-QhQ zF+^f=psh{*1#7%l!D#bRlvIU*GssAvB!=NZ7W)M9)xJIjDgN538jVh}a(FF(T=}&R$;ROU zDER8o$X$rD5pwSu?ris6qaSLeKWlYA*wErct+!HuJKKF1>VsPUewKR|@+;i#1+cK^ zMo8l9s9ciV*=~}0pjOv&RvPdF+@Z3?KJqnpHd_l%wQ&LK0)lS~&QgD=-U_xXZ>suL z;mSvpt03UVZbgy&jQl3~V(^W9nJg~o&7l6Eh`^@;Ez-Y08M;97nPiJ3LHwTBMpZ}F zh{VD@!ZNwwYrzcyUBHI{>$aswNme>g2ji|^V7F>L&ZtP+PgXhpr6Bhnvr1w8fU*TC z4Q3YjEjBq&k-`zo#QQBaI8cGYaT@j;f5__`s3{>hW7YdDHaJivqVdc{YMULP3PGMc z16zVWVN$sxtKbXw~_xZE~Or!+Sr%cH|Ga$$`2Gnx8IGY<7TB0=f35 zi?nTWp#H(s-(3q)a29r}Uk+@-?;xreFunx_2Wk<#^Sf(>dTP`;P;X%FS*xBdDNljH zfvN%5pY^F>c7XJsq@RP(C1=lCBfYAb9f@oy`-%48t8t)U|6k{d*ob%He zl-8Ti`xKZRAdqJ%c=5as1tted-o?NAR5LhG*1qaj?;fdEI6#~Zn`RW`vtAgUNvs^a;QDL5(u=j^Dgd!}Le7`18NHc5p5#kbIMyKX#$=9Ayj+6mJVY z0rpBxS;Hx_Jf$lfD8|k|Wz~8Wm>ejnzUP!5d?=d+eC&71gKD({#m}Zse2zwD$0bmp z{=-GHr-s=P3k5B{1qMe96g>ZjPa6%6sZcQGPivYNxdulx6b$|8Q^V|tf`VgzdN;1B zc0|%anm`9BcE_er^2$v^ia@RFd*LB-wPOmPxb83Sj;&&M!=ZrSJ;BB5@73GYY2Z!V zu9~TQ3A}4gR6L-lmYPr76^ZIN^*^4n)p?5w|J81 zVbMyFPU4?4fzqHE^BMMorx7p{$(_gG9AR>x{Kr0@VNa-@ z0)qoZJRiej4nHl5<706e}rXU|wD;+2`c|V9@PYPUAC?}aM z@x4_^)X~%JqcN?lY2go;o4RMqWXWG_-FUaRN1rhn#t5ve(`RLmhj|-l* z4Gt7-+${FS1Zxqc7e9y@c5Cv~Fgs9QQ6TXtSm8jC#9b1GU2WVNAax)jsZR})14Rp~ zq&^*A?N|W?k4hQ#BEm(50)lDKaO6Yr(x3ewP2h`^N4v>>kpvZ>a}&9I-8j;C9A3t}PFN;KE};7P=ZhRA42~Qq zF8RfOORhcfa&}Mr22O}cs&^q$ZLld-;v>RM|1v2D&HKL4<|-K(+WM z2nn}L@~LFAL?b>bUN4RnJu7Mz1q<&JRte4uZW8DNjt5*0d*V!$!3p~@j2WwPdg@tF z@@i{kWPu5;?`z0(_a2#5;S_OxLiE6hN=xw(jmVDZd#$_8-q= zLVWsym-eVxK7FZk;-$TR7Q-HDNAOAvPQ0`q^Q~ca;-y_P+nW-J*@>6-%{~RH6;8Oc z1BvVsy?`Xn%VE@h8DMhaJw9uW4+~8WyvN_>Td>jr_jvOA9AB0>@YcR9-bJYAAYgXj ztsM#`kPGn;mIjBwQ)+OmgVNjuE>?L8>K%A>zik1-zE*e&3=X)u-*k^p1+xQg?rb|D z0-tuw4!o;VD%yQYVOxW1`UuZX{Rj`OTYlZ7ASVQj%!^>N1266r(F~zaGbRUK&^v@K zhI*)8?Z7+uOG4LY)>B||;H?|ZUlYhx^Oz}Ktr;A6yMAMycW>vgVxhkRf}_=oR2HRG zv0eUa|2>DoY)N*hm7|x7%Z>n>ubbhdM2pnnbCa?#A?u_Wyv1Qa6S4CNlW6KaIs1O0G|K z_n0L^Pd$PDw$GuiJQ88Nu#OzpD=l(BWj{eW>E4I>qcCrW2P>m1BN8( zLE_``g~27!oy{fD4NcB0To;LN`fBp7j^d7S{jC2#BV9n&Eo4wuIfbP(X=K=vwIJ$pIa=XNiIHqCA`zOrwP;-wxjg~Sv}Ip_ z-Dm1uLyH0RWR|y+$ir!zDK~=1i?{A({ovPgrrfGOTBT&!A_g0XK-#x}M9sW}v+SUO z6n|WHXLB1M&Lwo&g}X@|T+CT^|0^b!to6uOof2~A=dF`S=n`fQ&>4nwDlZQup>J7Z z+_KiOrS2|t@xmS{x&1BcqG)+=MZiWuPJl387{W#q1Q)DF)EbB$xKmvW@xhq5IdO^y z)K@8%E6*sbqEm_`syuZo_;^)IPs<}^7nDa8vC0j~9pHlX0O=pc6jTHi1%4oU-t86E z9pI39Y_$h12pS*w3kEYppRUSG)j>gy>X_UZJgoXvIWzdh;7`%xt9+|MEdN4r6U0n} zV27%m5Q|V4T)~E%yLT$17|(G=8u>8Qb=dxSTPV3Sg!xLKCC%d@${g#NlGL0B1&T?m z3P@jPVY8_ve^9S4;UJi_fIK~((Sw`EvrsQOiK63xHfLFCyZhRjd$Q^$C6dGm3?XMG zK>)XgNQixRJ^5<_G^S^jFYLc#IJi`jIuQ`*yb*E3!KIMiiOlb0$BAx*P-Yu`k`qq^FdcGK-5E%4{{3mZGqopmhUL6aPuR#pFgJi)11<-au<` zaF=KFHh0x@W~3XF!@gtDHPp4{FnNrwub$&DH*6bQSlH0osw=8WYUtn$Ma*;FXtOod z8cS7GSD&dc>>E!Zxhj$wFZhh?09wEU?E&oV%qcJ)yU7xy@=mfGlRJnNlC)iHlb-IS zTZ+2%l|XN;KJ0e3&_gV@CtJuFY+*BKK|yjYXhAWN%dYXR(No`Qv~;y*7p7K*ZDk8R z-K({xH1^eK`t=%X%nP)T*e|;#R2cI-IR@CKJx=rbQ@b>+m8POBlddMQ4IDpYWe&8Z zL_Wq=SoJx2t9_JcqJfH+Niilbk%LInizE+|e}JkJB-b6-9nHiFrai(U%}8$==<2F6 z_B1tSnhG=O>$JLz{+ORwq@~);p{rtkWFG?|7W&P>%haE%uTjsZ7vIUsXO&ILK*e4~ z8N@>0Do>Ps2%!a|gPsd&4w42s1Iwgmq&G?R@EFKIXu%i6En*cs23mxF!ed|oNJg#~ zBn7<9hC(+x@#g(~C%lAw^)90z*K{#T`q%bUkT9=yqTD3E3!V=Al$x9a7nM6OhBqk@yQ0%#`qjXOe)IXqS z-~rKz(vuH!U1#Ev0+q!HauaBsb>MljxC0(0^O*7UNIe1tcu{-;cqfoud9DMur_|s? z>B*OQ-pJv;g>sXn`L6qor-s>?1_jq;`YAwJ$(Ozb1}92M1ld4A>lKV*oGVnH22PMJ z5#vZ-8=NRN*^$Mt@6?`F4NjDs01lUwccg~diElB6v}}c_9p` z$%%p!T0E`Dx7grB$w_MwoEyC=);dvia;S&_r)i^68k`_IAv217>sXv9ELmU7XuRu~ zohU8&pcod$Xl$w)Cx}a6YR#gLy@#SMqnGL+vaD$+h;+RVhd@tf%ubY`Y%lS_0^LLr z3Uo8x3%_Kgb0(A&mcmjP-7?fc`N@ua-#P{-3Q&H|_wC^dCrVHX3*ar$3!B-AB9!3* zU)l^#l%a?VeX*IHC`4Ia=v&9^L@7%5C9b(P^5g?VqZH-UOI$O@Q($nS6lKOV*R=H% zG&m!nVEr`LL?0=D=^qeqso?PdbZqYqj7&o~LpW#Qap4`JQ1KMeU!qfRboo_vjE&hG zyd}7cY`x#6UEy+Ae*|PGHz}+TEP9FHabcn0ePIZgBK{09m=D0gX{Y)sRU90mCa5*a z9pJHkO>l*BgGvoP>vyY$)WxcU>O<<25KuZA$@I6vPP39pW)pC zCp>_B7Wp~Bx}DsS0BT70tx$)NzOM(D5&1WR)sre~Dhk^xDl<#;oUqa)|C7OJDeKOj zESb|EDpc2ykWYXWjpR5aZUyd-&i02+4Q8Vyn{#UVGHinb=Kgk$UUcvfvFo67SCQK= z*+ibe#7;hdB>HknGp8bl=HM&IGdNa_jAEwbYjv(He=F4_CPZ2Qnnp^W@2TMu0&U8<#0b_lMBmo#Ik{0zz^h#rz@ z>%FUU_#U#6t^Su8tJ}#|tT%=1!z79vh9qq=TRm0Rlixh3O;0Z51XLKu2KP353OQ41 zTsVnM13VFA2_}(bIVRBuikDc$0>N~0RSoTjX0Rh>;0 zMdekU1CtMWx4{YaFqt(d;MA;d(Bx$2RpxhDn1r7 zkuqkAV4T1Z5Cyxr>z^nT?~hZ2f`79cCj9Q{S~p0}mNPF1-Xu>~!14JAIgZI21J~oP>&aeBwvtyMnf4Bg zrma8ESW}W%l3vT1hKdeaNdAgh7b*-rN@5I9uZ1keq?K3{kfA>TkE&0yhA z-LyV*dU!UAxnEzeH|Z>ejn*1-Qd>r9TV=8~Av}|XT(W(As4zT>tTqCYrDQ!O1>_b; z(h9w+7vz^T<>oc@*eXlH7yA@?f}Vt@lhcSNpQx%K$suzgiB9vbk&$4l?XNF06<4%{ zFC+EUz@T>W1lH&zA7BmEN}Wd%8Zjv!lvIY_F^(&CD5_x zK-@|OHk>@7Sp^7kN%1O1Kkc6sL1|`IGTaEO%fR!g=ejxRMp{VJu?#$8+&~Uty=~+q zCR@pQNJQ5M1dz8jm+vR9u4dAVmjwjx4lYuErrrV%M(?WnR8y4CDC?98#r+^I{Z)Re ze2MJ85cOw4(9s}kP-x)6z%_wE(%YqZlJ6upNK(WfiZ_WPL0sA>QVZ`EmI!_l+$=~5 zI7u|i;%C8`4n+};2G^O+-r$kkp=yb^(RHTt6s&flYRU3O*KNR4U~-~r$=)?Ss7y{! zEg{kxp8|suwMo|0__WdBL~W7-HLi1`rwxM>wMn9DeQKDUs7*3Z>pHZ0YE(N>o8-+} zW>l?S5*Q zpx|JmcMXu+gT@G4##p)i^$;Ct92(m}Omukm)v{M;4@DLyYLRp_x#Y*50+SP!NM333 z#t#n+s6#TX*@sW7ov1=$Yxe22$q5=Hq%+;`s|esLhtikR;cDgkW+JgTL34ym&4BBu zpHh<(6-L%&_{9vI0Hu);PIOu~go^Po!QW%cYA0%u%*(vkvkq#KyaJ=+hX{~*gEk2? z!zyo|gl8S1oP33XeEKeEeT;t7F*s4Z`tT8YJTQTSNYch>=Ua3Fw74bjcgi_0rYBuo(t-!R_um-VOyh!NVl${&kv0w?1}e9lq01s)XrrQ88`ybkptYn3w5De)AzRmQ>t`4`Ge`aHf{u^eucajIX{t?H8svEl&?%oZsWJx^kmb%c|h z``1klN~XJdYd5~4!|4Z3K`|tL|2hTPw||{7+FgqNi>dqKthzn}9PkQL^9v%rA#qQx zo3be4M;3+0qc7)r7bWp7O<=yquEPhD|NC=iDY_O()+b*i?pQ;5#N%orvd5L6b~thzce&3 z;u!nmROqD;?de(a*Mk7y3S8AW_tMbm5ubUtT3Fwzugz}m=+CZ*_>!%?Y7Wx(g*RkT zR(4O3KDVnavpC|v0fwquDP%hvxd+`t0oPl3HDEb;M(2>*K(W zN69`+4vdAFV(N}OJDc4=`4Z*Crmgd~Tro_I!+743$ zD~I5WKvTcDKe4d8yt_Iz;#G3+NoezBwoT8>YAi3#$nH&UGyhL^ajNl2f{0RVk z!3R`ZTt8s!87woEMm$dr<48V7u6=Obl&KLvc*7POO1sm$Och3xKH__F2w3k5vBx2= zwyL@{yMCZ_ZBkjpd!!X%*rtkPb>YD;VOmnBAB-&`{amV=ZWn zI7l`>25lTCdocNs909b_r`e`%3&*COBp0ygB#8ueEMu*hIbLz=%(*qz!NQb;5a1)S1DD}jY@T`|<{c)(P)V?W ztbwBFPiYaSTbcdct^Eb1?Jd@Xh)>A3$hwb787{*lG6xplv_!Us$D=Q2@x^G_mdejw z4U(J$vISaNtwB-Bynvemg71by@fkH-k5wP3u297(-&Wd`v5J=zU5bhF$K|#1AlZE~ zL(m^VyMl59zYhFIV2bpF^fGCjFcn8VrYtAy%o@!)d|8gh{w6`ew<1Bxu?aH&3n!%l0r>~yfq&tol>g24BmM>RK{htl zx_{$%1dUDS6aNM}O@U(r(&;$u-_ZRPQiP7>o$4D6o1)0Iw;{76W8=OqY;y$pltPQg zhNhIvM`*JMq4@`V{Z9NW2**bI-cIC%U~E9z{-T{s$oAVAv2kv|4m2MqQ~#>|w_2}y zT{WNzRPIw2D^4qjVwwDN`Bm}-vUg=xSxC^mLHU6{1>O{xDm^CckWQ5Bk(7wP7vCse zDEd@%wP>#JZ6PC!5v*BxoOD$f zd1M!JNknrMLhE^<$GvNxLo|2bC{~Wmm+m`&ftCscE*!i4^OcuPo@?uAY}WRaS5#~I*&SF`5WdJ_3&U zshJzmnumakc`+8;%`A$j&P71}-aULb^sY5$Y>cXV0OQJR1f0g(wDlflLB#Sb1myq9 zzIP8ZKVn5D0`gA-?H(pRqACLc`Ip$Ct1p{GcJG0KtxHGf1-yiQwuecMs9A=9alC+e z!%SjC!%_rH*E~Ib<<)5M2P{?NA_U}LQ!hAhO{F0qKQrl? z(mQcYEktPkHN`k_P3aMke@#8}5ZDoXg=ni&5t@J2&DjgHZn+Kt`59&33yfNof`I%> z=)_)JLdgio&r$kOFzf?D+mjGFop(fU+Q%%3FeV}(KmUdI0{>gJ2*|%O&G*7Os!c$^ z`Mga(e=n01QLRBher8^JA08nVARvF&*Z*>P1o`1U=(;f;q4|46Z=XxDm2eV|H$vg4K-8 z_Y`t8Q4}|jm@5F!O=K}9gjgU+W7R|R>I>_$a#J>Vh}h{~sJaSBVy zEM>+fZLhI8DJqrhM?4zx1|(AUse^>H^@R#m$t37X=r=1U%-1%RS+ctH?RAA5>30O{ zHIMA9+W-$O@nkhr5X>j*F_}khfkYa|a%O*PUud8zh5e!FK>Q2HX@rXsfoYQh&`D>7F-SWrjsH}E+H+DNLeX6Ih~1G z3HD)9Ob$abjny6FpyQ}>M3u5M-8T)_O9_eH4E3aB$!6xTU_6m+f$9?}M1B%H#OIl+ z`+K@LgQW~%tB-r6H&mz$C2OF9Aed}`L^_TwiapR98mOGW{^+J~lMWo+f^zU|a_l;Q z&mzBG2Z|e8$jN`euYZv9m~1BD*TYzCrSi0T z>&O;Nt|!CSGscxUtZp?t2<{5b2S*EA)CnLZ?@@&*A6M2Y{s6Z#`CwH14|$60KVVcm zBj|8Y7f8vU04cdxx<^_hIW768BvpJ|e3^K*=yg%AC{*~kaFtLb*dr*ydqG)>USisd zdW?@e3_`_3@UYnPATu!({zzSzkQkq+bNQk*@0|ib;~oK#Cm#^n9JlcUnf9Xnam)db z7XRlFW-<>t)823vlAo|J0J0qzgD^Byes?S&G+Nd?%8SXg7Y&#6) zbvLF+pP#=Ri`bjxGRJRVHuy=eVx-Ot+#^Iouo zChv>|1V+#x{22oi+CX1377*G)e>N5n+D0#ZaE#{API?DFkZCX4NDCeY&F!FvKwX}X z?PxSjAy<64Q9(K$0weE>gB$mPDK!~>h<5-?d(n~_aPrMs(_XZy{_m3jL_KcQU*Ym? zV%UpT)ytl83G!n{3M_lks+v6Ib~Q3mVBU*X)jvH2eDg*HR@J2BX>U}jm3zU28m1@f z4dwI-HF!kGxguDmnV+C{c>o!~ZgQek^%Y0qK=2*GIbd(YsAE+RtClOzD|acg72hjvR3yqjl-uPqWCvswL0<%I3rY-pFK{qW z0dbiN;ES*o^rlXTuN2Q09T5$RqJ@WqwSo(vHjQ2-Os`mwq`v7@?VOT&%vd5)Nr~ zPkI5`Hw+*k|D`zoj6HO2ZFzr{rr%PO*^}s!*YuCw#F<~O2`A@X0D???2+e=7J8r%% zf>gc;(5re8n*XYN2*^Jw559y~O-fBnBI(6fO&~YE3^Xrq$BO(@?wyx$p|v3({{&g^ z3NEx(1ms_6_yje#j4AG^(dAmZ`s&yrZ)w4r&iuo zbI+wyNzQA4)?ACw{BKfMzJ_m7H3-PR{62n-nH6DKgMj?~|6%Q=Q+x-_v>I#jGi2NA z@IJR{6$0{i@$1)d(XAXCBQ82$T3T0NP5$L_#~ZL*jLQ*_e_T{YZ~P!Hduanfv8 zD3uYMZfLUY2QWtecK7BWlJPdPY_&am9JiGS7kj$eG_9JX()QlAb|8-9rs03}2lMUQ zOiRL0P%zsFYZ4Ss+{|C4audbT-+u)&BZbUD(s#*`L!{*<0w_-5p~<0> zAnX72D3cdv&sOzDF%w68`}{9{ zLP+cfObZOV%pckYU1`x^ZMC(kBgdC^w^I-=2D!7j(+>R0&}??tCmo~19^|h@67!Zd zbWA@VN|#rC>IejpP9a|(V{(8yfqsz+-nNFi!y35bYp`Uqff_Crc4NnX=(tM#A#JWS zX5?q*8Y(&)M|d-W4Fh4IeZE&C?)VriZ(Knl%CECcAe%m9j4*>F{#wdzXs&85u1hRV zsPskozr?gyb{sYpd$!nLBh~elCFynDhMvI=uSN)lxtQkSxW6zLY^({bo*jsk6LcU% z{u&{-onS)UArbzE_!6#Y7PwhO64^=GfY5IPJtvuwk;VuUe&S;I3p_y{J4qLpz%SCy z6Q1bF3-MtCZ!{Q-S=JJ-n7E*w$8%5?*4&xSJ;?@`C3gCoZ6F;7HYKddUQRc zO$J+y`3Z?t2}ui+$;Z2F5z-_mg5asQtJXymr+VE2@>1}+cvvbk{Py*kS8ZVl@Vu0` zP^*vEyQ5S>ODR=e*)WMmvPt>BVG_UgMxcT`_%Txm*r)r&zUwtx*kr&C54W0lojdp| z2hAyFqJmRS4!sc=O7{NeQW?4a6qAu>&z|NFZ@W%gU688nC@V3tlXnE8>xJ0EFt!`? z1)090rF}xz#3laF=C}8!Tl7@}4P^y@7W(Tx79^67KVc?L#>2tFWQhDr9cpooB8f!( zDcw0@{h{sXOUlpBvQ(!wwt1n254S!((fhmujbL^P+MtYTLBvq=geZ*{-XWi?Qdu_b`|zoDyqGXhu9DVKS^>Oaz=XM%60|K z9LXk@|KgbBMR6N(pKA+jW#-{!u&Oo)z)5C-=R%! z&dVCzNRkEvG9@GD%4*iXeIspr$rwpgzy! zeW6Q$`y_m%aPJx22+j7IM$j!5n(fy6-!pj|+1KWk0l~KiC#wIW?oo%U4yabBL`tW! zMDe5I7R6%uM{*nZaeG*{D(C_jBrFO%61X-{CcR%;D)~urizHqAnRrM%NAxDhA14Th zh3VkiX|rH{z~O+E0j+jwHQ?vb00tFe&Znl3TW)0(tWm7Cfd4tW<|jrs zxyepV2Kb*ZpGv-NHaU%mSJV4 zzW@nFdkj92@PlXl!pxq$+D`2T_@8I?e|LEdIf#fYc4{oZ|48%aFU-8j20Jwr;D2FD zmu?9qUB3e2YCAO-;D5Lmym5Irc^SdY_9@sw{)ax1S!<`p0{kjqMQ52L zm}JyifPa$Rf0iyaYA(P(aaHH&Qlq8<{7a20EN?motg5$DgMkFzec{kKCIyJ476bgm z&N>go*4nAH06zmRKTjDz%?0>zeu+5Ec4{8LKdZ9;fLUd}j@5j%zU*t6Q=X@-(@v?5n@UPOSy_7u&W|LsLlSpTK2N)L?+0 zdg)(4y~+MJECyEn#mt3uMy&<-*V&_g(RD^G1^8R1+Jg%&K(`w0)Knmuck*;!U{ax5 z)J%XM@dp>^I-_<1{Oj!XXJDPJv{OTYi^-4JkDvY!vtXkU4ne|N%i@_f}kq{f0tbdP7dyp zM+R>RygYDzaJc$VaD_NpREa*(f`_F)O;Fq~X=t4vx`N@bBegG>?IriGPiO7e6C1xYnUW!k#IqTIf=CTpi?E;%l=p`PJcNYYq4 z(R2@J=~{D=(b!y>)leXsMfJHjg~p!j99vE5VC`VKXa?D#1U#pRT4jrjWGz)Q5(YC8 zOOm^7y0Y|vvZBtW1OuA{D_&|KHhTFsO;nwlC?fiwGfh|h#DJcp9%4U;mMUc!TPh)@M zNDF4pA@TU@bMlwSHjSvIwom|HfF*0lUa>7QnpM2aNGR?dXl-vPE3M`*BxE@`1t`-R zC|@`*?StUAtfRQSv#~j(hGkm0R;Mr0msNK(b?Lk68ynVYtC(cjF>*)^2v}2k4gwAn zLYlm>b66SDNVWt6l^=RH!hwK*>&fE+NM@4#5||90kty#=)+I2lDVDlU#TVoo z384Egi_XJZTUN7SAl=++Ey)c2jLeYQriYF&q>ah9mG`ykQ!=tbnn^RVa}_xTlOWpc zO?j@NG^4yfxlmi351z_SOQGwmZval$ITP3A+Kf|Z%xg3>n7V5QJF-JsNEdV+jHl1x zaJ7**XcB%s5eQgWMbM1Wy!`saCUahAGiS!jS@l^?A%|J=CBzO01dGUepiYoRhOv!> zjHmZOBGJHN zoxCkQlxWJ!B?OmiFlP|t;EICuEbYIZEk3HSg{4{8mUVsYiMq1Eg7$pQfQVT(r+a1? zhfA^(WVr%{!r+ZyP?ua-pzWwjvf0EYVg(pMHQ6JBWGU&yB%N%AByE{@w>W(krFs`~ zx*^h$3y3F$L}J&Ii5`Uz*ae^_<)pS#R?J&pcbPy<%J#D zh9+%uUUt7#T;*NZZprPinrr*?x*l<*cO#q)LU9b-98l*@aY_gc9TjL(x|{=WW*dj7 zkQL+&SQ%;T7MRhKS5s?Gm>~*pU_K-A|Yz_>EY}wo12smt)y+uNBgQz9vkqhsUow#V< zC3A7j9VM^ej{A;xea@tkeMC|L23!k-zc!Uxt3gy$l1>g z2Zpnd#lB}>6m!ge@sRDjF)VbQ1bfb^^AMd_{L0PvwY0lcSvie6d4H_kED!Js1bN$ied ziTXUAV-$sA?62$-?7K8eRxV^+Qf3Tjs?)Q&o4erL;W>>c*!jUJrDlU!^dd#mm{tLNwlmoM{)bfOOy|^b&IYL`c3PdolTnyaI{K?H#9O4pt%S zgN0Mb!74mYVxU7Czh_(aaEtRrRlMn4$T@Q%thYwkl!C($F9HBggI|BRU#QtOJTs3oBx*TZn44kENp36ZN$%x* zM8z+97jnj3`~q16Jrle_P9ibE5H$dj*U6H&%T^F1WiE%~V%DP%X9jT=l{$nR0u-Wg z$~CMjG1?LJMCi!#WD0a7n%%WBJw$RQu=p8>%m6Jv3y~QB$&>1n9wfP(kG}XR@6K>o zDrU!!(*kF8iVs2@4`|^vQU=q-#O^p8P|l_zW+w_~7IT=OEMqC~Y)2gOl%)_60vaiS zh!BtzlTEnR$9vb{Of6*<>6!|lm1GMh6=WEba`HG-gmHKS_kq{QDV*WIl0xjjB#2`I zD~&aX;*167)1;o@J`~1>z^vnpl5z#viYsC{>4dE%nmvwlI?B1zDa~XK5@90eacWeP zaG-1>dy3`M;7miM0mTY)0v-woz9(3({#dWL{-8w!X3gi!3n`SIFCF8i18np zGcKzV-h8RE0sc4Nw_|N{;9Zn@8{mJhiMzzM2;Q@)y8-_9Y;uV$0iGJEs{#IJ!QU^j zp$Ot{_!=-wv!Mur`WfJV7o}F_FHf_DfV_ly8{n6h$fn!0zyRuLfS&TDb6{jz?bHnc|Af174otW;cIt$$5@usWJ~U=W}nxa?bI)Uo|kRCakhmZDx^LM z_(g@s<7_&RN>HZ+{8EX`c{UWwP_G31%(!PBFvDd38*T}1zX3e!M9rsjnffK*ALCW? zVT{do>X?9kS)*uzyordH+o^j3eu_ilfntN5`X}IDeVy^PS?~$?8x9Iyh=)&r$^JJy z6htqeYmRy+;9qmr1$52*4c7$QWLJli(+h0lCb!w=;jCQBJ7JzY%`Ap>7Kf1hV=(s& zGkd$nCf(SA(V3RQQ~MR_IMqAgXM4QzG5F956t^nUAAzW^!c3k|E@^B*EQ~rh_*Q_MEr%)rVvG)|RBMDelYp14M{A>QhBv|un?9_CN zf2&-Y3|r+IJ2l(lhunpb%k9);i=P3a6ktHLo!V^i57e3z7$~Ei+H3ilEgaGIp>H;a zkvCI-0juoPYKwogLUb@%COb9T;{R~==wJ~W?9^_He+xlJOmR%Hp{8k2UzyNb%6Z{(6xXr$UsO}F?tvOX0!vdT_vxA?pGZYu2}wbkNpom$3~=z(|5c51Q3{}H-g z4<8|;otkX%56W3R{dQBEE&g>@z7W<~jhz~8@mp#>xzLsf(~KHy@lUguG`h~H#TNgW zZbKSfXVhBjZ>+P^X~3#_JGI$L;N5-`7THojXiJT@_=UD)k!```Iy*Je;y0N4b&)L@ z7(lJG_!+Q#FWN_ws|K zw3o)Qd--4t{d^n7{>su%+T2(mp}}5-;QXh!wpg2P`!e__uL%g=8Jwa1LVZ2B^>|Y? zsESfPt*li1qPP}JxR1)$$|uO~mK6tm6m)seG`Rh?2TqheDm6<3BzH-2!Knv^zIXvb zUj%_VK&s#)LBC*1z~cdH@N--}L^ay{aL%n)2NyT;uUnZQ_M`k}I&MHiRJo0R1Dcb8 zTp6NzZTy_3T)901xY9gCmD~6?pi>#R0S!^THh#o~nYaNBQN1?)4d~8HygUq1y*B>u zTyPeC=Z2_C8~^(2$-)h2h^n;lZ$NKk;RZBBwb}SLAXHe@@77R) zO{11e-w9|E)CCCM7d#H}O-^ntixz|DtU>beGkudcf{3^aM8O~?hWO&2LX`4MDstYT z+#uK_sKcP=5{qQ9Bt{|<|5yA9NVA^^{2=hQK)Y&49*NRwRh(i81o9Mvu=gqW!%EEvKM4~lro4U z`ZNvV*(@v+#*Yvy63h{hgpboEZ7U0Og=+DHY}vWO7G`ouG}pG<^0bLPS)DB$0jk6$ z6*L+Kic%}`yUX%9q5@f?OE@u7$PpdMRznDMc>7;PZmWhQkQ7$frYsV>WWgSM9C?Op zg*QHqEKIf>BG~~VBSf-;qy{3{fmm*hcMXn6LFSUp8EvB2vof1X3OY*b3@r&9 z1gh&vNCgnGg~VfW9mJ-CUf$|mgTrUlKfMb%B0ANLq|*#|2!yPI=aRY4L8VF)3a1i|_s*-SPg_U&X3CO44_ zkVN0$O%{jws#_quAN1=V-Y^`Qo9bGhLXX~?Y6r<%34*MDd&6)BO7$<<9#-O7c3HV} zV`5HIm&saeF6L@sPGke#WO)iX({ZAL#qKHOOvj0=*pyR~BaxiQipx2Ly>mQTP!nBi zsy`v2I5jELmRV3+&`_9^1JPIiA7|eI7S)x$&%n&kh87hR3)aMnGsDmF78u>oo`4I)`0f z0fAEXARf|Xy#=}T>sAzR$*y0qMA6}rOW2)@kf&K3H)ZPud`8+M=bd*{L~Ue#DM zVDHMVytXA-+_RpZx<8eDvIGkfXDc_e>aTPbzkhKWo3s?-u2ybq)n99DTgn&a+}5hU zf_P&oUzl?85YsbR&Hz6FWVo>_`;mqTJ;y^Rm*|7w3XXh z^-q(JFDDC9D>t+1FZD*$@r8L0%&e_-d|}QltUXwm|5%5rTGGnRtopm)oE6vwuWjWP z)~UKH!>d<#F2p8|8&~x=anUQWiJRZbjjQ?% ztI(wGR&Gnx&nK*Ba6xP3wp9I|ID$>gPDSo{ueVMAgUSW6NKUEUaqfmehRRZt!hAKW*Zc zRQz*|jTMJsbB~|}Kbl_T?3(s%mMpXT-z<0jfh^pTS`EmER1iZL)H0>z$Pc(L{ z-amxBKLz4dt)oa>f0XghSoTziyIMz*xPCuRUW#+HLl8f*!DE~qgnpJF#_Zv_=miMZo?tGr5kt&D0Tq~NC8C6Ue8b?RVUlI*F)iO!F zwg|DZaw_e%3G&YbqWl?`7I?-O(~^L(;9}2UGZ)qld8bel1-gX1lZHzofPMr}D99W} zMm7c6QL4)k>$>?_?wSbz+p%834o834k&g4MGvw7q}6_NvsC2Cu(pP9AHJIt7t2gG4lc!nYV8fpO310rj&!?WXh zv$`uhN$I?#4urzWrca&{hh2IF@B6s`c<2h{cn1cLGbT2kIAQadC;VrYbR`GL0m!5) zyMpB8slEj?2ih{je`be8kZgebUSIW(t9;TTh{;`wj@;=-#!-O~oy z(7YWSe)O}(P~y^T$km=<#)vE+Jpv>-?x8)?mZO2B^D{fPXa8_xgdIRrjwpe0@~JIU zLxU#S&{r&&Q~H^m9B`0UuQnhZ2a-JYuwdg$2o(~3=8YZxvm;+BoE1pZSQjK7r!HKj z+n<@CY8$ON#{=r|E>Ow_4wl1#cBioxmI9=uOl1P8;4ktwW7l8gZwCE~mWDK)W@Gus zj$gc=s$(4FpM<;|A~YKxOpPS8erElyrqMVS2t`+WhL#7>dDLR{FsEQq8vQU^jB(s$ zm}9tQXF9T20SCMkDL}EZ6gBKrOx|)QvFlW@(gG=Vx|u?Io0{ zQ9wEcBso+0n65&LfnbZ_XUt(?Eyks#78?nqrPq3fxkjd*?v8r-W{w0Q8C4r>hPG-c5N7>&qA6~P(-}!k^6gFEfTh zb>|IIZ^)z2d)YbEMHO2CWspn7Rsbn+Y59Xb1W1M(B_zI!cJLXqD-w@nNnchak|Zr} zi3bCz6-c~aA=n|NMjiuEiKGZu*%e8Yme(s8fSRp1G{{2FQtyeyc$In7MU_zO=uXdQ ztS*d|qayC3drYQ)1b0c|_=JZNT$Z0LM=jIhKZ$RPPmTLW+`QOdVp;6un2+EBmKptg z^rq-^^TTGR>08qt(|F@c#*N0LsGFi@!W`ZfIn?l^VU3{|8=PFa0LN>b34V^_wK7CZ znX-|e)o?nv{#gyYdEigb%IV~H-F=--SAaJF*xw|+ytxMq7AJJgI~Ia@jV zTVMR8X0+>~R?hy`_iN;F`iffs>~7^0aQ#EseJwCfRJC#nxc=DUar%BEU{@>Wf$N`x zPV~TrP~FOT;QB-H=->DBWj+sp7q)UTxc(^n#=}hxoCmI-1#WU!DFAq7D<^~J>UM}b z1W!I%gOkDaTO-BGM;RxB>yNV4UW~GZt(*+5U#!=>DAxQ|&I8x)WZB!$$>z6m9=N{b zObqpWen#i`7+9S%+lTR8<>KeL6~k=ezqoc*mod2INkeF%GMJKCVJm9xJ~ zblV_$hi5v<#@XNcW%KMn*{WNsXtLGsUvKQ-WIIm$)^FGUTg*q_6a?Uy$%*!a`gie}`ojtO7#((75~JYGQwl zy&-mL%oj0xuyubvx)Gf6JI!-UUx7iEZG6Mn48!~rQFT#qk%7o^gk!nZa1pKr!$y9* z&DF+P+|rm(uEuicNGK}@>r-i+ZLhTEV&!GJ*)tkyoYLK`8m$?+s?EI#YVJ19?-pm5 z@Ree2KBb0@N+=@x&&NDtkQyg@hf)iMD_2Ba@3MGXM47B^+9jj_wqO;fHwmvij^(Ug6Z^tUe)yB!;Qtfu* z7;m}*4YsO{lf(0MXRAebz@A#u#>wFWbtRv<1B*ykTMx+LJB!=;u?z3S%;Ie0+a=8AS&8?(A5%A(R&JfqHum4`LZwPbU1@WpjP7~K(9bA^bHzoax#Ic-yzOpU7_@PkxIQLd7-V!Hv-NG9E3W?$U)({< z?>5dA*KdvIJ7{6h#<}A9n8SU*T-3(7;`*PO!#)oJRkU%gxc-PcaM(*E$8gaI6qv=7v<&I~9eKw{MS#Y*`&n>>Tk%nEXK$7~sGKFaQ z9|QPEr^jeqAGJT?swvxXv32>LwQOgnr{=ztsM{jxrh7B{YvsXIFh8HEJSfvSi>>Z; zTV^(uG;Xo3EG}xk>70s}%T_nqtLDwgcQnj07K505aDZVph}n3Qf|w0B zk(Q{?n7XoM>lXX0qODDh#uCmhELvu5XlY!vd|B=W1v@nUD2Um>xe>%{JgxyT8;@H- z%m(T$YDER-H2#?SrGh3Ie+OFx08sh8^thT`O>lRrH5Ba4_zv|;1-CfVdcfD@atC1v;Izkz#A5}j zf}0vU2kdj;l!5Pz$6oNA0k=o2rMW9}a;sLC+nZgAVi|XfFUvMLt1IR-mv3CB=#1uH z*kQu?nfd7P9ecLsVE;*Gk;z*WQc*DF&7y~c;-#XGntx?O<^u@k4to5^=F{U0n*_fA zgMsyZWZ!^^A`M@muc*;zF_4?$rJ_d7Kd}Y?7`|r*>G1=*li{~@4AIW&<9?V*|^_W8zM=hGJSUwW(h! zn#a`24g+9R6H%g*4e1d{gAykt)L5G1kHp;@`*O_bm_%H<9Ah#WBO}im{%c4F+v+>> zu7!JZ(;`^K(4DF5{NtX%@{MfrQNHqCGq&V-$gDyF%=Sw2K=$ILLNe<(?wM-Zu{Q@; zXCCwPVKGm5hSG&q;HO|SmQ7|bKn2hE?PQn9<{S)h`7R#)v-wYWjsPZGgvk{VU=GN& z(xGiv1Q0K9gDrmUg5Z9fBRJ%YSf26>jY3A4?I|!>N zC4N(HX4{|jOh$gj0cqC+A(j38InNM9sm_UX@&zFM`8klLJkOEF%6Z!Qf><(a9qEFz zFr;JeNOqoQU+^>`3u9zO*NHBQWZUafn4k^l?h{;bH0AwytN}%nj(%caJkNDT$%z$P zTX-u<8{DwO$X3J+P6uD~^kY*V+7Ztlv9?eXjs(Qizivxq6J8XntS1o7t}zjJMI_yl zRGj#2;+2W{3GXAi|M`~ZEDe_4@ejl=jyJ~L5my@f9c(C*Vou@EXLR%l?u{Wv_qp3t zZv4@BwQ+LPM^SsCMn|5A+yrXqKMYIY?lEQX(K#k}M-eWeAM!4)po@E8OFWzMx+jHa zpK3c*Q9)8%l#Uq?uXqdMhhO*f*O7F06w1I~z7A&`K(X#H3uMf~H*_&w9n)pW8_y*< zO_uysU(($%RnF(UH+A#r?wBG=`p+eKkt`YemM*5N<3cf?nK~8Z?wBmY{Zk*#-7!g) z?DzIL5}pXjC2xE55_WY=5Oddyop@WfW!xS4a>66uIY+{IGUk6DLWjHb9Z#}O*{eEo zA^z+;o-sN??v5NW_3^qw*%0!+>(Li-K=3#{U&z&AgV5*ioud`3 z5SsS>IfTYT=(=+WWkTqua|w-uQ27VvNNy~I?$Q@>cZ`8heP@e)jgN-Vllnr=j!_UA zd{4_*od$MwjD%3u$#Z1<0tj8AFXZkxA3~pq-tw z@9r1`q5pgJ9Hkowq51boU4lNA>%^LcKS8b(i;|YxVMiqF`k|CT1U#?QqMp0wnV^5X7jgrwmUNPhlr zX=3Y6a)T^6{WD!jS4V@K`VF7yrta!kFH7#f5|ibAVTU+bc9(^9au%+=8sZB+mp_`-F!GZ)sZS~9jk{wtgtq-x>LuL?t%A^- z=Mq{8p{zf2kz5@sAav;;=g3nXgg!qP(sBq*|5F#q)v*jh*Xs+pJC;J|=Rb8b?(A3s zp}A+J8rQBTSI1%q-E~$sPwtLI5K8$9J$TUUq3 z;f?F+m^$$zd1*m<&eDQ8{IVB9c41yTTj%-vjY=%h?@)T61zI)K)meR zb6}Rrm=Axe$YOYvS9Q$hRi4B@(0@LLDnI&?CxNdZy30Tbu-|&=92uAeA--ek_b?{e zwKJtcb+@~j330w-+Vz_58rs!SEK9zllxzrFdWav$qvE#kKZ%zo<|e$8up?oZ-Fk2s1`tZ62fk3Q7NKcXt&&BUhuh(nW`-)c_5ivf61AO6Da>yH;t z{D`sARm1H|$BT@g!d|$1{qVx`lRAxrMZUhg<%aQ=EBk3rSgdOjW*Ay!h8?>>Rpk)cX41#h^1DyXu9@*BdXqXEdOC;l=A`!k`xT&clmw-+8ja zpi=PS(9eLPld?yD#(ax^NQZQ};(S}>ONP)FKYPZE!#kYo5rLHG`pRP@Nk#g6x_n7c znevN-+xUy8_n;7NzO+gAB`W5c8wa$cPKFC&IIshhXYP{GH9a~7%(hCO1YZKuoBx|< zJY^C8)1~2bGNV+%!5z4vR%ylL@>!tr_uo93K^0pV?U$=$=R3qy7Wm?!lKi_TOH!dL z+to~ANhMD%V;oejK}CovbfTyxI3vF}QFK_dMU^UFEL48@MXYY|5Ynbm7E%e8B?c-b zzbaD+t4JvoDPvW>XsF!!t1=aby6#04oAljX;4?$zzrV`Gr?SYmT?bE7C6yex_$H`4 z^ShWa@nABG&Z3m)jve=GE2Vl_gCdpF>iRB^T*Sx;s2_J|Fm4H=pi~7Ew}M3~5)qyQ5i#YxqPL&egG1 z&f>u%_@>=`L95=ucgJQqpKpGun@@MgCRwufFUaSG z|5mj7j?kh@v5_1bu`wd)wxkklBri+M!|~}ZY$RW_Y_z1s|08~Bd~Do3an-TE$KDh> zBj)Rv%VKh)-;HjI9&J8pZZ>C_o;1~)5{-W|x}yG!x+$tC@;{MRM&=vdH?$c>Mw|d} zm;VOQU+y*@sz#qQd&POenDpv49;HT~d-%aj}@hCO=oRs5l>`Z6#&J)h-+k-$g z$9f4wKI1WJ^kIJ&C3%b*eMwG=S=>t?;t>y2qfeL!^cF^<4tSs%{W^&5!|Q+ts_8)% z*7rsh+-*Esjeavc*oQX*k5;3fg+8e~3p`Lw53_2I|&8D22wUXHvZRTv_F>CZ&mpdq2nTA~O zur>O^?~AZJVvWA!3#Y)cDecGe+k>z*JQvsZg}AG&2VrYI?}z57ZsTEV^y_U}x-h11 zK2=x`8sqkUs0JRgMjv!ee{?c;8xL8d-*Ip6kKW*H;~{JGD~#7bLVqCzeA{fwuf(@i z`OuPc9qg_WO*gxe;s~&7QAkt=4`QRA^O^z3c~u(^Vxv#<``Z8kA&1&{5St$4yx#!c zc07oUeoZeQ$lHzwvC+@$KL_%$%!AnIV;(!NHJuF~C?tcE*n>zm73sJ|eg7cdIe9o6 z{Q^EWh!3V7M6%(Hm%liNgi)XY^ME!|#+8C1eipF~ls~g!8Nx_piwCyR$d=?sNM3PW)Gj*a84I-ws7rRQ zM&4#!)UG||$sB*aV%#a;N@;~DeR`A=z(~2NZPL2{N54RxlWuo zjPGBE_3IY_4kMfLzK{lsGyKD`!LmDOu?|o0poctbd|&9rqqF3Z6Q_fRHt8a802V`oc$Uevu zQsw9erP zJf0@d zg7ks^OM=h_lnXRbCMODM#Hr)o&|Je4J>h&*S@!(UbZ z^3TfpXQ#3RqJtI5I6nLTHx39}6I&L@1V zLz-2*+&qBoeB6`5-pm%J0J%`kaDzh_B9Czea{f4*gMxb5^I%MpLJKGhE+Mm%zSe=P z^N^5yWU>cxcvVc3bNgyus4C=nO_f{uXH`}3>F(sX-D8N>X=aP^c{NN0@Gh(c z*blj(){_x>4xAfoy!44gB^K{4JsQ4>e(h%iLtP}B-5kME+aefI1` z;Y#34l5z4c4B^Q0Fe)2ipAd%$a|wu#woC_KS9ZZUcp-2W?wtr6PLy;{76!{Rf&wQv zFlfTcbZ|m$7o58%^U9te*H6Ktp5V;Vb!N}6w2S3}T|>47Ag9u5@Zd#4Ki2uErxuyY zm%;KcQWj499zaFR6lO$;(oU%h*k<#tZF}>?TFQ|NruY!Z7}l%_**O^T5*0dx z;eO0>#SYQ>w;>|w2HY+6Wnz2c*n|@aO$ohlv+{!YU*oTjpAz?ZTx;Cu*b}jvVpC!s zh*=nYHv0DH+2*g!SDN!oubaH4!N#YJi;Xc+zNiX>=w^|VaJTYq!{~^oBR0?>X4n6! ze6UM`=)~=)P8+lPHuX-X?F;wLwe#4GR#q`g=*@n-e`ktmk&h^)-^>xRxlt_i!sR3K z=yMlf+|P^`646vk-2uJsX3)H_nJYrb~*h#UI$NC|u- zZ5&k{E?=^@RQW&-l?%jn9a)pg4$MGSX2gSbugcUSAJIb(j1sanQ+4~M;PpGhgz=iM zT|Od$<_zz)#KitQJiMC{*ZC&n^=HF{iJIV5J|cV08PScl+eZw~TSs)0wQ3)@okz|W z#%W?N@)4iYeSWvaCKBg^=WAmpRQW*K3|8=|#~MLXsWt`7x;*~x%L7fOEV)b zAF(z+9w%h>ffYA<0)mWMx#t2pA8w`2XUE=Z?uD*Hw9Uzx!WccNS|9N?ugnzedQvVQ z5jVffJXeau+?+jLKgC5pqHf+iUdYx@k+_>*kJ3#s!R-Ti6P23AjpDnWLa*&;!PsdS zEtvJtt9-=gJT_WCr^|dq==^20kgtzLj80(nVjIQ?ef30Ze8lU#cZ^`wlXClr*qJ<5 z7_TR_#5WRBYsLz>dQvVQQ9DnJ)vZSG7l_+A@*Ev%kq_if);dnV;ha7qbRPW9Gs=n& z8zNjG7!$0=+z^ZY$)|JW&!X*izK&v zdYWLNe-Z112%8%<-c&518Y=~!;v(52r6Ux)2WW<`BQxINe zw~wfjT>GH{oD-#f^Ie8~Q@Q3>I?nA|~x3{LKgo~%zb61{=l6N?2v*Gw$%5gqb{*_hkIflO{6@gOsb zG?PJ#69Ljw)Lrow$-hJZTzfQJ6F{{;xta1 ziC&;lqFNvE7_Xg)o}ls8-Wx?8PDn29G}f9R z|FN;9VH!>!as2j_3S(8P(^?<#`ra=M%az+l48BQo)a8&S#62`2&Q3gy36Z?Bw!=H? zS<4zrulWCqcgFo5cQkHN>_@S?W5>lj8M7`XCHlVTD)S%a+sw0Y8gi9sg7IzR4&yL{ zncCd_j*@j zxM;mz<|h*0nre(St=Cn4Q2E$P-D$i1#NNBWrJc2eYCkx9C}l6Pln*z6!s!x{G*hbe z6RqzZ7Y3hJM%;cP_vO2_Q$kJm!s{#D-BiK?KN0=DabqUa0(bd|?)TNaZnUfXMD#1H z?4}B9{6y-zt`f7c7P#9FIv@L`vYVV&`iY`9uS&RpmJ>KGLU>2mbGa!nxSUY@EG;Me z#L~O7s+%k=@PmP+_@c^B%s8k?(^T+9ji2~$c?$(=SB<{aez4r+9#d_%xmuRa z%--x-!pf!#snPa)GHqkC8U$M6C&Jr*77DptfzTm{-&VdzocE3TBvCeAeht+(Qk4R?s&kuuI z;3H01Vyz%jR6`|q`G`UmRfs;TT3J;2h&Q&N5Pd`Srq)M1v3m={mO9v-fD(p!7k4Kw zUb8lpS!ZCOqXMY%5h-lljBseTk4Ruo%s?;is!&F`sZpx$dr*MBprOs2aAREjaVs?Wg0AOIxIx z4ZW!H(?Q4=EmGePy;$z2BakT`VFDlAp%+zt9DcCdJYgDcKb?F0;R#E_?WYqDmk{=1 zi63Vj>~DfJfrQd<`{`gK)f=Ya^3#zmU-D-G4q3zwe`E_!VZ)2Q;( zS;e}oVdbdx)A7U;Tcr*if^z%mL}F-jSgxx4bO^DnSq+7ihIsBEt~AE4#1Rfw8cAAB zl;HB?tO5N>^ojJ3-;v5rSKv^s>*59doDLht&c!UCdQ;=41BSM__!O$%xcqdU@WEV6 zSE@Hv{!w_7KQA23?Wc2t!}BnwsB~O@Ix85xEga45r}KgKZQ(jqemWEQU|U!^2}}Jr z2SBk$iNk3J7Grnaxw985H>2+c*K8;@ZTzp<9tL2l@zdu1%=YkNSNmyqU%CSu4pk9q z{j|NmZ3pIJ)f<Rr2pT=8ND*cY=YDq|Pg3NCiY!37LN*5@=6YksAbAB5Op$>Qt*C5PomtAI1`roGi7 za36M8n=rIoCdK60h`Xbd2YOy+4yVs6NG#bRLnfQHom$fD)Dyc$Gi$2X#J2Ah(%A>^ zW4+tZE~K0K?RC;I{$8OE`{!<9s6?2-;Y*&K6K2kHgi2x)2{SBZ4;t~h*>N#Zc*%}E zzq>cPwE@vXF6!qsvt@gPg+Q&6QQzL9K(*WRMH-F+(JZ9;kx)e%PM-Ka5_FuY1H3lo z-772sTBV4VivS#Sn*{Eku(3n4r3?YDQHoSmE6 z71@Ei1sCg=!!Mo+hq3ZhSjujoz%V-(CF0-y&n{U1|pfLBvwk0h9m#n#q#yVL2mgfl{4zPG-RxjxkxG; z`R6V;cVEhJX3IERFA;|1N!CbNp$9lHQA3&?>)bhrjOr=4m4{bkiHw_nD3m{$$pl=* znge&$*&Pz64{v14+##As7Vez|Aa0$1!6pnAZ#Oz)3z0xHsY)4kUbdNX9=@^)Lwc^t z4TAAvh^E6IHT7lIeV3ZpA)7Gl$l|TBl@zGubmGPQ(%hDWewO2w6_)7uKzwD~FE|P) zjQt#I)NH;+9TxpW^eV)U`WvG2{$#q=G{yL#@nYlHs28KQMh%F3G;&p>#o#kkMf?VT zoDB(6u@t2R^0KR>FZZ#_FfHBxj0b0_(dltr?1iu#YkVaZnc=@7N=WomS2&>3pOWnmgFKOLdo zaW%e6d677Wxa$b!Wm;w@RQYj)iVTUanuni3h6Y~)iLPS!OwxI(`x<;ERd3vWIz_$j z8ho`?Z>s#O@h16Nd~{WB7WnA^b>+3#hj~@G`PUI=hZE#?CZ$g zakyIs6sxW%C=`xSgM~UlvWJg^7iy^==c(+OBSM}E0P6)hJ{`xxvYt@m$I&UE`|$?c z^*W%hDFt!G$8h@7H5+ISI!OJHg;!0jpAJzc{sk)tm5$3#2dG#7C9DF_+34`}dyO}4 zKOLNwULBr}%TI@vd>q)f<P)<);(U53Ub`a{K9oH2(%^Y=tzc{B%Nk zi@Vi1Zvc*%gTfpnnYQ(h(^nu<|`mEiYTO^T6elw+cD%CE+)aXjBRN@K&i`{7m?j zZTtcf%?75c24Gmn?#&08$yjqm+#k%8EN#)P%*4u;&(7^m^63qstmQr7k zXJ`MtjW;mAqC}%KNDa5Ha(ZW%)M{?$4b1N=(Qe?}%q&}2mH+j2-oX6w672?t8o$=3 zOKO%o(7@Gg{3a945k{Hh{ID)+tM3p-d0gd`+kIMLO z+=&{mYE#~Lq6FgjS$xH+{F#lvi+2lt^NDu1Kpn{YyU@7ba~JOx{2COEZ1Kwmv$=xJBh4jbE6e*)5P7`k*?s*&RX-<}`kLO1EX>m#HZ;!T#F8`vt#BMYCTZ zwOk%`po^NtCyct^u<69kE^1miTxtnNL-sIe8#8@m}aIY7h8$FX1;Odok zQ-pDFAFZIO)yJf2Xef8CFPl+VzRB(Ki09e8_i7oG;v?zxP;dd)+O|@JYZR1 ziHg4iteG=$e}R$sRO}uYiBHCCia8H=x-X12nLEsdrcX=k`A-PrdaU9MkS+S& z|0NYyfb7$jCj~etNZxgM=O{~c05)sXg=ki;_IpZ&tmIB5<8y_rjjEC32_F<41VXcU`KQ#Q4=6bxZyciUb~TS2FMt` z;JNNG76!;3e&2I~qdSb{0WyjAc^;OVZc`zvxbVC>l~hNlEHI3tqEq-LxnU4ak<^{R>PDsbTi3&g%#o6u`q$C@|B^CzAF#g^PQo%GN<_E|^KKX=TN&=+zCU{hx!|Al=YHOBF$<(dhm3e!6>%YX1&MeEGB>&V*X2_{rq{Z1~}n+fOF<5tmDw+t2}6m7h%R zJ1>{^$)Oi@eloegak;d!4!x-Ilga(UE5bC~elodVbwyYjZa-PvPlvx);wOW9$(53I zF_ebe4|_ZFUl|7F@{@%<7H3!7<{8x35f}g02#;Y@MAYq3`;GrLK4a`K9x{wFTpzhR z@{!0@h8ehF^CrWCxNoz{m}eSnsxjST{=50=#M0Q0%&$cKnb<3Kee8kQvvC6we^2Tg zw<*pU_iVf|@s@;#qfW);N3Dy!BlgKSU&32)hvSDtmPBS6mPMvSJrQ$r%zKvUai7Is zXxedQd~;M*qBZgT`1$cyCH#c%S-EMlDay3f>@_bkPcx4|B>k^UC(Nf2#Cmni?3hPm zD`Fk7X-RXFvSWUW8IP~xkI`>NKNNj~VW;K%$X}y(MK6yoiXI)Ekn~j2ok<5RXAEy7 z)LHJgTw~d0S!{VVp%{U(6BEW5en@JFN;T|^j!cQnjLeK-wodDCX050&vCLCK+92^F zkIgg7=epb_Rc_bJ6-zwRXWCmi zyo%;6Wpjtv*!7Sxbg&2Un0U7++PHcB%Bj;!bL-|6wydbE%38g&blt40i)DTUoE5ADk70G9Xi38ccSD_hL;lvH3b%c&Yh%lX`m%w``Ab%@e_v|! z;CsYB0{A0iaHpsiDox|^dS^{TePK!7yuktX2&Ld>@6yA^V!y`2&Qd=X@(p8H`N#Nc zG}}*)ci1zZpxj@GXax-|xz75Hb@sCAvb>hLGi#RSu3wt=8A~CUmF!Q_c#o~a!~Cw8 znR~{!rbZ4N%LadnSF2fnfEm`ZJUk|@S7UA|YTi)dEM2p1Np;%S>X(Y_r+vc?5zfC^ z2R*)IlL>qrtHEQyDp9d~eRe@bR+W2w#g@v#HLF|lW@NS0v%sgqpg|342}Rux%x2ba zP~P#P%&Zm8@|K*<4Q^{g&C0B-HOuoiFWH)0&rVQ+UiK9|T3F1#QJU?d#=NPkrrDPk zELpy0MfJ?7g`3^Z!lE^aTh%Y?N?V*u*0(IHm^VGKnJofS>LibJ9!;j{W(P6XQxTSbAQ5TLYaZR^f@?HXD@8*6B+w5oBg>kjGg^RNHwft z6<^@rpM5N(npbmF)_E&v9^d?1h+(d8;Z=IiMU8!!{R?3PyX*@ne8}$j0 z$0N#-a3gDM5Vo>2UkPb=Hv~VL*NJ&Ovy1ZjrU)Gx%*#rq&08~VT2|?1NBSFVF^!+s z**1E-#;(C**sE%dg6UNSHO-A>%~cKQuZY-5?Nm80vooZ3k|q8JkC)gOdc4Sr@rXK+ zSkF$rQ$Cp8`3+{MuSCpQ!M0HJ-1P5RJ=)7)WxvzoYxX`KW}BGMH`nh-HKu=*c$^&@ z*EpHL;@QY=1&iThcKjP5)3PSNtYX9J&Gi)<2in=Qyu$yZPRluC#fl}^LzL7Pr+>nJ z`y4!k!f(;zn!XhdP6V4kh)juyz9IUds8meJMc}cXirP<;a`bXc@V7_ripq+7H~LM4 z&srB%9(fbKHLK|B5Sb!gVzr^kF%n;*f8%R2*|^ahV;*5TLEj(aA@d^BSH=$0R(y$~ z%+pNwn66~yi-o?Ck&m#&ou2cP&8N+;(D%vg6+aE^&%@7SiP#Wa)#n+8dEZRumTqeUCB#ZY+bqBvA(6LaQ$+{WjdBC)Grm6=~ymj zDRXhv&t)u=9*0>8Jr1!|cuc%ht*A)Za*6uooC4QY>$0^?o_Sj>2iYTpbAY`|kNxad zdhBDP&S0jwSX3;@SzcYXYIC!#MR8G$Wv}|B;;Jgk9<~zzhTZIXdbG0#2~NECrZ@zr zxOK_Ws)lRGZ&<#fZi~ILCEK!#rF;jRoh*|cJ6H)lwzF0A*v9&v1-MtOuejsNBHr$! zNLg{`k;TIr0D#%`AU&Gd@jvm{%HF5P7WO+mnppoI_>XybOxz$QwYhM1L%pMAPI056 zm14v>zc}<#QOKB0>=5B>X74XVEnmle$79g7B3!6PC@T_|mzAS^uU5+_ZXmM!Mg4NB zqj^Sg%j!B;%O(qBJJIb7N7(gv47y64bwx$QtYN3VNA6a!Kk2cWbx>Z@*)vq;exl+A zkE_^PZnLglsl3~*ulRDwT1Vl=)%JPC>lL>y#XQLd{|KBX*kpP<&T4)XHW_xY6ZF?k z_7y#Lu$Z5aMlTU2G<+0IXcDh|Dh|C=TvKLBV2c1?=*ztHNMl#yF{rm1PElv3{_He~ zT3Eu*cnn~p@tByQ)=>0!(;)RrMb(*7*e=3JWH-U9}}*G>fjGmP#AvP0x2WEn8E!N_D2g zHoWKUosUgyK3TAEv@E^{+mw6aWy2R7w3>XiVM~@~XW#Y?U~j$WrEnaxlt~BUFim;i z%cDHyaZlCkaP!~$ULNJinnTA+R%@75>&ExJYY{_grV?Ea$;8He;7ubko&({65v5k8 zoCV?%PW~7ysLNYsx8(^s?cUHv9DQDxwd+Vst%EM zcBWmXkjba{ly-im4NmmjHo(({pFaYMSo1Ssm+T4>lrCV?uif33ZMbH)i6xz+&?&V= zTG?Ua9`U9TQ4p!aVP0)w!da!&o@vh&BURa~>n>v@SNI0t)%8QmNc%L z-C}EYQ*a?gA}BKgg5_yYFReMaCrh%%@IFj6&JMrAEn!*g_E!XI-vX`Fs+P}PRWzfp zxVTBxiE!eCSTDJ1n=sWGqB6@RwbO{Pwwk)! zY4hruRYgW7vNQAYRKthb6O=BybY6-g=T^c~)`1wtV2P=%U_t2u*8ZBX7)?A)D--O- zKHfBbur>H~p?9v>Ye04FnhG3f?A!#awt7=4kY>AHgP&=6syCJeUKcWu*i_BLPQNbp zClEK$ak9gErY#q-7^VIs77$6(K+1IR*x-tek;Tg1;4M5wE2&kEYU`5byxgps#<0po z47mJka>-YsAstK;vI$a7JIg`AI_zO1Se7ne)86DQe34crn%B;DX04jDWz$TG2&G63 z-ONt+@u_+rY7;+OWfNmC6S!^Ok!iEh_*Q@frFkYMvXyTMBT(}fYUKnmCghs8=b{g( z=6Hh2&dkb^@*^iq9^FVdN1aWU@HQXGleLnX=iE|{&vHSvdJv(|6x*9$ai}T=T3w#h zaN|89a3ZER`|xd{Hx6$pZ~Q$w^Ah}k`@bU;Vnj{SN_y7R6_wN0ZnRIYSIs??G<_SS z`8hak!^ngC@A87hR`Qc`i$CKM~!2O4Q+NnbBwbn>A7 zhPQjij7fLxM(i}H$=n9EE-A;f~plFs;R0_2`F z*XR|EG1@}a0diIH8zu9gwvanOZcEW7uXx6=i9h-3gH+Q?pV?vTG`;z!?x-nM5nkc(QB$<*;Ps(S}_VAkU@DXm2*3^|giE zfr}t?DEb`r0q-UDWwdU6I0NLiG%ZG3NWOX}KrT!}E#C2xsTAx0jgJFvHqEgGO?Bkl zWQgx56+)rPmXX{6ctOFWCVKfD zcJEGQ#TW0RJ6-Hd8`c>h_bB92?8e$ct^m18x#JXRO9KK89ZH+rrv4TuwTL#-!T`BY zCB{pgPg}?xAa|iO9U%9siXml(mJN0dmp$;J9v{mIugNEB7(U=Gz?-Ic{D5m@bktKt5bQ zo=b?_xk?|`MREn;*~PY5yqVIt%!WIX%3Mzqw}NQl4v?4E8yLzGCE(mD&H&uMf|lyV z{b8vtPmty?Vsl7?L6L|nKyG3C6QrJ?EwnH|9%7#)NP~fda>Vb90*N-=Nf9Lxi619? zX*m=BYTW&?|BSggdXIUvX@hZIR88b$LjgPxDk?HAD~~4Mt(EYbfKyl>wzHRasOTAn zy;qK!l!RKrh9O(#PvAqGQ;F>f9MrKU2(Lr-WiKyx4O=0@Uwoc-Xc;CJYz6EforSNI z30~d;cioTVt9g=AW~}V8hrF5Wf?nQ>$W5w_JV3}7thu*W@f2o}PJJRGjg9jSuj$r`UOytO0GC4VMGm)hx=b?E->7eJ{ zP`0A4cL)l!L@v1g;SL_pfaAg9k9z?L9s3tr4?uP>s+1K99) zZz{WSr!WMyfGGyYX<1s{r+mGIM3w05%ueZmC1w{q$(r`o$Zaq*L++!%v#F`!R7&KQ zZ|;?NJg6O33#ziQgBh3+F-^JUD!;T<7%F8KeKYI?4)C<i6gn=m}&%yB0!%@L#8e3-C5!D@L1caEpva=8Wka=F?3&hh-1 z_qj923(;Gm`@@-|#`Is)F;lVe3*#YU4!?bMVC3VGYjL^U-wZXlT#lmt7TBuWc?^F| z2Dy!5m#Dt5cJ|Mq-cjkb?L3CR1~2x=Ft6wWk~Yi>H;MM)#Mabg>%t#Vyjx2#W!qWP zFfZIB+J`Afp33()t3dDL5ml5wvloVW!6I!RN@^N(X_h=(%GL$Lz2j_^?L$aV(*uFr zB-LZq&f152&qrkqCN<5>1HKit>&&1KlZqW>=5!jz&QTc3)6zal@GY?E4WYsIz?lsdd+Eb{-D3 zOKLOEN3&J8_a`;&`ax>yVQ6Q^&i9V8)wZXTnnq_5Tid2OAhNUH&i7`fJKOtplSwx9 z0;#oK7x3QHmjt!z4hM$n4}hI@UVyrr-=0Ql8odeG!h*oAIufDBG2q^3~` ztbC-Dt(7BD?B(r!NKm_5AX^UAht!9^`sa`0J)sw=X?J-Xw}o{= zwsREk3FncTc29s>xGTZyqfq6}_7puehkDUqXPKj+R@G0V8x zlSoawfnoEI*FM1k#y%O%8#s~Fv>TXiUQ~VR?d-xam^@tV3EifKZ>LrL@v^gP#~`)p zb_=O#^b0!t!kiP9+K*$)Z6c@N?d;xhyxq*C zrrB;#v&(1pq2^A^M7veDn@CN&0gzhwr*2IqAEri9(;TLhn%W9sXHR5em{zw(>7`~5 z?_8tDBei+$k))>S6+<-{{^e^M?}fKiyMfd+8h{-iFHJgcjz^VOwc`SuZv0???+Bj@ zZ#~NWV0Mt2X1{=1*f~0!=#Ii$%GI`=)HDYsJQ{2{Vf~`!7Xd0gR0l#~1h-W-tSMpe0x*ST z2%4!>KeI=sdxsg*%7OSdAkwWz2ucU5ak!tmMw%9== zl-U7kbycwP0_4zAiZZnlzlaY0yi zX%VV$+)N-n3?wQluC65$rE18@1c#8dO6n!a#opfWXk_p==z?Mgvz8%;8(wL*u!>@D znsHn)u-6nzg})5aAc4pv1a&W_3js27<4BlP>TGLeP1?I2LVtIHte=Fih-Y5W|?<{F>NZ)zXQ5> z?1Svt)SlRsYclw2v>t}K{FM(T$`+JTuBQO^K&jN@?kSaf95>%+3l6X)-eNesVK$-D# zmb}vlW{IVg$)gwv*z)sP^2_bRqb38;iA;)>h-GB1npH)BWFHUGLV`_?L(JfpB9zYY zGVev0xh4Vl&cmKzV*D{$P=ryW__y0Y1>+rF$-A=$DhmS?c4)7|>*#SR^8*x+=re~GL@63?JxIkFK&T>Cko`Yo z%o(7FMb|-vFJ(^U$OaVjx}ZB{O@N{o{g5pg<+Ozs1}KtId5&a2(H3$AD5_Csj%13_ z7IFp<;E2WL>gH)-fWjLs%~d2PnqZX~pC72_&D@`RHQw_H!ZCiB>+Pje)YUmGX8^I0*pYnQFl}0Sdb{IZB%SNhn3M)+<Eb$I7EMnKuBauCT$FKxZV`=WRWi4ABj-n+B zU&ADei2di)n^Pl`;#u-i=*6*d^oV7%@E8`OR#$jFCPj{7hQHRbwe)baeR!Df6Scq1+?E>M_g?Xj%VzCKjT~%XACg=#`-2_@ zEPc6mz{DM5PSz~*OyB5mOwDg9T3zQ{Q`x-1QCyrPI%v)ey;PQR8*2mrTskkMhrsT} z!|V|g9P;Pp)Zs}jB6eNb*19?Mvt7+w>Xt59BNGkzBJL(MWPch&Od>>1N%Z7It5Nz@PY+lQjfXPu-tgS|kHsq9NUCe9Gm zOXlTlK^Tv<%eN{jIpHGpOND!B!W1@j1#lL!g?N}3h$&SdrQw5XMZHj-mbe{jrsb`f zmuOmA9~lW{TomQvWuEGzNY!$z&7 z0{>SHu5j$W=EsmNvQPd2TRnbxj1?rbuocUGNQ)?Pl z&0CQ$jSXIdEUaUb>9LB{;9)Km)7o`rcWO+==?L*JYg9{WMxPZT*vh3Fa%LB=@KjD$ zc#QU`V=ofQa`rW$h@RispPz=+eU_+St}3Wmx?$6rRgDG9 z`z&UQ*8+4Q+lGhS8jqR@RBDYa4f#zCtD9$(Z=T_vU0PpWVcoi}q5m8aG}Khh4FxOa zH8ri-Qj?!?hMif93LN|sOI!!=$!yFzZ~y2F$=h~{?Lg|J!BYPVp)1_c`{Wd}W;YV*N9V!yAa4)s0j+km`I7hyw1ce<9ZD6g37Dp@_X|1|MssA3hK?HNC?1^^fe*+F_> zli1+xza!(UTE#PCb!q8_qLyhZH)i~)eyMO=&-g=(0d!?V((Os5i9aM>l{g6(#q3TP zZ8>S#Y8e#&Nc@WUgt&X-=EnXSdrj=5n0I1YV=jn(A$mh}n)#pRI&-Y)4pVxW@wD-< zaeUP42#`1=^5Muuk!C}OVP3?Ku&F0kQ0IY^k=(7S|lNH!=g;n*@-AXL2_I9%ZOF_ zP@+U`tJoXNC2X5kX){{WNkM=DyQRIEw$Rc}3i}hk$D7A9s4Z08i9kQBVULtSZ6Q}D z#qfE0kMs#AA*mFKJUKhXs68Uh_|PjT#gx6erC8WW0ed`qr3TSXdqHO(2)(`6o265V z+Rok(%D-6Jz-c2nJ1KGxyI5LdXbUauq~JZ@UaXrZcPGW~DcdJ);IxsPofN|7u6?@6 zIXfwePvrh{2vH!P;|IWFUbkQ3F`qsVYy&c(NFl6hI>mrKV$|D2%f?jp(thuGyyi$l zq)8HSP1dOHq?kU52c-7b7IJk`Sf7;#r1sYqa&}T=ALLS8!f6XF?4;m6{SHdit1UFY zlj8fd9F)eOwoq*+MfiFBpw#5rLe5T#@WX4a=n_TEh1bKPP73pL@Dhpg-W?o;`60L? zm+GQ9J1N=^PuF!WNs9WzB|9N0?sagSYLhKW!P7;YgDTpswv%E3{dlQV{KGc6aXC#; za(-}jMnGtZ4IO92At}S!lGOnU3v~A(sT-(-f}16Z48-9cvueWy*ZdSJDB31x zY!KkY4x=qJKR_Xb9e2rx{XG;Ai!^UX%nZKe|Acg8D>`B5K6 z?TZ>8`E=xZ_z|1#Gt@@>!K@!<&I09uhxpU5lx(l+-j$+epo- zrc2vd+h)#Pm`!S$+yzQaZ8Ea64>xn}LJ6s9au<-AEu6iR-^95Kv${_WnUqZ!p|aiB z1X5sS`%F^PXg7AMNg^Tq(!@zc#U$8Wm2=-PrE?(|+gniO)$K)k*|O!T&ByGvEvSUr z_8Fw6$z7njQ(s@HY4rKE&1it?_Nk<%-JM{+39re=nt6AcLTcLG2~{E+ z>O*Dg-@?1oMS7{BWL@otcDAbpsa3XL*nQbhll;>9F2?P*TX^T1OlsPl3syz7)fVnj z9`8ud_9k_cN!I9*I`73E-km0rpmujcC4@KdDG%>X6S~b7*63MTVcqE>0oii3=aZU7 zcVasQDO*h79Vm|kH9HXS9pMwp8G(18TvF5QKu`;F@5fN|@(z?kYMLDgYM{WWoAeeh z??Bn4rrCj@mK`1u{tqwjKn}gsvcs8}%eL_jl%-p?aK_!k+js}ElbU7+LMF4q2giBa z`RruV%Oohp>ME(<&byP9)HJ&jQp*VskNx;|-krvGpGkP#%G8w5P#m&@&rX@7rqP|? z1rN1w7HG>3-nqt+ns(>Pfe%Pn=Y3@d?_6U^O}lg9q&b|leA8g>`5200NKK=2u~UQP z@5o@@oko+Oc6S1KT{et|DxqSCHwXBmy2C#@M8dy+2=726_41!1o4G^y$wPSux`5QQ zI}oxZdzOUMRt)uyJhIbktR5Y41Ffv+;+n&_)cf@WAz_H+VapLV%T4sti-fFxs>eHzGQDY)siEN7OV|duGl(_!5 zwq|-lO(&e4v09X_DsjTMZS9NFrmf;Cd0h{xNnWl)jBdKTlRTf7T`5@^wS}rX$@BS{ zE9ITNCX%z0JfDYNCGS5qg%)&@=doU4;OpT9aHA4zBm{XfdC1T3nm{WJT(41=T&pa^c|iq62WshOxK z0t%=MGpHz{?5pg=1w|;^OzX?jrepE1nYtE_8P0ZtJ8_(tnG@ z;X<$HIXi?qN3h58ngIzv0+fPIiWWBWoG$c%-o8U{-TWIQb{F%AX6HgD&H}`ud1t4I z?R5VJ{c;!jN56X;KOGuw_x>Wlt1gv45L@F)f=agA`9YMgy zgwSwIGHX9d7Jz^hPo~{V*M2k{lg!!=$l&}?Kq(U5K=I^X_tFy!8jeZ6Z7G2+p7G?w zy>!V%!!gM$89^F+oTTtS@g#FMEV-8V(r`>Nt7u9VAGkBUYd5T-m-W(cO!935X@M)X zzjj00?7cJ`lgt8-DJhtu`nqJ_fwM} zfFH;5UK(>rW|p%qk;2r(lfDP&ET<8eWJU@g`~dz*aCq=d*Uuk-aa-O?BQVKIL$bgP z?W_ms&XmSulI;?RNfjS>47=k&x-+Hmm}G|=$ZUd#i%-c@57M_2jmIS4Hn0q~NIcIW zM%_L-Cuuw;**S^Q0?(En+6Qy8pqIvDk{vf7OAwr9d`hYwf^l>7(s)c4YMV7s+VY3! zoTTxXWalJEOAK(AA&)%-b8>kvjmIQEZa^kDBKVXvJWOW^jmIS0li=+T0HGL9DjtTO zT++K7Uo)~w0$IF(-RG0`!oyTa8jnd zW0G$hkOiLczx@cf^4fc8a3-0lOg7Z>uee+5>F=4wW|Ey3hyxlJ-s^Zh{n*hcO|r8P z$PxlaYC!|c!opq}tx4uP0=u!KDb_%5%bgAI9a-K>LpRBHIgkl%HolQM+d$_94dNu< zci?>xcrxu=2lHZWFOBGw5V%Nz^*wsY1~_#;wyraIEH1jj6hni;bS9JWSHl^DB19h? zru$iYN^?$qS{D+!uK<%3-C$JrMJ#&;tm} z8gTfL=$~=9f$zzp&>;7c;^@l&_gwa(cv|vZc`#n8D6k0#mY2od%TlCdus(nM;>Iz zBk*lSuO!JdXMS_>!tty>FmRIeOPoNiJxIs6M&KTKh(R#{_e6-1C)pq{KRU0Qk3R@5 zdt(Woa4a_oQl&mFZ7Z> z;BUP2axH;$Jju|dss#3{4`GDh^s4sJsnluQ=QbW z2!5V`sVe-~{-(duv0Gr@pBqHJpw~xgcswxVO__GbQ6vM33ye9)kc8jDW=O zZUmST>8m$^oC)u2+BU0ByR;impBI>Z0v{<`=sR%wJkt0ggiQ}McntX=XG87`nH~I9 z@U_8H_3uD%yrH@Sy5%~h_8x7r=3`B-#;o3>&Q<-Yx>c2|d{^0_R4Hy(Bn5p)EL+B1 zs&Tr|t!dhG{F!C=b70f<<9rCK24l#M{2VUyV!Guy{t!Z@MzL!h)cEF~TFak$VEN%JZ@ zqyAe`mbuUqY2~ZT$LDX7peNEHAfc^2{wh0TriktFiM$_Gkqdl}NYrcmjLLn@dk~H9 zS-z6Pg$_pTuklkxQi(S*b-2)_=XQ{*yNCByWE9-LgWqp%)NN4aK4A1lq4@(@C@>@eYyeety0skVr-Fu z8QF;`3SHK( zW&Xn`xXUhcfkO{W4(5cpWdYp!)Zg4Wm~Ys{>FqA`^?BrGepv9r4Q%01i0B?PBs3wY zSz!%=!{5`!kBm6><>u{EF3c#?PH2fc!y=^zF2h+ECh6x5^$j>4F4S5ufhOZ1M z3Q044999Q``Vt{}UZk36x;3jccWTl#<245LPwEc!5%vC%u_3zP?}A?sc7e%UOR$q1 zUSDsTp>NPH)hFwR>CWjs)&0j*3Bc8#D5Dh5LcG~ciYm?HibV>ma*63))77SDR0`!6 z$`_RnD3g>oDC>3ik&o+}V`iyd3%g!DOLdc~S>;eoS3RO0qh6u7)aG7PQ{;>g zJ)TVcrZrkI4nm@}Mr$vlRY_el(p@U0%gC--nqJdfzs6yS9!m}*!5Bucp=G^U89f?e z+X1gp5F`$gkq{yel30kC)fzpWMWQL_sGirJRhZ$7FAys+f|uldDDsGijwYu+14+Y~ zq%9mu8b+@F8F;@<_Cmr(T5+UyG$v={&(4aUFA6^vbA-}~9_IMMdBwa%++PBpHz8yl zByT{-I!IoJkaZyNH74-H<-O+E7#99T#HF#IuA!uEcDu7?Zpjp8$KJsZsvpIH9u#`zwQgePnU zY-vihw8flb?eIMm`SHatpEVJsNLtKUQingucgSH!bHPnp)JrD>^#z6P2)i7Dc{iIP zLl1`L7*9da(KN$1h7NcQdqV8NXTgnUrv62Jk?xFcr*4k+n0CGPGR^Cn6`CORJ?c!= z&#G;z8Ol$US1B)5ysTIp^evfXxjjx(>_&H*vXlHyW7kQ#%3#Pw0At8DETwL6ry;ML z?3_UtbMlp%+~`3Q{~N!>z)G-il5ldm!Gi`~y9~_T9SklliaGrryETpa2G67og-tzG{NTvY(OqGa zooJprH(*npZgilD`D;LN1#a}6Y5z+!s)0?da)YA`G<7;{>dcAI)Z>5gz(DdnSmj2q znJdoo`*Hb7b{9I#z_c4oo<7f8U0kRpdd<+9w;mp_rqhL9Ge-{(*l4>8y=Ex8tY-#f zSK&g}nJv%oTX=cx3SHROU1x-vtgacnC6> zO!}hUKxX}?Gc@2_fj@65a%P~EB?sd_oTU(u}?8T33b_50`Oqd?8{=F0>aqj45E@`j6tRKU~Q zdPnic;t)S0}xhz#bnSIa3xgG zN8y=euDg;EkV*!Ew)P9KNT}+g@XS{PUI`J`7yKQ>i(hnJZe7+#;hANwoGAY!A*`OT zBaSDwFX76mpzlKP%#2J3t>h!y`X$`LmGx10=Hx)NcxjRo>3H(pmz}BB!aj<~EOQIT zIzfsr7EhLZh1MK>6p>lB@4#a#SqgdIyVM*kWKuybDVW$A4OyycOf$A zWd=B^eA{V-zN3iD@_h%6DuLDQk4x-9!sN3uXWfE7Q{pE^ZdmQf3?r6IyapsCa0pQw@)by-$P8^oOmyq_NN zGwnNyx-2gZuvr89uH|Qtwyck$E?O}k}vK8B@6l} z>hgu!mKbP0c=;|m02Fmub^t({O$xUdPqyuX0VwFB7|gQL5LQ-tsTogBqqO{9ioq=V zQUfx8jFC>>#dpI?t*Mt{Fz3nr!hp;sKq~rra_`-p^T0InLKw_otcVeB1AmzJbjD4@ z1<@rzugeDx?$O+(eoA!;oKsdQZn?!WZTr?-?aB@5D_A%|SUls>c}!GP5cE$&QcGPy zzH?F2ybfqqG6Xq|i%&sQ1Pn0>Z!hZe?QHER$o?o>e!yt+XW3ITwe3 zDg{w*!5RT{#q|*NsJK8e6(Xrkwtm8m215mIcEpB^LOF>f?Gr8n)@e4_@&Ir$HT?4m z@GtfXfMRmZCtNl3xKqqi=<%|;`q{guaT^zr;ah>j?T6nAoDZt$D~2IL!vgxF!0mb8V* z@ePghE3G-u8Gbg-Bj2S_v0(F#uoHqyAjHgpAY~AlI|)q|*sono#@8l)eE_B_*Sw2i zz?UzUlT7klEDSg_5`Kz-W~8J34-A{&#s_}n7@{QLQ=apGv1P&x(ZYJTPS7hS?S8Sk$Rca9f1Ho#~-S%N;Bsu(XrxwDFb;7G?d5)Ym#JZn_ zn5EWo7O5!;JLycO7M4u7*jg^24eAy`rCHfKwA{N^8$0?|js` z%7NeL2|-(f!tM>5WBSgt)if&faA--W(zwky-teNK(x4A{BqTfdWbjSF@%j(+tpJ96 zuP#gb3xFZd(!8N*(dgAKwL^6h41F$Fex&SH>J@t-r0%z*;fkhIO}-nQIA>@$=6V^f z>ch(K%huv6#Q|m5SZy(YZ}OU>D@O(WCRUUex`8otf`OAI{w10V`Fx(QEVm zV2(EzlI^E_H~MJ~2^o-6of|weNmU4!&d%ceIi;{EQQ$`R%MEI7F!?!z8#X}Ad^h@F zCK}{r^6czx^ufGw3P;T%;Kc|p_kh(uyy~p5<`7_q+~AQ(zWyg9Yu)IQdA)&~js^!* zN)lab`2Sc@N&t%8g!_D~w#y-zLd-qZj7WMvj6B|1HH!8856&Ye_yc?StGpuj z7^oEY%YYY^HE!_WBscuRAMDF>vb#q?r9Xce@KVt39toA;4sr-7|CL8flxJ7uj)j{0 zejQLTr#l8J8Bg*zCCCXali-62zi8ne7{8~cpp(pJ;cCO?kZbjy>(1-6no@O-YKQU( z#k)Z#ZwXhurQJ}pNsR`)Gd7rs#>U0W5bqx7p*Gv1K-du25T)YsEP=X?h<6WcuK@<` zo1fs~$n`dEmS)u^6|jBF#tkJ8CUK)xuzMhHC2>Piz1s-f==g06lF&?^A|?eE$6GAK z{S>^1Ey-LuFjq3>$-{i?U`yk-D2InhM>(7{cl(aPzSxm3FHQyc!_*S0Jj+Q>h$;YF>3UCp5hwg`<(6 zsfGd8_b_o$LmK16t0DZT!6gR+4oWv9x#kT+vyw&qcvy-HzWl-NdVnD749qe zqk74PP(Us8a^!21?gJ238oWIs$X)Nk&Sk|DZKKJ{GdKe}lXQSAt4nafffYf55bZ^@ z=f!We1?Deol`P5V-U0)Tn?o?14-72la)GzOM%C5r&_UfZxfDLWmIeI!rCStoWG0Ly zTKZy)a&W_u?EVg%pUEi{sAiimJ7&5ChaS*1G2qsVtzLwXyMnGZvenJ+ZuYpT^GGZ3 z8|Cpf8$;b;`y@*g*gsKRH@25y-cf9$Dvc2wPww(`Hg$(6P6jn7CIqRTQ{4}UGd0FJ z#>+x8LMIvC1aE;`ObbnwrjJd}gq{k!K5TE;;?Va)519sseGbNu7SmZYTMT;vj3Ofq zZH8rrnW1Y#cPc+p<*E{tr$c*GX2U3hI^^q+S3({N*#h^c_K;M?6N>H1@Zjfz_XJ-D z_&0gMMwP^V!g(#UZ=TS{gwJdJx z%u+tByj$^q#skK83_l<{#YrP)3|594PbmA80BV%>-;<@pS zb2Aprb+lSas+&8Ov<_~g=1Zc7IW10`-Cn+A?%K@3t>l>)E?Ut-KE|Y({52So8%byc z7ahBq5@sgUH`dhI+RB~z8L11ZmpbAdNlUWB-%yebrM;ub?r<(bv4!MC0o|)4GM0;0 zy`nlscEvSZPNJhY1DQOGGb&yrHxA*Vr@z2d$xg4e%*kuC$IqTqRh?V7CTC4jhBcI# zWG?VMEUliu+L7&;vo5_ZbUZna62_6Ek&s+Qj$Cevj$y`_8BOWgb(OaEMHvkxYby)d zb4nd$Ym@YqB=^@VqZOs329p+YEhMUT%^TE4RNPmK=O;JMueP-&W;P7oB<-uby2NB_ zdu38#N$udPNiO!zRip-!K5{K4y(BCgl8t0CBr!cw`nuG*HKl7?;+M834&Fd^j)1D` z$stU-$@`E@?~+nfw_2Ap)GVy7EiDKBVA`q_4PD3F^8DsB=eo8BC}2gsAy) zHCCo3&7K?bZ|OtP2!%XEj+=qcUa|n$Jx)x}A2Eld6rvFbIY>649uJdGFnN${fN84O zM|NQH1UZOFKY0(5=^iPYwC3FG+Oov*?A7TZj|Dumwav?DuUPA7Zwxs=rbcr6$xD}T zBgnaMZdz1vTU~KkPHIYO>fD^UWoy9L%hv<>45 z$l!BVMkwAQlg`1+dy`~9QuqdyDVnRIq14w%ABx6FUoCwInDKeFrAg}=TO0Ic##QXM z_SY|0MvSbLRuzqfzS;N=(-?o2p`tfL_+hk9TuzJywpT{=x8Rid2!V`M_pZOYo_Q2W&A<7V%? zv!;oDoW^6)hoTWReoB@BpXm(NKEu~Hx$z~f+4CE#%Gzp;A4?gCejLW5WE3j$5t)g} zhvbzrkbFSe;IHoYLzH{Kx__z?KQ)G1@PmY(u~3uogz+8YWriP&!SKzv9ljN-jB^zC zD6UdeD6#>xHcx3&MyR7ye?oBeXH~mZn^aY*MH&Tu_|#vhU(`(35^aZeg?5&9j8?1p zR`Z(X5zS4SX5B&kC8lSz$918)`MQZJYqx5MZjE84@;cMKA*msD{n5}K)79`jJjA|% zp*sz4hQ4p`1b?PD6C9!4AM%RwN!N6r|ik z-|XarhBiZJc6n-BLS|C>JWE+r5qbNno<@ik5`29R#>fa;*A^X6nUy=c ze!=W)_7JfhgzM}1Cc-CV_0odM^fk>nEwAby9hS^)2%n+7_43YtD_TB_sQKR*=uz+RX5+Q}y+XA)l^; zeC~ngHuj_|$S>FRm`5&&VAlvFt1+L2t}5S0;nh~#eUi6e71_KYCG8+)b^PfyQa z^6U*gW{6C(^9Ja=OmhE5;JmdRI9HH8?QIw_<6115^$pxZMwOEDP^MkW)OP<2F<7GV z*dMvya%N>z3Av#Oh}MxaZEexh8<;-TbMqVLmsiiPs}`AkhqEXPqK?U0oVnJXlRLXT zsVQm+$v}OoNGSB7!a)?xz;3Cuc?)Z+>ee*Gw{}$9qgF~E&Yw3ot2Dl1jU(G0wVWJp z0Y1yf`@mJphi3Ws2kdpHlrFb)$=cG)y!x`lvM4)ofM7*CnbHH=%pl>A#IRT-6{$Hb ztF0|*8JP}|rM)4HoWG`LG?~@h7BQU#ixIVOZb@UlV?jw)%7Vdzd}X(J*IjlXY>c z$R2)ZIb$e8tssXtfru({6cTM2do)VdZXP?7ebp+`veqTm)YrwACwDj&mF8qQ z7SB#gjbx!q$ja{<%&`U|6X$D-$QQw2B6-kWg@M#Uq8-EwAKYS|5zbsADtxo6uCOd2 zp=wQPQ*moJbBCz#b+2gZh5kkMV$Yl-XQ7`|f0{mK-_5=aJrRo0Wcvo_;89E|A9ImX z;j>5<&W9^V4g8c2JpE+NXayMm+b0Cw6cn}{ZZN(wT?1j8pARhnOPJU%gEAmueRTbUq5OTtfgTbD2UJ zbQ7G@q-bi~==3{jEXVA@8^*$ggm*(~-FD;R1{7D|Mz`Io2Ch`?Mz`H7rgF2r7ZWy_+hM$5 zwDE|e`EGRLeQ2uaV&dW?;L>|bz3e@dz_!SZ9=&i!IQW(ixKXr+{BQS!iurEz;~l3M zkekDep1W|FIGAiW+c{i@op8gt%8d@Y?R(ogq{zbZ0`PmsJB^zZSX|K&4C716C?vVc;pH`{qR{yDP2V=KJ<#A<=;yXoI&=*0)Thm5pHU!l}xZ{{SZVa3j+ES)j z;cSmu)3H;2df;dyCk)*~0F1`_oQ%4yV~jee4oG+AaigbM69LZztxjyzHp&)ffiu?> zYP%122LSVxidGM-7+8vG^PFmd)5yg>PH-kkPZ&j12qf?o}U}%_1ErR@6fo)|%Je~{tv!b=h z)}Cv}0H-S8bPsUiI||{nD4L@`CqSYCGwVQ3v^L+oO5ikhDK~mJ>IByVRvy|#%!w2) z705H2s2UYOyc>vVgMb+9=qP}Wn3$qJBvP|mafA5Uq@k!A8&nRQE`wg;IRSQT zJjL`EbAoFEuoj`l&;FcfZIV~mJyso528`|pM)6Etz={GVUT+uBDFpWo0K%3^kHN)^ z$k}{uBIr^IEXLb;77&6PqG-?~Ww9>t(=1>$L(y*hSajMci?zUFua5;BaHmqsa(@=_ zU_~1+{m41SVhymESip@|V?#)80UWP`jU!n0!RS%bTR*v71ypVc5IyK6I^rWr;lq~u z5uIm5tAS{;gKuvFHH#AoU|j~qFeLQ4&X2`<2bEh4EFSW)fEP5Nh*NdL?jr#L10Gfg3&e4~P-*Xm|t^ zc=}IYBD5G@Epo-ycsjjTZ3rqdp@ZUdH0243iqfa&r8#ToG}mWZGl4D<-$`iN3f5UL zFo07;gX9Jjv%8Xj;smf>e6JU${t8g{PcA{|6P1Nq+LUwb|S z;1SDc?=1%=naj9XT|95mTfYn@4A2486F@ysTr|o~c)o+tEd#n&mvLiMc$0U+OJjvs zlkh@eD&X_j<>Eb)xR{JuL3MBdhea#6k<-QIwG>?odYW3@0@{AO|$U3qAZ2 z2G-^;fG=OkO;SfJ1;$k?VZdPpK(?-g%SgHupti95rJiuTiFV7DDPFe`X)$?fPUl#4 z#1dfGFspM6e|w6bY@Uzk_7ZPTA&e8fmJ|4Z6#(2bCkpVO-eU66tj>w!L$r4WwJIhn z;2!OBMVz8cpQDclOs+q4AL^dg-J`o2HoQ5y1YN`}Z?%|LY0@-fAw0x)>es<`?`Cz2 z+NqwQj#VomSj0=J2UVL@4XUN8WYsX`IpwF?quMjt!`gf3iRbNb26{m8l=431HOl`e ztCcy*cmT29rT9bfVdzeiCG=3}DbwK4_sO9_n?@RqCqjEdO>la;HgppCXwatUN&5fj z@6%tSuQn}I^a6%SCSCyIwV$p`m#K@>4buLqeOLQ9v_yL+9ykuyvhxWNUe#lc9l?&Y z8qyam$Z0Ka&q^p30SUx5lbEGV(X-akvjb5b5oADYBYjxkTC%nx(^9t1zC;vPHD(HZ zNbU;W2=E(m(wZW?jF`#f8BE6YtINL60b7-C(~w3YPPn-bvY{Be6zbPPLL zuU}GJmbQ9fdg|hO(dkPV1cqJF6s`E0yblQ<7*ALX79A#lUzTYv`h^me%%~iunx*qQMwCU;0oKpLpm3QV$Fuit7!S zWReFU(HZ9j>0m`o7MidZ{vef*#zwO!x%Jhv6YI+sB{|EA#fUJcNP`M1pCm6VZmK5@ z&ZfeM%#zjF)rINFDf2`FHll^h$_G)+Y@MdAT^lWOs<7w z`VOjp!<>>e7DrocdA6gbsUth5es*=!f(4OxN*`7%X`8>GH7%iVojvkaat!(0Oa8*- zHZnXI5<*fSna(Z+MO^KR7AAGn<)+VRSQB}dl&jsEQ(Io>EL~C@A9**q5&7Ih_Ccb( zomM4vCp#ew_jdM2?C+iC*hqFKDUy&`Q)sD4$xA3}EsxwqMuq^Bf04^E*?FKaq(!Yz zEGH`s@MjU}ghacHaT_&bomppKhwx;_O#FkL)smU;htg0;j$`c=to8<|tu?GPT^%%R zYnqwfmq&`mObonphFItTpC*SwTZZeR|DqhWP22$RKMd_dMA%rFP??(1T9VvY7k!qT zFoK#l5EJ~$6xWkUkZ7-C@=yG@-t3INmj2OTE3L7%I8zs`t`wb|MqeX+D0(eKvy15l zOGZgWRdbUysU+Xgk=)iie@=RN{>UrIE(J*JAWvb^4sq)tX(N9?GQE{?^%07=j%;BM zeQzrf*Vr}^83ue>54`zm)m#OsgZGcKv zS2A5MN@!@Y&>qAnx#nSRGCu%x(Sn-+2@Un@VKg-!fGqJ2z?Re9=53E~V+B277f8>| zB=oeH(c3+UW^&~i!PFKl;{rkkFuSt^9-h(e0c;cU_CF!X_aL~*!V3OqDXmuU5r7tg zza--F;L_g<_Lf}5NjxKe=!!A%xd@~1}f;u<{wZbBZci z@|Bjm5y_;omUsA&uhis5B$JnF`Qvx_N^9H*VluOin>K*rMQ#K!xwme>esH=G$K1*%f&@S`firUgTw*L28BNBOC^WBJYvS`$Rb1L7B@Fu$luGHv8 zgp)r<4LF7E?k1?zFq%KRm)FVRZiGrNkLE8OlmlOB+A%jm>%HW4__zPD@tLP znc1rMXKr^l0GChVxXEaX4J6>$4SOfLb&~9;1XFdpyPkG8iw%}`O}*I?fWCeaM&!)T zJuj={mS_Q*bpz}Z;}%11KF#Gpu9@a?A$JeW5Zvd6284xpc^F zhnzlcE>BQActZsFY9lvD9XAIao~G4iLvCCzlBPi}pXO#kZX?ZI0Xa9#&4k=1GO*&z2I%_TtYeVU7hobGC*utF}8<}8pap}DD$+e&j&Aon!Q#X;^z znwt!{;hT_l666*@P9HasSNgnOR_O^)aW^Fy54pE#ZXDzk*C3nAAUBofE`{6*$m!$8 z@(kS?7^B_S;24d8hmX^0qapV-tu~6Ub~pm6O}!SYjf97Du0_7FkZYj17|89Uxe<_i zo#vt;cNTK`xZymLyy{J6GUqxjTpu@#FFHP9vw3JiT4m+Dg>y5rO4``BF)j*d`>sRU zNWS9Ka-e-3Xw`8M@bDNsRL7Yi7j`}7hC=Rgni~SSDw-P%x!Y*&63D$sbK#Kt4RZRp zK|JHl258ykHz4CMc$jwsvNJ)ho903x_Yln)A@?E886X$D8S8~WE}7CKcCOb4=*WnmhSjVy~p z?qOLNb8?JjajXaZi<04BU%|3C+O;f;!@ZqlalBt+Ssd`QEQ=#P@fOMfhMYKA7KeHh z%i>rcU|AgOuUHmGd+0XWUKnoL-q4>BCn3 z;VgJj$hY$W6EdY3m?YKy$T_ z>!Z0E$o11)HRO)bTovTP?nH`8$XyOOeOv{v;HUU@>AMrPFNcS>(Q0Lody(c!A@>{2 zt%cl}?Z{*et);mY zkh_`YmP76tnp+0BpJ}cTawB#ktrK!tkkiLGc-4=L-)tr~??e#=@bG?G%?`Q$(Of>{ zo?MTlOCk3?N#Rf zw8V{M8uA7vYVtiMDxyDC9X&=VB@`WR#46}Ra@Y7?IK+IItONqZL!=WD?LPL%HKEr$ zBj!QIq`G{8-Py4=agBXRUFBk%Jvl9nA>BBTfb4O)acH`{!gqXeLI5OQsLVt(k zeligf?R|{*o0AYEd3OMLc4irl>F+BNkHEQzyM$MC0fG06?) z15f=?O%&6a#a&KW@m#0VmRshWBRZKHn$39m9*WOV7m_V!Kx__q2$L)@RE8w?z}IK0 z;pA=_m{Y@_DPT?wO-iMFNM1TZ1rKI_?3~+dRt_3URzU^DC4|Eyg4_;iLj;PdE#L+7e9l?A&H$#=f#b5pNrBE;Ej4jl|}uL}%+0I>R; zknck_g;;~%2(Akrs()Nxtk>%v)-Bckq1~xX(|o15PGeF3PtB=E0g7UcYN+xFZ6nXm@E*u!=T%7Tc zXMu5k-y#tt-33&rewG_Ite|fp*5u)#E>QE;|8NtaX72A3>JA03GM(%NR%@ zhGu!^3*1D&yPJ7Ylz_W4WD|9wqe({>^SkvA&FX+q-2nyf0S4Y;^4_O_q*vHC8OeCWSMhU^xq`TuOg%;sUne1% zucy6i8CjsT>y823-}1hRNapKIDH(sP?=2=@9P6Aiv$$^plJS^?Vr_V7{7r?IOek(F zURPXB!gt*;l&txzGu*ngZ#**cb-a`UEr!JW$?nepe|BZxI3)9p!bQo>e%5K_aRc*$ z!eUG_LJN&8hJS^;6#PYSq&{0$sokWxPyL+gGq6pFR3s30>?Pw6O2G_n&BuNB~C{xHjh%yJKwQz`Q zO+qs^X41-PliiO)Zx?MEByei@x0n-x{~-zE#4L&+Xb>3S(%64~oSyqPj>ggE!(JG2Vdi0zFPW{{5KjeTr)ZbwUJnu6xp79k5gub*-pjc$?|R>0?x< zXj3q7qCeA>R&G=(*t4NkF~F5l_+e-k{2Iah%D))+NQ+7BK>*|UGrV;ev1C;ZBgdVs zq3TU~*4Ck9Ry-H$52u3qF!o^3n1rx}a8Hm*t!$Z^K9jO3mQ*W(eawSUGL;(gRXjHq z6xRugcUhndM70y?{RHFfy*kG$ZC@9#+T@6Z&MqzEWF})1z=jUmnvjZUv|zsL)sc1q z6och}|q2Evt@>j@RA@hPi3BD>g4#GdS>0@=z z>56n}?StCInp2wXnz`!l)i6nPNHZPtApz#r2W7=2mb+el0U?_Yd}@cv)<9>jIK>ppHG zPXpmz<0;UIKMgBpavUCndHel7ZW09KWay+|1!|%1Jx1kU%&43m#C^-VpPTHXg5NGR z@Rv~0Vn${6AP}7OLGbN(`hL#Llfus)P;%+ZNlYpfGtvSN!o#Wea1*@(0ma24WAMp} z8CAXq@#0qO;l`&3t*`;;8nyor%K}hOTFj`*JpdpF7omytB6QWkJ~K&J%|#@MDL^|g znxsYra>YV>5oC_G*Sgo+UPKUu0EM_95R(eU0x3ezQPOLCr1TAG4NzYw7Dy3`j*=ep zBgJU&KC4>qJC_y!|1-e4=T~QmA8vgcPQg5TeiSLHIf#o#2}raAivo^~F@s!?c(Q zEbt(L-8Bz#6ZyFTvf!|Rn)HaNgknZj;sFplm>ZMm+}L@j&%A9P7wKy#*v3*TCJ6^x z%s4nah-o*f3_2>egc}B{68sQ=Qwtd1z?5LiIN|%iiiI9RWIIyAP2y>&2@npbKMgBp zG)@mf+x=X^O;Mv9GHMMsID(f5J~1gg1f1Q2aCVt%xJdvk%F-6b@%n9(frj02kRQVv`XSRW*Ubr~)s z{b|6e8;XVYAgEn!skc4g>tYeD>4jlr#f--3K~%dJN_itH_~?ME3JpcTG?50h%kzIE0v|V`>A%WyX{iGn(Zd0KJ1T9l|fOxiYY#dY63N9A-MfIlv<2fj1GzA{S$GfrIJ6K?@ zWu*X5{xqzZ(Uf=)Des$d4)B?o9Qf(d(Bu9zR$46RhQN7wk9e)uz%7M^2w*hAx``Dt z8oOr%(Cm8z2bh^D!Y_bgr~A{u=L3ovO}-}@X!=)i6V*sVj;+Gq9Hj=tG)pS)-0AcT zXX*?lBZ|4<0)H4m8H+lI77WFLPQ!q3ZLv=$_z=>!t3)SSEYL&&&67X_fr8N75^&7e zO52}?7V|a|XaPDY=vKt!od=k_n@tI!?}c_k`0eM66%b?eQG+w&T*%$9{`xNX#$cQN zeLbfit$P7X{6n;lXqRYC!}==?(5|jkPf`6>)uI{>SXU)VomTOnA~)zH8F@T>hQ{eZ zhxOtwxv6omYlOuN{Cwyrdfie)#jGVx54x{g?}pdsn_qI#UOKDbs>M8C1Ue{YbPf-C zw5QzzbQ8bghI{EO6mVTeo_Cng$-Ut#v5FKTI*=ru?>MIiUEZmRpL``!(c*LH;azK3 zixYVpM5hP6;3?f5?QI5<{xuiw)02j~2^5;_B}VUfN_@-LVxfXZo`1hsZ2W7&;VA<; z+Aqhy7Wa$bCMTuiqu4n;=tEECWqu=;N5Q)T^-T5Bp<6wr+wDgucuz{?2_Jc<2R-eP zZrisaaaOu42@nUx!gMJS#4QukSpwXg*jNZZGKUA<@oBd__N};EsOf2dJWB$<1b2GS zL!UNp(03v|EflLekWK*Xbb8QfpVC$N(a|^`fpjT+cNTcikH7yrF3vkstn~CQfCP$# zE@D^zW>jB5BRdaUnTF| z=}%&{@{`%&Sq3Dde&D8fN!X4gP&*;!w9|vQ0JK$`e-O9I-y=@Yz#@Dm9Ug=Vpso7$ z2XU+D0zFV(s&`@`dH|I-=SPt|D@8yLpo3ze7ZFf^%G>dySf1dm>fa?6!581*L5u-P z_lF-H^`8rn2Y#}GJcJ#fbc=uDh650*jnw}Hrpn%)5O$AF526jw7VZ1V+afsLOT|Ty zL;@`q<`X~;Fgo4OUOHR|$qq6U3z{Je0o82v&%9>qe->$GjrYFW5Ql(jcF0eH;L|PX zGmH1fh|mO-?z?sHLcQTGz;nkA*majk44kwG4MBVYTK(u<;)c*@36c(g_9gT0`+N^V z7F@auU>dxgO1HCtB&j@!!-LobwCy+U63>D}-sx4+qQqoDMT9e;Dt^1mt0E4DOkdMt zfesN4fKK$GrR&r{6;r$)KEykqqITZx6$Q@X@;@jj7KRle5NOl>yspPUDxz?oP0 zywlJlfl_VW>5AA0KrQ~|-PVy<$3gL=`Ac zFx*|{Ne8;TdpS6``6{T@T`-E5r1I zX^SZ_^l0dY(94W(7#ocdhJ%Jx25ra#A&Y{43EmbwP5-gJ2Y`g$)HUiN!9B7ZYz5t# zeD!Jd4)tu+*Qy&;Hs$+DPB|K^0#|`~jb&tXj;5d=mx3?+244)}LLk-R*HfZmen|V# zSx0da)=u%K;Fk&&NbV{42?;fmQ-rbTM;9II38;DfDdiW!}=AKh@MQuqBXQYtx_2W((JHh~U` z1$pR-Lz}JmLo82#OYo-yhiZWi-Ek=0GCw;1mx3TKMR+OX_oGWr+Aq*~lfUaWki&m) zp|m^R`a{$mDape3xF5Z7s2JmEv3l~OnPL$pV?TQ2(C#QbE$$BaW+nTY1ztH!-ZOsk z=!tz`_j@OQKYHU(dBe~6$@6<>3Eh#LB)s+e(Itn{o&B=gFtfC{x^b=SK+|1%paQ}! z-O-PZI<%vXoDp>tocznNgJNOcpzjV`2C+_`bxzdjDfE^xP|pP6v(t|r zLR8P&&x!O*7SJvH^@L(!u+V9U()}i;gGGqkAVaZ0hkitqF842yyc7X>#$O&33v}pO zMCl&%qZ2?=By?7xeI9f)qIBBxVtF*ms!YEKlhK2|N0hD@=;)+ce_lMPY(h_X&;g0o zJme>VdiMoNNaCk$fd_q(nm_gXFv$KyQ!U;l9C|3xU)HftMT4B|{|Oc5C=~OZ=Rv0> zy0(~p3_8L48Kh^9UKK^f0$sa6x6O}E032eS?xjoQKT8e|xHhph$%$j2r?&#V#|@O1 z#Q)CnJ?Pbx@|kF52g56#PXZ?>W-2;7=;K6}KX-q|uWAo}2IC~uw0LKb2OXVgC;a)D zs1vO6t6C^#67oIh`!x4+Kc)P>fPyHig`ac|4|+mTr5^rV)PAeQ?+xgq^G-T+j-o2+ zzYwWt@qa%FbWkje6S_lDx)40csQp5Gk|7|tNCr!AnRI%Ix`?%lw?az%5%0BENl>2 z$Qtiq?0gSJAf?9L;&mXJ}1eYn4BVyYr6i_4xhG;Rnv1BsTIIFs;gO=ew~nbqBLYm-?S7Dn=dq23@;3yGGuq;7zE z%CMniPjFWwaEcD0oKhhf!#FL<&Td(=y0tWWeyteol;@o0Y&0uF!^jq-8$=$$WH5OJ zlIcTPBj&f2BxlywG&Ia@v8U!2q!recFDW%WD}5+JLNz@{Mj3$5Gh`+vFOX%JJWbjl znaA6L=Xnb_}Rk?)~sewv;qZyKPpBmX2nAU^=IGj#FR@mCaeUCfmZu^JEopP)433oDmo*$nB7fQA{wkRzn%i0n78(>?2h6cbefr-PsF36G5fYTiLE7gQ_S0U;#_>w{30TGk5 z#*+HV(yGezs>UciV9NlL+W}h!k~;xg29nzVEdp3FR1y-VZ8YnQgt2@?12fBbE2)DD z0Ag}ICffl^rYpMpZYIa~8WK$&{qSt|O7uyQ&6}G}#O-Z32g8j!>u>WW<4mCVs zC^9HR?hDBb{yF&O;AH)W`t|zpfT>##Tj4|6Ra&)XuO>56{Sz2~B&j}Bb*siGU*utR zi*YZ!e)K|(vmf{6CnCEBlO%Ijq%~e-RcG@p!^ z;i%cskCr7=?)C_YTpNu(L%)?`S|}FeqJ;^S`+I;~YS9uv3o*Zi4ns>5+F^?#C7qq% zTWyQwLa{)L_9m2euaq`XfC`lKvv8Q~>_@8;pq=F3O}^tvvB*U4@nk<*oX~Ds871u| z-=&e5)|TXLD%zb;bsvwCG}Y!iSoWj!9xV5#0vY0GUI9GP|qpb-QSvO1~ z(uIYyui!LgPIOne zkJ$eh(n~BHL+1CRNeSKc-W=T}-k9TEws$S*r4z1=oc(B2LY4h4TCA-99f_AtxFd1) zgINiqOCKSo^9_O6R2P8mgx@0?lTbbH8X?w`#(E0WGueB9fVL!bjgx1^#HN8Eb?0=ge^aK_-a|pqnb{LD@}ta;mT???(d@+7mlZ zh&JUZ0-&b9icl=5I95>c^a)YZQmCPBV3!E@M*00{XaaL^l2=7=*^+IQaBJ!42Rjp{ z;)B2Vspz+l6($FKM}i^luI2ZmISQpc6+r8=OYx%>&Q~4%XqQ4ih6~3@K87reAsq`pTJMQnKia0yZ}%O7BMXp3-b?+Rw!*n04+7o3g~RF zd6uIe4OgJi6D5ls`MHtmeLJGv3KbbMQL3)|>ec33y{-{x+oiOL)Fd}RT__fsiUust zOq47KZN3vYzaH|Q!1bg33RQRNB&oX8D5`pe~CWBL7P z$3my$p9f)D9G}z`?BCDSStvkwqOfjo^rJxwos%;rOXs9Ten({yPQLrmvV|(XZL+k{ zz7?3C;=&3nzaOnzsN$1xJNM^gsp0_k#4r8C3=)&QSD$F+LWSS)_?43DDlvtP+SUj3 z02B)&j>a#P(LHgJRwT;*FrZkVMJpIe`#gBYsr+NlzCZSq@SC>GR3 zqZm5aho?$kn(}+QL}72|=tnads`J%@Bs$xCmtuY+E?kN^`_WW}>O5&bOtK#aNne@* z(z<^?C&u%0qo5ycW+sGpP4Mq$pZSMaE;uv^(*g}>sN4q*f!w>oC30=PwV{{+6blT{ zl7=!k9xmx@Z)63D&cb~~Nq-K|rd-kmgW|Wl^e%`b#Z085AFXO=Kf5lG^mC#R20$v( z`_e@78mex{V2Qdm`Qrj87UZId4VAlguvD)6n=?^(b2|Fb%!blF9Y9MlvjgXIiuX7O z?QJM+)DVeW8}+{mpoL;VXSBJYw2c9@zJ;K;pKZcI(9w?;H;chKj!F1 z(;G@VZm3je`Bw(SP7riP^BYRLK}ri=ud?r2!H>Y%k0v;Dd_Nr871=FTF3ESNB`Icd zLzLeIwJC-LX~KesD_#O?udD)>l5_3x^j%>7@P;F zVD!yJfMHdc0<%@;b!y(bZ=Yu~BeqOs>|Cj!l{yA7h zLp0;yy|8X>2+mh&p^@Hy^pv$OtJab;FR>%p=?4Pz1Zi;eVr{hGJSF^gLc)m5awmd$0 zfq6LDg-nN$r!a{kA7T>g;|-MBlPBy{e);WnMyirFkgHaX{4}q#BdK zBohd=BbfMIk3*n6GrRk#n^T!mZ?$yH&UT2vdq(ic+;0`*9oC&Btq?ln4zdb5NNs#4 zC~9lkP=+XVWNA}`VhkyQ=P~SFQN&OLpfh48c^x}+$ARaaO-dEH&CwL9HVsy29t~H) zwTdM#Peb+tub8o{`^xj1ic3>l+iZoRgMalYa-y?+^tAf;jzmj=qoSoSuVO*Gt-zj} znpoKwaTO&MJzUpOp0T7ME1^2CA)=2p-SXm<<{1&a(wd_A7_m|MP&6MSddM>fEWd$# zjLCX(7L#rgxe`Xck`bnqr{}L;Q`xq#B)z?KX?{Y*>V-9#<_aeN(?4;>l#@CjP?VAD zA<>qyN5{`~n7hqurA$PqQsy<%hwTm4hNYH8Ybu?2<`T9`zAq?jH|&ysG~HxM4*dvh z0LL3&=Py21LL~A%A=$yl;bLsM{!@J~z4&O*4TZ1;MG)udK21~>ypOi2r$ZdrjjD0V z*Oc`TPw;WY3LK(Or(}jY_QM7q9DNwp>(-Uvsr%rOjzNGkYa_+U-9ya2Fi*k?U_Y7- zPKoHAI$$L<6uf5ON{;<#Bltx`_mlxSp+Vrx$cuFCq?2{T4-C zL>$`n?G;x76kQ=4mbah4h!1);g1S)E6+zElH?%u^fTlY3qaEMMVHZ&_3@SZ7Y(NF= z`_V#g$nb8A|9GK+bnHiSys4L8L>$`QU32+>;+*@@uI`J0D>?R~5#1FtFCq>t=5CvL z5pifNcXHrLj{RsEmvhBM#Gx(R-YYI5P6L&=K^LinR&MVNT*#(f;MT3NB;vU&i)P{**E$hw8hzvmT0;$|A55Nk49*# z$NU4u?EPqec4$l&!b<*_v{h9a8KJ)e}GkIWp_n?2!<7kyuJGKj4O%oBy8lnk- zV-QRq@Dxm<@%%)^!crbB(q8hTNu}4T0W?r7(4a}$=u5qFAn2Qg-ah-&uwq8z>_>An zy6nI4QpvUs%sl0{3|>1=G)beh-$`k0J_ir+mH~x%H(ZY0tGVgXw- zC}yd!$@!A0d~FIx&}6UN7?WM_myRHpU9RH|mh(Yw6Z2hDwnylK_8%%6RyRKNdA){7~@6rXWi^|rlt6f+-m%X_J zjzR!PyeJY05{h|OV{dJ8^k`Rg*@lc7IUyBQ&V}_$vK$pvNG9P1?&kF3E3jAyIpP%p z=rOc5abI&oH2J@eyE34=s^uh-v`=uGjDRyVVk90Z`U~&|l7yduR{*)@ldfvuStZN! z+*@2kD&>i>BL!$8FEMB*gp?HXWW`CTWa}eW#gNU{ZPJp4Bit+)kV-izbCc3C3rb3x z@-qu1Izv#%WWY_p(|&PN_+p$^VzFfSf4OQ9QXwZKzrH*rcXe(VTo_5Xv4E7+vq3CG z6sOWp$O#Yv{Z%d}gmk~n;gp4lk~B0WYAEJOTyJwYWxdZy_S*p0n1LkRxG6qgH~4hg>ncGxpPa`#T)Y)>1hk3$l{!W!Z}|s#@D5-1xYb(#a$W zcPSPk)Mm5Q_2#vD^8cKD2Yi!N_kXj~v}u`z0zwNeKuVJ~9Tbr6z1uV?t9!TUUbIQ8 zl9VN&!W9*83j!+I6cAMK=N>37#Ep9^j@MUQ|8ws1q`_ zp51TuFN5l;beAm=z12^Y~w{M@(TZB=xQS2F+kfg*(j79+SSjE5a0B z6Yo+Ka_+5v`OLfkcGhXyvgPhz$$`_{NT3f}0jDnDd^Gk{A*O>G+j#~Fe7ipd+PTbK z2F?1^vW(oeid;jP3pDR)({&ICJa7tgBrm>A2SKU3Oe%Ww(?fNI`u41ve`f;DfapRe zYyp9f&I>ZR;|#5;5_g%9h3{~K0G0dN6U7JFNP=y2zCD^3>Y;IH(9% z;VyLD8A;84{uLcX@Be81piJN4=o6?(sTHQ@B4wU!mp5nyZJw6NiF!E z+!YQ|liV_Ubfpfb?*?4BQg=ICD#Ho_-$BqfFoWDKvWzFc$t}wO>T(BEjzS1Ut!OTQ z8f+6nfv3`OFZIqK={}ZmDv%MHp?zR zaXz`n?;p0T=PTu`j8@7VM@bGyg(VTZ)#oOmj_71G+u4rP6TF3~FQOhO^S5|Ylwf53 z*Z@3h;w@kvl<2q)cHtI^^L0(PSQRFD|2EU6>js0sT7Q@#Pc~RT9uY76sU*gEDOMUT~g_FP4wC~Jt zq_+E9kb3N0BV?;1OMGdyPj{q__P5N2*N%io8DTX!PNm$u=WLCQ{+4!pUvruRr{iFM zFgm|RS35cwIDF?DJ)e++2m2?Y6J{-W?jU{eF3^$mric22$8kyF)fUiB#ik+}pr68J zI|>3*2PGf}OV=$V{~YX}Ktd1pUj_9)6~JO2?gu+S-dS-3wKayKj3%Z}ifJ5g8#yPu zy$=IBsY6o$VfG{a;2)Nopy2RBMY{kYoaG$R!s(2xf24o)_JLM;0eI)T%RddS2-o{v zqJBzU==-Pdt-e?LeC~6-k4E*Ts!uiB`zh}<1oey5P?Y;1!Rd%yapuMF7=>ftx>nO4k_8a=GJ8BHKl87 zk&@jL6)DgYm#?isN_PLMOM(8iVr?~2I^Rcj*ILh}m_uNIRUxJGC1ZD#r`{c$Octd= zRaLI7MDj3ZRjo-iM*<5Ko>}-f6zdMz)F#l-T!8- z-ZYhjq(iavYfF%v-C<1W(5}X{tC5oZih4^;@3i@4-8xNcT69`#P6BrUQ@nN+CS{Mf zt!J;9PL^Z({RET!gdRz~R}qNN!xa+;ce=WSZy0uq#GN z_OKhuq{GhWnFTuR{>cOu8rB++JeJ+=S>~lswj$5K4`k6{r$K^+6LA8AZm=gH`6nY+$^2Z2=}_H{=`H=Bt45e9w%Zcz)9q^7L_dcfNRSo@ZeB ziTcF`QKZOhC7q-3CZmgFbjx5(n-IeALa9CUOpT1G;b4F!?IAFW?-<@J(Q ziC(fuGE*WJe=dGO{DAldP#!22FBQ)QXCPmTPKq8DZ5Q>5h~}Z$lQ_}oBSYpXqFuyb zGtZFj^zstfgS{UYk&-t+s`~9Z^If9*$(HqCT(y@Rz+ew~0fLwaDoxC(ZY)en%rzEQ zw0A}7($ln!<>9@(Ql0C^hT`PLZev+nbYzQEOM*85j)pA7AdD=>Ae?k#5J?UWLNJ}2 zguuX=apqLlcPE;vbK{x}<&||sJ=s-;>dFXpAeTpRLs({lKEANLy*Htzup`#k+MN}z z;tV8noF4_;slFkvU|ye-Z!tJWyf;F5IJ-+hiiR#teoJF!LsM0a>O0rG>U+SYP+MJe zL|lUE7g7QMqOV9l2A`2z5bjsk6nV*!9mx&hUAnXu6=!KD$Sc>Ri`4YgMHH7eseU8p z5a(;+w+VtT$b1aGBqIc^>ld{9xii~Ly;TgHA@5ye& z`H39E;Ae6M;a=xb=$o>W5_8&&hF(D}iC%O4D5!kVDe~ozdB#k>(sHXZ%bObwl}U*L z0RJDzgV3X9e$U}JY4k0LNxh{}U1eRd{@;<%>w%vHl8He)se>S9DVHLtBe%TGklh=f zWQsObR8@9r3wm_&RM(G9(M^S*7E;jGohwfPpLl?iNIt+IgZzO(ESb6)P?xwS)TdMx zRvMa1yBZVanXVrN%_YwvCIA3mL>n=PBYPpRTWADt)tYmTO&Ii;*VIUFW5=gi{!633$RqaeNSi>@DqRsW3ZM?tstJ>~p3k;_!r zBCnEp*Fy1LCabT3;0>}1e#JcROv0rQ3@qQL|Mk(?+kM|8-{36!Hc=wnX)=i5FOat} zc$OT6V8(N<=>&0_LFNsRQ=NmjLl|OBTbq+3~?7eSr8SZ_pvyqa$ z_dPLm?PPLO87%uX)?g%$X6{$sEHf{fR%{LOypCU84jY73)>%l&-dx>U4x6jx)|p7j z-uwPh4trmN^%A6HpQsEKaH7&%XCNhe+xu_@9xkoZJ@ZKqmvbwjs!FWWkbJDo73UVm zQoBBwY(VltYao)dx4IAh)e|tksV*$CG`rIjmfONhM6FXXDZ8+9s-Un%)+tEIJ`(g- z!I5;8H2^8ujq+9%?s%<}k&<13bjO=nO?%KJBxm=a>#Ly$>8%qz1OK-gcf8gKNXg#u z=G4HBceQmqQaZiQxI5|{t1)Y!uZ=@Wc3-=s77v{+Eq$sQ~>Ho{;rS|v!yJ`jJ~hzCil7%ADqD!GXcD-lw%D;0*- zRPsa<^p!d*=p}d>0{=9@5GYz}K}vS9>P=9ry0vD{m`|DLL9!ny*>l}(%gkE1zUV_r zcCY$-84jzpYmk!N1D3~{L-@6HkC*?Q{#X0G=GWurt$s+I?fZ-G&A!Wg&iY*AGZ)s< zCY8c_Cp^;l2`Fe@4xUMhLYm=?q7cwucJ>iR)P)VvMt+k zU>r~bicW-Mm>tM>DZWGy4 z#`!jwG8(PaZDKqVv!va8HLT>+ViE7h9KMpJZ3X51mjI zMONxSkv+=NyXZ3aQU{9cCjF|9uC&yFBD+#!`=L@-Sg8X=Hsx-lEVQ~fP;|E(=UfYN>xpKl zexsE-PGk>n^_82ZktQTJSgFHA_I~$4Gm1;B)JGzFY@e)H^`8=4ZmpLgC40FoE5+s3dMQ$}yVg^s<^^z@ zdfLk(n(IZ5Z^;QF&9~=XMYe3YPC>GRTC>TI$J@q}om+B(wc_{0zk?Iy9PwJwfM~90 zr?^I(F1}M#?*EDS3CVg%m?S`yBzjbGpX?@ah)kRK7}KBC4P?j`deh`Gl#h2R=u0{3*5ATPnq z)r7mqAmZFfc42S_ISK)9)l<+Iol&Dr(>7@`1(%4*XW*uDBlV}f34)1m(+R;8xar*J zcpR>vHnTEO-&~{1)5X^}SEPAOT6 zK?PZkK{@G$AV%++P;mVw&v*SOyznd_uOLnt`4)ra#QQ3MD|Ss0+mVyeRIRJYC`**D z`q#(s?xd8S+Db!Dn|w7X0RYj1q#uI^$SnxRb>@OzO>S6cZLKD}RZvS(&c(XmqoChP zA0g)u=ON;^0D?ngJ_h?q3Is8GC?A4^g7G6g?D|n~Ei64sb|cQCElS~W_k~#=t?5-(dowX$8Zc7W=t4wL}#XaejJ#EePncBqY ziY9HE@-uP*an6ztF!-GOfx)L_>Ow&MghO>E6bvrq7p@-#gG>1lF#&++W3my0kH}tx z;|w$lTFW&l(FMBrh$=zfmT=~lf{%h$lYB;&#`w*c`6-vB6F?w)k(?#RhhXG=N#4ic zeR3Xxm@}>^1g$3d%Jrk5)g<4N+;xES4QayQ1F`{wcgY?IV%~F2C}au>aVgaTQV{8`s51xu6s zQ4pg6&LI$^L2wwvXaL7uatq)DwIqMS6;3GJcpSuNfb%4X(IEIg5Tk9JVd1%Rt{;M0 zQgYl0mLtI=IAJGu^E~Y3zuRBycgC;5Z#5dRm%s0&1IiMqg=HfUVJifLt5 zs@B8y-2K}P=5W}XP_-WR-emcWbl*?ade|G!!#C1>Kh@~Dh=cX~n_wGPW~CZEY-Ss7 z0%pstRGEi;1b_7=ID*$&sWMLt^Ms(=W{!ahpvpY#3b=h6RDi)sm3i1Z-XA`@Hjo5t zhhpiiRGEjp=PcSz57tzfhrRQr2kYk%xY$ZHdf4ZWrM>H?lgkK@7h0)W5BqezHQE+H z`jEWXN_BhK=#LS4(Li;3*lcUG>!*>hn*n&0l`8nKj{)sB(_;YD?P1qk>G<_i$+tJd zty{g7D)?N@Z0oCb&?7cg@L>Z#aRO9R9@+sM*IB8S5Bn@|ZU>wNDy&q?hkeXkc?&&e zQUxD&cl*Cv=y;u5k2Ls>Q=@+=q6; zcw23yT0HDx9sKUPAadm{C|0qRs`9Xzt=$F87FrAOpvN9+A?F4I$h#cyMX2x0*iA1I zE<$~$dpDGAm6dAlut(XeyJ3_WthvZ6dpbLJPfs9uq?rze93*EChF_XtFzBt>NXc%9 zk`{W{&hm_TxCJm*Su>GxtYTfDB!$)>UI)GWZ}eZ}_q<=T zpTGJMHC$Kw?xKppn|v0k-cYrx{Jjr*7c2i%?f}K$*A>+YUvQb7EBi%un{0{nJ?XX5 zxsn$p<>J4^H;I>sK7eEQOs|96#!HH()!C>xlwB{mcR?9e+o(8{-R&N`3oqkrR2<5l zBxc@?lZ1_mL)nwWn!9n5uu(}Udy=5H-QV90&0TGyl2G;)+roR`iml8>1)uEcO%1(e?l6;NcGj2(kLKODao=LZ{=d9u4@;C(oTY*gks zR%hdc#vo%3h3cm=Pj>a6x(_eoY*gmSo*D-2@HRr?9-MP*RPf23b7suiFnxY~aaOY_ zF{7w1DVGyO7ul#JlwBizQN2^idCX~*jfz9rg^k&Z6NZgSLN8*%7~TuOwKggaWpBZL z-3wbVy^V@P*)3CYKTa4nDh_22w!`jqWR3~tajS-UZ5B6Di}zpY?zqPKQ=&Lr#x9BkH3 zq+}1a4L6t{8f z^{xer!kd*>D^4mp6qDqK37mCQY|d8O%fSs1!s%Si8hIXwk_Lcg04hm zr0iO`_YpcfP#Gzk;lCe&*`d@%Wu$CVhq_@jb+A$KD0^_cJPdx zGRmGEa-Zy(Om^C#Q&!oicvQ!1+YjvKC|ETvLNb~(0vpN-88x@MOoAksXXi}q%3Pst&Omun>&X|Xxs#e;lWRyKUp1Wql zOd@*JJaH-&j%1GImwT}a4k&Vho+1tBk9;X{#DjsDw@2n@Fc~{w}c$D22 z&$Ys$N}hlVmm(XLk+NAh{RFU3XrnSx_7F3r4+i|ZJ&J5pXv)rH_8pLk!8QlS2Yb<; zxv)2o+;j(wk5#tWNX{~1QGTcW`uu{`&#PX52LCGx(@J68FIa*cAl;xOn` z{UyI!o+0}|wn-K)JtJKs`Bkz39)^Ee+$0_+Iv`r+^*IS0H*My$MjO3NWsA>`{~w6Y zi){2ZmCf(Mr=TtBZ1gsjJy8rjMK|d5HkG|W|K%yVL8lj~?6IMLnobn-B9*-aKk_u4 zDCiw3d!iWsjQMgH!}R);J%+2FfiYZdqc^9K%r*7pXF#h{Y@;`)jZDhOXUzpL*U(E- zcG-_U3uQOh=%p!p6ij^%wyt^`y)R|Y3$4$=ys+9v?@QU6ZF*7m^>Z))if#11l)d=P ze;yXULL0p=WzP$P?Qkc(^LYT)+vue!o8yuXhNh5Tk-W%8Z%*0WHR1*6uB&YH=9E1b zY<_{x1@zLC%>rG7X^w@PCwhMx#-u!U5^kP~ZS?+> z-G}GA0)4p1M(6Edv)Q_GI#S%EmzQ8AqP(nf&sHQ5VdXhLmiM2Ob8F z4YpLznDl!3_lJSwI$H{ovj@i_IQuD8em1W@(FrdSRI)}dhZm$5`CmeEmbG3=nqRd_ z$?aQmilS=8nPLsNQTbi;zUYL%$nP`1=lu5jZSjBBf1m$m|2F?3(LJJdqDE1!NGF2F z=(vA=el}EAuGtnOS;`rxZvJwU54r!7!7FD_yRNd__JYv%;*9u~FoEpeOxAz7X=6+a z6+f3Hr{r~(mDd&50%5Y$L~_5{glYm!7`#I^VDKi{13}D3G+}8@RbxeD zM_y8#R-kzz<5VLA9|bad*?Z(4#QB8G_!@$@Ni+m8Z@9t*5YlYR_( z$t?)C-Zh1wmXw=ZKMM36lpD!8#IX>+?;z+S^D*crDGOF@NcKWt;B>77#S+w#;yzb6fwq`})0`5d6zD-I_LK7l>x`Ie3Q$~?l~||G?9Hnw z64a=SGrARg6x66JmE;<&GeiZX34?sH0fQW}2LfJkPmoYhcQQ_MQ1DTpX(t0cK*TYS z8O0DRC(#h_I&p#&f*O@^R>*>nf*O^jku8XmP7YuIdVmPWX$}ff2x?T8>sld#8kH52 z;N^g$KeTkYwL~nslI&gyKd&IiAh`T;{~|AMI_0{~s)7PGlDVG@wp_wx(iql~uW3(; zEejP)1?s8fIJAspikBA&J-a?aFlFEV!(ak=A3iP*Kt-K-UKTI^`}~vqzVh4X7p^|7 z?pDw8ebTqW=RZChe6CQvs%lY9@_yJm5uO$5QwA%JE6NlK`GfK-ID&1LEduFbk93;k zh@?y+72hjP7JV<;CW`PnLqfM)aoMz@Au5*RcMT7>~Vw`Q$&ae_1g^C3x)par|#k#F8N@uw$Qu@AwT*!b4P6 z$1bAezfeTu5S7)j?@deo3*rg=5Eaw0H>XGc3!BpwLsU%1E)m!$TtY&B$Ia;wmDRDU zs^xdwoDNZ09eZUX$^H4IT%9eZE;QfP1Bzguqk&_xLE2KV>OAiK^}?x_Ti&Habx zaicm!g?DV8#-G1#8ZrI>$D4*BD#43o9z}Ni0gufT4N(am`+%YN6K`FHs05F_`7QYq zPliKOf;ZO5kP}9|^e5;b6c14e9{V7);4hqTY!@NHTlW_|2~y!5d*D$Wgg^g+HYl}G z;T`)fdCA{!mt13`a=U0|rQZHGT)ouWsNC*qCZ*~hP!?NmqjEd;VC(t^23xU>%I(-y zmGhl-I{D!rD3;zvWp(Tk_r-A>aW*QeV~;p08(nb%fQxNZV8`aef99s?#K+B)#a z#2$9^Oz8h4MQ=xPHhRvJ&>@O#ZJsIjBjqYvD^jvYnezW&l<93PNXf1=djDeiKlAvh zDyi6OKs3cm^10*%$pexbB%P9C$x=zM5KjUaZM@MQ~Cex`ca_k?*A8g z2oS{nf0CDJ_y_r#BA$0mBsl!||L*!xu)FgAFNysaSo@8v!r(t-4Fof}hlk4Q!V4P< zn_Eirn}wz+%g96D4^D^Ym0p72l4;!LuA()msUxpY-`pYC+6EHo4};B8*-59n9$k4> zMix}3sYzcWIFwFYNqH1}6dXM!t{@t0l;xxz10zv=3TO(8f+P2?dI0sM6A^zCZ+2kq=vS8ENv4Z^c$>0=G z37LhhznZ)QUuJSPE9F^jrt}<5YeIXSpncV!6aU6*@%^W(F!-3HLJ-55A_!6lcv64B zSHmcrU~{d0hun@hUlVf!1mBTcG5D4ohQPqxDhN;o=L9up#31-6D5?5=*DM7me)Tsb z@C&F%?vg0fT_kN3=WX{5pF-1WkQG6kknfimm4iOdHHjP zzH;YBL5=!9OhjJ-&OtI0g9k_q26keAfVZ;|Box%0KX(`wesn&5<3B=tKLMO0$(y%5Aa;#zdUsnwseSSpV* z<#tzVBH|+Q1VdXLOim$A5cwX1S;XgS`s+#vVrFruaYcouu$=V9i16x^BkyAHCHXI+e&Nc8;MgqY zOpFAmg5e-OO|riQoVQ5>2A`945bzdDf)s)-F6M@%;G>|6i$5kG0l-Xd7zh>+LB06@ zM1H`T_#DTxa|IHx<^MCe87J*u$Y02oj!gRw*oxp%)HRtZ3fi=(HBCZ8#BkS-1yvO( zy7bPZ#>^gd7-<0jcs}oX3^ZgP2Jj3qqQ>(HM^}UzT~bGNM@~|bwoZMu>qntsWCEG> zJ>bNV#TdjABLu4wT~i3`!_-SvvL#-9U|uWhk}F{WKPmf0c2KcP@wOsaQK3*P=E;9l z3@VN)-&Y=2-leoEYn2(wg~|zvU!_rgHu+`pIJ`1m+5{H2NuqMmPEY~{%UaQ+V0#Nz zwqTR{g!oSJT5%0n;DT)~TH%U+mj%HE^E1-vlD{QqB~MB2Q+=U2po*4$uF`|M!d&k? z-r>^y(&uFoRU0@jd|J9$wZ;2m<$3QW?4xr^E zkAKk}Af7ylJQ{348`S|I6HO*Hvn_MT`@xp2WXl{&fV_jFZ3?arAh*x9)RI5j+I+<7 zcJljd%MAYBxuYeixTPmQy)C-2vCULb6V{rTnO3Uqq)7!ItBO)%6WfjY#N>LliR8?I zY@10V25sd1D=jnTa5tD8t%*(93E8=65zSq>8C7weIjx44mMQZ&PGa-d1c;~1C1)|+ zJn}aLF;{UpB{ww|N0s%M>gol~@y2sc5_X0r=hvon<{2t;>O)&AJHw0etEy@P)nKR$ zIKCtUgB!rK8Q`{Za2?H2T{U$%DLpBAO?FdFv9T(@R6BKx>&LXl;?TyZ+_37dnyH(~ zaR3Oqo}+PAOQ$}%uqd|JRFhw&ZUr0AI~KGoAtRSrriiX4CohAXmy&NF;9v6V(8eW( z#b>AH=R^p656)c7p*lZSmX)T}wKTM+>#}CXkj<9@&LXlO0{H|=N`8E6Lx4DVJTYC} zzLm4!R$p$JB0tJ~wb<4L%nEvxLrv;ROwTG#>TV7dxDE_DLRMc6sE5HW8-hb%mkr<} zT=He>)&(enI5SSN3x0@$hQaO{=pG?a$jh%_ehtBSFu#UWKXa+Rf1op9*7#qzOq~su z9??-4+t~t+Xj8`j2Ikg~?sqV^wiJ=`*diM_dS{E6>h+Oz9qHli;h9sp>+25Z$AY?u zaBXXPSa@#L)b%8HE`Y5gO&AQ34G_p}953Vl>I+yr)#{2}))1MPnckh2np!ZGyT2D; z*XDO8r*_4L6}RfAUI*sT0D3K$Lql*4m_q}roQyz_BE35@KQ=2iDqYh%b-*<*eRirL zv7;rfATD*P1kchSNT0ffqip`NJ3uj+ zZ}|s5$FV&HETRFi4lJS}Ct4V z4OOMO$g*jbU;z#3YQX{;($#S3o=CFm zPN@YSlWQyW^#$F{;VCKb*5HW{$n|TmLx$j6utSF6E3iX`UcfyK+8JA3YiiGHuI$bg z%zeJxk}vpJnc1T+ZR#n{&5!r}66}xx=Nqs?hTuCg9f#7DV2*5=v2p=kD9`u0A1{vMlKKESX_A5qxunMlzl28HN*pXgv^J zydSjTcu4Z8C)_w7S{n5~;2MWxAxUtAWg^)ZWtqXb=>q2vGo4-$cu$gs;bj6(ZmTcr z3;>y0@5Os^GY((v$f+b+kdr&#o=Y8+M}?H`cv>Rh>Exxr)86m?C!Q8Na%x^=nQ_sr zVH}Qeqd1nDNmFnfn_INAX|5c5AV73E0xE~Fc6N_Q0;$x%)sk&7+U8I*;? z5kP5PY?;p>G7Rg0=*`9dQ@0C;Bn{JlERGH4i{1w<1kGl`7DGl8gavWM(00ix&FNQU7VKr}mmnVo)kIuP{*@D5+G3L2dY z1z&00A`1`u-UH5Hz6XEN5$gBBA3QFyCf`XuM|@WLh*kGdf6?3EIl>RX9n2Mq7ZuH5 zl5$jDBA3ec$}*+rq}!y6Bp-mg=qq87Z4pluJtis>De!UMY?*Nw9bkrU;!BO5ow!P- zUaNSWa>K9*h&FHH3p5r{6A*pniKr2X;;&~S>4zJDXy^5O)ws{jI9v}zS*bkZ=p)O? zcvvX^nC);K5baInvm1-37KkKi9*AmyXeFD-I9v@xhtfRoR0Tv6(wW&Ahbw`oA)Se2 z9IgPOXN5%ExWl${RDp50TrloR=34^DvJ8IQja46I0NbD8fx%KBI-S8}&@fyAMA}Ry zl74tK5N*ulTiZQP#^F^!q|w0M>bFdOK}KJwqfHKuz8p=y5-6|E;`4M*WE@`MfZLzN zgfk8=cTg&_nUsd%VxY{<_K>mB0e8$3oB=5NLz!@f;UXY9%_cGq>$yBR|L*Q<#4ub4 zL>o1N>_+>Npl%BUD|S#qGk9BreJkD1j0Kwyu*TqVphT#k#I>IK> z52pjsL>)gs+?UfhoaSK6tYb1}98LvFdQ3UvphO>bTwysMcid1i4ySOG7w>M|Fq{lY z`Xc^^{i|U(36i`8Ni5FwkN2uNsJ0d@uigzw>@we!l8;YPs*VzFt24 zs`IKY@Atjq;pTIR;)p^gKPX=Si{NF_^^zYX_2MtY<)RNo%e_uR;tT%`dJX!C{k({O zu4VQj@FAzuEDF`)CC4W11J)MR|2Wsb~iPz_L90V)DN zf-5<2#2JR31BFl!tqTbaL*K4KD5NG27FjNr15dtyGcnIHJDSId3eiRU8%GQCJ@t+0 zf`ioL#L(azgz^EXZF!cU#SsNs@Q({_igh8;;h4J)-FAjvRJ5afDgc|3ZwU$?O%)Lm z6^V*gE@1AWNqxR$94Ydn4i`vmDGRWf;;=B9R+r~j*70WCV>-_^~Gc5o~Kj^EUCLoOUVK7v=q zP#jxa;UjTuIij)KyNQl)K;h^uDzePh@@cgEkaJ0c(Kx#ZqshJ^u0x6daK={yTnUfN}NE5zD3sWAL(onD2x&>No zffildr0K!s)!kFZJ+{5}tIdxFOWW64Nx&i1$0Gb9)#-UZB zLv$J!ART#ig=LcW=y!O(as8!`vI|m9S_vt&*h1iPUgPkU&E*BrBzL7{lFIp=+|g&n zOgkazHb@!;e!uB@8&2IYk8&Rd4q4GBE38GrLOH2PZn5Q3saFT!1gruUU^xdL)1e_6 zhtK!X<(wRRi+7q^x5_e4TH6ju2qeKBA0!D63B?HoXGZY43f(wtQ78eUKB*8q^fWwNuLd7s5C z;K*6!$S7P(PE6g1wbcSicjolZp_|`P6=&R>(U@~N{qwfp-YYM70KM`g`+e)T$#0?h zb#=RXs_)~z<-Ss%dweofKdUUNAn#|q8@*M^gUUR`uZr!8#qv+&gYrvd&&XbBr4oCUxZ4Jr*!}8=|j4 z{JU&ABD$B>osLYs*8)b_L-a8SUMp6J?<8!w*D_DDYKXoC!K(lY3Hbs1FGgOx*AfbC zLm!6tciW7~|NQ%)ZHkBJ0}*2v+oh6q}2v^ z$tv!r2Iyuo-DBR%F#U|>)MIDoE z-fy`Q1~7e+!nKkwVC#$hv|8zl6t30kWb1-1gXxzYfNE_SqR&&LbNbc7`WcI@T?Z`j z&}D>gRdC6;b!4oSaQp*MclsgvaK#0cz)n_+$yN-}2P`fq8#~#F2cT>#hUjY+Tr$^1 zHWHR=SPw3UCbJ%do?sZFFIikL74mE3skeC(pZ*6e;23O(K4fu0+qe>*eh}KmI7FYY z;H*0?$Prh2*wDFd0?2DWf~m)fA^M($n_`nuMi!g{%OK+reaV8i9uc;NV;?ZOg7N%q zIA@*@lM{W`;)2PE`#x5(&(E0`K()?9)owRzjg>6^Ct%VrbO|PNQ>`>vxYoHk^Gx3H zlX)Jj&NDEXn@S!l*&jcdadn=~V$w}+1wWfZLh#0AqSw1#@P0?LdXMi%zEgc7R88LZ zg2*92ktH|Dwn(3o{3D4FH;V4|dKVs)JfIy+9F$IS93o?4l!0>s!NgeU6`RyuR9VxQ zpW2lQwGTUd_|KhGNN(N0#OZ?L8^4G-2`qI3wNn9D;trTR7&H)ocQ<%qbR5xy_=0HY z3!|uxXfjwn5J+CRZb(LY>IdR6AFY<$JlyB~#N zs^4u^E%OEfoM+dtNWP6-PovzLhIt9ju47Y^@vobw6YD8+(v-o(K6e#KzCUH2!XIhj z?5f3GBb1TbK8+q}abgs1z3~7{sWF2zGW42x3S_XxZ3ZXcBOH$TBQ3oP5oF*v={hGJ zx=9Zs-mjaXwi0{YVg`o{ASQph)nE$~V{k`>jG-7 ze&2W#>vwgRFvnTk^cF+ZZ$Se(4#lIBgChgDP0@tI1;7Qn4goc05J)=TGM7P-I)xcH z=Fe1ZRa$RaQD+8htf+u<%pa{Q=e zipy!9YhHdq!qYq+k@-Ci8TYz*8i{z@3?n(Q-7VrB$3_wP!#>|(ctl*seFT>QT(x+g zF{i)`)aDMdx;!M{QQm@qK}c=nsR4UZlE5mFE3}_l@3B zpp!kQyi)O!qD3)Tenh@fE|T3VOPBs2y-6A+d0#RJBKnua&G2H!5z$JpiVFQGBu!?p zqo%;RSYDFU9OsbLP%$qr_B7h30nsP1ygYU+qCg;88s~v%DiG~p6B+DNfasSv4?G0` zQC2)tMr^cC2BN(VBKM5z?UR5=n!t;|+!Gn?6M<+&0<&}m`vf2gP69#l3kkfw)))!~ z_VGYDK9PrWPh_xMa1+UyL|#BQ7N#GE8A5y6SVU@$XcF0+WSPdGG}?U~ z8SjlS`;fj#y!78au+i@0AdgRG@@cfI9F)5}QF=Qle`iw~>`I`FP2v01SS%_Wa1W#~ zS=8I*K>42(zTY6+s8Bgv%WJn7?J|LeMDPo30i+?7ts!BT0<5M5I#Ky%zSZ69Eg0+) z2jydIN~2v2lzq+2!D6tBIJimVw&&Ya)A8Ia3>H=+Ta1H1BjY7Fp-SI?LhRrkjPCZ9&QtK;#Xd{Mxb8j zeiRvoTLIRx(F21mKy+rKfI&`5k86)(0I5VTdc7=q)Jyq-{}1xn^6_#ncroMy*~_wH zvVDqpzgPT^`8_UvUV4|`1M)6ewM;Ml(QhYQhxds?{TgI*{P+1SmptQ_Ci=@ST0Z1A zSDfcJRe8iuAzdvmR6MHwkNPvo@8a{ab?P@1d(}^=AF;?1)pyG8mv#HUtlp{~P&bQX zMUSdiO9v%06k2tbdWpDPeU*B;TIG9Q(juGS`<3t8zR&p{R(AOAkv}?c1UmVo!~3-`O$x!&xi7t6gHn%q|NdK zWsuL~3d?u?ANU-Ql*s=PZ}+*)XQR&=(Yq2K=~X^;K1QDuMX)5>CsH~r6Di)4EbzHp z@uECT8Rs)u{FTz*M=JjwuKYh%ol+f_s#Fh3r>k};iE5LoPgSp4u1Z(MNWN5zliaA> zqnfXpuIN;$#IwX}6$ReEdw=Eqw&HJic6vk>9wGfuUgdqS_crhA#D3mw{@vbX-no*~ zlBM3u#P`W=@m{F7S^2Is%l{VdncjZN3gut&_m$r&HCtn+l2E|n(VZcj_lqJ z$vW{nUgLy%5aT3s!~&Zq$#WRd9$Ot=mz$UomD?$?V?=XQO=4kLMO}Ahx#R(i=qash z&q!@-jSnl3?8k`ip7^TptgyuVv_feFMwl8>WAh5@Vw)POb&|ap)6!C*tFA1n%FfD? zMqxyAR(fYwPh)LzOPFLUMzj_r)rKV$mqw*TO15A`TT^Wb1hLz1ON@*^e5jms*pF0X1gMoB)$hz_S=i8LA`T5C%qQc6=Z za*N6&XECBZ!PFC}uWPN;W=lT8i0;~~FQ zx}=_zp2)Te$(tC_Y|-}WLW>NwoyED5*DAPGfXdS)DW=Bf1Qx)XwOd*t)bPX)cYZ(dM*i3~BMP$&zIlAuwo@{DTqg zQKrzkd_zWp#SkeqU`%guT!X$aJw4B)lSE=fb3>f2xjHMtSY0YDp=r8}1x;P~skwQb zQYl8X>UxR|Ng0V*hDxb~Qsgx05^}=|jZL}IN{leYwZw;pW^@!KHA^nRh|Z#@Xl+!K zDJ`o&G94qxM@4;Vi{FR*J4+bVlb=_b9#Pv7UQ{8SKv4`?Wvy9N#pOBe((x3fyvUfD zRF)UfUMTg$h&D}CMq(HgAtyuXLzA>5)y08_NmF>bRD}^e>4uKd*7WGGf@rBXMzj>< z#CG*YmE~%4r1}w>MjvX@G0zbP-5AlEm|}=*Elf<*>ZChKzq~70bc*bjcg0&M<4uM7u7Zq?+=!$C zX$;ag6|~grvyI_J#xBV{7}432(A8FJ>`pC=ldi`IfqkF!8jNV}DzB_f3$1R|=Sv4L zqDOCNZ7S-l3v1F!TQI^DUl-M^3GI!`Fi1@_Nm{w3ETf?~F)}JiT8A<1>856*sZ!e< z-6gHXh?dIwuJ-t%oP^qT=~a{>tv5xJRBlR3&z8=o5iRXa)v@uJk(K$Iv;O=~H{-nwv7Dfk@Gw znv-WRrWYCwsnT~bqPsOcrMt7EF{`jxdYV$STlCuYvd*IFj&>;>c)hvRk%^J{MK$S0 z>1#;Rl3Es-(GhA)sEwAsN+Uv3%4_R8+BFg7(vuj`*^=CzRGO@BDmO`ArV$log=P8i zNqS?x^hJ#5aM~z}zr~22*t(*&q8d$EnrQWDTWn2oVXlFwjD44io+8VPeeeu4Chn;&FUrsswioJjq9Zh- zI6tZ@ueH9tAzyqMx!2eiH-T&K=!Q%^EKa>08gT_VZ|n=2K&QR#E^S>}K|*nEewVnM zTvgoHB05cW754>Cn1XO!Mtxk9F)Y70t5WnAIfd~HX?$8uYDHOMW{Rmxbd*S!Lwo~` z538)x_QppiCmF@dN#ycAZ8+_J0)syBL?rBV8tRF;Ztk?*6<O*IvEX7tvU^;U@J64t5<57W0Nmm9K+M1PaPm3={TXs2wcjZST8&}0<1bcpF3 z+)~hP$_GQ@wj86_pFFj)PXmr2|Fg0$So8*&x~i{(Jh7@ztMix45t-t;S`(T&^9u?K z#F(ckA}y=FqcWgKjqzAi4ZExaMFR7w{TQ$%uDPJWdkJt{-`CuZDI zU7C{Iot&7ei;(_-5gjR!@#PIwn#}A%>8}{kl-JOa9nn#mr%CpDS_Ql`N!G`Bq4m1| zUjL1(=Wx6g8)r9QzvQm}}BL3IGE@YV7Wc^~W| zcPJMs-d1e^Tl`-YgUSrWQAM)+bw!18f~rk1Pg#3t;P^Gqh&fZ})^aev4khc$!CZ48 zweu8IO+#8icXVR0rlMXG9KwBc4#+}7Z)A5za(rS~~ zjX~TyqJmK@FxCz_>xyWI>h0-(ZCYVfW)S!4s$eoJt*q5_=hfvGY8&7U{mm6%54xS~ zhd|C*x{`nL)&*P|bQ1^aoCF27<3YUH>x21drhNkmssxa&WC;Xv&Y+zfFF=sZt{_6T zIkR@sQivd%$Uy|DCMPkdBHtiZB~4CN$F2>ybXEn2Cw~f=5lZ@TKT5Byl{PFY*dGK+Fj&F z1ih1}t0B09%!5FFJD2T2izPrYZ8!I0aG51QJZ%>lM7o`17t-CvecBp}pKc{@L)@HO zTytwHGPRVO;(CmY3Db6P3GRr)1UHj~HGoA(1_bi$+^2)_XlczgnP5Q>JPj~@J2{T& zZYJ+zI=*$s=XM4x9?xg)Tu1~4#pAiw6@Us1ipSqXa%(9wO&IJT8!)(v?15ko-?g1n zys5Z4EUdmFy1leZ#Xq>9>2C=Tt3t^?m~JkaQ3tHe3_o%*kzNs%TCP)y0)fyYbMLI?HmA=sognJ>>KO@os>T$vxB3 zTUL;eU@+F_nIZ)*OsM#w;`}J66xA700s!!&aX$v{lUp$O@X(%GNWr+i0gQC_NeUeTnOC_fB$)nfjx`bKG_ z?|7m_D{G1wv!vUH zEbHViM%|a)U`KoF{!R~kqH#6F{JK-Xr{GeHuS$a*jH~C&@tTZ6U~(>|8!Uvo_#4l$ z7(gTIja^Iz40bfK{@fE0npH3B_JD+D)wg&eLbK{$JQ1N;bykmu?9i-wk0&B9t0v-J z4@hW9y@E|-w4)_8ZK&sa1r6n{&!agtQ1T{bZo9j|j^@-2YnY4~?PyL-^E|W0L!M|; z9o)yvQ*TF`>b^dHSiA2uMmyS6zu`a{<7U`?IS?)E=eZwC1a%n@t?TD`8jA>Rsz3Ea zgf`Vzn;nyud-GO1*i@5S%pQ0`GwNR)NbY$u*n@y5+u{KU&8YWUn58q=(TuuhnFk~^ zqkerEvvfu~no);1M4H$voP{)%d-4{(ocMLGL;QM!U!?jy^`QDn-drnb-jCLjdnD$rsU1HFj+9#(bAeyzR0FD*wNgYGJE;0%nC5r(dL>`4tSzO!)r?U z4x7?wN9$|glbeLbDs~k|G?8q+jah7iz0#5K*S9eXW3;0kwq_?YV}l*+u(@*V-su4j z?XPKl|Gv`$i)e%mb;HZ|-1aqty~L661G|_R8|-L_O{-eDn@MT3qd7KZvFA(ZYmK`d z^3pL_K$~m|{1_Y9U`NAjO1XW2$wHwW4YS`L;9tuatF_T4JA9CDnd5_k4VyO9@mhu* zZL&8H^0nxm$Y@7%?625JMmw5gCtTwpJ2c1MeGM}^gB{JWe-{#sZjS_v3(c{2f4e4t z9DSSL9=R`t!H(wG2d-u2ZM35~w&FTwDU9}9AS&}jgvQs8c_KpN>#1v*+3D?Qcipy@ zU&qHP9hzLfxYomPK$GjstR9Haj9 zq8u;_4_Ri98j(e7c#Tkp2AmeG0l`o<>;e-whX!1rci#VwnZmL^`sWZ@0{rVE#FF(C>mjLKo>Gc>7UM^mODGM$C4~UxXv!f)TEm zU{w|s0@}MS#SB}d(}id+w41z4ooM|x7XzzzrOv!}WzlL<#GvjrM=PAyP@#vQL8hxT>R zd{%Q8R-bD+HO=>HGOilY=o%b^62k)xJiCoiCY>F5JW8_<1(d;KmPkHl)Dm6Ve{k6V1nxW_FEp+F%BcGcPdVtoAK!KRTCFzzF-JZ{Ma zhy{F|Y)ct!5oE_XH24zbZs$t0?N(ZqSMkY6^b;4PW7b5wd~ns!eB^mC_@bL9vIJA@ zuyddVN&mn(i2gB4inaD)uMfFhM7f;jNaQ1CCDM@_#I%;@I@tS03_}r>Bt5BGE|pl? zx940a=lQM&h!px=Po^=s&ZMkaXB=!krk zTq4`UKWG#U+LG77tAQs+Uk#L^)3OYiaRg5dInP@rku`rq1FV?JZ%weX;K`M@FV*t5 zH6y583FO?S(LIr21eGiIJ1Qq{MzcibjA@>t_*&OXB_*fpfbZ8l}VK=UxEYB=9l=L>sXZI zIk<`Bn?sF0{UnnQ{Rrw^X5Gk-s4;T4 zquwRW{m6~%-0h%zx&0>Q&@>Y8KPe3Xr03G>xaXqW*NM@N>X);&GxIjuQT?))O=Pg6`sJJ31q}Xs zzS7%K{c<5;wv*A0>X$a+fhSPEm5)TVN0sUQllKnqCCan>3%hu=bxdA5dbM?{^lHf`k|D_g z@hNeqc)IAgs6wO!sdj#@%rJsS3eEd4Vf_9+-vtLh9G%%=XBpuzFBn0&&fsyN%>Teq zzA-3KxI-x)U{e}KP{KoV_x_NXyI};yJe0EB6D7)eDCJ{pO5+F$e1K2>w#aQ^3?nG; zp>RJO_rM}beJEw>2_~g+1f@Q-g6=xup(;`8Ln;4eQ|d<+17*^ad`EWQhK3Q8`cM|n z)b;t0V^8w4qkD4W2#S7M-h?Lq^Ayh~ZuR+Lgq_3j%Hjx0eM;W|%A(i!vX4cHq900m z+rk!L;WeIxvB*LG!;$;E&IC4&pxlQtTlu;NW>NSo7Gh*C~_gPFTw1jRr= z$!!qa7sfb(Vj#-m$v2oR8b?qTL@DRK>46djLO{uN;;}MDfe?lJkPW9FL8;IcZ}Hv8 zJ)B_#r9%IGk}s_L?V@1>1wwiM=Ya?XLi;@tp+HFflm{e~1(kRrLRk)SbGJ3H#R(Vl6)buoyOXCPihn{<^d~c%N(X`1a+PMA@3mw=b(Yy z{&#=C;y}(Jg8(EuJu9L(S<@TY+!APUWw0W-A~CT!t1L3PD9}uDJ^|2v(ul!LWIY6O zPFsn5e-6vXX(tJ=dzw2F60k7I9?;>Y0-JRrb4DKM)KZWGHcG81CBWs*?k|249 zv9&!SudXJvMH{%wm9?tsob05s+OWvD%)p&wGoXoXBl|J9l{}BwoB|O!`75%qXr6JHv*j;w|R;2EnA zgJH4*0^awOAVp70ZEU-?GeetQ8OZr{7JN)7Z!0vUmZwLhrUgDoengxHi24g);{ey2 z?wE@NxYZYv|~$tIlYP>j?``k%eCZwl~RuK(6Gl z4-WSPEDlh(rfZ4|FRTqKuWu}@4Ulsm%iFW^jm=dRHK77kyPzH9ID&#!*_W1Rc>@R9 zWNitUrE22SH6)tqHH{S&;X?hddT6*bcJOs7i8Xkf=a19Tvak^6E!x?61!h;-& za~_D*$48pdjIG73^?^5nD|kqE1Gs{RU@N$ShZ_2tOVO5FTH0z#s&0rDXj6^jJWypg zKMJ(j#(fH|-~s0ga0L&+SBGBs+VX)EwD$J?09^4}dxLuPOmiz&&=289Nzg6azW#RS zzMiufp6zB|zuh|qJZD^|oUeFQ(awvk6|()Z9OiwU)`o)b5S$B7P!3|@bF z-42?!ac~KShm5_m1{UJuqui;CJ|!@E6HTM>o;%#}KKlrWx#6(Jz0bbu^3H&5#|OqQ z;F7~@8uU#{H_7?4-ii^BeQ*0~03Jxd4B-*Ih|mk(5E#ucjL%R%f->;sqJgWpBs#b) zzwlkW(Inxcrw|l|t9%CVL0T<;!G6K30)lAAl@vTBn=G^Dx@6XkygJ9L{UazL&piX(<-51|^UGM2C?=N z_X_^5Yb;=tpi|)1cbI$@j-VL*$UFQV-94Of1jXp|vS7};e4iZaV2`qNN@-?O8b(l{ zPHznA>fy$qVJ=^yv4ByuPJw+^`}vTi@A0>!W09kfoswVwo(GOm(oQKeDuItR|Btlq zfQ#zb{%3n%#DWDx(Zq)00!vx3p(v=VGUv7_k`!`ztP_S=Wrjg9zGhh zI?ZG1-_(cHD^&kcU8#y!zM*VWj#C^_nB_mo56Bn5HRu7^Z0W1gHmOc>L{cFBR(zd! ziRheYKr|!lC1BbB27B&Lg$wsR*G#k-!TWeJc*0GJPfPN16hmKwyQH)vHjw>CI&193;5V{B1ukg=C*QSfHb?5xU@wiQz)q8KsMh_R<;S zQ%!zuGre?)EV`n?h32%a(NHUzW&}s$sl$+PXmA%A*Jx4y^cDrKv5mtNmBi9jy3pPh zKiQVb6qRg5-^XBj_bSjU9k-yex<)fa&1Xpr@kW20`$#y0oeRxyRJuPV^AwRt{oV%` zmFR6Nw8v$|Fl#qt8*lJmym*UB@b*+R%-JQ-R?mrOQ2+!nfJbL)*5?();zQC{om*XK zrlWMRVpydBQiLoOLpOyVD3T;4!K-RC)6tyUAtxvSGJspGq!hm;qK}TP%tjYl?w%3b zz}GN(J_g@$#LYtpi zMu!e48I+WU4#D~TnN^a>JG#;MN5y}EEebScj86{q&c)CHzJ$?KsSB-uqvW=EOlOhv zDw}NbwgB4xDD&-duCt)adg_ims5_=`cUP<~5l8n5>J;DwzLp2!4Ajwj5Pfo*w^C>t zq~#_m*zR1Yu#FwdX$+iiGSz^u0*Nh%u9Oie<%Y-69bCyvlw6IC;ERlN_|5^QSUPT6sW`eF==La?mNQ{v8~wj3UeUR|P03L- zA%3Q$(*v*rm{k&m{{-uW`^H#~qCs(q3RdvIj%-o+HJW#m2?j-Sy^8KKfv+(Eyt{|) zL}{!Rtw+(KNcF8&^J<-B@cV#qRY*x>r>lyiXk=Wg=K5(8@7r=3}sEX#r_}p zOeCXXZPDbl={5wrWpf<=eW@*$iMcSMC(A`Ms4!U^sp@|srR7JFt1h)=K=~^r&bwyBKhe})v`kS74M_0Vx!1Sy(Hm5|ACx_q`R zb`lNF0AXst^FK_mX}p*XQ=`gUgYp zecL#)Zn4*MdTmf{a&nGsK8c?VMO6$ggQ5!O z*uYsL7ycnN1(sF8!6FPe@vyHU3I!bJ5YHUY<*LC9V39P}mWp8?;DZESSLp!v!dK~Q z45VQ2n>^t)xpA(oO0pE_FP`ihOIF6&rh8*Yfc=}PEi*SlZkYd40UGP~c}FHU#M!O| zaOx6dgHYPB^K8?=X(hVTgqedbr+BgeW_6xztcI6P4m}J2&V%!9GIHbdeer&X*To#u z3G;2!ylys4G_D1YsS#vLfzN>7#D;D*o95fDmD~FV7XcqpJk=58O-_n8nXuJ(ERq32 z3#v==`<5e%hIku7d>3+(WF7%LB3-8AYKLwH_-u&n2zZ3_rISN(wsGVM#bp|DRlH44 zZuv{AoNW5m96=s>e21L8{#bt|a8C#B2@m&U8#3PSQ+NPLzxBW0oDaFl^$$~Q?gHRo zUjR7xRgd(?!n&Ucfsq7WVR+T_f6bdxp({Mn-%+lUeib$&Y%iYAuF+qvpQSscYu0JC z4{7r?-)M*?N&T+6LM>L^tIAVep-fb~tLRr;B7a%lDjy?rNx8eRQ^bE0H;PrF`$ain zp93@YFPzRAWL6i#F5(u`{ge^hHDiwo*rzd#nPy}^N0qLXKyvwFTPh9faAGlhHlST- zi^KPuSus?&5PI>i#jt?GHk-PHpDC650J#u#v1$oZI52>4B>o^}FW*$|Tj)ag#T`rF zTL@{X5F0B#$$y#SB}rnx)Fm#&Vf2imn>nZ=em?zIt6q{s?}{t~1_X(Nw_7O#f5;4 zR}Hp!+?ax3a8er>*M%E6-nuLTl9>ryDewU|`0w7hQc@FG5QWvX5J(1qWDZqLGB{!n zj5ouT!ZxMy-(=~*TL-V5Dp{d-?}_YL zfFX%?AGS=BcjtqU3~LfsGiX?oA#ga-R!TK^H;ahPcr=OG*c&j&Qz~^k9HL>_g^I<6 zAPsv2Y!*KmWs9O`6QT%49>%?S0-Mw9LXgIs2wNOBP71USbZ5VPGQ4I;y!U-vh}Hn+ zv^`T$9_sSmw-wMBbb~K}O2tfwt4*upGZ}A4UJDFVw z<;Wky=>-m8j6t22)r(i+c|da47;ht6Ey(F+a0Gn0FCQ0+|kpUS(z8uHQIM5PsXp|VR7~tySoeO3F zNp2)3SYl#)DqU6tH+&ka)(RH_Med2@N`bIkDfAl_g2X!&B5XuCo*{uA3LC<}r4Bm| zxD%OD7lKIY$J^#HLkEI!rTY7&<}{X+#@1z>3n3*Z$J-JZ5(trK@V_YIB{8ubvBDJ# zBry|g#<`G2ec30bh902Y=@M)@n0{a4LP*KS6JSRLv}DvoUiV5ear;^qLP|^%ZS(sf zlM(L#1)P+@YxZ=K)i3UY=7ep-u*%u`|LFJ7Z+simL4YbBbyG>Pgr)xGL5s-vp) z%I}reD;FxxC^{99@<-*xvY%u($(Bh!m+q5JlpK>-Bw^x1;+3K=MEgXtL2Kd~P{WtcGkG6x-q;szx&}{KGIgUoN)Ift;I1&Ux|9 z-ic&>u`L3kWHj+2Jq*LR-)xJAcpZ(HlMN*?OwJF@HjIYU@FzuBY^EaAk1Rq;35Z}G ztizmRm~bn@h;U7bZRVs6gPSlX8_Q>yoc}4YC4d5IM=m|56iRO!tihaYu$N(Y-dk#0 z4hpEooNTa;VRBBkKx>r_R$)$IrFL6DsilLJBjIX8?f z=WZ*=xqh$$b50l3{6|*Xe9-)Q%qgt-#bs3U<(QL=gffhrx0ZqCD+kwMPB!Y-FgbrK zvn4@zp)$-F7+whWUTpBcfOTI2*|^S@2oa;KNER3#$xG%BYrvh{)9Y+=fz0whlEst* zS(-pWPag)=sJO`Tfo;cft)Y5&4TV=9!5wKyWWNY z;1WpMdJwC6uoyGW|MOy9v)+~rA!dq@%rC?YU#wu={j}bOA!gPhnO__nVY0OqHjKDb zh-85gmwdVlQo=(OFe1wa3y>_hfs@Ep2jQX{?6Jx84WNY5!Tiv*VM1P{`5&+$S^owY zb0vd$NEX~SN#x`Ps^lc{-Ueum4THIuF)+v&GV%&?_rd-I;FvQU$BUfA%0m#|scdi! zW(-j^HcDl{!Xt@nJVb-MtwyroX5&fx#333QYZYb;ZYWM80sEpPGVZqicvIzIHj=Sp zmbWAsj*OKyl~mr@KZ#s>TYm&pEh}`@m{=jHflE~*dFM6=ll6X6i zSq4`inO}${+9TQ0g2}G9y?;)bPLUioE9|df;kU7&9VX~b=#<*~w1t}QG&gFNsL!bf z)Ugo0u@M|C->Y1u_)@W7en!4S9xHoR)+~#VJ|?wFev{lGSt|ZWyiGhs^fytRNDB=A zN(@t@;aaGx4OT9TR@;(b0|K#E7bHNqUb;)>g+ukeW>(x57vQYO&8z9=B>^-Gp?ds{ ze82{l8E~ZFGd3a6>W9^I0SYq;SV9x&DITxsSdtX()ZB$YtF>zw5?D>bl09%U%8_{Y zugySmzn26gNbxsm`2=HEZj~+sS}AkrDj!bmU{?iuAOH0?R~PTf7=czzIdqu|)rX@K zFinLfVOPeLE(BV=%$5SD7r1!}7&&Yyob|fIg+QzLT)Jb0QeeMj@VE1N>%!SDtgd<> z`8XGLtk>s)odJfu2`!01R&RKXn+DEQVs#-13+T|c4g&}l;VJ&663U5^csHY)xT5m& zn4)N8O(TtY&1+PyDDOrD0a{eVdw~ukoI^(eGa{a~^0%QJ9lPZ>y8yGr*`LUU&fZ8e zD&MA~GwalRx+G^QlD&s40N^58Bdru3a6u=fQL=c#ac5UvyCNdE>R1w}PjY;6T7X7SU6Ye-^W*3t3*P@v3+O&vDcoM6hB3pzCLEw# zL?uJ{ysq5=_QQmC@n0=V5yg$uD zr<%M&5HVxt*;2sX4t8^Y9E7*GCVK}5BFNIyy@LbJ1A;;WGfL)wG_a4RHfovKl?${N z)9G;&=mGqP7*j*5jzhR~xezUuz0j6};|U}L3`AgXFIII)-UdR%*olRl>flf_De#bk zAxZUt2oO3JwTK}B)!~Unz_A zU6oBWTX{;^t(>ZOR?(=4kROv*%eAt{z(=uIdY3d$@{Qyg$wKkRV!L>T=p|7-EG-@i zQ#=I!!CyFqSSz!-0Ubu(*iMbj26AGDZ7jL{Oiu(PAna@2j-Z4MZiIRb?yx0;8QGr# z0bTzJrm(mXww1Y)8t(ZN>)i;>x@D&=DS(y5jp(Z{dx9v;ZiH85^->!)pH;aVK~%T& z+7g3UAxi4k-Vm%13suq=#LDW9fQ0+|f@*GdBc$oKowhk}?oJPkQej%cq3m6Z@m{lw zF*jnGiu-NzC=IkROl5S!Uzz{IPjh_HJFlUsqxDniRJj1IpF{D2{aRz`DkFx%gyj!8a#81ha*a^MhJ1Ds3BShE}B|OU! zB5WT%sW{8=3Axt{p~a23rzy*QQi6?&nzi^eP#As96^6hkTG-y@-j;?>OA`3N@h=Rz z2z|{FBJzn6{v8MbdNmi7 zuNj)~)u7H3W*299y%*z zUDATxcPL5o8(rh&qnOKBw+?QPoHAhy{iSYIXRD#au)Mf2d4-|WP*z;ry4A8~LL`ZJ zqYJOs-FzAztI08Z^HOwzNfm*D~buB;J1&+WoN%n_b(djE0W|;}~?JEjbWUgJ!zX-QHFp=jNT%ApB z1qPxF@&rDXku%6{MIc31Lv2Y@anBZGcD6c;NzCX>vt*Q()#WDgT)^wWrT01DBPF@# zx}wB-5ov^9<;?v)^1xSEk3T3q$%9|4`mjJ|Yf?JR8C`7vxyjZ`0uy;+=w(b|YEO23 zcS3DL&f4CN5>vayn337iGU*j^99!WTauy!)XPFYio&AxQOgb4z$9IGOHzwzWJ?IAi zc~bBuFnO71*XyIxUkaqlZ!+ZzDQ&&Zmku&q!qUBbahg^IY;uAz!0txbcf=87GCgv5C6_nH^ zwwKf!qYBBQOMzQC!|jjvKx0v6@(t4VBY?`$_^cD3|&B!_=U zexB79-T%H?^ln(GXm*(HR`5?!OQUEkQqEV7R(z++*2U@c;@iZ##q|(R<3;IxiuWKA z#w`$mLn-@@s9LmAG+TR7`fhop|C4z6j_o2Ns=T|dAYJdnWGv~wWtbJM%8%VPs*Rc>DUS7?N|^LM`A}6Mokn< zjwTz+Tjb*nDF$PjDY??HiKn5_3yE#NEn1XLZpOy~X!Z7J(JkaGK5iyI!9#MBkn0Z6gJL0cQQ=;#}a;L-h0D(M{s;(FLsr zk9MMhGkotIxAZS%Wh$?dW2k)p3jGnR3Y{09i-%vdMq&viyl8O4n4N<(threuS0 zQ;Lz#GyO- zlC$xxO0sD#l>PwOfz5J1xrKoAx0A==A-|1L*ZHS9BNd|#F~7v#gAy?p&?{j_YJjFr zPUW}sC?}bJ9UxujO>0pY6RJ|Gs#8*Gs;hbZYt(L5_1;8YM;Ub)c?~*)WS8y<*VKZD zG7;0m4$f`2ko2+-5RM#XV8Imd!`2AY1 zBCS9GeuVbIBb~VrUTH`(nW~biOq)zR5yR_QKHfy0h~af)<4vHZO=Jf=xR@=X=Q|=t zhchu-Dh*I&lPNJZ)j+n~1R%n*H`$s*c_jO0$e+t-a*C)UQmoG*12@}BrD0*>%*P_& z$o+t=RbFxx-r8EK|D5iz-`4f%rf5%SYqUzuLz*=Zijk<(RUfJLsOBnPgMD_i;)J4B zp_1P#&y#&EyFq4@o|W39m%uEvSrQ?BR9r3=i4KWYg?&jrjI0jZPp+ z1P76ZyKSTC7WK$IzO6PQ_gd~|H=Mo%vm4QRFW${=QGE&P-H6bedJnsC_9a-{h{Jnj z3%lE`Z0E`_yAf?Sqm5>ok6v-$lUdz}bEB!}gHz4!bV!|b ze^5=T-3uV0|9+b(peANF0N==`!4y_E!r5p+c@KmT195CL^>A=%xf>yC7aw2`9QbuZ zU>YT>dN7Eo#chPtdmjwcDx9|< z^1zuMxyH%VwBV;+TLrS!?|;c#=aGFB?zJzXbrLM#p%} zzDSU9?Ax}5z&LVb#{1p|96+OE+{irtfjp}nV=*TS%NR!3!gp-RlS&<9FsCq>NdGP( zv>c-`r!YXN?p*->lsFXEZAcprqdI8-C&yoSlC z962Wy;iofH1jWeNSAGB@SRHcADU3fn_yOP#OB^!H`6s%8>;u{jq?lc}8<@``1kE8C zS=b|IslLP`=L9WGBIC~5MuEhlktMGE5Qbu@BMfs251S`H#J(`t|0hH^V4p-T{SZX3 z4(`P4!s=}~N8z12MrQotInYAM;C9UUCmLejIc$i*ZJ1rSA$EKO4PhSa!<@p{$}=AU zw$d`#JF>8}J1+c)iqJE%2wxT8lrY$hIfWbI{z(H9NOd9h^TDn^DaQi^kbT`?CuSF( z9DXgt$ziZ#WI3#Bp+l4mZpEB`qBR~ziAx6C|77+T*HX>3VRqrht11G`l?-kfnekIa z(Ai4{TSv}`pS}fES=np5s;V2y>I<2}Qs!Rh??O={?hrpMIuD282~CUOO!Yc+F~1Hj zThU+z|9RLp#h6kINF_K`N1q53005`r@Gs~!SOdJT$>K-oMaVL|wzUv&C09OXi}7)S zC=t}k9l(iu?Z@fk$0#Q&C)53p@@3*k{v;=iB>>B=#~+mkbJ`ud%z&BXeVE zb#pnUrsF;_F&mmnLomhHe5PdYaT|@8kpqkhr`b|C&BHxdidp0HASYvOW0;%To@rD| zYq;Wf$NCy=SW>RhFax2Tir(VZO|vbzrb%vT$J44@h|GGmK1KJIu16QGeMY-MtI+&a zldt}Yo>rYxU9O5#zNl=0)Aa`wYvtd|Z;_|UK9XG~nVT4jF!V84elXC-#tGgB!7^t6sAuhfKD(5q5gR zi_pzNQCr;zG5z*M*ieT`HoFl{n*UPhvSI((%-eq&a+@Q`6VKSjliM5N6d^!PvwJhJ z(!Cs-6`W2qL2}K@!w6z^BNp`daLF6oi2I!M$}mc>y6Yi%+bhE`x403?`OYiD>Sz-r z8(tlT+UiDhX2Wgle*WV_+~Jd_HP%`n3AZe`b4Un)eIHA&w@W{{afE&tq#N{i) z>P8UcnmdD7S=K&tk zdXPQ;^s%zK5rb$s6etv&e*)6bd;a;_v98Eb3`786DBKySkIi~Ff(+HSv1g#Z1gpCk z68i69`TNdrt!@Miz8{nT1p_S5Td+Q-EpilIL`d`;0AXtkpFfs+bDd# zIgn8C*Fe5-%(w;;Jbz_d%SW-^jgY)C_k}p$M&MoLT|pFPH^S>4zbmj(>v7>47q*AF z$ag`1tsY&e_Uoo8H{`>0HTMaL7Ma>=9Rpeiz*iM^B#svTjsqM;2Q%nMPf43Y+f2*hPb=C{uRhfX7M2IPV{fK>OP9~ z9>m?P`!}mBUxLMhxVxYJ%Tl!c7v#F`m@NWWA?~i|tDpq4ClV6w|BBV3kD}ItxV!sL z*wSfd@+Fu(V5_DxAz>Go9Vhl@H`~WtX zf)`lBQX7{G+F8o*9YYSi0C(hZg7Br9JqQK+{DnZ~&;Oqv&7k>+)FuVI9A?ul-GHTsBA>o#1xDMr&+3el{39@H{D6H=7kWl_?P#L9e1YWtG zrOv$g6)blnx@y#OT!-?OVR0jRs^z)Bdgv@}07!vanP}qn6acyX^Eulne>LdVy8#jf zxu(!zeGBGV`n+wNe=eBZx}cDuSBLr5o81U?`p2uotWwI{9gw{6l+6%wxnyx~h2-l_ zg=Rh%C%rLYBrH5t-=e!ydsuV7`crk3YOT_tcv5~*eyPkV-6uII{!Tnsw2>IDO0EMW zRGBPcg?;>31o)*x?XYgsCr%85SxQYPL z2Mi_kssQJ{zVrtg><#tyYWBnsTe_`Zli!;0y3*K)Z5IH@xha*VF?v zzZ5PvsceGn=sk`0l@shM?Bn=Fa#bM_P4@Bdp#*^uo0!bv&v_-#*LVqlUjnf<*&8-O zJ;w5xa`nir&n{Y)*uJc`Eia%R)CV8HVMD(TDrMeg`)1VEm{6rOBqXgY%qw1r^y#5JapEy+#B-hd(j#+V5A zVgid~Uk4URK4@kt77?nHwe7~$^<61lrI|TFr6i&+ZuWYKw_xI+c8U z`{h%}nHKws2~e?7p^79Kt+X2$;er!-cM0eQ+-uwj@=G9&R{LgT8Xl7AgBxw*VK5k> zdnLmaf-c=RanROQpIDk{POe{541AgWD|dJT2z3(zNr!vQY>oYM6MHq7 zreCPC(V?deRU}EMwvF|j+`*k9io^~mn|sYKg!ES1VDzo9YeMl|)w8UrCvRCsMl#MK z0qkH>qSM7Nul-8Ntzk-0hbkq%qzi(5q!_J@*jIwsrO?(M=Cxlbv9-2_etVBy#gqcK z>e-oge7Z8Mt+ZoVc6-Sx!?KLvQrHv9L|E*@zrl$(s* zWZQv4C_@R+k(+JF&0o2~VhEv7_Utl12=Jtm%w6^73n7#nyG%4mt+Q2PFI9w6`tntq zHdmVqvNxG<%JbK*_gHe6*L+5lLIKu82UGU!FbH!=`O21cnL zqx)WWM)w2*ztm-me+u6#zD;^%_+fFq^gd~nG)?+X>5Jmy;@#4A@mZ-EA(?#8rR<38 z6fqPyXGkT#OFkyHsqHc3!ilXBCWgX78M*U~j`5;e^5h#G(V`miK0MN^d89>K z8w*=`DB7s1z{IZN6-^Dj05R-sjH)D+r-9E#vJ)R0$c^}@AZ~oDCmY`Bh?dte5V5ax zHo&xQBL8_C-ieuaSHKMiF$9-MdkeD5$nS5$LrV631UXocb1Yo-m=evzKB=v&HMdu; z=vrNp-BoO^&oGy*Z0+3|c^m2f4uEin$W8dTiFn|V&IHflQEbl3t4iuh-9MQ z@Dl4Y%c{0)ZK`j}tckppjQSpccuY(ka)n_ia>~^2sJOLTJC}836qIJPSNGNqr({nzQn%1th}n)+?L{+ zlxRJm7@^`ia_$^FwB#3f$eGA6q&34985^w*B(K?$-_enpZ7#G_MyvD&a(bxn2>JY@ zj`7nYnXL6ac@2ill+@0`?B*s*OZMuX>db`LaWs)k{Te`!5ll|fa2KjNiS)rEhJohSR`#Y9bk*gS)UV;iUWph>9{dKfjwi3+Vx79iz#ax8T3u3jr>bf2Ly@alxe* zE*#KPKlepWiQLOn2K3#MW^U`wFs^LdT(>48D=j;}GjgA6=uF33VhBRB@hs?VGueTU z266*Dd8gS*F^Lm!lT(0QxH)uVn#*>C{Uyzr?7`IXnAr@ zYm4lUYM^p3LyL|NK9IcLdjxVvc#i%v{gwJ8-Mes?aI*HKwo0qkJg6yB|ERu6y+CzN zHK3ZKd`7uh8KF3;D3<>!KPX==`;Y7@S-kX3X%BcaIxeY}XvBAlb46c^h$tP7K=!~j zic6Lj&4gVep1}O@JG(#2_ysnxWA7e_keNLIf+TDIV0U!B1gmEyBpm)Dh{EDQ+~dzb zvHLS0g~gKz3B^ALC73o0agUYD(EQ18uFDxj~$I9$M++*V}K@?UG;vP@_5+qfr z2XK!h`d40?#ySqurCzq0#GUxLN62om1>HAq~G2N90*ehW(2;6ZTXp5NFrG%qWi z#j}97Gd(xCH*!p38g)2egtY*>A2X2HPeJS7x!{b)>_O1uAD^=I^Cgsd5cF8`5B5OA zmtgfE-tpmouod?um^~?wp!;VKs|_B6I@bJ?mDWdL@faZ?;$t|Rf9X7X@W4++s3WAJ zBWHh^5$f3VaZo|k9>h03{W05$K2~NAAREcdzXwrRJ&0i3`S+m8SUrecJQJL-!Gowp z<0nCtv3d}%cJ`Jj+)r0WF)t`nSLtx^upo2V}*)xl_G4)y zISQ@E(7X{A+&;B!rmDMv15~h9@lwkHC=5X6*L1k2V5Oes(XY6sbuMD#XF^4Ii2T@o( zF_5q?=vb9S69R7g5I9}=FId7-bsy-q>!!hxZi`l~c>s=de*jC^64fVQ35!?03Gp^2 zDxOkoP$=a0$ydw1lKlm6+wV!YNvE^8?W5unIMTgMv^?xT6t@irXL!6aeWpF09IFQV z*T3f2we+V0%6>rGdeBa`W2QYWRBE{g&17%Qv?qp2wR+G>mN?5kKUAvOgGRD_vqEy# zt@nV9%zN$>KeQ#1M6cYfC!=QD6`{CUJYX~<1@oa6-8Ep(d;Dv#=h4gE77v=p?hTP* z_Mmmla{-Q}0%*!TXc!xH5#X!=DP|Aa#9A%})0BDYA?4YNaEcW`WA&gVEcRi`Yn4p%%=bo7^(g)h{EbYYZoo()$f7|D)perYuxwj zr`yM`+=C{smhag~)R$oOfXR#D_tE!3{45?cbNM4C&FEa6XlmO* zo{g|CB;vX&JDGK6f90S?mzlJ(uGP|$Yt1bXUE})8XnULP(ulDC6#=%H13$cyWM_Tv zUre%lecyu*5Y9O$?Bf~q%YkG&>%abBf_)SzGTPCJeiJaF;RUv&*uCKe;MzKMM9!Q6 zc)>H=Yvv4qc}+g{XZw8$W!uQfcSW+@8*PB2|C4MnYC!{vw-69uiD~w!9B>7^8t}kL zJn@*GpDvYZLO=J`_ogru*?= zF+|`FpXG5e-9DBL&WmNFpKL`;`Vir*i)c_BQGW^D5pZ0%X z6h-pjB626W z%pmgP#QIo*6y`PAyTncbRuvp8bpT%U&!6J1f0zojp5rw82)}y&%Xu(x^63rxYB}(v z;Ko-U;bTw{&5CFJ0Ttz5`>AZoqqdHIwPat|4uDdL=B`a!insO@vH`rCe2JU86N=iJb2qnas+Zfz$6JBVAh`v^ibAJfPXJ}xEq zz(W?Rc{ps+{tQ6NythYg^i`QBqdqyX%30?8WrZEdYZ6OW>5asWs!Jlr+u^Z?oW;lG z*^F^PN8N_U?NYwn%RMgJP9(k66v8e7DGMo#dCDko697p$i^qM28fqffTK#)|ySVU5UlL$?8MoBv7yi zw!D7J~%=dj3|NiIHaB8~XCkz9`gq>~9K`SoN2{qq>5`?EsmxNj5&R$P@TjN%ZiD zW;}{C_L>@M>zYm3jhlJ;AQ3xvkD2Z3tD5CZjeMCiIty}I>XPeos#a*0k&WAdZwA?c zkEP@cu#Z_1NWt%wi^&a`brDg)!@}y)$DH5M(gXSM6r^F=lvfAdT%<9PTS1WYv_J;= zT~=dBNqtdf?P?9%t9(WCno*NNE`oUJ%;@J$J8QF2JF_+$yOUS9X^aea-<(v~3LdX| z8&k@vTQo_e2ggGqc?kzX0y&wtZwYB`->uQ{Mxkmq$$1Yt#9q<>j~K>h1h27qeMhx} z*x!Y$`^fJ&IqV=&9q{NSY4AvQP)T^x2~SKpa|q5$PMw&TGC&n>QcHcaf=`z-NFg!pG&L3?F+)cjxZ^lEXc_O(eE&_jt*?@V(^pFa5FP zlb+p1F&t1In%B07wDjyA-_J~FyphUNfqo8iQhtDoyFLV7_ukg+0I&b(5kRH6Ut?DP z1SjR0s(+~*^kk_+IYIG+q6SXN?~t#OeJQ(Ewm^DLx=T7s@~WgwG7i9k>%k+youbuY z7sC#K2@D)Sj82wWj^WAH6^jO#=(D(*WMebaML2WgrsUXU+%Ya1m`mf>hR$R;1_(p4 zKXqUXS@3*|hWzz(9}_t`bav}81Q)g@4=|yths!hxGQBiXCIlT`nlb{X36RM)QYHi= zLZ-3gtCWE#fy!EsMMBP$RKYSW#}KIq8WGa1K16(9| zW`;c}fSb;846u+O4g>Am-@hZ0q{PDUf`6ep^DznUZ0!Nec2%rh7m!U>c1#TAyclaY z1g2PzAx84jX+a8+nU5hz(l#xG5Cogeuj|B>OlnMl)0ffTRaG$?3)YSBP1>2C*KN9ODzav0TGTlt=@5-B%%M_n0u2Lk*Ps@AclV!(c zX6X;G6-twwk!+Vli60P~MgI^v0fq4@-lU0yi_OdNqNVT^`#MR^ufvCIKzsgZ8SZpyOHomB2vfH{Q& zjXa%YkDpZRFk#LJK{?wl9UMoJv+WU+Y8`2qJxMToSGGMBJQJj1PT|YPA7st#Bk_PT_WHyL;yp zV$ZUVnUFBDq@&k>q-KW!a|+)=Z(U=b3Ags=V@~1A;{98l6UezW&{P&jJZ2YE0hy8m zI;e2W!<@o3>&<~4SmKzAIfb=F-H2Ss0TDJi;xK!%V9O@t+S7pXoRJw{pGybUY|JS< zurB7pz}o1Tg*n;CH~DmJo;?xz)lAGO+*gn1L2H#eW?)X?ffb!k2iB#SQ+QyV z{=hztT$vB5s&HI_*@fHS^?W)DOvjwUcjQmM4tL}m9Mdo-pe-lDN!>6Cn0MNi4l_&a z$ULt*jUEdeQ!%G-CoFi!K7nZ8!2AD>DVSZj!{ojJ*YwLBF_=?WvlqT|PL69?p3{@k z*JfU6VV&$+9g~q%_;Vt86TD8C9nqLmc(94K4MviVH$i%fBMP$%524mO_e>+A*kQcZx(b}IU8y(f-qE$|B-$IbnVNrS_Gl)m?^744K7~WkIpBh= zQ#lznTpPiZf4{sy_7Aw!Izf6;S|ycAZj&T~C&xB%r06lxIuRhIY|{#%mNX!ma4kIOEeb0bb2{a2EC!gu@18f zx3Op)w6WDe!=wq%5u$g&k@wjISNL@AIP&~bP*tsiMleef7B&M`$D18Agqg5XTQfkZm5$Y@0O3f0 zA7#BQ0|r+We>^bO7D?gA~`6D7GDPjzpDW1Z749Tl-tAX zbM*jawA-gL_jkZAN0KSt#Kwm3I_u$H<9#i-l+KxV6UZ%g`yAvF2V7q9azRf(iEzu0 zy*$rl=U(FtBp#PUGIfCAG6%Ti4cMo8-L*her(_zgi=Q2s<7+fEhj>lqUuK_dQ_Jeo;ucd^LVJ)D7@sF4xaNYd ziQzK)G!%L!2>sSBt~EemK$c8#H2y+|d`)Iu#^`Yda4ETr&m{qZjv>||fD61%MIb8w zHMy7Naw%|m59IP)U`eAftC`GR%nQccMk6`@HJQ7ck>nEKQMTL1!w9#we4WV4Bh+j1 z0Lx=K@Hp$oBaKFo<`)Pc8)JMLjqSsKO$?Vaa!dmr6_?wmaVQ&z-9ZDN@iPMteC<<{ zS3G=8PA}X=`&BHkI`7BINF!YYv10H~AzqV{X$-5Wz^ZDGeVPwd#DJaxXgJVPsMp?} zGX;2k3cMHxHL-(s)>RGuq-EXhFgPTxuf+hxra}939uA#>NFn5FDGv zHS?o-ilvGIsxN?w?T!%L!$f1{@k>s|%d5%sR<0k9rB0^gNx-AU$yaz9jjH0$1LE-{ z(HMz*9u&p}xk-e%f4VHpJ`q@5@Uenf(@3Wze^%(Thz8B^XT{{^SWN&{?L(|o5IzfH zSko{Zd{#8tcrqP3d{$g;j@5Wz^)0ZXevBX>8(ih(70+JnPT0$K2`&Ri9SPK3ds!7j zu&*Qt%7vFA`GP<=68J!*;wa$@LSEX-sCXRk_|eA$D?^cTd>*_z<$gSJ_Axxh0*}6Z zTn9P0kGqMESI6n4Pd}kX%sc@+AjAq2jg&7vd-Xez2b-Imgdv4fd4xXfz?Dp+0w<#ZV#DDy$>YRb*!BrY z2Z}d0*DRwzr~zPwlNTgHc%&p6nvKtjcR!n7F*dhXsBmDlub`jN5kyIkk# zdoN-0S&@$m`sW-t*e5UU2@Ag^e3AZBy;DC|cUrear-Rt(rJA2LL^DTyT3w}9sqRtb zD!*3Vpj-gHeg_mYsE$&->A@ox|rB181K=t@y)*tz&lwu5kG3xNGh6Cz+kp+ph5X>f;7yBsq93FfMV9K{Iiv18|CV!DYA zE9zrccv$t_M28hP5gBRQ5`GPw3w(u)Esj6oXxDHvbZm=b=g33Ai8(7AJ20p4u=@07 zdL*!YWPQ;ifpxclu$vv*Fnfkzhq>t%dL%%7>FP)<()HJEi_jfA_wxI%g)K%MFek1cwxKUfH=+UTI3b%lj}u@Ho< zaBLm9wc^&|BC|Y{52^E2->Pmr465uB$Fh-Zmj7qy8-g}K7YEzaQ#%LZJJn$o~!!&`3Dsob*vhX;KNbQ?K9(W8GmpiFxS-7w6f9&$fM0*sno1F_$i^AXc z+@okH-n! zoz%!|5**-qHylBiI;oLaSlAvn2;1nSMrPrO=(HOrA}2L63y)WrNJCZg73psGqIwKEHUkRLh*ALJS*wKEH^oW?v3E2l;$H8BgT zs`qhF)jB6NF$*i;ACJ?IJT);3f8;mz?U_W%pMYwWIH`$QxWnB11dKAPlbV=?8MoE< zO(Nk>0%NO_+L?v37d#1z4YQNlnS}>ffB0ZzTv1nFV_oy6vSq7^nHjFsNe$1!y;5}Q zvI%6;Qy`PYNv+Sq6F)TxbYS)hCpAF}54*>nqRZ+_uzw0Orbf8<FM!&J24nt~u79NJM){Z1AuZDB)DrYomdY+)_F2CAt1SM1B zv#^r?eKjb#!Ab4T>4H4L&Oe9j_zTs-#E~bXr~U$3usA1-+%5Vay?i1u;-0g_IUchM zH+JVW_F4UEb!V7elpQ9{m4<1gnpg~DsJ3HN*5^elnKhQiXRm3E1pywRP0i0Qmj(URfNmGmcI>0`ZvmV$}8oW@|kiq zK$BmWJtF;F`m$uN1F|LRblEhuB|JHNg8rBAy;>K#2GZwB_lr;JZq*y~WAu&sJER>lnJyb028j(A z-%%Z-7Jh7#c-deYHc^dD!fKowjxX-?He0{b# zu_r4#tt69&_E&rbxOaQB=rOY6KKpc1xy>G#&bYd1_A%pKOi(iZgqnTKctR>Jz|97G zbc{Ao8r~%cr3S7AK!Iww;sXyA+?}yUM~@Dq;NQx~*ly?F%1|=yf_U=rZe=LL$>Dx` ziRdUqNeA{ixP@b1GJz*9@2Z62YjUCoGF^l_RPY!B7dhZj4wp2b4(k|+eD&l>r1%Z) zQUPrA?Oyw2GPln@hRFKtGs)Mz_A$n^meTAk%X+pNw(_-H!f^8?@~-hHD&fKf6uc2G zsK8@ATwZ}k4P0KaN2fC}Qk#8*yh{NJb0AmV#UDj2+yenV^>F(I9(8a%1=y7ZQt(@k ziL%Noi`T^z7Gl^5d^W*VA$V+nt3tr8B9I-gB@~SFD;_)EKu}b})g}8Qt~2-9J4BNi zE-f9Ki}ISPdyDFM-9;oO@$L4d$?!lu3t{1|?4A%>RD-(5;N5~taIwlG!FOkxJ+rAPw+H&kw4z z@3s{i)0x-p`3>_6+}X27i4{M?r9I&H6ZskV#r(*$g0I8#T0!vxT+9~kOEmeQ7zEQnY^*P|r<}2R;@8B_tI~9u|g79{E zjO>JLz4U^VNaG~0!^d;9*e%{D7DE8g?65DxuDmuvk__uCivAK_XT?2BR~UZ+{WbV3 z9A%U^Dey~paq;(O>2{g|zl4{)bUST*jxL8N`b${Y8=eDU&CVKJ-v}@C_nY=a65aE_ zxYSvV*@YMP2}N+EvI(=7IVlcI_^|5k=i#ub!bx#p!WERfK-cvY2lgk{_1j+n5gMEn z3?{sgeDVc=jg>el_Di@mX1z$)^%VOhyso#sNVn7Fs4wB|^cOGE?esd#DcodvFF}*7 zb5husaL&JC&SED;e2ut{A4ev?463SkQrMU9$wS4l7enj*f0 zH_3EQeF_6CQhAuhFqb!C=CS>7M#4WZdYah%n)Ca>GL~ zPD-5=5hmQ4@+0&piz32=d2ToYJZqd35hmP8Up@k7K4ngd2or9@gop7=-ANH)!be&A z9;SO}3I-c_>>YRnG*#=&#L=H5I6^WW0hC>bb2;WL6wG`y51n)u)$ox`o76o-&8ww?mFs)k zzG~9CA!=R~o+!R~8z+h(YF-uYS^&R=IDkXcyed3L9DWDqh#_iT6`msic^fxr!w@yE z3ZM6vzYFMU^AI(!3QrFY{?|x|9u38>?`ioj-9;6q)}XbTI1>HM9y#yyZQ- zo;E}ct-`ax%kSaA_7JtP3hN6Gw&NOFx30|3$uq6$E?_3KrXgx{T_V`fyUqXvwq%GJ zU4;v|a0b81L)7RhJTqj!kEd-z)aW|gY1=6NX&b;xQb^m6dn3s^?}HxK4M|2GD&s%E z&-4(r!V34$4$N6RL=CXQQw5mcW=yIXq6S#uDQ)Iin9{18)b=WTCb#b_oXNF1sqHmO zuqiH{wP(OINo}vfU9Rdwm?kaG?WiT;@5ECd(k1XV%qiTw6VB1^GBvvj_h5>4cbo$i zPHKQ1Zt~Of$61n*oQr~O#_dnzD05O%tnk?R^l2D7~k{02tWQv#?vWP@lJEmZeyWN?U3ZmRGF_;LC!~0|NUb@i6K9Qn=hqm>+o!qmjv>iX<&H_VH;LH;93z z<82Fmg?NZ{ehKVra{hKexV#Sq;A9>hs(`+Z;_8~#jI!mc8iH6;AUj?~@h{PfZ|9dt zoV84gM1?A4t2J$PT60G0s!iPi?1*6#(;^VCh6B6%@vYcor_=YOP<$Jc+E=&KwH7C~ z2dbV0yt5H|y&ZsugXfpRz9t{nL*y%S9TO*PVyF_yQ*}&(z_2yMCzt}&!@fq?JHG(- zHQ8Sa1$=PDJ{3u^N+)Yhh!Oj;j#i#nthGUD0Ih_plJE z7^09U;kBvxdsv&U8={aXVaAVr534ro5QRhuuc0^oxN{Pj`vZtjGDIO!!fVs!ALz!M zLZXBj)5E)ukg;Wm;-Z8%2~&T>O~MexMG0>bM5kZ@d)1GWF$G5nGd_)sONS^pN_dkH z_Y-ashA22nxFIh4iEhj(E=pKmbd&JQPatg55CumGFH0BxOgG~c93{;7@XvHJPQg*a zn*`A>ut}&MqTs0cg3IUTU+l?n5*}jo*7;X|K(8$wqQEENfpf#_FmS9x6!;`ODSY!fJ^P}-C*dKMcbX0{ig^-N z6&+&Fo(5qz4@IG7GXy)i{0&5x4^iNgFyoFl=n$irC*dLX${V;3AEKD2;r8JS$~Wyz zID{-4qHrhSA$I+nFvQjkMUMOx`R+}6yfqGUjy%Lj-CLllO+#Zbd$ORa?s*GtZqyHr z!JNVy?@@2t7l2c?u&^F+f0*Pc$sx&Qk~+z1$vo-b;3(Q5-7L+QCQ8Riew2Km>`;~} z7bu|%C_YgYxUb|HyE>bsw>r*>X~Y_>Pxr-{)p;;s#jI6TB4e!k|{q|zN~yexnEo&Hi@I7 zMSqC?4gm%35e-wXgnx{`J*5i1$UYrn<|+rBCj{?iUusum-u*$s5kG5PJfiz ztTK=t4}~GCAg?2z4dh9vrKp*tR_#h7pH%M3CXZLbPq$XWGU~S)aP;?d%dT=V zs&?0SGN*P|l*vHDIMk$MuP$Ac(6+pBGY=CnKQN6~xp=a(77F^F+=!2_i5ng_`vO`OsYx zbc+}%e2L2%inr!euP!ttm*^Nj$~;P5ztWi)%H_u1p3M9;sZ|zUzfv(il4~%L^wsYg z4ZhO%)q_a!Bo?P56IqOpG_npJG0B0Pcuk>NNJI^gCm}EoZx&F^BljZnMPx!ND0XRJ zR$f!67$4PCFh*+L+@MM%t-wGupX|j4g!o2wiv!v5nnJ}mljgDGO@yixauqhi0`d^k z8m~6)Dkd=vyPhFYFly<>a86hsZVVUeKhoRvQ^ERLroEuOR%_IJps{Oat6x=bR*zA6 zRO^)AD)%X8DNZZe6=UTO%U8(0kPXOYN}q!dUWCLWDVKza?-u8YE{OJt62nfDr3H6R zg~c$14GDj#=@GeJK7czziX9SOE#=Dx;C9y#g$)TW0w0tQ%z>pcMGOfql~sxXxPLN4 z5ktZY;3mZYE`TXwNO(y#>Vci($wvyPR>=@W3<+nSsvJNwFhvXrFD!Al8CO}bsktV# zbM4AyiOlAqY=}aLgcn+QuU-~K{;LF;%tI7MB)m30av31AP+EUH*rm7(dEfTi&UacE2f(4l(i4p`A{Jm}<1#(glk#Np(J>*@DQWE&vL&5Rn-qI#Ox-)!E(iS_60N4 z;cMaY&+IVq?(k2<5#r+zMEhNlO*C6nExt{3OmuVjbK!>}mO;VNwFShm#XgH1T)K7! zd3ek2IdXA5#@Z%^rEO!u*=54{^l{{T!QN3M{*YZm?muML#=P?XNP7?XD2wKCJlFdr zA&`V5BtdKt2zTk1&_a3$DI}NNg%Z+x@1f={D9GIf6j*E&3yKJWC~EF#zBVj08z>@{ z*H;AvzUph2|Li_@xrfWK@cw^(__&*!+1c6I^6c)+&XD~C%U2=mr2+qav=YppgWn@K ztOqZw;1Q#aA@9e)Qu-|vj*~ahL@2>IiE7}l;MZLXvK|ABI)!XgU_Sx@lyTyXj@%6! zEBk{Iry)3Nw>0W~bQst1Dmn*A&{0>;SvyvAVWKgZ^9c&S4M?9wYbQeT8EV4GdBnTJ zxE=hp8|83rd2~Gd^b;C_M8_DRH_a`}Ds9!zo~x~9ZQ^;qGqpK^tW7+RG1zC7WC@7( z3z~YjF))Ppmn#L<$%}Ut?Yjdw`2iij!x+fr{f#cdpE?iMA}nd}uDJqPdq>{?xdK_| zO5SBuawo|8iYpFFfV_X;m;8lK_+)>O&OQ*GI4siAcbIxvK<8sE>D#VA zR=-J)p?yFdhNt2wNZv$~aPkH^j(>a|O~=V=s2C^zLJwk=Uqxa_R@g_EvqsjukREZZ zktJQ}VOJpQOe#I(3S=D|qz4(`+{nzxmqH)!znzO#Kh-}5q5y5dOh1IIIN6BKKw^(H z#B%M+8jt*~_F9Jh{<6j+{}D9xX`u5s%EHNJR0~PM2G;1Ea~x)D>>G<<3EY=b^@I(s0k;JqO~~Lj-G}j;W4IQRBlvrb+@KT zUCcV;iI_#I$q8iL6NuhL*D#$oQP4AxoJJZ*5>C02V@XM5AF@tztW%)qL$nUlc^mD< z$s6cxOztCBax5u{&bk6wGg)*7jo$@y-a#{P@)nwplVhj{l7x?43$o68qLZ#b)_G5K z0-eBg-ba@p;eFr;aHD*--!CDADHy4(=;*G@pPSRl5|%L7706nsgyWDuEC};IU_3}X zj$g#2D8Ep4fF5zTqCozW9Lc8>kIZ+%aj`?{CwW2=D?Tai6$gMGaiNGO+##GJxJp9c zT!0WblXxe1oxA|I=I$or&1X-oh5;t1c*OvG}Q&c`Z0ysI=3qggs(a%+Fdmk=gKvvk67{yR$E zN5Q(a#5k6I5ZDq7XYH1?#5gvCy0?~w7-oa)iE%7_{4EUu;TNvG1>;!Ibo!yoA<(SC zwZu4X^q6)nF_5JnF|QG3s8xM(dg zi=_|mSzH)h`nAL?mOf=JHG+Y~el8GRw3gV$(i`|Q7w&cn*AlZ>s>~2sLF;)yxNa@6 zjirx=XL&Fliq;a_SbE$1`OvnywY7MP(P_5wfoAF28jN`(JAX#+`5E6331h4pW75ai zECGzM`D?2%CcSeX5g4ZAO66%Dt=t_RvO8pA=|$;r=|1TOX}9b_`AfV4{xp7wV2NOn z;IeQ?_^5EDuw0lb{8=d`QP*3vo%UVz}V;6>iQxqmBt6#o^7Y3=v z&8x?ur5jfVM>#oT303@*YZF;pV_7rWuyOSSv=w?086H_3j23TP9fbNnGL1u(kE|XS z-QtuCYr8FLVQ8i_&MR(=(I!RLvJR8pgQ(;q(**SEBddKm_oF|ck-=+S@mY=Zz7HMS z0HU)XB^I3mg+XF>tkL4Efpx<19za)c4bN|Y8VsoM0Vr)o=k8w}q+`NhvWl^Wg*OvG zlLcgTw)Z+$7FoUPy$VSl0qXs(IIL5g_j*?#OJLs2`HxjKs}sB*Kyg?A_n<+X7}0@` zOfy$B+CO-h>=SrfzR%~7LCEi52wNR9Gw1+tFDqm-^d)-it6SXZEeHQ7e_qq;4? z*%-9-QAmQ&;B+O4le-DJmWl1knux4x67f{@&?Bn@xq`pYgBX_y^~%C!$xj@Q&cloZ zZTwa|3>Kle@RwkrXS2uH^@(G!2O0rtynnS{@F#@TmZY-g>c)l)U3Dp|kv?aU5?BmA z!!*aa%CMv)fD;g|s1*H)lf`H%j8F(@JqN~5!lw*z=cs4NURL1>WKorYn-5H`421(7 z&N*bmt*Aw3A<@;i7GxbVW!0`g*4&UWs&dvWWQ}K8B?`m?=3aCdSGgMPgSpFDk1pcm zesl#S4m#K4@K^8yOdZbElEr`+;#(s?jYJBZ#G))LkIA4MUDAtuLE;NP!-vr@j~z^; zz8{qjK%~BNihjkN^0(zp@=>x^WD8{+=?>`}$z{m{k~r}>aX-9td0W&Z@)cTzi-ml_ zPQhIMRsKePJnwTb;hD%i&TWGbK|`EH;M+oVAv{x{AIgA8f#dIl5UR`XFa(i3`Hcdj zraLgtIxz7zo)x<_j!~@Whte2KCeG@OkWwAw2Jf_2d?U;h2j;uxUKv_DW`#H5^G4{& z4)pIZdhT5Y8oF*M3D7yWg8;VOMU6?S8=CFF{KJ9io(0`dB48%oeUm7xvmE61+xZU0&<{?$NgqseVERv@V(Nwx9L%;)x(T!K z4w~=XjHU)KL7t=0#4tkurSo+|agN#zVN{`NhhhQqSeQM+?2Y6Z14yBh?NMz@r?5j6 zYgCTm9t}uK*hs;V@llc3SAVnvNjDV53T3+ZBE*BWonFC2D|Sy-HxvnERa5MP$UTyN zC<2h~n?hw!H>3unf8UIf3Xo=oQz_|(rUKGKbR^wSI3WEJPGwv-GzE}yrc#mgLz4k% z=hU0<6b49@q5aHi<6cgMLz4jMNN7J3PTD<^erO^fmBzzTa7c5LweW5S=Ggd~VBW=G z(qc~QhVBF;Tl`Jdi#q_RB>^VEqy+mUaKBRPhHhstX+fa%LlYRre9&hJ)F$YLZUf9a zrct@m4~=(_yMNkE$b|ytCvNtOK z9_1u?{D(L&QbW{Y97y+{T0!I4AdVqech9&WOK;=*!0Ky{-2`&KbP%Qv9MvN$-AF6Rw zbS+{;Mf#y?2edeH1hjOh3ZRcg8e&~)(+^cTip~FWi44iF^~g|oltJi%ryHsOyv0#4 zV6Sh7eyH3*;Jv63_3DPo0QyjqYcYt5UCN4zz2%K2UoU$=Ab5tPE>K@z$%3K9KxR&} zA!0=BB>>pjJfc^$LyG`VuNoo6g+mJg@T$rX=|W03v;Y8!x4}x4KZE+2(+|xD%!g*! zmr(Z$hJL6Rkba>f>4x-srW6AC7jV>(82A6JH5HG+hro@ z_u@a4_e!E9P11GJcH%pBnfxXBLqacb&#DsT2s4G-g@*(`2?vBzgw?V{{w(ljmnZR) zJk3AFQS&EoviU;Zcf5Cb&+%X2-OuY(q=OUJvx@&J!tPYq;1X}EI6zz=-X;2%=x?z_ z94l`1G_ypT*%H~JzTVEJ zhH7oqTtCKALU|OwI{-JEok0^AHGENoTGv~a5#7;OnwF=JXwbFww$$bLamaZS9iFws zm+R;8((_9?U*Vu{x;w{+{H`&eqw1x;A%1_7KZ^2a7pvnmIaPTTrTVD)*>Uyx(GhBY z4hnAX4C07U0wfbe463ufmYhmeb9GTvPEm!QkRdv25w1^wp2Ow%=v_z>7;lO!KGU-r z3sM?8TPk!aKQ2R5-I-pInNnA*&CtaSw>cya{oUOe7~=PjE0dYAH5EP4sY#h#Y5pFl zwWl+X>-PuJ;Yy`wRtF>!aBtWd6zu6*vMa5pWlrJT`o_{CzrRobDfu^ei3L8H>zSgW zIW4VSz15A4Db2;zk&*QknvT+Lsf;1y1U9xeSJXtdrOeGNm3pD^P#N(rOE{R1|5Bis zw$9toyKSB0(29=EyV0XK*VqC7d*$^O8CNn3wX}6kLFH|oK2f>`^}M*^sI=tP%DKIT zrA@u%dHG3R%vEiX6F4WPQ=8b;8m&^LdrbpBj!?}Ea6Su(96f_;3yje+AGf1vjja zEJlCgqy&7kb_NL-5wV~Zv0c7g?}g|*{Ki|Ld;;ZqxBL6ED(foLXp0hyn``o`yb@5< zF~e>CMb192EGx~dYi;P56P+D05B>3$;WlJ$g@)v#&u~5;=e4N56^Iu|gOItmb4Ea3 zY$H4x&eqTCWzpu&lJ53En%>R=^!Qtb_)w(}Gi?gXVls7evXavyle=Rpo4Q;3dNitx zfM#^bISPH<3LX2zvQ9tY5F?Yr!cJe2=PS$~A)-!SuIJ0(<^W{Zg*Y%$g`IZU-PYlI zyRw7)QIuHUl&fvcpV!sO>S|>>gQ=d-;mcLFftz6%*{!YxSllUFz%eoOc{78fic6{Q z$*9!Cf**y(xUQDIp7i9*@&2yB^u~H!Q+j4kd9r%EAA0(jLBr`re#Z>sh#Oq2eTZJ( z>8E21e2S9irBruo%komASp&(FG4NplSb*od2vKR8TC~Czvka@xMX2Cp$)?ExCrkms)dI z{la7JDfbl^{De&Nk=K|tzPE=qk;=O&%Cu$qNvVbU{Pw!YI!$_ad2D-gD5Hcx#{rWY z+JHi}Fe>WNbezT7%BQX_log4d&|Iw-adW#MEH)j|?% z8BroJJ5kr&k=0#Z5Nt+AOW*;~7J}0qSy>m+m!wI97c@l~i76fW!j!anB|=9qxy|S^ zNQ4g)R5UB8!&jtyl>D(NzROqS%{=o#IU2lN=}?{?%4ks&PKwc5oaCdYA+h^U?pEa% z*J|=>QwpnCBIJzjRG+n8D%9d}+pf!zB(pZV6imbR$qY zBoi2=Sy$fd?DFdJst$czRcT*RMnrG5zP{BzoMHR?gG+t6{;_B)E~i2^oT$-RND`t5 z2CH~R{yc4VMM~5hb)G+?tz!YxdNb4Wv_-|5c@6$kkZKXonT+P*Bofs@GGP)!E+xCD zC8@6J7y1(t;oS_zmZo;!X^JpcS}dU`rZB+S zsfm?2+KAMOeAdjDpGM6kK=cD-!pSML6Oua_TeB`_307~*Pe`Rf9@YFf543J?U;Le( zUoi&4p3R=~7_F{2OLRtjkLVZiRB^4yDjvm;<7?5%ZFxax-MRr0$_Z^#qn35KfiG>p zl2^(s8PToPrRixsX(<`eG3;eBh_KEAvX{xgm&%1*G7dV<>+%&2Fyi<}hgSh33gLGJ zar#jv2a;uI8vGT!lA)DR7MsK0TfRl&N8b}=L z&6eG(d_zK*^`^BdqP3;7uP~>+Ha(^@KXGnObWv7v2tpU20Lt_18V9S*vczRUv-pI3 zTSQw;PG)*%PG2W$6(7TFG+Ds5p4n9y`8~S)2<;gA2DRi;kMHecm|Z6evmraXEV2Xi zSk1L#>|1B=A9{SbV?0nv>asxY=xb;xNkNYW>9o=RxH7_8XGj0-3QTQnsGgIU7MGsW zIYxl4q%OlNpCS#CmEe!R_coN3w#-l1&B$(0ywaB&xD@qcco*7&lRjjHM964yQLAvJ zuPD&Kpto{Y`i2CW$set)717m|MO8W3*;Uz1Ik|ataglX>fhJU!v@9rLi7QS;r7ATg zJwKzlrzVhDf>{Lgb9CjkvH6Xv;?}@>(NQ4489?W8au50wl3->yvP$I6Db6jdO3bWE zPYzs$Y_ox3Mqi7rNpO>TkP?0a^=cR-y49}SWOOvBqH|I@TdMN{8AUORc5-ETW76E* z6dEK10z4mZWO`Eq4d zXkQB8l%wM~sX-TUQi{aTFTrID@!H11td#P3HT7+*836h|JP-hjl zcCwZ;1!I`b05_9&W ziIA*#ktvZ~(4EqpRZ-vC&1$LO7v|n|z{B%l&m`r4lxvk?iuV;g@FxGLyh<(wxABG2 z-=*87sgmy{gOW(`330pFPjpyRB)kS;*3#ik<$6Ih|06gnkK?`0TgVe|pMf`(mpB_Z z8jo`x18~sYIGQ&>pta&FVC!PIdi{O5L56y_7~~|kDQ1aKP;3nb=%`YI${kc^9S6{+ zQn)mAQ&wvY0_a<%?kSg80|6RRW{7rIR&Nae=ogQ|&D-&Z!JC*H@;d8SK=FO#MwR;m zwB-@^l~-E*0Q%-5h6Hz%wN_t%hCk}ItfJUDhTK_=O-K-rMg0dr#q{{2hEeVa>8+!I z5VT^dJLm$d4?w4Ffop0v&C^>)F=c(w?kzWxfH$E0vcm7p*jJTRyhE6RNC*ZodB&>1^`9Xh!T3M z6aW=fBkIswB>*@)5>RRt10bNq$^*bBWh2^AY~=z#U2ag3+haCY8~~WhN7SLUdH~?t@)4x;Ln{C=gv(H*rufPCFJlG?(dUVtPtxzmF5 z0K^QUbmc%l)D4ht-9WTMT>wdPqwgsj>IBF`wT3tsY7_Bt=% zf)ya|DMN7lFq!|saVhWu*l1t)s$jHjyTKb?=NM)I9AbN&WI#Mn;b=@|5MSiXx1(e&0s`- z64c)aM9ARU6V)He$Ni43M)vzSIT`6}c2jhJ$A)@gVFxxCNK#%@4uYlj8O1V1p!|ru zLN1W)lI2K$l@3Z{C7()GN`l32i0j32(F-EI@ORK4r3k(eSOk&$Q~WM|0Pg^=nEMZR z2RD)P9XJC~dz`@W`uqhtD^_A1JpkK7i&K2i2#q|mmC04Mwn=rv+ z0@8;qP?)jTw zm0Gbuo#K8&ER8L_6>HX&Gww>45R;Ta5rh?w$wSQ`TFt1>A)P zV87_5tk#N6-x4;styfWL1)Dbz(o`a(t+p;-w08q|Nq0*KTfY77o)AoCZ1R@7(LEDI zR&49GYa^HzxuLwkItifsO>V`i&|AT}4OnDM8dL{?#g&_2U+0F9&Wg?34sLQUrxGhR zY4bxjk}zh#4s5^n(}VWIg%hyAip|wBAF>GJ&F9A0M%}yqmF=ek}=U4#uk)Vv9Vh5!-nYV z$-wfBZPT9F3Jo85@+HCL!#pZ*aQSTI|0$7jhT;pwD#axENqMI{Kz0=T4$7p@LnNPn z;Bjy|L><^5ju(9)x)+WCuM2fxZ?+EZJwD*~@Pm18fICG2_gQWp=O=J480ujKvgE%4 z6LB2u=8>Ta-T!d!DCYSUd1dJH4ZIaAGZFW}bSE|i-+&XF8WV9Jtf9UgeEAzgd_bj% zcn*%d0p@j)Uh-?2E74Vbe*jAV53n=eL|h5eA9}6%54_^jnQp<0@HhVw#VfyR2 zS>M8w!x9s5AWU~fwC{(3Q1tS*!0ZAO@ghur`uY2}@bpt_B3^{)PY#JEsmAYsaFL0) z5~e@P+w&cMa%du6gy~NXMc>0K-9@Hw{DhAF+OX_<>`BT*ya>}@>24oo2ten)hsV+l zCgMss@dmxk47i|+2Jo_KBCdq#9dX}9=!iNKaV1QDZTRIycx_l=BCdq#uVk|?!7Evv ziFgjCH%tBlcF$!Zo`dP)ulfPRUuYtpgXt|I4>RAn1TU(I^I$qzzaN3D&P1FC(^+l# zk&NwIa2`w;_~-{1Sb7ujAWR=F@TfZgO}k9SA#o#2=Xlv=A_(F}_@;vJM_>ME80Al# z2-BPQl^1CqaUx77JKY;bjLrleWN#MyhzXL1TL$mVZjOH0o3KEf2-8`}7)4khPK4>r zA}s9jCM*z7!gTaMN0ISJJPFggLF+>X4)G*RrwLPc5{v}mN%$5>y4B>Ya?l3yP&0}DpD>Qjy%v)gK1KhGglh@7B zZ}&CaO+Mdw9w$9KPkL_iZ1J4s>7~4&+^bxv%mtT_R}@DS>lBL>5JU(*=iB5h@>y~( z*#+5N*-BZiEL3_$dIYQs7fWG_2yTP7L0I=$5-;%u@m?@0&lQJ?u859^)`=F2R3Z=I zN#QnOi*T0EOK?H3SFjR19fv}k+^{43b^OJA72gBG}n?40NIzAY&~SZfvjXof1MEaRTJQzv2wL9n)P|0TREvh#9zRKG7O|1aTXA%J@T3~Vic>{Cp3K4d>)3KiQ6waTDS$giZ3 z9>7t*l0rJjmNVHR$llLn3n6=y$!Z~cg~=8`Hsm)_EFZGjOm-e*moeEq$Ue(tb0PaF zlg)vw^mkG$8?qWEI~TGwOg0O$h{?`@>>Err6SBWB*$l|u{s*Cu4%vJrn+90}lTC%} zJ|>$2*$YfI8M2;#l441aoxx;hL$;C0CPMZRCOZqV?=ab!ko|+n&VcO1zX*ltkkv8S zX^_2_$tFPd0F#Y}?7x|;2C}37CdJ|)n*>=HO0o8y_}m|Q!t^)ki5LKHXE387dy>gU zLG~Jxjf8CYKZH~SWEV17HDpapRs~rrlbs6L?;#6yh1=_Do?`Juk=G2~@Y@voZ=uS5 z-+;R8vY5!^jP%ZKE%TaWO8;a#e7&OI*Vhd^49M@eM#xXHqh6ChQ!WE}7=9B0{OY=8 zcqHBp*{e+UF35(iC%@ha*&N7jF!GDTJPaP5Pk7E&extlk8KHPr(V_5{AC%9R^JGuU zGNf0fo22oQFD3U#?gIU3hj_H;6^LN=r*JC-E4e7RM-a|`pWh7**oSzFxYxK(ax*wr zIrnqoJ8P%4ZvC}e%rF| z6FBR-E4{#qAGoxhgJXW+r-l%>I9e-y>H;KuQ17P(f44Y#YYX5U{PYG~6j|}h7yol` z*mchZe*OYnM7Ra(t@sVhiE}p~uCwBoFq1xmlb$=`C06_tX5ce8 z%jfM6NjUrAq`UbU7z#Qoeibumzx@d81Zb`JRm{MC`w`d)D6`@RF`w=?#E}E36QH%? zw=gqb7*RrR#cyE<2RmOF!GYe2U%&vAc>v_3S7OC4V6tAcpM0GFy%j%xA@q*CID($e z3NK)g_`rx3EwtjtE@cPoFI0x*3LFZ-OXOOr^OK-)`VqV=hqS;#Od;pAl z-jz5^1pM-)A+GAL(P# zS(2|Mt0gM&TjCb7`}4>$j3k?P3Z z;{|#fzB-yBHZoIgywvEp_p)I-mepb-^Qz7XSZKp0ET4;w%EKySm=E7_jLsYu@g zOZKt%L4QDU%;Igs<|{jI1lHODG592OfVbP5bi+(ETAY`ao@>IQ}NHf+3d z=oARqUFjklwq6-~8dhv~;8GhlUuipSh;<9r*~S3)!_zQ)-Idnau+7TU_iq3$v0HXL(Az%WVxt#piJrjBxwsi?R z;~rXK!v-(+oPmCGQ?K5JtzQ1)zN|uL1Jjq`k4*C+Xu#sLpqg+)XrT=o!#r{p%tYKk zbvA4f^F1D0ZlGG52SAfQaNqa^R%{#d@CUHkyD6);Vgs4qKXBW4SarcjW_Z;-`~^HS zTpG7liem0)^m6TJE4G^1^`Toru;o|+(0|`(JEOH?^O>3Fp#|=?GsRYHL$m2T7}L1{ z!?zp^X@eSU+QO03wv=JC&=x80PUjF)L2j~^Woe9y`i zvP5a8WT*Huv9~Bi*elr0{{nWs8Qhhem(Z+xQeVZv1!uSmE|^v~XLfXZS66L)E_}v7 z6+RptF%}!PsMYxE=H_Q?A8>te!Ocbzgmb#PT2f-Wn{>GlV6~#s4a>}E^-Ye85ggP30G-w=tVa7_Mf9&YO()} zwsjirKzklCPWSIm?@wUY7&2k(SP$_3h?EZ-{WOGMFsO-)bd9|j7mt6A!W%etGnk(v zK@;5xy7}&hjdK=54e{=3sO_#P=+LD__cgnUUK1ao2Gb1JD(ydGg93JyXv!nThAOB< zJUZvWY}-F+T`lG#EQ6_R9uclE=m<2 z5gQ&C<1!!|KfBc8_&Ex#-)am&XSWz36mEKdjJqmP;#Q*{ylszC$E%{kW7Mt{Ge1Y* z&SbSC3a!~{Y={7&(e8+L_C(}m_x80%WLLVh1C_QI@PvWtq9Vd0qg^>igDr*z%xsi9 zx+u8SfQK)XhH>hSS^V<|W*yjg_y(c-S`F#ApCjGXPzn!23z|A&yVF`-I0qtNDW|eq z1Uc3j%nAM(M?$_%KGWL_q@N?)){@s0P) z=_sGqo{~GKGOEpGast1R5EwVwZk;tOL;KIT(QFwyuyN~x(6rU7#puTl!z?^Hrn;*a z<#ig!P>zgOtHL#ru9L<7^N1n$V5gx0e__JeM911!%=DspQMqaLNmT{7s~D3fVo3+a zNRgUwO&sRh&Cm9E1P}%rwRABtu&21Ir8_@yc4li_adtz)_2jUzXhgV5?TobTFykBk z8T!jn%P=+y?SYYA)6E2LpX{zmbh4Wjyq#F2Vu7)m!ZuW8SAzT@*!=-7<75uFlAPiV ze*b5nOh^(E$a{j!!ctX5OloSezL)hpLB>36WC2;v6J#2+9n*%pyJ9ojYqa34Siak3G8 z0*SDIlt4eWFM)^l^O)kvDaDnYd41~QZr0l`zkHqVyjgvf7kCQ^Q+SmA30^@Hm zGcHHdQWe{g)R)P6Pa^YWs5*hH7hWX?A^}_R1hP-Hh+ij!y1gODUV$MD=-2T=v;s>X z*fU5K4CQvAxj5N`>L5vATvBE_2Mz1}jDmS5%L1}`R(@yMFY3tIQC?R8%sWPutqq2e0#|TM$1@mbXC402<`P8 zP@)e-17O6tMvjd*C&O{VM=~%z&WVaYrEF668th-#;Tr5eqa%}6j>9a%b6^RfD|4{; zljJ%U?aSCO0km)0z-Y;Ey=eP3xX_&?TOmVr(t$i+Q0gG`f%G~;_C?o8h|*TQjPN9J zkW!1GKZffh+lE_js~UtjFd6Mt_w$iWJTM)26gvpND0A?rj)0BFh{mdaHZnffO`ZeM zXu6#ArpQscTX9`!ylZ8%g-Wm5OYc$+#3Fy?fG6@&4on3Ggborq<*kzd8{#zrM?sC} zbp@%MV=Lx0d??v3ABbg!-_4sl7A-#pSH=nj=~W(-PJDhD*l2GvjK6gfv)%y`FwF44 z0Ou;q>ka8+j@KKG&%V>p`?}o#{+acyRHKEDVT18C5LK3;G;zBjByL0z=mYpS;%7D` zyxlhlAw1k2{!ieE;2i$nhou|I8v8fkK`j*6b@Blr9c8^Zy4W_9K;+ z#|_wgd%1(Ki>ns^pay z3-?<1PMPzE(Fd9TGBW;^@GQbEPvK}yW*MVA)Y-7zxA&ib`R!lEK;nt%Mwnp!&0yAT z?2@6me;XM$TJF*HHf#b;Sa{@bDhqlWHUlS^zupWJn}QR}SGEER3;!`P9#U__0=5Y! z=)3=+vY@kpT{zP=@inRx^fqi9PH2{0y9rHfAWkHEkWN!)OSEHd?4?#-XqzSV*m%Uq z_=0rbXq^pPiSq<-U;I!PC{XLUMk&t8(BLPaK-Jo?dH6yBTaFiPAN5a?{!M0}L+hSg!)@CKp#>R_B=qws$T;r`hTH$WU)gZp!CKwM|T zX5ei%0&8tx|Bc?|+@S7C8@BnLz%?egty^ourr!5)Z%|rq!?xaEaBskQkqsMrPvaS< zxFx>8hONCf^59zDUAy%*Z0-%jebCto@E7>*2Ke8GF8Ic~^rp@RW<4mIe**#OZP@gi z(6RF2!0E0ooed1Y(F}=^@j1v==3sO0%@Q|yA#CZrPYT=#rAB|o5_wo_RA~zXXr|Q2 zxLkD7)7r3+HxzSKC+Tfq-;Knw5f$le*qXb1B%s8G4Y?1=jCM2V;mUP3Y{MNQAJG_{ z4cl<{js)m!*oOOk`H0GOHn8DF!J-kQv^KEVMm?et?O0$N4}cRQBjZ1DxaG6)<#4da zY7ft)%HNb7V6oL8|5jcBHd+g$XQTySm6Zj0yJWD#nkIZ%7zLJBllf2cZwFJWAns=F zXfUplBUP>{RoL&*pQ!}ds*SfX4~JUR%vEg^+}6TY7;iH{Ne!0}U^tE+7Hv@*C*e{V zQ0iSM<#^T=6RwWKJ3$6H4r{a{qw!}Uik!-?qY)ax&`1Xw*%8Lu;xXk|awVz3Tk`8^ zz)htp0$&ucX*jTvdR5Jlti+2TVzGCn_ZKMis4cUA-u!m`-0Id&z7I};XP&i*iU=CtP6~k0K3rH-AF-{mh5XF!Y!jJ$auRlAC_&G*{_6_tCQO*QP7ltX3 z{R$o**B7DvjE=?`38fi8sVvqA2T9UnaI>i<2Ml(n#Kx;5!!;v11ylqW8%?z{H62KO z4W!8E(BL<1>Im17hQ`O)M~59@xb!qAT@_~^9h!J`Y`7}Qbp$vLQ*(ZN#NTt{P?hM^G;H0m^t(XmeBQ1%e*jFXssOdYb9(m<(8P>QS| z8dw0rqa&Tu+)?werscYtXT>u$#{rF|c&00&RrqdR72zC?3=Nj*ghj)FjZT^FBfT06 zq^>wgMXJM@Vab$nkRoam7hwV^f<4?XF+i#hKol*@vdo%kfVu~LKTHiU#wQybs9t;z-9%# zJ&h4^B+&THNh1=LdZLlIp2o1E;yM~x(-|5OK%;LuGen}%w&`Su*cB8bYd&r-rG`>} zK`A^$fcxm^@aS0QI!6S_RxMmtbM6eLW);v_KEpmlh=xED>nZ`3;($%Vj*U)DVP=EiVP22i}1@I2|G0$WY<1tXNN0Bf8 zKZx--P4>0yURjv*w6t3qAlWM^5MP96T(P3FqE3-m_#C_f{$8*~FcoZpmV?{yqr4iP zg8LkVb-Kb?4Yok1@hji}cm-8~ZPMwlpngm-LKJ3GImVp%2Ov^%QkPfeKbk7W%bRV=S<+_~tBBr2z{IO(hr; zn}gq&=4)xjsUUzw7?Uo53F#mJooOM)q`x3onQp`Z7#Cnn`n!Nn(vA2T*nEt6^JidT z+Ih1(ijuRl(>prt=Xg``&Dk0M$US4xvl$>|tx1p3eW(&y;R%-Wyi7nZH0f^MgvIAq z`=R+5y~tFA(dq9-4t}=MAH9Il7nuq%I{k&%FPTRCLQIP>=|U$jU7F?q;c8O>MvtYo z^0_%i2!3wL$C&g!^3Q@ksx!^QnDiH7Em=m0M`y~znDlsb=dz5EFzRwKCVkY+oC~9_ z*p!1Y>Ca&vnQNR3(=Hoh(x=_ZFHB>QA{#_iWtxl8qp70G&Njxu1D-65Nq-P?Aln!Q z;-7;t>Eid!0r3}`GBGB-S$#RsES)I>W70>!M>%BLrDIHbm!7`>@2B*pG>l1aQEN?K z0LuM>JV{EuIkW4(fG0^>QwqkU&$9j(2VjDc0B(Tyq_#I z&BU1W?g{>yyvdw#bDCXW1I@*z=@@h34F>Ub?|)&NqDJ16VEps`4YHqanud$gr(p8G z;r;J?Q^L(Lw*w}5w>8OQ5w_h`E6*q!m7^8=6*~Dp@*VOt**7w?EK>TRv`ZQ&c}}7e z|1N$Q9$mjD>JSNqyMQQG_-ass1 zSrY?le6;!DUODr5{ZI?*(PA@+vwS1zFqnyj#)yFVW)fnVE{w+u@ixFrLM&6a0h@~O zF2GEJE7O;wyjOe2p!OnIj>^m=!ZQ7J_zOkGsDKJHiLgw6hnung-aF8A9S~k%CJ~mY z45Q^b;CQ~7L|CQ^;hYYHP-G?%mg%26jot{)cFla;XY@gTzaBm_i_9drGJUps$M%IF zNij5QzL|UTL77<$%xcXXj7eXUp8LDk7ahce^=7cKyV=_KPcf|aI@2x0Sk}*nm3fhg zgjc4wZU21u-WQrkd}X@4O1H!s{0prvqUUW|>a-%mVVg zCt;T9E1GH{%&$cz5@wm+tVb3?v*w#fgk}2B`fDMcUnUY^nLb?gi^w*cL|CRzu%oMu zW6-;cpkHfEB+N4Gi78uRMTs#1`jv!Prhk=sN}yjCm`H?WIx<=^aJp)<21O$uKox!t`dXfAOAiXu)hi*P2Ll zW%>jwi8K46{TRK-L_#dn8~F2VXrRtSqASxo;_!yG0jN3&Cc`2V39(FX!RX(nDpBB_{f_P~+8-b}oT&=>IVURc2An~7Hux&R*T#Vd%Jcom^f zu-|&g*O@pJp?7IsA9QJnnK%@ocNFp0a;y(Twa`qwiqP*Lq)XubL2D*nMd*u1Q+S^* zTCoH#9%kZNgx)sJ@d1ByhC#mt{~~`M==Tq+X(^9xt?Vg`?I>q9_KVEK;Rt;-XaYDnDjHc zZaF@qn?o@seZX0llNm?6jL>JC{|YkWh?f!ij3eLdwJShWWoF`PguW?$cLi*U=bMR_ z5jwMnbAj1%Gx0Jql{zI2c*{%zb0guX)g{LNoC)LLV@3 z^T@O#UPkECu663_@sqM=Ytmb@3R05P%C9^PO<8=y!0p|(tx#F;T z$m=s#AS?2{*J*SW%Z_;sz+xmjS=X&9Z|LmH@Af+BN`Ni9^C++uB=Rx34>#x|S5$T% zeu9=lgE*fe?`lZ)p>Uk+MRRcS915v`WGtEnNiY+2t4$rD&+SdiRmWzt+AQ=#7jRd+ zfd0nGeiTp+C7vf0w>DH&CAQShPEt4bCD&*>6ZLI9*-4y_zyT(pevkga$wd_SAT;@R zhSi4h?CiGQ^0q!5E7rW=|6GBrVE2Nn;H(np{DR(tB>2A!YKmT)mad7-Z?C9oNGsE2 z>5|$~n#J#+Mi5KFF$Tvu`nqGI=VV4SmPhsVdF^rqvis*5G*kt3?L@nvm7J%M6?#j@ zSk$*U$w5e#yr!y{w)XB;uN|)B3Y`q!RaTp?KfEO{FJiD%VQXdhlvoPb!S zt*zAcwoCS-!?^SZ=us^4_mL8>N=$Sh*34+uG*?trc10BQMthw_pTas&7|yWfoa#AU z`l!Ofn*8L-Od%8UiM2?uL@s2)N3npcsfE%@2Z9qKU1_sMqA&Gr=4@S_ zPQ~JAv^S}Z1!S=@+RGKlVr8_aE0DDyj8?h=6|DI%T7iCB53SfrklL$jijylk8mdz2 zSaS5}gG;iy`9u)h)fJT3rIpsg>;kn5(LHUWYUwNnExS~zrBOj74 z25agEWZ}{`r7co#$$rT^@xR3;aWKR~EfWcZyM+0Ip9S{|G+;};oUhYD^-ccNpapCmf(fs;g$ndq45JIpWcfgNU@ndq45G~@3Dnv2Xt$4uV{ z?zk72-}H2HC!C^)Hkp2k@>>I^s4_EAB-4*D zeQV$d(_|((&_52#+ENDAXAJf~OeIK;F*i6*NT-^jNcb_nm(+E){(@!H`o5^W}D3a+Nk!K+% zf1*gH&#j#nGPj5#ncl21gJfOemy-%<`&T*)8`hsYdhEi{aRrr ziexo);GP_FuP++iY7B*0Mij~PSys^sv#h~PbjXQR!f&-2XTU5Y>SMYTV%k6oMP{Nt zrVqjg+Q@|)(H7JD^->%3>jE>;7Sknr<(K=$g%z}9re+r!y8HEdg4oPeOzcE%3ZpM*S&<-2@6r~($|S^ zUxIaFv4tpi>00xGm$BB|LX^Ao8FJudyiQn%a+f}ueO|%qgoWsJ>FY%6E51`KS$?8Bk2ctV zC#{(%dg)8V_*#=Mx`@$rW}@w-5BJFj;fk=>Otii9{mDHC$w!%Jd+Ck+@*r6vh@zKX zJ6R&;9|C5Z%|zRqM(y%P4jB{SijZh~={=)3j3=9!XnX0Ct@1ETwuNS*?WHS9P94UE znr5Qyr4P96E6GQhXnX0C?Vpw8qf8XN^vQ-z=E71sO1t$r8OiF_3}ytCn~BnwevSTo zKU|~Nnu)%bu6Xw|fa1NSCM&EhB4`FJGctwS)sWUW76eC)Lv2d7`<0W1wxN@j;9CbAZHuL$f@G0 z;icEFl55~P_jPF@gpDtj?v`pe8M5*6hvY9QRr1Bkxr(!#$sAAl2TC8se<7HBs5D5r z4g$`X;E?m6u)Zib4ngKOa6aMX^I~{oxqop#=e`Oqc2{%jx!K}Bz!ljM@#Erq#I@oq zG1_{v!xL>=m#bVMU&jBA|E@eq^0XpMVUVnqG%3;*Hbo`x8J<}#;p_OF{9xH7*$Mfb z{O9-yimjjyZ&4`u_wzZtuVovh?b83q_|ms!GbDMED2X2^0G{Afd76}eD$h$b(n9HO z&#xq3%I3>@WaA~T%dbkV$)5Khhx^R9Ims$@F1l;r zd7S}9wzM}kNA=X`wXCaE@ApvHI0%Y+5~bth1Zo-!$*X8aAS7b+XYjJ16-?;qOlNu4 z&4u^T5yYK$b>0UVVA|}g&Vr)!#;%Nls*3dJIbErZb9=>qxdM~w8*+;)aw=ld)#7VT zAgc9UHj48*TI#zjaD|w;V9T6cTvJ<=+%d1Hh;;!YvkS-xWL>~W?IfK*))kACxte2< zW!(_T1Pn7!aV#yMD6UEuvMv@8gMY)k(}S3zXZr{i%+33?lsln+bU zE@al#sZ53zL&*>+6ONnJPpsxh|3nWFB>Tv6_B88CQYJ;?3!t(4&5U zVH?AOv*|2JDz>`)g7lTYj3Ha z87552@D(EMb{GSd2`tnIJ>r> zJ*zx3PZM1z{&oZ~rl6@Qb#8TIQoZattaY5%(Iq@;xac^rlJFMOCg*r#&1&yM46vxXC%G}BS>0I68p=Lf(Fsh4hxP#- z&M}m}5SV-nJp?jNu=lmIAd9MxeUvcEFkWm~1HtEQ^yi}GLA=Lh&!g>ATBoD07A^PV zJt4nJ^q8?~+y`b2MuE9uO!Kh(a z?P1-Ldo#|rSW5`2j}_0jHkPGa@t)-hWZz%UbT$ZG^ns7UYseG=jrbSZiIZ2+F&H1A z_AipN*{si%&k^NO(op}*rj+i8s-mvgs%%yjvOx3)UJ(OcI`K~ZOwRr5@M-=j56`V| zn!lvnpqv7J``aPzxm7+-_9gx_OJ9{%NV$@Yl4;`8;%-oZ4~a@e61XGJ5&T#1h+qc) zV}1i)%G=K?086-y+`Bo)Ii>JjRc*`3fs-e(8>8=$etZM(ku1by>=yP&m2bi}tzavSS)C1) zQK}eKTT}#d$f>Xp^D#B`Z0PfjF$N?;ti|XO>3s(uNG!x!jNWs(MzCP}@f~Pqp@mqB z(MQnKci~i`w-9SF`n4Z^)HAZ3^DV@DjL!X+?*jK)3o##~pHODL2Pc$53o##~Grs9P z!ZqceW;#rpz~_&7*pk%ich(T8cqaeNbCA?9QBgBN+$Got6KEySKImfG{Y6Zj#W zh1iqP+u3je-wIfWJsEu_zIFm;Vu^*=lhFtF7kjZ;tc948(R*(8J~9)DDH(kxZrw*_ zA~7AK&qQpb7uMd;*p-`{-;ouO$V`}O3$Z1mi|xoX^ElMD|rJKsWV$>=Bj2H0LfQ6Wm(Ff=D z7hrH!Sd{qqOkZ0#FT&cQwJ0zqea=Es|nPdW)J5 z7*!;4!z7Ou9J4t~`LlA9G8(SX`xO)53cX79m+VPds`Ojw3h5}xE0S#SPsIHEGtnwh znDAX;yUT1QmA^wyo4x7Hu| ze@s?RqW7hDn*L+bM56blH*w#`WJMu*U;2vTeFm;_sx3tCOP>k#XUGCV^uBaHKR81c z5Tf^`FCdf8!U9riA$niBetPp+Y~^bqDqs3^`SUDUK#0nhzJTaHAqxo6_R<#+@+p7k z6X>W43sL#fXM+4wmR-C3LHQSqYCi+La*>7T zfaw!s=VvhOwHBfSrY|K&URdjg#-0bldJ9nm(;KTl4;H+I7NQ8Ix9$AZen0fidGZY> z+F<&OlYdTT98m<{WXAn55PjUPoc>RauBOIGXyYT6&axs)#n2KI*et8v^sS*oO{?hj(i~a?B5}k$Ued%3x_+PL{&bJV~FI@m*UjqT?EVrQd z?RpJp7FvkPm)@@@Un9$Y?9IPymaK6mKcmqXLe~$Ul4i%qiZeE7@a=V{{1@H zDMw*UI>*!A0FHH*NQ_CB?1ndtlk|*{*vlTCPs6wP2RHyHC_YoPDCF`d<=L{!vh}j5 zZ~(5A{0-r+lf>VNE#esPo6;v5FMLB-1L3c?3MTST^V=bS$38F;yU1P6y@T@_r;g+0 zfz&6xO9HfmL`O_-oactMzG2JKd@L84HBg>9aH`- zU@jUYN@MzRQu!?`CxwGVX-t%`u(un(xS0oM?{e zG{3+!OD#lmO#gn({hoZkh|-uoHuru{RuZB#rhi%#7s*OObj0+PgnY$UUIbCKTZoQ0 zhq~+?y=Y7cSZE>YVY<#U<`U>Ut1Lu498IOU@e)}|iF%kWfWI%1mE;!G!^J<4m4s-9 z>0SE559E7IG{bbECN6_})rmiXsERE_Jv@%uthygT8>h7p^)P*&z40R~B039E57U>1 zL+PfmDCRP-P-G!GV*1?bzKrLVh3JUsbL-?~Jhv=FB}|tWnOpCk1Qu#7x1bkRoC3XY zp@ry$>4bYuk-0_m!t}Xy@)XRi5)07_(?4g^PLm@x(F@au)}yD%+#-5m`Y`z8G?`mO zC438WtMPphRfUDQ6<^oFz#-s~%-#EBZP<#ZU(pwf`bo!Px`y<%0YAp*f zCVg)0{K$A06YGjI#u4l4oZLs2DeafMEWRwh6Jot?5WFMc@-@5`?o*ue=wxnn;Koqi zaU6{#&t1@tWPMVFwyim;GBy)@bFsXJgTL-*b+{UQXx{K=@CWJeF&=>~Jv~s1Ysqz2 zOOAd{d2^+T_KbnO+p&s)qiyB3x!Ty`xEY_$GzZy@^g_D z?v_k<^`e$NOt*m7Knk7jugk8* zfsF+ggbu93F}qUw)7({wg4Y}U;$VnEnFw&NII?;8XSM4@v15~ovg!PCK5F@BnE>6t z-Z&kP>{NF(&8|z1QnmEyJLdL|Yz6ksi(NRnG|u6&m)$rNe?JpnFU4Ig<=v^d1sM_Q z#>g}ma_GYS4u`zMZhWt!t9-yn#&WVdx;cp|O;1E_b!O7Yo+kc%UB@!Z?Jv6)`_B>R zi*KQ8gd3QyNpe>uYT5wd)P}tR$Ke`a)g5;K%Qy>;(=hEE{uv$EV64UcJ=-nO&!q!? zEQi2&L@`9c+2xJ>1f%;lGDH*I65TEz@FNinRGUD?&R7TbVeE{0vSw2ehmzv>kr9Wo|inap%oFFJ&nNQSZ4w{XOW zxy<}b+(BPo4TH_Z6q~f!m{N?7yOTV?P3Tt7B<1&Dy{%T9QdBEE#G1a1bZj;~mCL zXu%*+x6=1(L?u!hm!CbmGB>xUFWIgV86^5w`VGtTX#;S>GD!5V^et&%`hYs1YLMt( z>F1)Q=>wn*86^5w`rhs9^Z~eG86^5w`T-&_V*qYg28rsGz8!x!V*pf=gGBX8-;5DI zgNn=nup1sE>Q*`n*_ptCc95uB>3g^4IsLxq5JQ;gT{hZ!B zHf%(1FB&9DSo&#c|C|9(P7V^CE4>n8raU|$tp_P}T!tmNqB?15-?@gPyaj$_W?tiY;OQ@Rm_U&9Dwdrj3}CnK z1-mindeIxs?m$7(YuIjr6mPco?2ZYBVmG~x?Z&@&v;Umkk!Y~G>D?^*KIqP5$dL79 z&X+sJ8VcR?qPCk@IclMs-TCE?alj=VB_s!cPZ-{s`q6UuWC$z;{ndU)FcKFZXH$$|O zPt@(|8&t2Ts#SfIC%}eWrg%`1BR?-c07v&vW!q(Aq_0Wqr2WA@eHGZm>W3vPf^0pQ z1N-9y$7H(6!o+I4gi=Y&2i|tF34oFZI}$~K8Ue^74peZm0f4?A?3f^mX*~d?59x(m zJpuCO?0cmOKfuzQ}K9)QZxs6FO)l+|KIozv<@^FWe zObrLwAr5IjSq+da=O8H!a7Z)Qg<`de$7&w3y18GQ7_0V^m4J5gc^=wOTvl*g{_Q-Q zjjE@fuj3#m-n?E*?#O9l5`u*Wx1THr@aeyZQn#Nh1EAZ)feKEp1)$%4febvHctZ7~ z6o9gSh5S7T)KjvoH2`$KIFSA1Y5=wU>HfF_$C!>ZM*-T*N?% zEiwDag&g6nfAvCm0Y~`5zj`5@!$F$(NeipH-skL`#FOxZu=~QI?xVRDZw5c+kKv;@ z3XHI7Bl>Bd(k|0VH1})fh5t9)8=kEGSly-`sd`maqv{Ku%*&J##r=x;V1{**JX!XU zY^!Xf^i^q%w2$P3q*xM0hUL!4QrJ5%>(}s!j=tozKdQ7Ocanp72e(glu%AarWR;@l zJ}@1_IPkkCIhf3hp&@M@Ljm&JN$i)cC!iq!G%HaQ$lfuSqxpEEC{24u0tZ?ACv+zK zS$6#*b!Nr$J7evLrz<{&`C9&26-(+SJ9PAg+Y`TofWRY@d*OE=0G0Fuk-DQZu$$kzd!DVP5dq)HS_3JOX3$=G>0jO3S$kw3&pjZ2| z@(8_cv2}z4(5P5ZAbW=zfVRf=!jlSsKI8-OKB9s5gOc|VU2&kY_g!6w0?@h#^g>$> zK;Mf4**atZlo8iUSET@SSDYw0TZaUIE{S8Zc7y>?{y=uLLyO;jvJHS99Vkl9esU`S zsRoGx*-mZ&pjCs!dv|g(0G$-aWIwqHfCj|#$OR9i?PM!&iAbJ>f%L?)OC)qxZ6{j* z?d$QP4BAdM1JLLMQ6T%tjR3Tbe^BFn8rhk~d>SFd$9+**;1uKq`{a)z+o*kVRYZ*T zNv&NQrn!%P8gGJ6<45$<_!15B@r2T@xS}|$$dG?8-!C`H-j{8X4V6AGT_=r}JSnk< zU4<|oneb)Auk`+Dte7xmIqwb5exPj~n5p=?X>5N&1KB$;N%8FIyLU=rd7M)txJq#`~zsux6< zk9g^*UJzkc;wQy1**h>dar6zMTXG7zY-`wr5~b}`6+R9wvI6X)Mr93G)FTu`;xW^y+{O8 zE5Fnmx={=|X8RYKdwU0_T&7}kPZXtT@4y_)6!LpMWE(vI@{cHy%G)3bM6FOO${YZ7 z+P`b9noF9yH8aA$3f~?+TKxh<$B0xtsl1?^rZ}r`DsGU!A+MMBlbw{6NUurnlV(Z& zBiRGduHOZe_+Ri(8Me9uKfQNFIW02CNJ-8cV9?%sYFmt=paYesNA#f0>{bz3)By@p zSOEj++2FBjpvN0#aP;X81s_w?m@YTKitE-~v7!UDq)!_hOfKv$g7yy7j1DpewXk)d zHnhnI<1a)7%1`p9F$k5d19hAmBAmh&1s$l;d@I5!=#-+U12vdqBAt2x4SPowRP2a! z3j0yefy&9xB7;yZ>p+EMlFn%gLWTOr<4JH#d^H{Pj|)wXm`QNE1^F`}F)mH#%fCzF z9&;y0)JD?AhfIzHYzMbqVCVtaU#a~^;MR+K%(X)WC2e;R+D(9V<|#>F5oH#pMdlte z?NoU%Uvp#ZFp#L1qzE22I}#=`2vQSGG&M7yVL(71GYDX&t%0zvD`6s`I7=45OFrdp|q$)>KmGA5045?URknmJ`&2dXM5n?sWs`9M1h z*x(3BK|4dDS+8eEE$=|>Wm&Sr%yMS}gS0OD3x*VMM;~+Cp)Qk>`Uprt?pPFQQev`2 zcrVI5=175h6Bf>Jx^QY2!or!E;)rGF0#AAiYswQCN)xgQk2$)i`J{9Yq;OLJ44L%F zLb{MBmOkd_qB8W;6t0T~sDnJe-DeHVHu{)pQrH2iQ8F#nF^S>M2q|P~Vq5-ro2D?2 zIqpz5O1XPDl^Xysh%|GyQGs58R3MFP5}WD3-ht}U^Qp{O(@C#S3LXGV_nZ{aqM-7W zl3HQmNWoaAP+Jo|i*&3l+#FfnQ3&lGv@n7&PBH5fO+kX-9y7hNcA!pGHN`QJor!u# zVJ#FlOf>qK69g((DR*fLV3}{30tz;mBg8uew&KiWF@ptXp#P|0{pS>RYl544-mW7s zyFs}c*mZb+hGRg^-&+{HUFc(gy#tl3b!j}bp$;>sWPL4-{j!F}Wa~iv>J3vxf$SZq zT5X%!3prG+e#FNV+*Ml#XjP%BjOyv!*U;5{FR-d7WN={DCzBP923|D{(u-l3`GBm< zbybmV$6A+@bDk;qhauLyGFfG>Cmze6x z3)a@nt16mX-E3dgU`eT$&k|OaWzB6_zcD+vwX{N>PIB)BJTpl(7PHA7DAJgKC8b^H zc-+b7GU)0yWaZ3SoLf}3m>1VbS53|$o+@$`i!u^_9~A3JDimq;!iKzG8;YD6i-X^T%#dT5MO3opk10?c6DDEWVp-A%zTkrztC~pj^ z%vxJeYO5>RSe>E#8)-*8cauX{+(n+j;wJI|Vs#4}@&eN+J;F+!n3adf=HB%O%oPx2`izmiK2?TDYMV`5B|b~WLN zNq0qvk3UB*k-Ucik%ZJ>@jKaz#V_O`DAJ_DhP>Gr#Y7n6k>t(BC^@-?c>W*>k3jJo zu|Sb_L5PkgrYM=Pl0O?S6VD?%;-$L3$WdBeBd;PtCZ<#AEQ8UuesQK@UKUSK+IYoD3S02xq-AGm7wf!toOVAsk9ck(x}#9s zOeSEll4L=Vwt`|^Qyu_z%QBD!*63!aoT z%Y>D@1*)+V{bPV<9a(@y6{&zCty0*6Cne2tVI@Dj+EQ`~@f4HKu&5w^LD9CFv6-z3 zi#iN8vtQ^Mbb}%vi(C@%O9Y8X(|)Dht(~NKN7DkydXGW4h9A_osFPIhL$Y3#@-bz) z;#eLnoBolMf=n3NHSBG1`5Vz1xqbIO-aVV=0qH3G5GmgZzLbt4L z8a+YW2CJ|YtZ|FoGxg)%n?_F%=Qwf`a9rS~(G$e2anT!?Y}-URrXdu> zIX<-sIJUWI!~}6mw1Jz!Ab7c(MobX58f(}LcDGhH4VEBIoq8#LzZsaVaMOqh;^wgv zwotoU8Z1E^G1&s$s&La_3F0_^Mw~0%G){teoaUul9T1D#P2(hpk5aUND#Mlhgbr`$R{%aak+aYngm)z zSMK0+#}tqPjgufQg`Mft+?~cr5T9B(gZB<3SJLU6rEwC(2Y31`YV%IxB#7I*OWuc^ z5XWW#;zBnKmLR^`&(8wu;sQ4fmLR^$sLlJz*?`#YrV$gw`8Yfq?5AyR8Zkj!6qjey zRdyW_6RdNnbvq4~AdZt-x4$_Dm|f?l!4lF$M>sme0lvWQ>j;*xDTA&u8Z1G4mA#!o zSD6v#m-xh;kx5sX0U^cb*WpaM%Jc{+zRIppu+1o6JZb7# z#HBEQ4@jZNP2(f*_B0{B(-SZ3j-OCno>gFMo|~0wWqpFIZW=2={B0uJOW!6mR)Y8{ zrf-v`y}*5mn+8k}AMF))>>fcrK=1-LjhZ0-N`Y`dv1IZ-0Jpkn=mc@L>-GWLHa88O zAiDeyI`$3>7R_=u4W%IdAs=xgeZ|ly3ZgU!#Nrx6?!3_v4If<^NZVZ?#08MO9t2S6 zrco5cznu@Qhi|9VO#>*152>VqE;t%MLA*!QWv!tBL{;pjQ53|-;E4tpg90~=q9DH3 z=;wQEBOoqx(@+ZHeVZxW9yg&ZBPqww&}?ZkrZW0tn|md`p2Zi&@~bTa$;U`(xtj)9 z5MOZ#O?2x_V=IVDk#3!DZUV%WZW>@=hUiEAohAn)-*p!w$Kr_7H_#Qg6d}b|+-)0R z#jS7`A*A@XM6uCfXk!k-Yr~>$j+&x-9S*{MB2Ppvi&R8B6p^F-6_WF&f%9l9B-Hz7 z_)_=)->#mddPh~Eih_f1zTzTS1!aO&kXN1}`%tz{CYRnT&5`_9;+9Md^M|eNItW`m z)Mqoej}X4ydq+!Ox!y9xK#rZjPI{=*rg$gSPvOqRL!CCocP@=j;m*ZFoi@c+)q79T zuRC?x6ra+jr}4Goq5hiUuNCjp4#?Hxq5hiUbL^X^VUDfxP*+XyOkQ*U=`atf_E0ZP z@!+9H{^^(jeWy;D;(Z_V48Bo3)G1SZ)g`9yh$HT2V1`>g)G0G~O!-6l)-(88@eIS+ zDE?Z(@A!m@xml&@Yis5d&7Z|CXAgDI6kpD-eFn~}cb){E3Ov+HQ~W*C76s|Ne?@Sc zhwrM{gSNrk0h|9q5B1Izm(BhTc-t=bP>0N3M!N&Q;U4OdDc(1FOjzjyX3IR(6Ej8h zjdIurUs0=vx?+ltjK)tF8}-E$Uu>)Vbg@xqO!38b+D{i7^}iIKaL;U`i;eGc*@O7w z+Ua7WUY6pEjppj9p0}}SRZ>G)!)*40u+~F8Et5pWcGq*RSn_4NW5l3k9_nE!uKqG_ z2ldx-4|S>(ALyI6!$2?fP^U_9iTt{qEsiiX;BUMOU8; zA;nkUjGd0DY(&FDVNth4S>TwwRW~y7wa99SX!w5-Hti*dXlT~F3diJr;s1av_us1B z)U9QmDpL7>%B6~{ihC6E73RSP4^{UTh>GgIR~=cf>ZztzoY{oefY}NU)%1#ss`U%@4ft5|Z1HLJ!sXiZ8xduhVx5RriVy?j5hwcM4Vaioa9fpb$@VZ@}@h z$U}9$;xCqkZ@>jefrsjR#osCC()YxY&Nn~`g&wN-74MtmH1y5xp^9H|jwdbHI*2r$ z2E@xfRQoIb9(nRKeUDJZuei|Ydt~C9fOwsUYJby2=TG&UsOHV z6&|Yn6`w>$j=_3c?xEUW@xBc>PCr~!@hd*bHXf(zjVgY{_s#Ddr|XUCe8txr)r!si zJ9MkeLlwU%qVn4Hci8n5d8p1;e3G62J4~{*9;)+A62-aT|1g4#hw6OA1@PqmfdFit z>(Kf3c>=bQRu5J8ijQm66R^sbd#Jise4uEmy|11CQ7!dQov%2vqn-q23p`ZkE56Fw zpM)>B%|ms*;-BIVo}@cus`C|JipGD?9r9%S?1^`4?>}Jv**u8|DNdd4kmV=n+M0ym z;%h78gd=S#o_gcM7KcS`*8Qn#j64@v6>%nFf%X+`hUS!Jbof2tL*S$vtGY?0Q!ZB= zm0ywP$nKDS4`0n)VgDuinG0i;?E~6NbzsYV#xW8?Pk|LGMEtW@&??k|VG4}~3~Xg0 zGtW5s4KhqIK&&%UVu}eZ^Pt`|$zaLX!(&o&#xX%LpnVOX`Wv8vHed~jmYFp079W*< ziV+-3lUNE}7|sI)Ek{AGHxd1!%_9|)+E)Y0lz%x!<}xVFV6%!=i``M042h{mH1Xs! z1-u#(Q)rmNP>+!SynX>SP+0|3zUiWpnrNm`4+T_`67|$7Gzgt3DI{@t%uuO&n^GwO zDg=HqeKCMFsUG8!38-P?-xqSt==sCTbDcoeJ10 zT4>zE?tL*@5>rjV#F@ur>io^a$;aR<5UzPzC>wAuoS#*wp4RUgF@En6cb;%a?F`sFeD>UdCp9(qko+BODF9yWQ_XCK{ ziIyY`2H0IlU=5mL9;m#L<-20 z*ho!*$L1s)(4fa4>BE~{BN153?1m*dF@;9^jg1o@mq@fo1;Ot|Z<{=&@ zli|0uj)Zq(0U$dC$g+9Jl2gIh+i1c!sot1xNQO7olq4_!bZZE6+W$DVFL%MYa24n zi!;p`>*{lZ5rQSW9$r%2hKJhJr=$drHQ2cK3_WLELu*|&`Q%ea0(NN;bm{V^yuk`Y z4DK$VkdI03XN;H^0+y|xIYwA;VS`<0K{)7i0h{lidcKHa| z)3Q}Ene+i^hU5bbMM}O$gFg?w z;ub$Qb$n0HP4sqK{MAoFSf;5`0xi{q1;0+w#CJt z@*|oedFVy9_)+BWk8l*Rd+0^B___S*kD#5jdgvXt_>kKF3q!iXL+`M~Z@-TJ7c434 z9(so@PQA}hK)t|2@36&>OzB3rS=jLth~Ms^7un*72MvX^exD(Dp@-gPiyxkb{!9-~ z^fp_35;p%#6%+I#TU=gLG4b=y^zcM)v*8Ut5Z)C%DB}-wf?}f3LvOQ1nLT(4c&+fz z%WUzbWj{ri7QM_C@6`*Zs7j&~&v@c9>xO5kN`hWyi_h!r&(ftu@3F;~7EShX;aQN> zDi6KP7QdxSehzNwmV4+uws^O0e-64;<)PQs>7vrV^qgZlEG>FtEiQoa=Rp8P9(rRf z{ua8DaAQ3A;(6$n)kANr#plcL7pPu>-dKxwD<-9ND7p0oK)lpLudT&7{_q8=m!Q|y z;)@Kle*?&Z7eTFP^VoY=58U`7C@1V58$yaN$8TPQb-vtFh>+raoAnY5nayMEojNEd z29c95Iig2vB0mh<4mpIRUr4V=ACOFvL`%wKDbnX84(TGvpOTMdgQUBqRb*IQ?YL>J z+U43=+8eZL%@3N>n&X;Vboc2_$@a_YbqnNE<#xGLr`Pq>Rmg9a57q6I9g*cr=F2z8 zzLvcVU*)0$RU1YTbM%gw1J7+3*-w$K7^P6b9sL{fV-la_u+%8+53XMQLPAFXUGU7wz6O*dq(HS?Sd z6o<*F&s+(T`-u;+9wr}SaW|=ehiMNB8}eKi6iffd(^oC5 zeMZV;3o&%R--PLQ*_e zj6RH?53eQ9ccRY~@)^qh0rD3X?IiAV5c)P&=oJ+;RaW!D#!MbM-6mlr&$C14BDH`3 zyjk{Pv7J1O=ynTR@Pw}0Dy-yjr)wqGJ_I~_$U{&JVVrClO9O22ykd0wNFIW=ks2&E zlS>~!v4u=~7mB^42#Pd^kQ8qc>UIb#dA^3ao#Z&;*+ouc@e=s~ix-LdJ>cpEreR@) z-kjcSuCH3lb10HeC+>FubQ*bTx-LOtA*r{)tVtENC|W%$cfBpUq`clJPZL)15Do~!@_k_56D zi}B<(L^o2{f;W`WBZQT_p^P3)&LN&LB=Sxuo+9I+NISu_m^Z&Ed0l;8^Fk}nZB+84 zu#(qj$v;T@osNQ3S-gDYNJ&G3HOXd6OUiym?r*?F1et(^mSjPZ zrlj;x*s4+vp(`oI7$zUcm}Q;zSnNoPSCursnKY|4~1u_-&b!|$E!M3t5sSsuUnw_ zO>w(on*4Lf&CpNQAzLmBlim+$fq#&AB*|ePf>P{Q`N%;wFEv=Zjw_PzKVdIcLP6OZQdKMYa=v}#9zeipqHAiiEjrhFX7qHOHJ3rcWp0U zf?b=$(G@xasC}CF3>doN z#yE2N3UtfrrS@s!=ZC1Pcz*Cw`!w-AHoez$U8QrD8mWnM{L)q6xWG$|)WpvZGv3${ zODxwYVrr=-j<|ztjVA{X+~%d`YQ0Rd1G@*3pAmeym)fj}_wvXWc#`l^6E$(f^qO7!V-l(0L_4;jPN{<-3Ot2qS0DH1{X9 zqn$(30+&?W1sPleayNl^8^t|_I6K0}#PD|WVDjevO*-=Rq1pk&y=RkxM2~TfQ7qp* zgd@^toO5XRYc;%65fH)KHhe4~LLZa7e>Fpz!Dm}_gp6~}2Hb-=+=j9I4sb}WA2&HO z$;o!$A7d%%1VG(B(HTqL9q$~{Cm3Ip&@Z-;|~0MO+8MCU}(I^LNMXa_M&nweW% z93<|tPtbMlF&`uOZlbdZkPHMQc_X&Pl7CEa4(S>ouE}*^;^;C11pSUCQzudeZcgMW+WM}z=fCwl4G5% z1Igt{bc|zJoCmTT-B2=jltIifkGrAVH`&Rey!PK(1*!dRLll|(oKr!L?cO9m@V#R+ z$hSYoxn**9&i^MejksX@ai}y>9>??^l+AVrOmlNJ@VFbt%cKq*^u8RXaS|aWylCy- z_rOJKH%yx)6jL7#)9W%mCcGTQ5fEVF9(ThuR8BF)aF~98-YJ=Gkn=J}-*^Lr4r4Mz zaxu69{Up$s9fCTU178Z!9Gd-#?hFM|v@$aV%#tjSij=h%>c-Gn1!X9T!*oY=Cwx?gl2$bR!_@mW))fVfFqWN+UCOm|8FEX69otqD|~~YX3XFq)W8l#@o$i_F&5hu z&VJXYD#VjqUl|3&UJ3TW7T5H+9VDuURx`7k*CBf%9bd>9K~u5>cN zFuT~b`7reTBSV8w75E_B{efda9WU}hgnOcrumLOsm|)x>kbPj>a#wAFEGLQWn(&lK zMlcD$fSLhVMS&0F*>^~SurKq`81_;&re#+PyAR{myVRWYG%$1*Qd)56FjoCpHP?Ya zMS&0F)2D@VG`Nb$H9m+*4~$Nt;SpC{fC+Xi+?l}0n1ccqF)00?LCs+jK_GgvNE5_K zp%3HDKcaC?5}+#aVT^g1)|t}1BGT@IxbnaW6ZrZZa+D6i}Sf z2KCbJ!+`Sf5kcJ8d>BN&R2kHwpaTQP`<2e|$z88GuoC1NMnis>bgqziss(X|l zDx(#8c`oGT_DGI}y#=vE?`vx>ZePu$B86LC?DWWi1H)h&J*PU)QUW=i4feGlFrJYe zZljXeB)PoDCOFyP?g}kY;3dth1+Y$G4m?!qp`c0ot0Ecz@MpEZdy01Q~-!tM$!H}&N4w>Kq_UAH+QJ8^M) zNhnUpx!arr(5M%>1V+1@eQW>~8GgI7A0*%g;~@|OV;#ruFIjZEa~<|`Whm?wDGT#* zYLkj@tRL1ZVw)`OT`Ez793nX9{_!vhOv zFv_FCf6Sv|B>V1S1XdJ^N@2y~=JN76t@AVTf~lZEY4C0o?M$gbDW3}PM4?H0_@;rR z_I=2PJm|0kCPhZOJrrHYd++Gib!>up0sH!HQp5gmj|G(IV}=s!r)5!@Dv z(!%8Q%(bSPlDfi0!36Nk%T5Vyw2&@77M`cco%cA_wQX0m7cx}3Ua14XDj}z;aZcgf z%rzVHZK0?HTcq;rR|UOe56j)mDLH7;dB~YSj@;|0L&;i0^_Lu;=;TQj52R?`DwrwU zIaNTLLX%Od7PCRLLL562A8^n&$C6M~R#)XDn^xzpsbmxtU8@)7 zL*OLWol4+wcOf#5nUNa(pd$n4%wmRQ_c>GF(wx%Ru-aN@ofXtEQ8QV97LXJ(swEd5 zbnK&XA0~#a3yZo3E~fsgy9sPOKZ)E9C#W|f)ml*J1Fbg*pMlyM~bF{(grS7Aw+B2w` zftqde9~0+ppjPaqzNDL4NJY$v6R)`^6SkQggupW@!>vD zMv}J22~L<^>SfB_rSO}P_C2f+Zr$S?XISE;{-sfj4xSH4@uyIA0RJ&LzsGq42!T4A zh7hm6$14<4Jia{MtvE&Q9HDk3W4u@%C83|!P&f2-coQZIIcpW~f?XPVaM7G}OgwPRQ z>Z2;Iy3TuP3+OTt-0G!{s^ZFaYF#<U3tA|9sjq6U zEI>pQuLb2LjuQuBf~{a<)`3#UxBAWFLh}ZM?CTZ zMNC~<#Sw450OM)(QkT|VM`^%>)#-UP3m4f+%TpVee%ig%$5njT5`TxOQ0S#TuHuaE z{v8;%dZ~|V@9dEOUZA5yeO$#yDe=~pcvA2Oo#qpJUzn$(VUPYef?K^45d1orx%j)I zZ`}CaC-L;#zyNj)nw~86jze(qd(Zp-bW9qdkv$l;OfoJk@-EnsltyN$4yoEzYgBVp z<5iL2U+Vfs{!S9lwJly3RU5T9Dk&;X_m?zVnkbD4e7& zQKUSld^;js`=j`lX^T~Ep%z02 z9&d>q+MfyGUzu9pY%tYtSZ&IzTDWkPsSynMYS;B|CjMXA5+obRCr~JvQ~;#?_06%P z;+9h!mAU536m!dx`4uIl_Vl{yMT_TTmo>)~(@OH@=q<6*xNk}BuWj+txc`#sUjf-B zvIh!TtNaymW^dl{q{>;dn=0m~mu%cHKf5_)N&3R{)NDg*+=mSQuFCn-(OTJ1lTwv#ELk1*Zz0WfOPc4-+n8=DT5pZ}gdD#BG`}IIvG|nyfW^l|{d-$N z+E>Dcw(?|Cv%Y$5W>Rh3cfv~RqItHArutd=v*yKpKvn<($=77_?zmeF=4_~GX-v}n$WZL6 ztSu@tnJU*<8cR0nz9a2`K=KnggvB@H87M}6F6428JuAhKURt;?FFTGwNA^$J5<4{R zJt1Umr8T9ZDcjs=UJ&;snfxcP{{_Q-`%xJFfqh6PJd?zbnu}0GlRPY<$X+aT?*V zTk0wn^>1V<^Yb^F?CVnP`3+U8OXeDKYs!r&^Wqr`(@L!D%hayUp0%WM)-2P4MsxgN zQgIbVEJ282(UPX-nyNKcb3s{rys&b8R@wS$+uD+(lvVMA$SFV|8yIo^glEu%A0&jX z>BWDx#Y*~t<)CFV3-Mtyx#Ts4gkBbn)uBrh$DUCooH(F%TS26PFlp|G}ob?vMcd-a@n$m((##=Jk-0)?z! z)IKtE!j2-c_-fk_GT@iCLL#}=HbBZ5Wqt*S+v0@M*_cvVv$4Ll*`l8pKLE`nCWLwM z@@OBPrFO{`$ze%G*na^naI#@WqaLm#Ae9Xn(}%kRSOk|NOl~zF zW*Xhzhf}%-D(pVYF8X0m3%HVijG}=niMw(jSG_048N+D#dCf7U=o>j92tpcBGIl`_ z!8Jb27TUIeyDtl%D)3>3(657A*nN-{luTVHqya2K^3MQ^UVkm*jGlwHCQ0nANdR}T z4>N%NvXHw#3sl&Av!Eh(5qC?$tH4a3j|5lPeVE;|BU;D}$R0C#N@AUT$x{r(cms;LJfV8Bu%^H_4Qh&Gof8B#k)=M!+6f(;OfRV3{HP+9bVNDTq)xLV ziZlRL9{vI!B=01H1_WUN%9ygVen2o~yAShpQkFj-5X^G14>NR*iE|nSjKN(SrsZ_T z!JVt1n>HWj;`}^BjopU{I4QB5fkDLJ)(}!}LSLCIOn%AwShX<)PQ~DZOX{E5*0)<% zF#+fPzQJ8B_F>k|ulojbZ1-WR&Ds5eg^=%q{F>xYKj)ZKu!Di%2B5JAtvQX#06x;3 zaYx`Wv#l-gL3&MKH;N8Tu5^8@0uS&(yxM)3VKcjbFkPE(64dM(9DHwG;KK}>Uk--; z39iwLeV8`WG6ec3sImJnO(q!vbh_6>7Wg1HW`I+F30%iU4|PTgz~HhR6JyRB8hlx9 z^I5E-bh6KCFX(XDTyW zN^>fzv+`$U@II^w^T_9jH;Y`xVlEkIbS5Y>X$x}Z!ELca6EcL&dAJkioTxK8!C+YQB z(Pm*K?-LlEOlFz^kA^J6B7(F+p=2B%$X)h^*rAb(pFl=YUDn#d*+r`g=dCTAm!8pR zw`R<(j8u^`*iKD;!a_^5Nzj~e9w5iYSH_;0o#gyUqTI}MugT zFNU!$sh5~4=dPYRXLeI%^59FPJ{3?tPxfQ6i5$UV8+jRuG-h9)v1DD$>hsmb1nb!WA=F~>EG+Hg| zZRYejH8t^Hk>P1T^FuNnix0?BEZ!&0P$-$5A|TrqtBQY@>0KNAA&q~ByoqpclOM78 z7YUyV44+|m%C0JG&djtd%w5IbVZ9}+Y^gWY=j#`)sj%n8ze!e3by}2fFeGxPZi}57 z|GKb2Zgx?wb#40mwOMoGUlUd?$SO?QV4PP~(YP`GRdOEKk-S25)1Y{nOn^f95`%mH zbnMHE%pd3JAB=+*sWoHAz9e^HqqF2B7GIFzuQiMyAhZEPJ`<9hGrM3;QFHyG=7QSz zPl*vfMRE4sNSeTH7%<&^+Bwx_vrxI^SzWGAxX!i$Ktngt5+VAGD78+eNY(C6DJ3oWnMg=P1s}31x z17G#dl*-t?CW{&G1$*FjnGdthUd>?begc?a{4uTUBeg;j(7&}%ao&WQri6!|c@Y1G^x3D|s)(3DipW#>;90|h?JTl&IWcF?;jR`@Vi zX+lrPZ}2!bZ98>VNTNZF)XU~z-gk`hj~a}i4mSZ#^AXyS~574`Fww6f?}jx zEsK)IN{GafHwcX9KT)j75(bl0~CYivT-B0plXxLCP^|ss^!hz{JML z1u5gMmyj2LCg=KYo=iS_6)e-6c2D96&3z@%4Kv(W3hu$!rh2w_0YcP}DCi!`M2^4W zY*cO^uzMn!(C*ySk0ieCWP`0i%r^s#PbTO`3Pe>ylc-dDfkHp@knoiTUrGjUy7!vg z_PUb*^AkAcQ(g-&53$~Y;Gy4u-GmX>0DE^sBumhUk;AV6^DxBYIrQ`1aE@T&(LpT4 zq!5DuN0ro6IH<*}CnVPbJB)N&jS{tRZ(d7crfGGL-0oke~8vBa7iDqKO%PwqnO5Um@ID!G4ahbzv_``$!BFW)^H zyF9femS{(CZUTH$Bc8DW|1r;Uz(AIbpiJGsF*R;DXKc?kVMag5mI)ts!?bxg#Wae; z^!i8+6K9wtu!`b8=3z3Dp`$3KksPKUM)ZIQ<~t}$Qo(Nl4bshKR^-rc)(RdlaYpVV zsq4ZB4(I+G_&7O(CZ5EQJMM8e?#|voxf{-4iY1SY;$+Wna-EnccUr~;D9W-0EZuK# zP6K27VH}^iWB49AVE060@CmSUkNJE8`}mmT{tH};sPoUeW1O?Vh~9QnSk&E78M^Ou zdvu9Zk2fgd*@&`;2<@ZVe9cA8?V4HP-@v7cUj2@GJs8oSRIP!1?t|2b{uael`PcH@ z@`Ghz5sa;vw;;R}z<3-j7!HyB-yik1X(mm3=^0Q7_#P8%;Gp zXfO*ilJ0C{jyn6r;;RfTNsTEf%!Z)Ik7oE&jzc0dL>v7+ zYuOgV0~G~+w9&6#%hCu`M6U9KjXsEH9923E`wh&*A9;9N4DS5l(_&%d699*q1eW_` zY?%;`!tO`Y{kF0o%7uO~-6tQFu`{U))e1k_>6^;Aoj=EGq}>m8`oI!nxqcj3di|D7 z8cj%sY<{%e|G7MbDA0C)-nt-$Y<{%ezio9;ivmB`?vr0v2lcJkuY!vCYuGs-=t88; zujCy?V#**O@1t2Q5vovfL;HPcX%OyZezf1WmvYAdP6`T}Uj`MYDtkCO+WgdLzY_NR ziB&zFUHxdk-&EDZ@v_(-2Gy@uf#xsN(YC;cw*2F(duUzc1G9b7UfsjV*X~1G{ZFew zj~5Dgu@5cwQ)_ylZTF$w{=u3aTHAbRy??%@2iYw1p$&g_ZRm4zF>`UUIV|dSxH$O+ z6blpKh1(Pv6Y*q(JwgJxmeMs}YxZcyhQAfw6dngR*rjTj>Os{a<$2|8%IS*F6)wei zP%PBT`^x?ltXdAMbc74?E2wKui5_-$PzI>@J6IDpoOlW3 zx`*vX%)J4r@qp}pyb${Q9(YAzH$nqh{WAe*%Drq~Ljx82@uKLad)Yw>4P^7 z?zg3WxMCv9?sw|tNQZduclI5CzaR)J*a@bXxz8TnF8z~3or0%4LlSOB`KXzFyO9;E z-H-Q9=k9e*p47Dy$A!g3p5<-OEex3ze!P&%zR#Hig9p{%Rh-%_1~OQ-1|Bm_Y<|3? zQa=K(my3s-TC(e5Pzlms?vI+4u%m#Rs=$uo+zU03Q~D9O{Rjc8DDvao)zgo_TQXF& z&5svY{f~sE1YcXYz#_Fr;1wLI^$I^;TD^D#?pH!p+x&QQ74tw3$nAc-zN&lx-m#%t z7x?iG>%|9ppk3;R%PKPXL1$VItrMZz@n8?F?S8zd`uM>fXxsgGTb2A!57i}pyt48> zD@H-9Ko_uZO^gz57_gR~BxvP)2>ps)yk-8cGt&{CJJ^@Wb#q z2~}K#pUB6O=(n5`AX?khx14j7 z61V&p*)igH%Q-KyNNQ2Es-tx2;dwF(`RFa@d@00e8g<4wdGNEEC!=z;r_^7B*UPFD zcSdw7_o#TzD9ac%w%B=sHV@FWVJvu>k(PR5c|OPcI9WNt}HQ&Xv7*8HN`WnuqN$nen|Yh|{5*21E- z`>&kDmTup6BNhAA1Dt7e7$aN=v3 zYiNY*wA6b-743?YNa07n7}q8VSsCA79$CLZUtyj<%a&);OKv`KPaoIv$d$NXnHbg( z7WF{XBHel2t-AEcZzA_aCPus&(Ht>I`;2x4M5sKbv1ugX_lD0`{{VTXQdM85cBu@? zx0TJxL5gP-D;44L$K_VpHQ8ZVrt}->K54S#Q^^j=4Pmc`HF(qe4zk|FkK@7HrWnbo zR2SnN@Ik6;ELgbHFdnRFA|DXm?x3?Z3br{$qPMulg4H37HXXuVpVV7e{JSi!Nrpl% zjV;YuYzE;sa2XLeU67G{ZE=kQw)lajgPMV=ulw%HNTyGL-YoIbsM8@#;c0IeA00k6 za&U_427}Gp$}{KW*VASusvP1!CO=GZjRy<*7Hk&6f}Wv9m2TadWu&R9^C?AGkwG@!QBOCwc>5IJpTND(L^jpRxi3_!k@My!qr<@o^A3?_k2*hq?|y3qZD zhOZ7WFBm3atJrP(Yb3{}!n`Q-(pc6Zh8wOU*?FO!1_PY$rJ<}tvjr}tsRE6nk(5kx zjRuQ&8rPb&NA4!1yQi`EPfVj@L&I8!7#oIv2&6CIKV~|N%~CIoaUEL75RM^uNNcBq zkZoQX@HzxrKn*<2xa=Zbv;6hxbVzCR>(JD|2bRmb($#GA3_7GV3U+AOr6wi?yXNee z0Yh5grO~iiR}8-FD3eJ-eZP@>IKwptn$ghMJvB=as>_Y!^fu=h7+@MFyC)`7sOpx_ z1i7Id+>Y#C8ZVo*1?Sf@ObYX@7|Et~=LA@aG{@pv3hAJ?U1t^ z^5GbR2f(}?{Ck#q*Ya$xyE6&ROu=hv-*#}+$@kJA+aW~)%|du$eYYJ%QsAW#w?hs9 zGRfV0bj^|(J753`yfplFPt6R;f)kIC9K>e%UK)nGCnjO5Z4@k=|L&mUMq_e^95?J+ z@Oqx@pyRf(hgT^0$U`%;;7-X%4mqf&)QX-50Q}UcQ5b(*$Ylo|02;bGbl*}!EmOM_ z`c~|vA-qFQE(4q$g_(xHZpTTPr188%u5L(Blp6fPj&uQ&HZP6q9r9g*&4f9cjHJTl z91kDbA{0r8H!nEeL9^gF`Me7p2j9^f7vEC%F0LdudGY5KNL7&ew75E?}$BThOx*fURIR!mYcU z<5&$+Ygp8M;I;Xq&Z|p?%p7QXdn#g8gj#!4o1;0WxkZx(ac>;q6Vz|2o74#qP;`Y# z2`c+Vit`GuB31qwjTO^jSkI2m2`-do&`B8c2=$dlfR95)WN+x@e3s3OZ*DzsWt%DS7zAV)diVP0M*!f725X*x!&d9FX?{hY8#`4M|DN02ldd z0BGDVtdcD>P@x|!aGbxeil@*(RzF(f0J*;8{4dUdlzW66LKS;_n#=rPo&z&vC>}r$ zJ`U&4*XFwV2O2P%Kz@Uzel*)T@GGlO3r)Yk4<q#(U%l&B6bL}@)9T*y&-H-M?D=x4axzIpXKic|G>Ai75lxCqHjeq+5 zE;<-?KND3!CY;6Bl?)IrFwu$h@)^`nWjuJh|?Z17JH*-^`oKD+kgBIEZY5Of;8dJ z|AC6#UkpuL|4WnQel%M;`=`?!5O;5VvH8)U31r7A+OI=mg?>9Ux#Oa967w>?jwZ!^ zFoJ@mM&lrn+>Yv4^4o2j`>|X?_9&XvN-)By_>E#Fh24+lP>U}G#CJVS&`|2=|I%cs zAFZU+e{nYmhTf?Z`_X=?^e;|*4wglRP$oHWlr;rrD_T|!yUbn{sip(<0}sWz$?ss2>9DOV|>|Gw{2+g@HJ zFGoY)_sF%~+Y%)263ZSa-XXs)bDbfjR#&X#7P8q2q1kUH=b#vJ6GdWAs?5%ADO+E& zHklVIU*jb|6u1&>9w7`bj=jbmRN0i9Q&W~yp0g@LvtL-ri~6s*ksJr?l6@qy5Q@EI zJQjP%X?(bwOv7RqDZ*kWxeZx%5j7NTU?e_rq?E@pFCM>!Nr%C!uE5g#RR`k;6a84_N$8*5Sho}Hj#E*LN}5_SnMOupxE{@OxI-QHq2RMoxgAn?=2yDjI3~h z*p8CTSUgH@gCgx|rbSo81s)~!Q^HDK5()JQat`rGNaRi^z<6Qjw)m+ECXbITGo^8U zZE4NCy7fE`)JGY7U6p)dkCJvobc7tjVkUV8iy7ntDAJ}d4bx}m)y_+8&aKJjy;@`$ z!b)C35!oCvc^BYGCplPTk#$g{O%t}@jjhZQRN0k}LpBfM_W+(8@+lVC zF)^M;yh>h55m_{O6NyBTAF+^<@O{WTGjVuL_;Lypa*}14R|R3lY{^Sbqi|ikfpdG0hA8vr# zo;c-D#c25?*#zl0aNjL~Pq#(czH;{rFj!3YZRt-E*SUt8Q}e+VG6}3Q!4Q^S(}2Mu zXA7@~P=*j>k>;}nyEwc~r_iK*ool0F{g432yoEcA*=l zL*;;J>+WfQ>HMkIek7*SH8Rx*RueRCF&pa-t);0^9z0G0;}oiPPo_rH++&P#oI+MU z+uENDv+Ry1hcwN7$gz!;;pFEsmx7$EbWH~`Q#mrx6|Rv{92q8|b_#gpxcc`4I|DvB zz-s}#&$T8J|JNJ(5q~|0@|g-i*|a+iP*Nj#ZMACzJ-F(tU2Kp>*ajyhqwbM0_%@;S zp9zc&Aiy9sMee?BXQ0Vs({4R^?CH%hq%N&RNuIBEjRrDPfQ;c7sABq6xrU=HJ{Vo3 zbY(l|9SIQ)Rd{kl!8#bCuA|j09Y{V=vZcy}w)hsV6S5i?we$x$gW8Vz&+y?P?l=UD zqgmvsl{uP$8{lpNV{ux9x_A?*t^w=`yHf!>wUED5;~GgtG^~~rk zLu2{`Ij~`-rC_dKlTbBjBHukru_tl7?>xns#G|fBsHR2ULAyuS5gh@D6bgs7TH};2Hq0T@$PUu%xE} zdf_!~nq*AH$;&;)=>le0!pEe3Y3!mwtwH}a_rWn(2*SJxyLn&z02Y^)y!k5kYuSWGC%?o{YwVZX?k zhg?;0K&2rR6|(YS*8m7H3{rvj5wqy{NQw7hS3fPUo_Igsnm{@a>4UZ;U&5wt^pR>8WL~7q8DHX zdvtt^H+g)d>|-O5MD8C-wj6Om*w3u?x=<9FvNBg0tYyi~3rm7=8xvFLE0`}Mz>SY_ znD`{gq(@y<~y&Bo~4-Eo^Br98Kx2~0G27vtlgdHeBEreoEisBDSZ*W-a}DB|3-Au{I$^~Xw^uND z)4D~9CPS)RG%7XS^q38}x#WL{U|Rw~LD}HIxO+3@vzs2cMi*W+n@Ge>&UHv@T}WEG z8W0TKV8Is15aKffTcBjBisx^EAZ4wypO)T~F!dO0JAr(10KA&aH#;X{$no+}^s=hf ztep+P`m$^3m*-t~oPU}hf9nN9o^8?OVDDcuyq*pb~tukiU+H&-ZyR(d> zlfeNMCEI;=;qHff+(2ik>9y68+1w-}|=ei<11C9^-M;N$^&4s(?n{;C%PerbY)J7bQ$k$%f-mRUX z`HyC&W=#0W@RD$a`fhcG>RZ)*)nw&qWdqm(o>Z&?TfoQUd9q(*H_4_zykM7fjN}bT zBWQ1C&fHzBSlx-fV$c4y%Q6Y}vcL_zWqFS0S0cTHfMfNW{T zB0&@Sn7zU391cykUfwkkvdthBb7B&;l@c_ekC`Tgox|w;NMC9T>wc~l%xO!UYID~a z4$y$<4in&qceLXkGiZuC(NAsim0jQ-PbtIMicU5GW%`(77CqQ*ys~Rzpox+Cqy{yC z$4nDjC;GO1ePvf7+XQC10T+Ov34P2oDduOTiiJo*9X1S;n z4Q&!+6DMG7X(#&FEu8J59x>O|#M+78cSmOP80(FStrPw7WOI1kPYH48n1^8iaTSVNyi-CQ1(WpuoM0H;xk-~yNx8%#d`PP`P5XrNV{=<_!|)0Ik<1EGQJo#6jR_Gh{nx0ujCwodf>`!175 zjP_I7{>h!2)nwgVSDXj~%R13R@aSBZNd&046TJl^vRsT` zRC-oGa-eZYVx3Q{o#;7Ok>z3>l|ln8?^FWNvso_2Q7JT#wNn8=Bj$->vUQ>}Ve33r zD2Ry_3i8BWLs~n*u@Hn3LxplzF?gz9{>7=IT@}z~TP*EFU&D#>U5t}dXdr8+1b}wW z{~t_liaNuf$=UhLd*r$-me%;uDREl%|6o2;=0``xd$V2Bn5*>bFzhMxqw``!j*Gp$ zzm6t0|7I#x#@QngT|qBj;Y=*9qrKIS9*_Q<|3Q4q{OAQa0Bpp{=@s;KP{GZ^;INm% zqDpnI>Ly1Xi5wGgZ^TgT9ohk!n>A73U#?Q`P+e1PQvRWAQ2eZ@lz$^%E&E)yRQkSj ziR4X5_JNrPb}7QPOLbx7&U)7fBMnDDw{h$zG@vmsrs8QsZ^3gP#G--I2Iy}=HB8Rc zyT&Wq!?sHR$B^}|5pY5SHR%*ku9)HQ$N^Jj1mb|?H&mm;$H769n1Z&Ez)l#Ty1NS% z-nr8_7)%=ml?6gTfLU)B1%@3OQ3jw{RPAkmYD9x;goWV>6|XcwOb{wium+grp|V)W znSJdep@Z#P0o8qgDjrcm{3O^%QPXEWDsr~L)mPI6K(;lyMq%SE(0FtsD`ALy1D^0f zjp2ZWY5IaB+}cPb+`bubJk*5)!g?^ra2^Br0ZE4a4{n5+$LuIwW^rr+9OIi@Bjm^< z$!%hE6L8ePRzeAotxXK&R%rDow4(C^K3yhuQ_ZIg`f>0Xq{l-(<%1g-6fJ-vaRWOL z^wp3`BS~~ef#x7oX~svvLX-AJ7afRZKy?gI(U}IDLEwhnR|RIP36#R1f1?MX?x+}O zZhCA4RK|@gsw7k{Bqw)GDMo_^yGl@V@n#JpQVyC!wE<8)0jTKo0O7*)potgw9VF*B zy81?-=s5tcbrZBsZf3RA1XND}Dmqx8SJ1=i z=^EJ}tsoy2iD+R)s{wFKY2l{H$`)ptfQk_neqG4e$+e$twH{iXgjO77GguvW0dtfC zdb@6vqgxru^?+k~D?1{xIIkvzE z2sLGVR6MO*cT^Ob9Cqy)1(<39)2#nz>^b18uAT4O`@IfEDWwz;6$+($P*y30LR)Bo zZYWT?=`N*%SRWW05X2=4Vm1vg6pQ2~|V#)0A9@bP2Pm*kRM z?($9UE_aJN2FBsip;HOAF}v?WT@=TO;y6g|+K`dId@us4K|qHP5F-*+#AH66vjf=@ ziAXM2xHO?^Y&~&_gkN_d$FmZC-4Zg74ImmeFOl$Dg)k0x!N83u(tS_kr*c^m#!m$T zmr5`eAdD$XCF+QVx}}!{oFu~XSe0nl>TXqutzO4gj5=`iYzav(apiJcmR()ZbMP{$ z=L&=|b(yrJ3BgaV|FfPfdco^>5(vtRWFGolxmvxZaCzMSw+F%>+mGS_RO}WqL zk<5Drs?3<=EgJQ7?$;BSe}+-ZJ3>^w+shE}g5_>)*{0=}v}Gh(a`$k#4S@=eaSKwe z`WeEeEg6I$OA%zniCYFSFHf}lh7lcKIab7H^d&744+)irmn0Kc{meQTNY?K|y>>Fk zj7b=?XcNXPI&E5kM~Pz?_0`9)+b|CuPd}nh)%~Qi>*BSaX*)4y(Oa4pO%JqwpQ`#; zbqhKndqr8L?4j7D$dUgezZV@dejrIj?6J&OUKZFEZYE9)BOtnua?(oXmrk2Lqprby z&Cjs~v!?DxCI8X%%`F{60`hJBSxs>OjqL}Q^@WLd;phu(L9Dtsdc5_njxa=EKUPzW zK#U0F5C7iP;T=$83uM)kg;*TBwPPFt?t5*(Pi)1Nsk8;Knxlm~b+L||{TY`&~nH?OlKlz5s>M8MJreCe5O^I^@pdBKFu@bE?|-75z9VFbP~F0gsC zX5BA9Ji1u)l!`-SBrSl2HS2x>(A3z|0wV%8M&be#+RUt(n@#x9&>&GX>bcxsMRtVY z+)Sdmgvn;oAv46!PZj}tV-Q_=HWjPc%}Yt?+wLhxi~!%*ju3376g3N{bI=v@ zuEu5oGi(ahteY3{urt;@@58b92EM>1XBE3$MTXa_DYRc4ts;Kr|6>)gSvRlJ+u}Mx zDNf>0ues8h<5P2^Il#2TlwZg23xj?B`Jg&%+UzFb|kC(lNI*)!{FCb9-S74*?i0;|&A1=DG<%? zH3Oh&H+~l9*eDF5_zdvu?v8M*Ns$l5HGA*Dnguoreb@~uxVg3Lp;JvdM`Hhhg)_?A z0^r;p9Bj6Yq8y69%wcAc5DBun`YT2 zv!>#6&zXufy&!KNPAA7kfepoHoz463tdnh{n1;#f^F{rzpnC7olVScT$+ zqB}*C15q{0MzIRTYw)ZC*C5Ll&4wW6t(~{5>IFlc2sqbv9q|c=?OW9cZjq`}d_wWv z=4B_|Z3=A^pHRF#^moxc;yU9Kg3E;?F0)ZgLh-HfJr~{@vuzZUP`n!BfEbKo5{en@ zc0dN3Ya7ncEB_= z_EEg3n1}8ZH_IbrAIg@hJo$*Z@{`wS z`y}T*Vg!tP9TAXYYhvRRf4%N{oxWb=qDM@xzrBw1nr9;)J>nfn_Fj7cl)r(fnr$QB zJcESmdST_-Ab6Ek&$5w+9`P2UJ=Sp(?jGcnN4y=(IfmOowvGJoi08KJ7|yNGMy_|n z8;8$v+Bm8iX2me;k0ZNMS zM(%UOAEvgQ^kE{8IbzcKdMEJ~Imr?8)`TaCx5zJ!n70meuIdTTJ&DsQw2?m?@f!U8 zB(A|MTQOS$@ep#K!XZ@J$m@+5Rkic1{xCM?HouUh?5w7=xapJYGA2vs%>o;_zY(Kl z;M0hfT-!W0CNWhmf10S0oZN_4`_$7!mE_k(jFIqX2qWamMvRe7&(Nouyw`~N?A$ZN zXXLO(Jfn%v;*4@^fExrkpb;-c(DS$yl{WG@BPOIp&(mo*iw#`7oqzUxN4URUw%==o%-2gh4c~zG z)cnrgd*j>hTi{dgPXFcX{WiV_ud>w2(qt8~5th$o_eqg>6^|-zlXaN?G@rJtllfv) z-ABv^%=eqEC}saY_QqR%GrkIsk$=Koeyfueb@IQ|Mfmy~Uw$iQu$SZbR$PYf$a9si z<4bi=jZ-hjx8+~p8}Zrrw)|UVf-*?;v`R5ZrH0_Si$l%$RDFu3Ofy{LZ8%|g8Z!20 z1nAXU)VtI_{&P|YufnCh0&=IIg`yPFs>)UnFO<0G7;J^Nsu0Nrgnkjo{5?#c!JA_nBSZ>sc}JB zON}`RPBJ*-;YXGvf}s~C2fI`Fo(Fz+UVHu*2;6(%4SY2jZH0T<{mX#q&MBEU4`7cYRh!bmfY)T%e1aSXzkz0UYoD$kHb!fM=%LW z>nfId<<`=Y3cJ|UGCk{XOKQo0-+N=78J=~x7wMKMu!Ui2G7R&b zBE3%K=F2_Tv?Rmb49*1D$C4!YfF=VtB(Nj{av9~gC*QTy9NNrNr2%vma?jDt z=`hV7;mm~nxlObD(`F=Bw#L;YMlQ(XaO?LOEXR2zoFPD59gd*s*86X@M)`*x#@iz6-$hk+z7m#`4K6jfu%KrtnS)40+Pxbrtf1odt<~ zaeWG)kR?-LF-ub6c1#i^&f%c)!;<1abA|k{X23ZHXF3=IG0BD@n8fGMoBXtS#ZwZ~ zqta88`M34Ho@E??`M|Qk&b}CwdNV>vkan1~2`#0Q!jdKzXQgp9Wzr7A6>_AA5f3l0 z(IkMmA0{IqgeB3Cf=R+S2}g0qP7>^8NgSMF z;G{^ETnmmXRni8`6>{sLngn4%2xlUsvm_oWF-eH=938h;sA4?}xm8jn!vO|o44h`k zX!w&QiQv!n$MNt2?rX9);6s+Y4pq1v1W7Rzxec7dpy?=lg3KHwg;wP1a9C>t z?cpf9KgD{=vy(PmEUEZwzBK@%&QW#JqKm6HokLM;p`8@x;u)Vfhh&;2s_djAPZTcCpZhz;AYf99ivd?0U{@A9X~M;%dEfw&=3F}|zs2&!;RjK^m~SV2 zx0sAJ97HmjWhWK4nB2cV$ixJ8(rSyj4|Qlgq3|VKtr9zFv&CYSZ7-o%rNT}MZ1Fu% zeF*P?^>)%(rwY+uf2bn~IgZrSVvhUb5OQ3Ooix+pOL5}MOay1=mC^s9XxscUaU5x* z#q@_97d&+Oj2V+t>sw~lq)LK}JUc0*#WbGT*ckv-uOO1M?4*?zGhD{1wY}gaRz1f~ z+Gz1ym9OGlbL^ym7T283Y8Ki_11+BGv#%1bk7rUT~`J(19 z@<5Q&u$8uD*M=E+q+`@_z1+vEK{muoAE^6R_nGcxLyN&_)EUki2AKb} z_#2lRl=`m?V=U8^S%w1RjfUffCoR#&xyB?_vvPyUY`kDTpl{S~G``I){N~g8qn29r zcvFZe#Z;ny%=nyfv-~4eeGidMl;3LhGl!W@sq$6d%kMQ;ntqeNXj&=Lt&sgqEfU9#P>`IdFc1{BbbCMR*rn<9(Lit@%s zR)A8IB(5b48)`M8 zZ@GVmSeb9RwWrVn)o1X?2y39?jIuA(*Dh{`(QkM3&i%?0EO(If{nE3LJ3sk;;aSLC zX?;J3qeHEM30kSnl$rA<)F!5c#k6u~X{E-qkaO;(l*51!9J&d{ums&5u|x+gm?U_6 zHsp?wN|k3JCqz)n;5Y(M_$ar-J;UoqgYSDCz2x2(;bDfR`(ee&jzC4I>KL3{o4FGP ze9+N5=xYMEa8YXU{K(9>l$1DrmLuRXoTY3VY{W#dRgbS7KFkP)V20Rlq;YgDCb!bw zcX}3bG~&J4vr8W9VGtIIUA_V7EO{LcU=k!nGH*(*m^!^SBdTa(6}O0%qp){4){zd% zTpeyAmc!tWq>&(<&AB?9cPfi?DCY_}0<^pgr`dQ8!JjO73ASOEvV&k|$pHvq$$qG0 zWiP@h{43!F2?Je2=58F8eV&D!yDrOKNI?KWdpzrK>ulK#XBoZp0NpU`%TKD>MTHz+ zDb=2ZTwh8B%tZj`#A_)_d|@*KC;6so>H^0to>K1#juUn$&2WLiu|UQ9=*MvzRb5!p zkQkSp7@k@h#W9C!t7jp{9I87!3%PYt-47d&t{w}aCp!!#4ynF3z>9CS?Rb)}p{!AAq{zlU`sL~(UEBJ)wf`F9bV64G#H=y(fWP_waA>Z4`KV;xC|e7R^>K7-&3%kA^v^%m?iJQI&2v9 zu4fC5Q+(fnBM8+kPvEvWjsSck2>@5f2>^T}UyLKjgvE=(_evu4nK2AfD~4_oCPw_v<*@MrHO8ujjlh4_QWTP%)tUV8 zJ6>p186GlB)}PTY()ZWx*A?l!w07-C&2h~lO;7b+^*pss^@u7(c~0q6#wlJ>%#!~i zze_$w_Ni>C%-icZ{BY04b0rytiO)p|f6!HdjKai6BKse7RUo4<@m1m9KbR?ko$SHH zC*^s6;z@ayo$SHHSA`e;q^km%e_i{k5RyDOx-Fu9VeI&1xBui4JDGopuMG`<;kBXI zPL^Nc!pp#^ztBRc!A_Q6>B5?0|L&N8_a?IZ65pGi`Wx>}Id-!A5}!FO|IoF8jK0Ln zTmBDS8_4KOe3Yh(`X~S3X@0hyEWfUKQ6GWV1hV`RUlYzJ;=SDYF9OcBllhleqllXO zK5&jz&$g2dn0SK!`;;a~HelijD$dYdfy}?eF!5gA8`{p`5X$Xj0~Rk_;XP+MM&e+} z222ci@MpwqWCJE_cU}9#Q@;NaZ*?@_e?V-Jvb<9_|u6cH{{1RWWnOQ6B_zD5%+sXV(yd_-t3b%wTJDGop zxvVC%tryJy8Ug3n$p%ckgDe|yn?LMj)${CR2qqr(iD%XXK<{s`dZB$NyXlHqE%zH_ zwOsoUR#VLF_xP?17@8PU6JFOaKdofCB&?{k-+b-cv@eqzXWMULHN~s5?Awl;gY~Lr zuR7Tfg=VP6q&|0Z-|ri-SJOt+e0z>2YfbjyZ*bJiGO z%bYbvRLVUvXAM((rQM8YrAMKHCI5q3{4uDJju?w3CDk>iOia$5F^xN{c{jiaR`o&n zYowX^rmY@?f2qJR*m@LigmZ4hzwU!2EZGWoV3P2NbYPjE6rDG}HoiQ2A$OcLKI~b@ zo$`zizUCZ&?+5kck*y0QvY+0M~#!UV2xU zZk2A@4-K^TPH^A&%cEi^TtKB9tx?j z>m_GB_3R7)wgvCSf#VEL1Ds_^Bj{!!xcjL^Q`?M;nw*sE*u)|ZOWON93%Tos_FkBa0MKA! zDN827W(ID&)S|v}a&qg0=H~I~-2GXT?pet3w;rofl5pU zNTwQG3r_x{nP&Oi3pU(f9S$WoSi@lBAZstY%l|XTnxpXYl0CPnJt<%23|8F6?Yb#5 zao1e}Q>SAWiy<77pf(yYzY}yh9QSU8?KfEaxs9WrV4Bo8^Lyr{<{M0}o9ay##y0TnWd3aq_Cgdk-}Cedn;a06e`s6hvbuGU&&f! z!Cp_`6)r2F#!gnm$-?vJwg4->U$v7JvG_}9>1$)~$aYvf&cOaS&O$rc z4vWuYbhoqjx3W_w*$#_Oop1NIvQsD74vW#Bs9x6#cAv*{VXmDFh{dP9KhHC3Q9BtB zi?ML-~WJN5V;NutQz)1$g;vo#!aBBeE{1fVd%I#!DEWWUm|3r5?vLY6* z#+yIU-Hz;q#k@82XA-24y|9?KTtAZ_h3tjJ^!5ACbhjgWVKHxI{X%y;vKJQL?MUZ( z_!nG*ayuCfi&3Tf6;U9s*5>p@9(5^oz7~CnXTtV zVzx|HQ#>ttp}77c4x!SX!K#ZHGn|m~c_(gqGou>K$wU{H7A1T|E{)(qiDEg25Zuw~030bpD zzHf?I5ciF)_W8z&^kZvf2^jB4`x* z06WNPN4!a_8O1)p4zk)2^T^pz_z@~_kkyX3=H$^>bEbm~cEp>+0l(XN!QRnU?|>o) z8R>{$JpDD=iZ7lVWS=AErnzIR_^#POra9u82UyJl2bt!Gr!{aa`wBbAG)K%0%g3^> zu!F2}#7p}ASX|Os4zkJ-@4V-KUDFQ^c_UR7ILI_dJXnt3~!W;?;`ng{!sD zLH0PALYUCYIuQ{-_Bdh$n0ga~kv+~e8O%RqQD)Zkr2Oi%^rU&x$1>YNwmIT8eyKO( zI6K+qh_Or@7w3<-n{6ip9q|>R)gP}2S@xyuOC{zwi(_qXIOmVMUcP+^t1f1t5q*$_ z^6iVSU31>8tNOx&eQ?Bu_BK{syoO)*VH{^~Wi`b}BaSN!u=@1StLJz%q6HE<=DJm0 zE>D$*%6(w&iH;sq4QEX&wH>AuW_4uLS*Dvxj5iuD7&jZ2T0Tb`BQriTIxQPwiMG6g zHb%cNai?V+S|L@+cAM{)O|s7TU&4xeRt3t=z+Ei40J||skYWyU zEjV$M?q}+#RmxQ1bwnJWL1g)Oa>Nnz#Tt&Nm)lcu8@;F>pqj9cTqAYPt^T@0SR#+XW?U(d_`3ZW90M@e)BM7Al5Di^KF=v zVI){w@KS=$5d{a|yTr4QBWdqq&yjJ|>$ebNMPetf!EW3pgXVd{;a0(WE{3heIwvG> zGipm~GN;E>C1!Dy=XVT38O6+oRF=$wa!e8mJfU(6;+^kV$Zf3NdGI0v2+H;BlB?tQ z1_r&vzFx;@#T|jc(sR_(uF-KOZGI;$wUUB|zB3!!@jKHO?!t-70-%<0-cV^UU7s5c zkCq{Dntf4jhCf+y6Zo?hlHnEif#NV`84O`qHRuMX+mslHA;DJarNAfXU!HlFcL(d5HlcY&UfQC>th_dKKgUNm!gz%k z5RSt6bo297A&Is)tr%z~d8MwqUJ`SXBg^Ba=cLa}y}B2Sq!-0p9eVV_e)bH81$8cK zMLG7O?XH*B>ez;e$;GuZW2apO4t)T}L@`ggSN1|bGq12{xPLk768f~I+OTQcsz4|Q zYqCFfsp+muI006QLKee(SI1K*KfVW$-EO5QWS7d}o~D(3V8rLG7(4ZLYZAklx;wx* z3&M)>ib`@TT1z|zEd?38D&&>>XEsHCE^zjCXDTtsCasFP0f{ax#Wo6WA!in%v|hpbGh_0dYY|m z4}#sBtx0TM6y0?R!FSTSxZTu~KVWVi=zs7|YY%+{hH)e}_R(;rygd-s-f3mQ^H$2c z16jK$C$4pB-ITbT6pvZNlmB}1yUF(<{Y-A{`B}iIEz*j}y6Yu%a%9Ymr0nYI>dD>p z5>J6@uIeS8+>>9?i}zjDiZYxF?i9%H30HFc^q7i>%8cy#hEj&(E5Tue*f4U>+0D-$ z{1}05?pba4^uCUMpxsK0(!RXA9-(flv>S0t?4Myt}kw7XtvGt*Pr#uukd zpT{u3jT?Jm?)EAC=+!@yNAD|onSBonoS59cq`O`wH|3_3g=MBUO)K)~#qE%vxwGec z;r#Sp(M$Nf9T-|IxqWeWy}-VEr8tBbUjaRalh5)ifnN69&jYOSPrIf~^mBB)ffYmU>yXS;m{cF>gfMq?4u=Q;>1LF$doQuQf#J z-_bYgd+Hw6P1AmV6H3NuGmje6JQvqNR10*Y97ZSn-jigN%H|f{$sbBx)p^-s=#2ypoC%m2w9e z_KG!5nlvjKb2`YdR}8p5jYN%P*eez_9!Wz{W1)i#d&Sd=PRD5#ILNS9ENOG5lc=la|ADl{}MzZM@Ps=n7r&a7AbKY>FsIhvQH3ktt z=DcDAyfqCGkn13GUa>akNSGCUfjP*MSG=Ty!f{FS9AwFRHL3EHN_L#ia70ysgUorw zgMBv~2b<*}b6&Azkseh}jzGXU4zlSLi&57^pq?VvK{mZ&EPNh;SSWOmO|N*hMn@8F zkvXpzUnEp~IuZw4<{+EiSmEOS8firbi4L;q6$37eBHkjKUNLVy8-=_z$3Zr||D`6f zu#f^2v^oy&36Zhj-F!<=*qLti^C#n8@!GA5CQc*cUNNVA8cm!=cD-UwBeUrlF^IS# z2O0N@wPubO)S4AL$gWq+KflKy|CBn&q&Hf)7=^LScEv%~ykZ2r5{n4Paga5ym>LJg zk=Bf?cf||5Bn}sNj)Sas|7+PKkIdwc^p`k9RleiKYYWh$V=${J=Cn=mXgZYR zxPjFaPwSg_oL0VL(6xI{97(#efvl#O$?h6y4O^~Po%AY}SroEivb$xgn1?R%;Pr|8 zpbFh@p)ao2(N~v^e03$L+H}3Of1o#x{hDI!ecBFfg{EDbrX8X6)%+@n&1DwddfoqY zhxKyZm-;;YD1Cp_l<&aMUyIlSVYOEEz42`{dwxs3ggq2CUQlGds=mWyRu49Uw!nDn7RorIUtLUQwd|6znn4yS~O_r6S)3JT3 z+2~&E0r^zbIG8)Gp$8g9ND`cJ!{J2#refI31aLdx6ejLR zpk?z*i)JR*6<1Zy;|xK~Z_$vsLQddpeiOVkYc6?h;p%YHGD}i5u8@@NT@=A#-8ZJI5ZV-Le1oDr2g(Tp%^$;X9H{Ign8K0|Ay!)=HgRP8*9Ns#mq zfFm_dZ(-O4kLj^$KRAj>L7+5|oQTA_y3+F2xVEyCNv#ddsTpl0mCC+&VeyeyMU&jLd?$Gpax3pU5$?v#8EwP&v19^# zfQj3tyQ~WwM{~a8J;8CS;hPBIj7P>vb-H#;PGw>Kz_XA;i1`$3V^sD&>}AP&aEc}G zLYNtoH{hfSlh@%#mb?ZA#U3mVYYWAzvZSkO#}o%l6AQ%I3<#WL{n;&|d9E)$o;*)EGB4=Fnd7C-i+DvQuZdy z_U|MJH)3|GlpT!OrBe0=%x;&mgE0G{lpTm!{c3790JHI!#gPZQM?O}GBcD*w*jAU? zkTr?+XJ&(q^uuiU&AbR;Op)nc*J@PWU`Jr@WJ9C z>j;!LW^<*i1+!KuYsT!eQr3joFQu#zvpsGjs0KIG4K!hp#vwNhh9JAkH7AGTfcU#DqA#wwC>xIQB z8(4Asa(D6LIM-hJb;%JK(^?i)#b>ywt9=<(eNd{p)Lpf%8YgfLAz||+?%!6Fb#~i) zF*g70{7Rf)dmCm4U!ZI&W@k#-7R;`avdx%%60@$2R%Px`uVydHgO;i0U(8PPDAO6! zD$_vY0b`EQ%W#h&N&h+e3FxQWq07)r6?uR5z>psGd>HRQ{lJDPt9< z6b%ZMe7igmADP@L8|ro3t9esmU%W2SJCAE#mwG|31$Yn3bCsn5x zAL8me7m##?M(IScgPwheFYZ5Ali-Vuj?m?B>tnv9@iHCg%sDN)a6G_h+QzbRoWd29rXG`j1k*- z#7LHdUVn%=js;-^Z4!#A6ERk8iZ+v+6kxdIusFYTTcMLXAQPy#o=C`0pf= z2htM|F#<^*xNrgvq0&L`K*Zef%mn0)YzMsq5d$8OOdLn=K*TUxlM&`@2fYIkTYG+) zjMkn74tfG2Cb$U`iR0)Ah?wK zUac1<;c68+=*5S)W>5;&EO5|^4>1Ckr4Ywm$BT~_%W&KOB?YII?VuMQ;&qLljO#kf zF^$Q~#F*XL@3wyM=wzbqsn-_SeLoqgJIj&IYKpmxp0MRlA;4+Z2E4ox{RlpV)qCkJ z)4kf!juu_!ea@WltH-McTh>9wxarw9YbK#ffV*TX)OVnLZMocsJPkaH7Pq15x0rK1 z=AREOXy1e2{R?``Q)DQr6=xKO)C>n+xV`5zHejI)ewgXdR$fx8YJh2#Y;M@u<-+|+5wNTB24EPY?T!1kwIS&OaIR`D6B>YI@;2LrlSnnS^ z3pw0*pM~QL&i8PZCEtPWBLpX1;W=>J72f+BPjH-=#QSU5z|iv*dd$M)OLTFCSo*@V z1&1Z?&*98lSoJf=z{Ks1zN)M|yR{;DQhs?XC$F&dk>GR{a=5ej!|Brqr#HkcY!8(6 zf-{Yn^h9@D_+t zIl+$ds>SEV>U%r<$%X^q{|S<>OM=ryzMSyD*Xdcv2@iZ7R9Lm3X>$CuvgXoh^SPx! zFB`#ZLXW~|HX+G921ksXz}VLgnaD@zX}yLe7WkeuG($dXXp;Kq!Yj9;79(t62sOYz z45511KNg*J=wLhk=yqPmtrjN~vuL0%Yp90WPpq3HtMsapqRiIX{HgQnVpAKE=9TA6 zOwY?}li!D~%dAiNSEa_qHO4P2pEzw1XV5O+0b0hDk_U^bnEbf;$+_|6Q^UAHs@3rQ zJBVhLgvrw8v>7e+vDLW?cw`;&EaU*lBpcraT`jqVMsJG22pvsWN3*01@-az}?3x#p zG^B-BCD+ExFXzZdAvuHK3OSZjRKY)t;wxYcBQZ&bz*XgXR!9G{9Bmm_s26i@8E>OH-7>HU?)t>}5$YoMPZ43t+AVx2Gx=NT}?ZJGZAQDj|$f zehs9vq!ubMNpNq``BUp^lhbl4CuVZUSGc$6u0oEC6l>rB0tj+5Nmm^nqYiYih<$BB z2aA~8jt&+vxed&0KC98SASQR9Ye5{x7HQ;NV0bJ^zCjms74leGkFEs~&RTR>h{-zi zFo>ht>@dfe-a+dZqwyJIw&8b!-Ebr7&b%OT3R9j`HY&Xp_bH~x&!8IYCfOSpc{b2%pVzEHC%p*m<`5>Ce8t7U z9e1`GBsFJyUT5&os+5?_+-Z6B_0`gaVwRI$ii%H0Cm&kY4>m5w15B2ao{NglJ0};T z+B4fp&qc+DGkQQgb_qKfIqA))_(HK_3A<1@>CI?2bLPx^PAy><3MV}m6%T!dfM z;`4O>g_E9(iZ2v&g+I5PP(^P>#i+V(E~2W)NzX;a#s`LZXnauN zq?e)zLiA%GwFE=}y%ZHA;DdRHfP5#t6zwO38C!%J^=v0S5*070y@=i3o%Bdld{d?% zg{t|8s@YC@DJs4wQjo%8Rz1r}&qc4nU>BG5f<3Hyo|E2;iU)&n2tp7Q^k!6yikxC* zT;QZPqhbbosu&q8*GbPsuR}&QtON&J<)k;GiNe*WE@2OGo%Ci@yc!>t5QEX1Q89x> zmLh`{IqA))m=d>@A|)0$>4~VAz7%D2W513kqI1jW#!jz8uYGJM zBQxYXuH$v+@^Ug7q1U0}b^WlMZtV0hRE&Ux3PeDjgC2&8>F@Rmq`z!O3%mM?m-Ocf z#$b+SR#OaSPC!MTD#XAmJ3688sRFyl)bX2Us zSX_?^j1nhVjYbNQ`ei*@?v^>pYE&$DOlv^7V}X;bM#Tttrh)A^PO=&m)8P7p>jGd{ zBTg&ZNmip`dZ}(i{+iw$yiiO zgcp88zg6cK(h$gER6K<6CLBVclPpHX{I#x$_=}81#rUE#vtkiZ4Oxtesb<0=ruK4@ z#i$tY<|hCOR?< zf^ix5mgC$=vn!rk(;l2#uJhWOUDuTMKJfh>T()c{DR#wlJ8Un~?JOrLcEyy#{Dp*M z$ zy<#f*aUWg4N!=^nOeVd6n@O&dG`-^9Nr%4w1)NrelhnNl!Vin=Mf_T4J4xLuUX-dA zX)_^puXr;#^dfF1bDX5^{jdGs%v<etQ!oE-iv^Xouua#SO5NA zW?0}PJ+BxGnfDLTo>{tS@}Q02ew*<9m%2 zevrQ4r0f+VjlSSp9z?*kPSW^J5{~2J2d#;?8l>?R1D^U2F&$}q#Z33$L&$W6PSW^_ zr{()FPAlI@%3d+P8Xm@b?kwkZD0`1ROk75K-fMGNNKI08ab{RkYtzIQX~&-JB*m{- zth4eF)c?)e%Ec$C27CIx0i!4Li{xK@94TdL3K)1rSelg zs7zO!Rcyp~@2BPM^1-s#WexZ$T=E`VqS7!_6?yMZ#S1h<6@ir+pU*bHz+$JkItC z7s+wO_@cdH)p49wrHh2QV!l3f9QiuiMZ#P$;0JcFy~0JpTrteQcd!q%i-fuV^?{be zD-}DLr$!eEbH%iFbSL{FyGWQT{%+j#B-<-oB*zu+6?C26{3N2P%0+VAL?JJK_$10Y zi(Mqb6@OwUKZT#zVi$>U#WkN`H49uM!WAQ+=hKLQY!``e#S2ycPkV1z{WMN1+eIQ= zarL856N8ZmS4^(NV56TQ1|vDHn8B7lgWG$SOUCv-F>mdE8Uu%(dxl0#!d&r)!=A+v z=Qv52D`v&cXXyk?!dx+fop}}+EZ0eLT=97z@i{yXR60qHE9QecpJTk`Bss2lMw;gt zZ#hYhD~37edHN2M99KM}*Pf^EFv)Sn3l*}9zQZKP74w#L7k!6Gge&GPGH3f^7cOb3 zvx!kaw2-$FcBA&G(z%e;6eHli-H3o8khyvh^&pKy;CGRlFPg zeU?7Gi3|&37Fd3KnSV%SYkWmXS#^9$W!0rmFNs>kRQc2oNR@M3Bx)5;k>2En{D`Za z>mqrpn1u#x!H{0Jvg%nb61s}F2MQSW5v!i#BFU?G#^dBG{UQ1s4Ti+8;=wFBhx}aV zBJr!3qfVS-dxVQ5uVR>VOFq0GhfwY!@oT)0`gI4G$jwFKSMicG9$*`Vi^Q*DK6&i` z+bCQleictE_8?BHz(tZ*G1b9A`UsQcRlHIBa*#g4By_!wjiT%&MAaM@NnXX2_V7!{ zOtV}hc@+;qcL;|t*ENE%i1;{Pc8JLwT_kiBBjCs(L_nU4gs$RmrRmO&02uc&PAl6* zLRay+w!ciQMnYFH0*KWvGQhK4BzYBYDI;IOEhWoEl2kiq7=1~B>(`-`?8Vg90BBzYC1>h~kWVEq|PF?DAhB?b#(HN^}@ za;L*b5miO5eyqCq`ln;pzY13%tC=9&wW?pUCX8od;vlb1FUu11@8*U0V6w{i4f^H( z)G$l`zJ4Y?icHfU)=t1@kfYSktE2GY<1ppJ${X;dW1#$Y^lq>bLtlqwgiTbpd#wyM zhi~!^6XehjTwiMl;t;{Lc{llXWPA(jTEr{mB}f zK-D9{Mux?NM#M6ANL+R4=g3&*dh4p6BVyrX)op_qupk6>q6-+hR|*S_2=fF+KSzc! zmvcNYckRo-`XR9CKU)XIp^vS&kr9!h(ecc|7`kJMLr;M-BO*se#f}V*3XLX*Y!alH znc-cv;hrTOG^{{`^fp2YKyP!=Y)s+tY$nme!|=bjnK-*>@cBh@e&#NRdpg$Kpz>PT z7n^4Pf`dR`R_JIdDl{gR4dQZdmwt|o?Ls^b;?mDCv6lxCfRNt*#X2w|JbGkQI74#` z`7Dd-a(l>J;l+o>MM|KUH$()5wPDz=(qi>N82P_i2P)~;6~9`0uqnljjE)G6h-MxE zC1CDWkGos>W2=v_mAhy3mL_46?-{8lIut!kdcp|%P3pNf!YKUBIxwE~jEIN`jX_LY z>M)MYI1(on7m7b#{#hD_yEcT~+D5C<3qgH~phild(0yHe1oLId4F^GmBO>A@66rz& zE;-eP@LSskGJ@-gu!{cg^01;}L!-m49v0G0Z1~l~qS}{-)dN9&fuQX5pk(Dgx%6klwv|y4S#mQibto3 zUF0Pp6^9j$4BmxnX=(_IYF~zBL|DHdEFzT{hSTr}Pc%XJUsgW@BNcZA7~!6k0b4Kn z%Z+3##QiqTlV+oE%AqmtEwT$iaP%(;$$EtG`z08$Bf}y>!^r_2kC~{E(NQ?bF3|3U zO8Z-ap+gvLe_tYzyZ@F*1bxmjf09>iLC4&!wAkt|Y(*pz%XY;0t48nkTYD9WWc(xb ztU(yd{&ABC!ic$In9^Dxj7#ok`E_;IhLe9;iA2<9FW0}9Aw@^xrqR{yB}kWD%w7qJ zYF{Qc6%J}8f+Avz8yOxK8pYvX0_Aog+tq`F(o3~36NnOF-CoxrAt{cKFgY_E^xyuV)2s;0hUsO#=F_42vQ5n&1j{#k1tYT9Qi zHvWpPisB8Y4ef>@`okDX&l?TEvb7hq>$Nv)PHGx7J=8nZ6Y#y$64e0ou27=XE1pzL zm;Z**(350e$~t8IF~Is`S>zC2TBD4rxqqboj1K4H*)?IMk?_<&q(?qu?K(&&n>Kx9?>2?IRaMQUB~O@*v#$5^m>mWy<|;_J$COD8JK zUB&F2D!wbcYv~+{HA$H(u6f{75(SVlSA0|HdxmZ*^RC@H-BcWB=%zx-T=7lioilV( zAw8~mA(B3$n+oZ1#W$5ZKf{~KTo>ta#W!Ki=X4V$J+7F(Dn6&1%5~^*U-_JFDx|{g zhSxZANMf+~FA!DpU8KhqU#r@_z-!f97pZW?)B5BKoK}&GRJh{XPvV!P{37kG7y%D_ zNumJK-irBPQ!AQS27ZOp%65_VR=lpWzruB$78B^jV z(O#j8)VX5%t-rXe|J6;iT%_L>GafmlT>UjpC*O4)O5S~dO7SmQ^;{Qedc`b=ejob4 z*l)0Up^MbL;(4t2hWL=QyJEn^hZh;(Di^7E#e6vOTjE1f@ru{$;ctl#NyRJVL)UjC zk(keHk`z2iiu^&_r!)1Sxqq;lIVWR_p}7b*BC1dScy^rp3-4yL7+D`2d&1;%6 z^&jec)X}PsREt&pl`ku+m1f0u#SHl$@-6Z>+1s)bnb~UxIz7q`C;-y`igB@Y7=H3* z0;zt*Go+2?+%WvqQ~{}e#k3GMymL&zJRsGt*k{Go;hm9KlT^RrnzB%=SpcN^6;G=; z6sMI9*P;475Q?AXY#^<#m}dKoz?yS_w7z0-WBrIul(zzDeZ>U!<_J8SWC3Y?#XHEH zxZ8R;-$(4{0BL^3=aW9NPE@A@X@12U?b+&O0kBSnfD3`tzhW+XL)M8pbs){J7+s`O zpCCuT6+r4=v0&_0c_$jZ0jYn*fX~Zu9V&s;zrwu(QWTw|kg`bqE2gZc6+~IeYi}OC zl}K5$fHc42wOy#hwVes1^t}$&`dW#oDhJa1#tRS0H>)~F;mtps_>=#us*}m|N%Je_uN*aEAZ-GhpJ*H=@=Bj5k#WdN+fUK79s$(_#3F&-^p%YErT(zvGnAP4lbcQb18m5A6(XthTRykY1zv-jHmZXG}KUY%~~dGU)X`=ue;y+of;S&(e?89MFWR zOEgyP=c**-arG(YibUt7Y*9U@>!)6+snnz^3)Fkn+su__t8SBSA-e88jbZxkH~nTh zWe&4MV@SVr-SWqEIfi)_e_5KWLms8MU;eOer1lZbY0aPV-e`1It9?bCBKugLDPOCI zm+hC=$X`}uD~>82Q;ty%P(G=2s%}&*Rn0|@sK3c7WPhNj|6loMXp+{bR4Tq!>6B+x zn~iT9FUUsdUNbH=m6%o#rXu^EDhd>I`QM6LjCmr+azH z?xP4;FkEIeK(5JZOn8#sg=dyjPKZm2O3R6><(|8HOMYQ9>l>zL%xGSiKXp3ys9#rs zu1&3h^8G4!V)e2>_(y>+z=uGb5|aV2QIAPA`jNz^=L4lKs>Y9xXq%edkdel{C)bC- z5o{481z5`Ls>403*9XBm3xXRA8LW>R(H|wgj~^sK?HU{R%w8w?qvZz9`2^L~!*UtI zX@S0MtT)3W2z-K#iR;$<1~ZXq!DCKFKL|` z)=*c|z_~OrKM&OmrOmKYg~=jxDSw?Gm{k+&oEwzpFIVUOQo@Ja1joFvWVACiJRdgZ?J;B8*iJp%-CHUP3Rzm>fhG z#h4s`a<)EC8782wPPsJ>eDF`G(OCz#tnN8- z+>$R1q-#gvn8o{L<7NoE`=;5>U_~g@)l{otDZ&f%1jq5gTv*M^7ODKytW$ z^+s|JMlw@8YuX0mLRRHVo7!fD)fl{;hA=%oqdI2Nyxf@)6SyVv`JZLF1jMAqO|Z^r zHRitVIb_b)hWBfpg}keyqn?EvHF_U`Ich}kVbEd{_^M}Bjwm6~Xbp0^I_LIcjyk;e zc{b;0(t9ub%cyt{1TxOw4e>151+}${TOnR&HJCVuKjtIo+1MJGcUXFz^b~uYlwdw) zZZaE9J53qJ-;7&~6Aa&BkeUcoKey@C_&O<0dq%rbdjqPVXQ(f#*Qp~_Z>pNnhs_~n zu~MseLXjo^KYX1uO!lg*PUZt)I|dZsy^O4*#OKB@M$ze+tfR!A^u*D0dM3jt@#&ea z-cOIllS&bgVU$=}_3P-)D7@>CO_cZmmNy0uU}Zq&P_e?3%C0e;_`nm$97>FUfnyN? zIY8!6;w#+pv3P~c2C{?_AJyI;i^sn_AWJCmVVvGhzZi_Dnhj(QC6q3^26Uns43IUH z_{dDJLz)I4+*}}&DDgq~>5WNIl`@B1F5T18)@H32OQ}H^kAB5{z38B}9`89(%56DnTe1@KJ16^0i zMoLU?&)z@`M>bMohVvUt3`gcsVuq_9+<7DN8kt9ldF|D~$ZMrQmQm3{4hp%kGcKSW z$TBKbSkr!EXA<%nSw@NHuD*$QjVzE*-R!*y8EzJkWt14H z%;93lr1@dBt@Y)_^JD8I3d;d9l@gDs;bx?pEFe=UG55W8Gir4(c<{ApaX=i-bL0@5 zXAY3Plz0e>hu{zjf$XKkJookx&4@o3?3vSxg$`2F+Gw9CJ4*PgORc z1Iti!Sh?LWMq|PN@;Y>Qd6&H0a8^5lxurBX@%7TP>N$oMLxJH*Wnc9Y!*R7%Gf6WP zBh#P@O?FkpOJa(#c&REMzudvbxyB^pX4OvBXybDjsRrZFqwhkIuIk)+%XcJ^6i5C?4q(4KE@!2(bK9cxZ|hagYXAy@el;RjL8F#c?6S3;g18W z0~2;g4Z9A8+?~otig3c68ab#wk3!}_g!2q&UqLued&1$aEj~Lv3%Lt`&+{+`0bp>J zC78G!Aap`Onon9EkF3Cs-YLRiZFYJ>r=VS;y5Tmkd}Sit_m2;eNKh0Ux=4IE%& z+X4-TRu78m!UlJ9@M)!qa~*T{eV-Pn!BxJ5&YbAzDY<#g>6PQTBewQV*vSaucX))& z^;a0mu=)#p%trMVjDC4_U%BsJaGVXR4bs@J??DA4ns+3WrzFNt&zZU?u_kF|X>m$) z>Y|C&>8;wgJqwc-RAuBBPb-c|3D>?4`x%^*P=OQ~Ecq&(-nDexUBUOFY439f_Ep~~ zgXqJndoBOobD6o*zONK2g#*OhNPPeBY{{*jujICsYssyi?@wJV;n$Z}`^tWUV~DYY z|MQ$;W8H%Eh~)UgryK zAJL`b$+el=UHgZqmq%Pz_;Rm5y&}B4FpP0fcX3o}=BG?*E3S)(o53u`&@lJ1MQs!s zgoeh2cmFdpRyDCGu9vIBs zwrC~EEGwm;*v$A@`k5?tu{P}AdTSuubYzVWJa=p7R1E*SGLY})QYiM!%6Sv>^UCv6 zvphnvU$V^gh;V!9XEq!zOl$;1dyrL=a!jF^n9 zs-lLfD~Ig15RQ`w;WAEm!{IA>*}qy^klx+(Qj!z4D0RZL>Xf|Pt9oI!!(mtVa@nMq z? zxz&1buI(JfmZfKRfE%YY&nTbRk~AT9ya!0P@v%pscQgsUY?I7S1xBrtmZe8`y_DuO zER2{jX+i$vtHCk5WH*0yEemI^d_^zbw@J(5*Ih63n_`-$BN8{h7_g}U|9+F(0o>Fl}qaL;;T7G_P&%Gq-Fhtumj zlh~^GbO*9^e0Y9%+O+7liUl4saa%%rqLDL@=4S%yHgr~$V=vy_^-^5FFfOjCVn${~ z#?`$rBWX`6!(J}gPV>FEe~y5AnpXCKmp598jxF7F31OQkrhFu}LDT6NwngzP0`oRm ziHWVP%ouR~owO5mq>)6>%GKGpz6(z)pv>BA3cx)3#NC zaMoc>cKfh8=w-Rn5^8?Oyuj>jdIGJI{xIHaOg4OL*odLb-__UX{d7<23bcQr3(1k1 zH#7@1TJ;m?Lh@&HAvsQYTDe?#qvCZ%jY28kj8;i!WGnG<5_bN^O0=IL>sqm{K6Ezf z>I;AjYsJ^@4YNtSMTWIvNzB>VB;F#MTCsSG44vi_qJ&}&kWH<4uy+^YV9S7PYGZ}c z1lb&v5|;tl)QW3XvYG`zHnm~|yfuepTx3%#7UrA`BY85J(~2c2L&HhDMdq|(q*6SQ zZQ+C}vZ)oL>eFy$g8^hyD;8-bMleHVAe&mTJPADw^$8gt-aI~XYII#&tUJV5E|8I} zxam(3XyaT6WMnHAZ>2?&NSW+w#keD@rprg*QafsAxRM%fqjJYC?lsRNWD+bJzIU(bl!g3NP)RotUx%~s>0~ytd zEo;b)&(wGvQx=eEt(Y6p+dX=CWYu$k>}$n44fzuIhgHu7GO`sf&)AW~hGb+bUh+Fe z(vp*Xtr#YgGGC3GGMK;?K)mSnhC{A=0Nh7N3T6h=5-kCDygGGEyU zS(>syR-tq%TgVhisZe~aIO-gS58LOisPi4KzFBQh{ir&rdRhf&b38|tgqBKZkEA@V zd{WyJ#mp#6Hl?7jd7Eja=6B79niq@{jYEt^!#Ts7hGz`78y3U*{TTz55!EPm*fOzm zIBb~M*$*1n|KcWg`oe&uP9`soPwEVm^?`>+p}cqqeCm&X4THZ~5&{8zIs+4eNY;_o zR8$L!9 zr(no{{s9PQ8jNDe6v)FQAv?XKfD)=ZJlLK%Olac$Wzx39ehN9Bx4dW~F zIN7o6MY6$2pPXLOl9;_9w!VU!+W?q0wX-iqyIO!rLVpQNTuXRFV@qyXNg7vEvBa~G z8kL#aHO{{znhMLzR6%kwlEE^Vjnhbw#D7yK&WmYj z%beUYKb0G}QtFYz12-IH4V+|n@P{8+(i;pDG3f=rPr{@p+=EF%4`~%z(zEl*r&LEy zspD4M+wZEvri`?jvgq=(qGWGhn1TS@;hEC90B~#U?G05a*p~%XW0GL@1jntow-nrn zgTqb4+X&vQFM}rl&hE-v4==EJ>0sBy&ME)T*mb}~eJp>j7w!%bDs6$Nbjua##jZ zhFZ%J5riXOzo0dmBxk|zHCeD8OwWSivGo6LUeIbJ&&+C_W?#@f`8Z3k;$mzN_aiq? z6kA9m%rkIK?5D{kp=! z>MoMEqSdKpbBJ8K@6vu68B-dPxcAb2Cq7)!IzpyVe}xMOIo`g#pRDr4(3P!9 z*?x>h6 zV=@qq)W`UcvBIb^+-k^)J_BD3vg@DJuhN~<-J;9UehnYx8whZuA_$h;uAZs-LUmAO zhAn8LGG6hBB3u5he2aXz>W|b>lM;@xFZNcG#Dfy78Ha5DG(n+zwcn zQa3&m5uXef@1Un*H$D>)-=2=`pr>LtJ`)k2is_X!DR)8IY|FalRk`-SQLn;{??%LT zuBx4I=c;w%n-Q@vp4*;wO9N~H@+FM z3-3Vw0z_Qka}hCPWg(t_@wte2YLyk@`4^vyh|j;z76M|Zl;BGd@zk2&#M>vn6cLZB z!Q+k;q`7P;V%Lrwk1QABoHsl|1ZfoeurS z=ON<$uXREHO9(y>5m)}A3o3UKd>$em(Q(BvqU8jihlr;id}$2=7886KBCh>(G1Oj2 z@MVZttMF6JOG@zGh|fdBy7GS|pescLpNEL`Z^-u-4 zZ-8j+d5kh%P3mZIv9;%1DO!8hoS$)R8LCz-Eh$#5|CF^(4un8{oPPFais>WMF4HLE z^Tu_?zJ_}ZrP1f$+x8Cqhx)Dh5xOUJD|ITZTRTnjnr4e;06c1`RO?lDsun1JQo5BH zV6&}LXykXv^JPE6x9tZ+Jq|BPt6`Zz46JzW%oqpQGWDIX%+$IO2rF*)oI7DjSmQ<@ z?6iN;h+cd^dW+TWAj_@$hmsHO1c8^j5g9Aiks-%$FGggnc#YV04EJIL#hz!4h&upl z|1s!ir5mBK;sx#aT3FDQx)BvCK4SE3f+NNnHv(e+O(HC)#`>n#DIfsE!ioiOx(WAR z#KMaA-_yzi@x;{(l6ATf|0*7BPcvO9+=zb_Ytz|g(57NH;$Ov0$X^FXfI>IoU&Sj0 zeNLaWdQR%9&DnG2&#PP)fK|E?5G!5_@Y^zj)2xDBRy-*0ZlJ4%8=gY+F#-5CkipRS?~R9(ED`Djw2rwxFIN z{#86sv1u(sNL34ns??1jSaD~8WgV)2yo7Qdx z#>MXbbpH~I;`mlnuzs|pxPyjms9=3*$qP`hOSVB1R=NAo;%Pz!dwLtS_`2h0N%3e* z+TJ>Lr(XL<)OPq}J$z;!P`dP!@~Zz+k5X#^N_(|t7oc)I@F{w$q8|g(0(f=-yb`T7 z{u2Fi^xgXBqOYO|V8rcCjUI-uTtN3me*+({Z!`TF)2MzG;JD|&lxozxrTSWzuX{>$ z+;nNoV)=FY1XBtCZ+DsuX93=O0wOwXho`3>$mYnCjn}ANQg2gNsAn?hF$D_)R(HSl zdc9LsqPSV{r1CS>6!^ORCdEH0g>0O*L+{Yvp*XGlFMyMK%P*1V%4?LjYgTAin>zLD zwDYx-jMb(a^asJVo2`9ccT3Ds&3MgR?Ouus*2Fxmd05w9M$9J@N0N(%?NO7Ho-4}9H#VLOg`$ZA!+XH7Q@%!)QHf@gT`e3$5G4|2($SA$%7kpb6q%eQ+BIIC~mx8dx#IiWm7Zh`J)GMs5+?yAPT zS#uX#Yj_NKZ)Q{G#KZw!4f9C?jBsKvR!MgYIG}3WcVwRj8fzlA(8Ng2(ZoPHX%Bjn zio=*_X%b5oK&GM}JpYB~nAK$Lq&)_O!}th$Y-zu`wSQtjox4THN!c)kbS8szCX)|n zl1cugNd`FxO_cQ^c`%1|GHZO}%<7qWYc|!--CWOst#z^34emz{rmX8Ri@6mbwl5Pv zw|4V0g8{rz_2byWz>z9Wky_f!ljQU9dq$8SlHjXI#)*3d%bq7^sop;w&Y83KD_$gz z(`ofz@*X6C_qz?%i)~f)3yLk4#+558mp3+5S1u~B%6F5LXfloD!RndF-qUh~+hxHzJk9C!*UP z!z%|OmBd#L#pBcl=tiWH_{!Y)IJE(~5ve3T#J>7CUO6rRsdVUCyx${8NqoP@58Nn^ zz~OP38<9%lm^rhLK+K#vHzJj02#=XJAAyKiO>P7xiS6rsuS5Gf0+Yl7XuS@v90*Jj zpR@6Pf9^WymeY;EB=NXTzaH-$2uuolDLCQZ^U~CLXyNyz>EDG zH$oFuxe=EnzIXJ$3GW?vVw|W&15?GDH}XxLc3jf-49jki;v)+l)4doBo@H0M^V)fd?Z%2f?M%+k60t|xE{L|CSkD~u|{H^G%jos zw=FS?*HSlvkHmIGj1ha$Z7_KX-H1REt6k@9aMLewPp2v*R^>?pFC9dzx1+{QJHN)Q zza2GhDlIA2xEF2*jdQxEoS!Ee;Ah+EmT!nys24>SxroYOU&+szCV* z7|SOro>ep{ddu&XFOhvFJ0Kes^&Bwe|H?h++70U~vs4}OZHZ(5mHQH1UOec^JLpN@Y7hEz#hbY5Wx9!b(4Q-whIKE)$kck!pDR|uCts#^Ll63M!}>*S^;}%q zNA7}dm3q*hD^{$8<8)>5pg&iXkPZsOk@hj~%yL4U4zy_k46T`xT7 z$`#L`LwD2l!h^0{aku{d3k+=i?|~+ideEOMF7CPqq~P+PKUX{r?z;#4UQQ3Xa>e5s zb1#f*g&SSD=k=5iBdzzs)GBeKKUb{z&)$ohIQnzNtI5dwU^OXrqd!-?!fm||R?Q+e z`g6q=#%<{keEYlmK(gg-bn1#{;-vd=|3-hVSh8oSf*rjd_ak)bik0EZ`#~9;ZglF3 z2cqx-00O6581#6=pzX?dUeH9tK|XQy3wmERqy#xq2x2lxWtWKU9p0Vc?1<~HQmz0 z1F`23RInOaQmkO_JOT<<=w5Yxp7uw9XSsVNEh!$Y{g1+EIo;K?q*zqAQ!5^8jYVhm z_$Z0)zY9!1oBq#aH@;`wWgKC6+E5bxYxK3zGhqMSrjOCx4`GkbY7fHx`;KO}W{moI zb+dY)>Je3$@=v8lIaBem;u6Iu`2+HD+0Qb+EHmmO2t+k~5-g4A85TEZ*#|IkP7iv9 z#U&r0CCfeN85Rqp*N0RX9&`$ed7>~b{SaouN)LL5?LzH&_Cq+O7kSV#ES|qFb%0x| z)`Om5@j^4E6Be4K9`p>0&yQDjQs|opox);0`=Jwea&!ud7n()?!JQnP!s4BrM)ykE zP&Lb5T-E5Pajs_v-wF?UiN!jncmh_)at}I%#Ur=k2^hJh9`px`h4JJQAdC_Z`h&$P zJmN`EVW$WE!Q$C4{dKtA9e$E7Iv(@~i;KVcBuvO+5Bh_}8js<=a-IUlE)P0|#oOP) zc^3~P*VE#K9`p>0SDsIvqAQOFJ;UO5WIj!|b`N@n#q;;@(=dO_J?I%0583xmqq3n> zSS&A8ww2F7w^n=5Gn^?@wws@!ARP~ShQ*Ax7s9xWdlneideA*A*0|bdLE~0<&^;{P z+1_}T?ra`(4~sQ!@_$j|&^;{HIM07kHZ9I0Y^9pl4WY09)`J7{FG0 z&@(KS?6K!SvLzmL3X63o{&~=yQV%+X#RAy)JP5$$xd5kd-K|>&Lf{Y>EvE;a!s5Z5 z_yTBInFpQ1V#(qcC9+dit*|w0*)Y3d1zVxYJ-yGrec~4-dXN@+V$Z)v&w3HGugKGj zmK5t04f>VTqY|el=KP!Xk1w{4J$$lNy|X?l=9ZWo(-)@8VYhzMSZC}H(6XgqjlMQI z4Wd~!>9x9Jx`o;wwO;K^&Bw4?k5j*-UJJM7TU0ZZUn}=3Cn=s+lq*#5{lY1-_hdWa zw)|ogJO~Q=Tk1hWa*rig9&)v;{tnjQLJwM!#Y+@^p7WjWV9bj=XigSOYS8zv`jmLk zoGhN8>%WHyTJAw}vUr_3`8}*tE)QCg#mg_=KHfV?Zyz2sCySSpgj4kP;X!k|rgtg-orHuff!+_MrXPD%>XayhdR`9<(2em#D8^ z!zJnh?8kFo$D2Kxj>SWI~?w3h%8oyzh=Q%Wapc}z1)MAWN|M$-o(=Y8j;2Az|%k) z{gB2=4_cD#!eQS07DdB*(2^`>{J*zQ%g~Z6*0S`sLCaQp(2^{!{f4)xdESGTWbq_3 zyn_b;v?Pm1c=bD|WoS4SYZ(SYc<&t$)iMtnj>QLo!SBLBV6g`c$3~%0cfQ*?63lIA zGj<3|zWOej+t6k#7QmGEKmbJ^v>A(6dGC9$$~!%1E*1~zkME(DWuAW{M=h&;A4FB= z$)Lr>V{qI1sAUdXQmkbdS$D_>t+9vy*Q$1IqTltKWBSUp-!#&AuW_#7jNy>M3c#|; zXs!Ml{T$t=y8Sw<_Fe6EZGz?rO^rsc_NgbRo>0}PjLKum0>z(-YZPJ!_Sq5kZq5V#>ba< z(fTaj@|sT5tDhGQ&)w~UfMk|}Fe~|sr(uRUy=ZtAmqa|QZE{y#Y$=U7*{1UK#Miv@{e&`Z^C9qs1i$ehMW^J!pp( z3**vH@f>ggcIX*7u=)M{DIGo!+M&h6H}x}IrqB*8-X?LGy6-bOd>%ALi(9;HQA+~p z{2b;S+M~rQ)eQCieq{CM*l09LiyIB+f&M**(dj`ewU|`?1@;%M)Z+e@e1XRTG*F9q zQuXTDoRuE5SlfkjrT3RGtBO2mvF={HB56B>0w2(`l3EX%u*GMFSHHxQIhwG=C-Z4v z(b(V~v|fvc_qwl8JJEVA*3NTZp?0F-TCAPa@s^amVey(~S7YO*P4n1gxYmP~Y;hOw z`5L-d??FrUETP1QeA7A&PU&dL7N62D`vy(x20N z^wV{p>-Oo!X-{c4YX{+0uU6lwUZVO#leyTj69HaQJVy(g?zhAyo_K)mF*}SN) zqOO4FTsBo<$3lG+nVKk#O|chPAYP#bzC{m#GufBQY2eJz>;TrFV*yZIl_;fjQ(2PJ z(<4w}HluQN%m=EU5~bvc5XBHaZ4aNxPG?_X4@BtXvKfi9BNs>(4v{7>68JK--AV(o z*@Ce?k%VP4lCq9@KyuR%$zo^hEXgT>FVlzAg4w}Za`aInMnuJCW@-nLVP9?PNBn=a zngXqa9$+}e&?;@1&FBj|vZ2aH&$K25NUX`J=5AR)=uy@Z%w{AN9dm)C&)HUcpq2LI zl)%@eLt2U1!B)=UT6v~$cRzC1kF6#JL>(lZKeqPiN5c=&7^|r^3!^CQm<^SD^<%4f zBKysfY%{ZORR=2JvKdKLM;4IG{i)RvAW2D1#h991y=Nqt%}5G6W&z3VKSA&DH?t$z zmQEuJhLW&sMpD!<6G#+4w@wU@q$NAjB9LGuST-Xm z>zEECCw^|V1V|wKEQW{-Z5Tw3gltCQ?3e~5eSc}45FklOP78ecJfs%PW+bkTsX$Wy zOKWnVFZN`sIb>EdsbDrEDeRa6B+vZPC9(A6v`7-eY(`SiF&Rh_e{Hn~YDr7Bq_XeQ z^9_Son~)uBSSFBcILjIa-<@|PTWsMZ!R%neGJxdev#eqCQ}ysMcN&V4msl{Hk(6{e zfMoO!ttqr&_6$1}P52xOW-}6JM>>$~{-JdO&fVibu(=C`XvE0C+%4=#gF^585NwK_ z&Ru$Z4{Zv|W_&9;Qh~($Ba;!ZvnHE+O!r_mBPs5%1IgRJwoXW~6=eO$)7yWizU>j%1)J_@i}F7gdS_)<8NzL#bGH zu!R$W>h3@I7N#YqSZUPEFe=PuRIZK*K(+JN)}(YcoG^v0u;PSM1+#-xNx0tj#a-df zW9#}&v08A9xhV+or(p_$jz9w5_XBbDb`2Y{wfx|C##C1fw-vKd`j z$2g$7=^U*aHI?);i1%wr&h-9bLdFNosP6 zEoA%RvKdK5$7moKJ7cdMRM<|I&Dcw~A4;2+Y)c8;!%90wK_TOxt!6AV<4@Fc8k#$W zR=_wpJ4QmG+CN(-6aWMKE!9Q`hHq~$n~_k^UR+dDRLo#gfpMSVKheKOr$BI+tF^Cd z4Vno6e6LgPSKKatL9T!&Bq{%!G=of^UZSd)z1tiqKI)SB3#&FX=i8f?=R&P~WYn|_ zI`yzI5whtT$46u(wIig}7Kp-{5~-HiSsQB_Hms>Kr!EMqh4dOJ^?^{_)-);?2Od>I z_)Z-uVTj*Jk@#+$yT-D7*4%~lw(xke=^3D;_VnHrJ99!0JmCH2p?LTKv@*g9bk238Jgim{jr%#i2Eu&2WoNJEN)9VKm| z1*R#)%C*tB()LukGxDX$-=ic5^Io=lV#K-@tdaUtrtl9G8uucO+6pT+J@3$cfv=04 z8ZGsShG6f(-^nibCG$we7^y$4YC^=SrqoOQ^ROzbCD~%85(=vd4r5kUl{saiHKhPr zWrHI#Y}2@GMJi2>y}ETE`Du)lO)E}{SaHQzsee4H*q-cwvr}lrBQr!B9Dz_5*#0q`$=M!MeZ(Mn!0WnGvC7SehIkC(R?Dji+Nbd-qsYF&x+V zDLFJr>Nm)o21^%=Ib1|&&Fpgk_5zws@{^=ECH_}Ul7!*q$3$YZdCj7N7E5090(%M1 zfoeyFEe+Orx-xY!?#hO)QgxyyF{lr+$>a&FmeG-FS>IG+Uc7EaQ%RGHX9u8JI6_%r zR|u)4D;rm$u39L>w%0_qG>nQ=OR;@^b8X)I6*bj)VYR?Sa=_9+r*c^9cef59(aF+GIu0WvRY}$+OMPr00$2mg87b+>W;+XH9*|5|HYze#iJd%<%mg+f z65lnI3kp`wFP^(PznN<@TvwqYSfi~rI!}XL>CR5&hlOUt^EW22;gM=-$trQwmCUNO zEMFeVjvfqCldX8(=4uIK<75l=g?jd|F!H;m{Zg#Dyos(L*Va`In7Q6>QU#wR4-3tDKg4gDdTA(!P*weaa4Bggy z$r7VX{}}&*5aSc0m+8xOW!lR%2h<&^$CQsK9+H16`&vfw53Cvl0R!Jt@5+%D^^YR$ z4#_qd=NwZXE1uqi;{-E=&kl-^&n8nV_nOJUT^q-!c1R0>258%8?cTui8w>mdV(lBBkM3m2VxF&9^R) zO%7E`eaO%Zm`R4o(r9Sm{9p^WXGlYtvN6@Qr(+9)%Mi2-_gpJ}uz+VxPGv|}0jJy` zr`#z)PE2jBcu(XS3F|8CzZN`ua-8hsnkmR>UXatg$)TLg_U<{r)&)3Z!|foQW`}UP zdNOdzk#c~OW13`RO2PEoj@xUnIbHhAvV%-ezmH6lD%87nNZG;m%%6(w>7ohk8Ow$Z z+=>VI5LVYt#rDhvPA@IrOUDpOGu^g_jA2+d$0S&~YYY=fW942t%jN{zcY4|0p)h&7 zcv$iL$8{BWz_HMpO3&jxSVL*D{68>RhdLzSy?k#e@SYvy-BPue&JW5vu(t4H!Ln_3 z*yZU_jpt2Xs@hA(A`3WqEB8|E>SAI8QH89vj5o{XnP8QW&9p1C3i_QR%>s@!)qB&J zLCgX-*0k<6b*)6fY{rgdlatkZmqG7l279-4#oiGLx|KJ;0tV#&-brJlyb{p%Dzb_eGcK z|JL8ApQrmmcMyU%zoorMJ4*AEre4!q{eZey^|$JJRW2BI_rb%X=OHNcK>0)RO1TCM zy9=UzBGdCy9jda9EpV+mTrN#Y53XVKNETwDWosbI4qnDKb0)_B$u^=PG#ZS&fwC|% zoW(XYo3SYD*aQ{NuRw!x7nOrEJaJTz&8R9mHUic46_Ta9E<1cmg^G_|1iPp(n^Czs zHUL#!FDWU|Nm%dT^p`@%j;9J{2V1xvI~jxb`pd1G`(@ChCr^O)*i@XFk+K<|vW|67 z``}nLt5kn2s2+)1eXCe+}Gpf>#MxeT_kCe>nq8ot? zmdmh#>B3Tis;Z89pjzHnO6{hi*NCvup;Va7s0usk zfa>YK!3hUHgB8>P_T&(0bY%xyxCW>O_v2bLf8n>Im1j>U6{?NTpg=` zsKoeB%S zU4b%3rH1yhU+of2>6}`vx9A322?-Bbx9RA zDX@G+sEcJYs)~*ZpqkewsHe~r_&FVq9HDiwY)0kkC8r^>aF2 z5X0)Sfyd1pY+(sdof{~Ph2=6p1qunDuIe6qKATZhbQI%kK^p;Ss@ew2<*%)MVDJKE z)8Nj?FJXK(W8vy>LB%KHg93$f7_0;i&NRsmMZxS~bBll~c2H2Dl**E9b?^%x)YX;E zsLDE=Kvgp+C{X${d`K*0CkaqtHluQO6av-LgMtF3RB7-vEPlBRP+@kkg$1mIam0Vk zn&{v*5-12K;gH3Q&t~)$9ZP_ILjq3Ez|UYzK*I<(jI=SB&8S=*i-GEmgf3~q=@8se zJ?aW(2YZ+gR4IeIdI&#*4KZZlq)iBBGpe$VJfLbF+$BwLX~PNH5jJIjie(4uS_D*| zL0vn8r(Now4xeb03bPp%y|Ye;T15|Xi%dV7yr${K&yANE?S{7u+YKY4{~O&9-Br1u&=n_MY}P8NIdv0MPv!vD_5>|xer3;9wmB{@pG_;N0? z=%JH%-d|(%OSimHUs{vm%`9*^x{*z z0340~9jre<=Ae5NpG}slq_Lm~_#`jlXaE`8+Cs=4R7n$H0Pua@zcrG1qC?2~s-clZ zUjDHj|2sC4-6{EOvPKQsTIR)<&?lAxPKf_TLvg3~0v`0~4G2lc2Yq6pA=J8_F~&!H;^Gfc#zkIy zvnLisZzG7p>BTpDVxHK9Ee7aYu@~Rzi6M!I_kQ09#S6VAI(TBJZlXyV1MM)LfBw*R zEGb-{RZ`#VvezvMyltc>puthQqhhw1elx8%o-x)LP8m|8ebG_+YTa|XIokhdr)nP3 zq^j>$C#!B%jaFW#OjLLwBJLG(ldMgqj@k`4#Odl?QM;#@qR3-2q~Q)Tn25nR2X0l^ z#pp4=`?JAT>aDb(fuCiAv8}r_Iezi35tP+rU^RVafEAoX;Uw{mW0eW4{sXMw^bhAniVkw5Q5Ox*Dm?@4*vzlVw<=hg#1`%xp^Dm_0j#oS zNy7&PSi$BM-a!l5HA{+%<_eHq>-S=x9620Wev9!koCoXJ8A z12ljh>+#6LH-IG0W>l#_HGg)XW*h<7zC)#HrQ-=;Dt0~NYQ8qW!wx)N0v;#`=rLT5 z13>o*o#SFx60C7M#Hn>Wo>wqT)T#FfINw?hD&;lTrmL^B`wo&1v04G;= zV5s0Xz%K?cirvCNPH6#yPq&!K?b&R&CjpOlfCo;J!#P2mOA1^)dJ-k)Frs82D$D7r zm?HcFhNzH=DKw{B!hzX&SAfSv;PCD>fiwQOEs zWWlNetOD2h?&dJ`41#JxS+UY=Wc%+<0#+Z-lSVMG2fZJo^&{l$G&C2%9^i=pO@fab zf^xv`)`@0EK??O?FU*yaRQ-342Ugp2r4a#a447mQN64`XVqd6TEri1b;s)OrV7$>;*qp6zDCJ75r7-N8O?gD89UKN`bNPQe|qkx5+0$Tzn=q>?5 zqrilT3kJ_Bm>m?xXkhs%uw-q8^Qsx)5}|EHG)v$f!B+q-3Un*+6_C7zYpam1N?*8 zX+-ASK5{uM8Y4_mU@6O_5csHp1GRap)@+{LxGH~UgA14D0A0}2Z4R-&Fc%L+tprxv z9;IR1X~Q*gIQ0D4Gna<=tZleT0(2AprK6XT4jtHC!py;Dl5qA?+<1lomw9J{T$sN) zxDs^L&9VV69NGapxf-|}KG;ItZ@1Do1`ABzny!MVf2WPRjbjZj88#YvMW2W+*Z-xz z0o-q2>#o$L2i$Kjfcq_0eL`KK`dxL6Y6iZmuqj?wY*!4IKO?V~_m!QHmCF=l`p|0^ zs+^q^)%eF{(gZdqFO&N8!#PP^E_NF;9=SS4K%vE#OUZ&l&d%Xb==RHnoJu=~L7@$K zlDUghVvp(yJBN0g&<|HMz?Wf zrTAc_V6zYL4+QvPHe*oO*#|29bukqP;|_Ms5W_j2 z9c*YE&@5acO$g8co+ zjHakl2Q;sh1?B<#819dvLlDdkwoMB(6PE_shCjk|<2Q^T4P-N#icSsCT)b4GI0$42 zOIoOJmCI%{&Q3MZoGuE?1N7$E5v39;H`w(cJ4mBqG;w6UOBxWU44!tGas3S=#B4@b z)u{x+LoNxRm)H_;Q^LWwN2gdeqbclE0L?G1EG@$|>VrTlwN-wWVN&bxGxQIpSh-sJ8U1}{u*|Va@gpBl;aL&3IKT7(J;WZ#Y%2pgWSu2yZJ6~ zJm=O*!`PJy5CvUVn_z1K+|i=Na|bAe10X$tn^up~q}Q&klgRtMn`6kNCoWNubG6cV z=u&C0OBr?2@UBWza7W}D35PB~f1q)Puhfp%9&|fLDosv5dC4U5Zk;q0swxRqWvLHJ zkDd?F*bqhx=R@@E(18hgHj&=*eSyCorB@u}KE6R3zKESZVX2KYHuUsJ^*Z>X0HB5J zrGyRFmaw+a(nQvK+hB6nZ8X?0{%{RJ-RKK%7ZFiVUYKI)}ScBHpJ|W zeACHUs}wgV@P-4ffIZ)?46&gs3W5wDwFDar49#dsO;d|E}%a0d=A@@O@5Hgu{3HZ!t(fBgz9e)%o{i{&_}&AyNeB1ngjDrNtY;?H!sNf z&eU$s=`a*@%7=2M4_8wu$RUg~mL|)eXqiYVZUJ!mlr*Ur5vb#%;48650l4t9iI^rs z;QL+1@rG9nEdX42D!Mj0T7OIr7#R5EdOig6b8F3-CpBv{GW9L$xvK9}|EHR)d{221 zgcf*F(WubNuaQrdeJa}vQG_0ceW5CTl^4VJr3r&KoVZ$YfSU`W_lX@mL$3ihSD6tV_LnmRJYI`=k% z%c|Jxq9w(iB@7`udL1xc>ctR#;`n*1)=3bW(TgGc#6GB}*MSeJ$cxeY#C?MgN>Z;G zM(-1Q%{H!wZk2m6dY?Ej%uDMf2-WPx=zU_I=!u)X0R*thiy{2PvwQCbnB7kA1%&YX zegibN){7zhrU<9j+>H_hj`d>nKC`goJsYJ|001qZ;~Ma_aw{#Eb6`PBMSLKiO$Kg4 z6vTW=77+yjWD#C*uG@qt2#n?z5nw=TLknR@Z6`MYz@X5JQT+mQg#SIz$S|9eg^b=T zjR7(Y@%OJ};V(EXWIH7*@M5UHe`}<@C*J0@&CtkVFUI|g2%MoJ!4n+cb~1j8lmsXU z3<4Mt1wloEUYHQFOST|-1tS7R95--0rQ<`K5VDWA;JESO0r}tI2nGJCo{gN+g5!p< z0waoqk|9)*=SI9OIBpm?Fya6JnH`NcA!KJ-K+y}m7(g%r8A;h10A$VGiX(;b1OKgA z473}<|LUzcQW#7y;z&WWY~hD$3;Ag)j?`2-=Od03?F~Z1Luy;J4Mz&Y3`QI&IFZ=! z!EgxK9orywT&Z{Rzi1davn?P5&2|`@A}@v<3@nR0BYJj&Ct38Y#AlNg+W~!3d9UW=b+XXKaFR&Oc~y zL15q`(KGd*>o3z=bg$|*=@J1Fuu^N(+^Z>7|Ea!CJwtU$wOKV#c|uvCRKxda7s!7A za6pFaLpV*0iF%&C;P0y{>ZI_@AExdDOCOxy03HC=w17Xd+bkQ*X7||QP8!=NciKL1 z)G`|C$qlz30}W;~nzBxaYy^Ig!Dz-j^kHp3GGWdZla;;fWn93v(!;n5Trit)ady&3 zN4H!QFbKnssc@zYv0*V*n9XQhow@p`!@H!3?3uE8mlW5ZH5=}YX+g_SVdp&HT(XPW z8yE{~m%~3q4w%h2FYSczM&$S|YHwgP6yqJCHJBZ24Gn43Yd33-jm+51nqvbGD80`G z3}Qu{G>lR0ZfYq8cRspD)41q2V0GZK8SAo67RQK*xO4Cp0B4_Vi6#dh-mRwadL*C% z3xE&0x&`c6Hsj;$oDFpk+rxwmKf+65h1$^dAc}hBI7^0ioq!jE%KXP!tWD?X}-Z>uF zKDS@kz_Lyn1!(*Mq0q`YY22UIV4-1qbVe#cU>q>fI_hBSq@r4}&WIlW)h-#S^!wHM+Hh*0S zcAG-)4tlT+Tsr=xv8T3P+K;UNKVV$q#Sp?`o7AIZ#~^Z&7I%5KQSM?<#9jrWDEDF< zVQ~l7Tm=>hm$&8oJQ1({$yLyVM(-9{e6DbWM;(@CfJI_6Eh!$2a@(c-$sLD*ajh4F z35&JtyThPmb4^SNPNOqWC7$R6azkcz6&C}(@h`{2h zwb)Cw%v*o{alPG();^2~EVlO1ugsD}ABbwX7sCRJLk(B>Br9kch6NUDnd~LdvbQK> zmls0;i~IIi_WprMtLj%SS?Nq|s!nwU&In$N4J;Pmf~{?X$Yp-0soaYJg2hwwWj`7M zF+i|bJJ1j~ryUsAdNE3{SUWCl2kmfrFCa?rkL_p(#3;dHp1D^`lkxL;&%jAJQiK@M)g7$xnU=VyN=r zbG(1kkr;3$f$x@H%hGM>HXC_-qco5_b1jIv)Q9i$#EXXZ2yV^zBu~6(R3E{u86V$? z7Y+RO#al<93Cn%>=uWH&1Fr*3sPW-DJBM(2*>)ZH3F>|Lv`!r5dfECN$)wNqCMgAzLop%v730I7BEO@ zVkeq(lseIT_^?gf*l&+QW7qodOkP zozR48AHHuBANJ_%_srvs^&#UB0hhnY#X4wa_zESfJ%}7`VaT90rf%JkQRhKVLYb;4Gs3~4j1?C_= z*etx$001z)f9aWxh)uZ5!0W7Z8oSC$=6@t%aLcSnwKU{aZZWUgP_@X(LU?u40oE)S z&Lp%J%%&FekXnX*%%UjHid0Lpt+`?I>_VeGUrQi6yp~{Ta_E{p z31q-0G$QTn-7_OqNiO;XBB(erG(t0iJY7W<=sywR(A4 z-pZNjj?F8=xB>FV0wBb283wW`Trfmf{!iJEOpjDci_N}nV?*7X^;v~IYQdL|)XdCx zg?j)QQp?)U*pN(%RLk7P+{U$4vr=kmH-xeaJc4AA4ZG(N|2C4VrK>bK)VM2w)O^l{ zWNM@;$;r=gNZ>^veH$6T({#-^3z2<+L(=s-Iek3@9_}TzYDv}?(iA!_Qz9{5H7jkw z+8GUXEmiZv`T{jUbe%xV$?lp0*$f!dolU;^f{n}MNVQZotzrFW~5qXWv83hRHalkW%aCuzP?1%b7(DHk23jM;0+*_X5(_# zv5U2&<11+j)t8J&^^&1q2L}hAYlcl_3(5aFI5_Ng#(4kNOkW(4cy4OmvL)ZsB@L?`bCzV~&u9s&CGg@itSkIO(2!bseaprr zEmAFc^(oG}RoOFFEw1lb3w0JosD)zn_eI+ znvI}5z8hr!_bjrxEmAED8w%#sI7&)pX0fQbT$?+FcD?uvJ~$2G``u7B2-Zk^opZKq zX=AmeyKat|E9C-TTfl0ZQo9ET8oKe|QxsY9$ zi+u=36JLDRy#W{favvhl#5ahS-oWcSg3iSKMDzOGH$g15J_MVIwWIY-YUlGIzDzta zKfQ?>hmbNc&-riRogGnR;ye2TZ{eLCfn(wcH|TBDIK+yHHE#3UsBt_z>|aI>E$d&u zjiN$Wn7CUL-hpma`49>AZ?-@swFMIQJ76#0=tC%2q43V0{KBp@VtW^wQ0hYnm{#*oTNNVLJ|+4#bl?Y3U+g`uVTF-@gwa+;U$UEh*Nt><>`W zQfbNaYg&@CW=@MUZ^_KORdr19YkYP}>JSdQ{6i@tS+D#is!BE~O1@9tApc1Il=5!n zRm#oEQsq?TFr`xQx#Bs+9g2exE7_@VX!nzo2b<$}s(*>TD*Eo|m-XxPPUAK30K8i7 z&?o55={|~9Mh^oQ^=ADYhOql)QnQdN*&V-MOZ5gL7VE zPI1wOxrK{n=C8NsT8eTEYZ8Y=SXEtHv}Mss*Q)ANLp3=_`K%y!(4>ky2T5XOIEAxm z_MDdG>6T1`Pb-HVM{J0@+e#0tz&HT#Qx~s$MYRRf8+%TiK zdGo?qiU-Iw-$Gp{$Rjklo4gH4=A+>h4UUGwjVsp{tlONgcqIJCx=rRKP4x@v8dlaQ z9wZZ|m=Y2@!pm?%Q`|>7#zMc2llN)TN&bK&^T}|E{6=^XzNI#`q^d#jMEH-~04eS# z`BY5zkXvA6RdoiPTz_AzLMR6koYg)9RGvgu?yO{NhqWoHSeShTU&=5*F9$*P{GnH2ux z!YtROl&ZQ7ElW0OQpj1#XDTsK*{6{tnxv9!ND?!`3Ay3cWD@VEQ1mc43rXUYSd^O? zTphaqBRVLP;R`Rr%{QHQ5NM37$Xrmfp>jp~syQ>c38EuYzuGZKrX?kiI5b$&S-Ze& zZptpP7dLPv`-cCvDb1cc&r)AyYk?U3cTz5K=IW!>CL z*L>Hk=Gl$f_riZ%UX+@;&XT{Rab1D-T{4UgCqTl0++`=w3d#sbhSSq`r-%q(LkT=k%62RRB!;^X058y$@+R#tDc6l}2@A0rEZ ztCQ&o$BtWvi~&9Ao@Sg9Y0{BbFSbl}_@t!Ud1FkL>1)$LQ#yQKV25#(;dw)S^k31JMUT_J0)F9s zx_cl%+c(->+OgmluGhq=A6A#D&Z%xva9)y>^FDN!ZsI~{>MY6AChh)Q}{u@;T zX78@Qaz7%QA{+wX`7OM?CB(PI$c}L*hqQs&-jC2G@$m`G_Aj4-(@32k@l9e!S+BFy zQRYW{lbG?2v-HsISI{Gc_;mWlSvZ}R`w`z1p>yPrZ%Z8O*32K^gj4EAe3SUNdEF26 z(CtTjllahm?gu<{BeY3;&808clD5pvsh+u}xTVO_$WBemeTa1u-xluq5pD}heF$?B zpE~>f1gB1y?*b4`8-9XoVW|%hPGVua{1XVH#D@r{!NSwsgr8}AOCN%p#KYVAGakDU z+$22i5_%{t_}Kke{s9Pk@(UiM5#c1hSAdTU!iV}0;Uq3O z?^ir>Bf?2MA+P@x-D3!D63YwqEdDoWY>f{QPU2&B>2F|8D)J%1N!-|{euKu=`ViqH z*0aRlLC==?5aA>S@wNR9Aih!`BAmoi>zm(UYL)sB;Uq4Z^9PhH@FBQKtY>IWdiW0z zRizIRPGTd`Uw?p+XpIlSP1A(4d)c4Tl=uc8Vwq+OOTPH0G#$EyFeY)gru+rnD)J$W zNjy;AzhI!8K148y=gN839=>l}C`fm_bsjrHzwBp9z^fxrN&{s)Iigl|Y86r#! z{0A7je9LKZ@rAPF9}0={Eu$sHeY^J`=v%q3f|eBPmf;*;XUorDI~tBIIVZ(x^`=Ep zyJfNPiR7XA!**60W*f#DqNBfyJ{5g$G>LABUK%|;dPKBZ|0O`7kLj<_Z-6(~nfgS% zO!tZI8Ms{@(5=-i(WUAJYX6EE5c9G2L+yV|o!T3nV$?sVUxzOS`P4hq%hg%xF{{;j)wimXs(Vz2Ra;bLs%fg> zDwXmJur=SQJfvK&EK+7D2P>l#A1j_#998Uxhuw=6cEtespYjjno$?#y62v*nlUwEe zWWNJY>~Yz3vP)z&vRqkm%+v6Ye1A-1%;FgP7JJ;_DB}ODEkQQ;#Cyhl(`4lGn0TxZVena*_$H4g4@t+;_)lxa$kT~Dq( z4Xm#wkJ98Qc?XirTfzzX8`+KFKXOMX#qGrW5%4)e7Sg1htf9#rq!p6PyTS>%W3}Q~ z_>bIKQgI#mkn*{P{6&*%$-s|+-JRhS+*w(1bNG+k5m#{&Sqltgw~_-ixsBXP*#%pd zQ@C->tToFE>bR4xHrTqZA2}&&??DXfv*KXPI=OeDuB9~*grCgaGLlwDv%yD9jytv#IG;<;%X=GNIZ+2=JG(#iBs zflnG)N|W)V1(M7$;S}6O&oDOp$81MVU4hHuN?kJFkV;NbK9k6IG)X4WbbeaMSV%J2 z^{Hla(YzX0o;_z>F*ohv1|V1NM^4Of{mD+sr#E>JlEj4YqMUf*29jQ%L(#ruA|#oy z;YGRG6W1^NNA5ly7e|gzK7GhzG#NzRg(NYaQEaqiWi?jS&T=j1deF;87JUIlt)z}7 z$wY!A(-BU=jdL${H>>Gp$91Hao&1mTnN0qsiJ8QI3GA5BfTQ5Xx!08Ny0~%fHJvm8 z1283AMiUFUjV6=Gvy>~FZyZ-{M0-sQ=gO&5uQW2`E8vq#CetK?6ho4k$tc!V*_*02 zJJZ%zaZ*yVC8VbNM{bx>YrO9#Ph9vXea6)d;QL}p}*GO*KsBa?QQ$E)d!#9xJK*m9md3QKFPD<+A!hhrz z9rdl`BFg7Z(oU0O+BpdhLL;n7}t$%SMd!uwmRLl+VDZVqND@>^n2xYf%q~U~NF}zW_GTNqp6Rye{ z-JQDW+RwFnwG%WiYc@eBtjE9HBb4GvPl`Qcv!Ji{tN7oDY7SIwK5$UdT>c$ ze6b&q$l@c@@s}=*Cmp@o0H*FoII{Q@B8$bFG$N73C!6K5ZS=y6NM!Lr{K42Z@Lc&3 zi7e(hsyFgP5VDx(_TIpAg&#r4X5rcP%ie9NaEV6zvG};SD6WlOq7i>AzC_<1*9I@I z{0Kc3AMVj}HKY%Szrm0AWAQ(A_Ti~U~Nm{(fk5FXs z#V2+^8+fq%2t^hvTkQZ;HbfzdrAV*SJ!P}TkFexv!ih3`VA~WJDugAAE4h3iY9GRq z#oG7zK+wKreuO3e+toVcv4tZ&jZ}C_&R#+75fGz&C0f?&swu7-=02`X^zv6xMcB|-!mB16LHC69Yed;s6>!msXzMs zYstz)XnmnyPfLom@yv|2e&lV+xY)0w#l`K29|B8Hv0r=sl55|BRpIg>ZE#Npqw;Rq zoG9w&B+K&l&KxVRkzXSJUH+at7J`C2si>FzBzseytoTRKCeH<<^yBjD6sHw=3W#67 zcGuXk%G;IyRZUS1RTiqgR%=zqmFdbs%4YRU)l16DRV6Bg@-y`)2wJv@EIXJ7x9d5w zcG*L+i@;&IBkz(q%u)9AV^V*aoP6+@lpvFlKOsqs!gIu2^YWGRb7tqRPoKeEqvFny zmmih}$>aVZM;~uV$SlLMbFya?ug=6ku=}k(pxr@nMk@@uIRL!v0t=>>HH)S(7 zLyUdNvPXcj57|zWIO2sQ^CW9}W%CAG^D5hlVkhtQeL4Kc5_9wXDs!_lJ2zeXA~{R> zyg*EkLh{myyn9-*6@Uit+z*QiyZ_DJSh%5nb%`ytc?CCpRCgd-?nh27R1d%`0KGf` zvjCENVHN;8hT7mLxFJz7ixl@GCw*u8~qdDeA4u<=~wAZx+A)5 zxW?_*rfA-RYg|9|qv}evQguY-P`<9*p&X*4Nt|A>jo#%)AguU|5I3xCJZzf?gcWbFW=mT*82UYqiI4QTGdHs4_^WtAVg!%vV{rZ=2KKzg`;b@0v?ai46@jo3l#uhu zCys3!1A2r&Sg{^$y{{FHpJSmNEF71yzFJSrbzV#Pdf8js3{m{{?A>z#!24dJlj`L;d@l@H;t zV&yxPgvy6VSh4bOlxX5p%#l_~4 zQIo(tQs}qPl44cMS0Ct4uA0==3-rxQi;MMb+lO%7`+ibe{{n~=c_e1K>2uS5Q?l`C z<4R+c;izF=^f%G_;c3j%`Vv6lUaia0eyzO{VphDV*`XPwenwrU`a^YR|T zk7yu=P?fT*ZSbndk7yt<<2$Xm>L40Oyy~cJu<9)JBN|8y#c8&+O#+J`qJahr+j+`{ zwkbpdiC3M8c3gE32qa#0Fc8SKb`VviAJIT!i_>X4Sez>S2m}(_e`lwH{kO)CKp?UB zZ%PI6m--P1BwlrTrNOG>^j`oFs52QR;U#IH#7;i~fyCqbR2nWjYtO&zocXzJFv&;< zd6oDP4J012t?4jig?>Z>okzj$ySN|umNItw5fUVB@!I_t_b0O*P`t>GxFE4o?scGb z7;!;jE&I>`TITX2BuIR87&H>w5t4w3lhH% zN}tkZhs6USLE>(;Pl0Y#`we-1wev2ro!RT>0e6KMm(hP z(_l!;{bjVIc>d9IbkECXnZNY>y7|hqHrwJ|Q872eefc}nF4JJ+!^RaxmEmT?^ypUs zm!#Jp*XQYe)_HU@w5PR~pxd)a{j0i7Jy7)@)e4nbc|>VbyrWp9FvxF{FOvNr^U5Yi zy+fvVTmhJ}cJw)lyZO#^=w?Mb`W(f}BYmBi)KZwbV$tfxLVI%{U~XwUIw8g5bL9*e zpTc%@LW$n`goLvbG&vlR3im<$+mkGvS1Su1WD?I6ey&!`gOqO^Vl-Jz226 zRJNmQQoJ#Kp9LFZX*;?m#lyE`HVj{BJGv&tCGVmo3);~WDPCXj;=ZbR)$FvoH5(ch z1za%=?dX-9EfibT9Ps_twxdH*ER0v@fG{?-qc5^Z$aC7VM8U>iiHOv$GEV>|jE#hTcZ4VqZoj{ZmS{Ka$g$CUBXc636DS6q0on3&W<)P?Qn zl@zNZh8yzaKuyK%=!z6K?42Aq8N1ri6)Dz~1^f05Bn#)E3Zg$!tb&)%qX+4BbVZ7# zhzDtPE-y8q3GSy$GM?nm(!KV<>k;@i>lC{{t-;_q4jqN->|_oI0IKf3^q$IIK%^C-5g zEnWzgwc2*{Jc>ni-$D>oX}gB*lwtu4TLc1dwX11K@zmO}h;H%iDq2!Jq;D;18@rR) ztXEQ-^&Hb_({59O@hP|oYYjIU9MS)au8-~wd+-w7Z@O!BQ?&1C_rNQi=OB8cUVXDV zPjyyxr7A`FgmSgwH^nuIsq&BIm&zx}UXyK>4T*X(Y9+H-)Bi1PM+X7sr#IX>nIOT8zc*!1ZKN6%;RTN3*ebJvmr~>j_$k#gfDI zM6&`IH?*UvSiCo7uYkR&s2xqk;w}Aw6}Y9NsaUKevDKg?%i7UYEH(#jucqd}cC-@r zoND|``>-0<6SNYG*OSRBaXmo;v3NZ}2-mTdAgX2UXdo6h_RLCXY(+a7h{Y?<;#Cxw z)sD7daknOX3gN3>UIk4kZASyKxOlG`)VG=EUsO=v_SOJnXFFPj#k1y_8ql}$_UV+d zcqXC|e(Guz8k&a1Lfg3-gjU#&reU$Zon8$mX;(X%hQ+!w;n6(IIeGsZf@7lswEFPG`x(iiAX>gH>o)n;ir zG?U?ljZJlzYJ&0>zfw% zYI|3(EDJfit1V97U4WdNyk{gOE&<}y-EHudOCZM2!lvK{aBbc3`ryO5@TG1DR|WB^ zSaxawElt{Xw~ePfih;)i-8|rFt_{EP8p;DAO$NV(L)#VLVc5fXxPV8-p0?rt&)Ij! zMR{!Rv%oIP0*k1zi!DV(4ZVmlqGDG-1r|_1I*1f25POX*CYoHGG`E_Y-n%hIOffy0 z-ec~)>CJqTn`UnEd*-~mFf8Qg=f^*@%sc1I%$YgUo-=0xiF5I`*1po?V!V7tPJ0}; zOU_q$sB%Gd1XP~VO9zmimySECu00DJ>v5)$wjy>#c- zwe)yz6EAypL~Et@q!z=kZ@EzKw>2A_jwzfH@sMUGiRMES@2)0IfDg3poMdX@T)%Ua z6zO8Hn!3YNC^!bgqez~oqScC_tO=gykUA^oNiCc^TVH>o?KJuQ2~&Q`ovvNg-> zH!3wX)la;#vvnvcLeDrQ<7F|AM^3yD9Jd(n1!^xW#YJlmN1<%diHp_LLYKW^q!dji z%2cwebyU1`;R&({iHRPXr17zF(ov}vt-XValB&^Se*UJ>s8|M={AX9|@Koe2pDUJi zNTT=aK#(H&bVR3k9*XjbPD=4gcma4-T-iDbIm3q~e2Z&uz~LqEXt<%01(MO|{c-YP zRyA52zEbOh^TFbaE2W$vZ+H5XLhfQmE-*Xm;@#E}O&rG+IAC`E#F8mL8kT6jvUmh&9& zsB3M-)3j(0@PK!9Uk#ExQqW6$d3aNcm>n(Dy0gLSOeZfmh>VVxJw+`Kp0tG|JWq^u z)(L*yDRl?0S>UzO>QSN?`6xBqcXs22K||?vo^i>OTHF`Ejr4IQSp5W6-Z55Iv9m6u z+OZ<0t+h|6lmP}|N+6=QZ=qVv0QuTBkCdsiC3s$n>rg^GGme2X$@9v6XRYvjk0#}G z@c7lsBX(j;EFAaxN(Qf#;U#!_OuS1=&D*2#m<}E-d%S(bu}2$aqhX#RIhlb zrh)1YP*ESjGdyv4Jk586B!R)FeusEHeI)ZLE$6A=vGFQT9|4b)?)@xI^F~Z=ht+a; zQ+G%+&FpvJYEQGqNuRtiDcy_H;aj*XD@rXc-M)pIbqY$g6|AV|CP>e_aq&LQ3a`K9 zSGZHuTFtzvJ4$sqcpaXy+cSfmo}xLY^!NtD71}~)Jk#lnN zsg+urGZf#yYGuS;@HnuyC2;W=zpLcqh*QmPn>U+Bggq6uH1tfU2)!ia6>Rf+nI13| z1pgWA3Z8BJ&bZImC+MM|`G%hj!jPhWOJA+;g`@Tv0iOo!3K;MIrhgM$OdZvg>hvOd zcwFM3)iyu5qRC>G`;l}(bX=x+vO9(gS*U5()>9B(!V}9Y=cO`8}2r}kZ z=@CgS!-RDu7L@r12{#_fR_mpe5->bSxG}#ap(B9FtH3z-Ac4pH4tdim?2ro%5_rtZ z>z!4QSK&bdkNLVKtfn0Z;l{jV2`jv3HO}&D4-$Bs#!BJ))va)Va*)7dz9E*bp&bZ; z$NUcDp*6JeC-9ix7LHg;8-K!$c~Na!OFNMBz>QC@r5y-C#{3S1p736@4((cgkZ|KT zR#g93Cvm-l1R3*%J-ZHtz2YFD#YHSnOH=E7bXP))`R@8=6S}MA;CZ0MG0mh~1Qhd4 zYHdc7<{c!UnBUdl=zg&Hvl+cA{~)2od|@ZIkZuuL%_wHekbCaF8HlzPtXmfpm)?V}5I$vypU*5Mo}p=uqwXjSyAU z!F(xz6t-HXO|VSKKbR*|^6h$gDbT5_H-T~CL5obzH}1(zt?`&ZZ}AHk;W6g-%vS)b zej+S0^ykp4LK8yX09HN1^t`Fc6bf%v7US>mW;HD6v7nNm0K?6={`01OJtojc0&@b+ z1~~DI;1~XF{&Bi@bywh~PqZT=W01v0kS{wVAJ_+dTx%nMH=C70{=U{(g9>bf?eb0b z+CDT{u8pu=em1)F8q7vHHiC8ePI%=tax}0JtjmuE_uXI}EY4no(V);q*e>4&L+{)* zOypmSCd;-Fz{?K_61GugA^*kOPH{pk7{-G*ArL560Ct!h2KMc3-+*8tm8z@8uakw_gqv zHo|-PfnxXpISJbc@8u`qwgYk!wh`3J_qy*6$brH}P%l4F%oTE=uo2434-{k;cT_-B zr8Yu#`BCjJfl;l%e%ejgVbl_nx_qbdNw?UJ9384=Gq|1nTnr zi%#DkxE@8wu@R`tH||f@lL8W`%PSxu=@mDCaiNWnUB2Uz0zNB~XWIzg*!Et7}sQRTB&&q+?1nPjP-uVE#nHh)RVYh0-v8dqV{$&?A~F!r3ib#l&1zwiU$ zmzz%mkscoQKv+Jus{2FZL*5P97;>@cMN^F_BKTpVrj-$rmQzm~bvCD-&ef^+$i1TWzZ8rv|Za`A$S zq`4*QwC2mP5wgoGNr@XOT4W<+m#-nY@qf<^(dF3)-sQ)j!G~ZplWik-mmg2U{{eRl zZHK_vVk3-~uj{c-VPo@|OrC2apqE$HOKzr-g@9guWZ8T(jVy%m@ zO_MD)0(N=5Sa}CZlWiklmshxB4_f<0)pXBh} zMK*$d`2qCk-84mvm%{+x1&7^3ia1WD}^ds zaBpkixc`r52=jV+|7hWySy{_6W-QNHxe6$O`tlKhqA>*Hb&n?0RecaiENgGAmamUl zddfw7+ulmAED_Vh6p0OXW2ynLDpPN25%E;(5OJ4%n^7z~-b#<0<@T6O`|;NP@=?Ti z37#ZG%LD$d*>r%jYBnPHDXr`|Ju)pW-c3va1mMjl0=`tHo@fapc47J zsAgtD^`e~Y{J2b?G6Hb`a+~B^bS;_y-7dM@_jGG@8FE?NQ!aDnS1!zNE}xg1QSZ$~ z1#mT3h3e8JI-#R3O0?K}>F#0T$!A(;$Vx5hDZBKNg{$VQOrE!BQHGYC3i74^Mw5Jz zUDxR3Xis(>(W2qm*6J$cvaqLI=H*w$mS(J7nO5t0B+LgH_BN1Dv{!UK(ea65_;anp z#PSoZQ)Tzf>M2Wc@>nungRkaLc6eod`1UW<(P*ny5sJZ=Tb7RYp&_q}Ns~SUoSMcFqc)_tQLx za}SR`b^y^zuZk7No^P$LKwTE}luOQhJYbMDYkG2ArPiL_w@5vhG$EaehIpf;(yO^> z2(~Exta+%IcgxOTaqI<6x99his~G-bt9*g+i3iQ@{^TQp+)_E!nutj+X{|E1r(6~!wbakdOs}dg zUDqua!nvjKhAJ<#y%+xOl1s0bTdOP4Dsy_urDghtmfj0 z_E>y$w4os@5k_Nq37%@zDd!OMqNyk~p#Klihty zn7=&VWg`q1_D^!*JRyBmu@~ax!&p&@3RyEZ&f@=AlnCX7(#7b<0((<-{YwpKJL}w$Eb~(Gs zeDD6&Mc7#oO3N?nmOel`i}OHf(`IiUC|-X6)ylCEO3N=_`#wk~gM`xZyK*`i-1#6F zTWkc?@(b=057M53pjv)UG2$UQ6eOsYFKqi2xG;P5LnuO?jqqBvt;*V1i-*Yf*_ zsE27EK~ODUE!syMdKg7mZX>+*a<+v(eOS6sv=Ls**KOe=Xowmc;kEp>;r2&p|4w)< zzkl!dDDB?~ujTvKnn!8dKzJ>$V6Qz&3Pw;ZuV4h!r9TEymDvcdjbTN#^D$igsj?AN zo5H5t)OXJqalv6QF0m0_%j;v#VQGtNBfOTE!r{ZDWrWxA-5~P;oFqj*jw0mP2(RTE zxAAd0DkHp>-|5j&*_V>B#YUhlUyiXyNXrPc<+Y4Fm)>v$jB{;--15gsx>vRj5I<_k z3BKi%$3HGTb}VajBP*$Fg+`svQtsR6p2(6MR3`=FeQw zlvlDUC8;qmO4#S`kq+&T$Y6|k7eVScUkb%@TA=1zUCB%F(j6Erq8EU{b`JwfLtK9B ztl7((6{mwi+k8JNKH!2jiW)G`?H2Q8aHY5{1Hle4Zx(_!QH>x~bBecaK?ifCbU_<@ znJaDvgZ7AHlFwf8p$x7Tze{#oeJK=gZ$X=UKPukdf;Nk++2C`PsFT4iVU@v7aVvtz zR$oHJL1vIu97#h`Kk;tbp27YRe~B07$nbX&C8PCXmJ9-gT?RVw;&cQ?(U!4i@UV#g zX?zo_O6HW8SeDgKRVp9xo46ZkBZGa@C=Tv>hl(>ZkS4@8jpFGr;!klG73i$kOW_}4 zJ!m$Wd}$PKguMfNKPug#x4-Ylw9e-cdmFla?0iVEcMyGCyC$VeWDxv^R<_QM3YXxsz8{rd9{jWKN5#`2)O<@W z9LxI&TW;%M|KR_L$K}6);vEF3zxh%s?H~N#ZXY|JZZqk{r55lpig_{!64jR0!IOf2 z_a#w!fABB9AC=x8{Hr)785zWfVB{bCm-w9+{^?7jG_^_V2WvYerf7vJKxE~C;mx8> z28V=I1}<@{4BX=T%+?{B8Z_oJr!}maH6z`!C_|BWuX^8)io|=>_o+>~z2P;?zr}VkuHk3E_g}*dSYany z8h)m}>~+l4#db2I;d$Qtx|~(*WI@9VAm|ObbhDEM4Zmb6djm_R96K4$@au%5Z(yCU z#7@RDyim!bP~4jkRiT|MX!teI>Nl|l%C?gQ4ZmvJm$Iv$_)0Ri*vX8BuUq}iy9SEs zZy|ZEoos3NRom&{tpmhCnY_?W1~q)KKYB~afO`>YWNOu-P>~M zX74MPL~N5Bct@_>>|{#AuiPx}VC7a~CsP`Jd+_u-a(iGWD;mC!jeeJujI3z*{;=a+ zQZh22;gu}nxwd}dw|9XDm)XgHhTkNmyeB;d+R1>1PidDatLU%S~+$ypkbR;T=W4_7TU>xhVO%PJNTv#(6g4<$%=+= zhz~zNLuA{@iiX!TvJG6fYJOwd%7xW22~`?=nrkPs8eWa+(>D$fw||H-<=e@&W+=N+ zf&K7cVfcu&jtp%08qfSlZkX(3Ps2-*HcUq);~F~|)$l6v*GEv1T)UstI=+I-KPKCP zO)@3V^XZSlv&gnlrsOxe*WU|BGvBsBrsU=I`@OB>$SK7FU9n&I$#6$_L->^NUN~XA z7q?b2VGML8>{!^|u;Q?2xNAHa>IiKJof6s$S7PrC*&LD?GTd~=bj-BZRBVbi`Qd`B z15ejY3GQV)ZM@gG*_de@9&`rRW%mXZ2So?@8BQ7;h6ckFLofYlT%O&m&xG&(Gl3T! z!@IM^fzfz`?j-KgHUvxw=;eRf|6c#iczABO?u_mjZq^p#nDR*Z_-z*${N%aJnw2r> zWy=#X%46#q*GAXG&zWk;vP4g>Ue(etcV*s!%4DsJjo;R{Tl(p7Gb-yXP4n~SXZDc3 zkHJq|In5fSAHS_Pem=mW?VYm8iADI_&j|&5t;FG6@DUR zm?vdg1yUZ-QikI5DJ^A)!S6si(U=f=M*Q5P{S3m-Bic^`etxa})Z^!% z8N?wFKWA${1Mss+`{|FLw`f0g`1zLh(+@xOGbP#9P52qF{oIJ3rT7^mo{alWpr?sCo_!&Nz$g1&kvi7qIKUZi! zEAjIt?PmpkzNq~y$IsujpJn(tW*%`U#ZQa&vjjhPX+M|Y=fm31V*LCRKOux7Plc~4 zgAgXnC&?G$^R)TIYAJrM)P63(Pp9^?06$M^KlAbPFYRX@eok0GWET8fs{PEx&o=F6 z4t_q4pU5`blWqIBtNMw+3~G)-0s_ zCsKka6F=Y7erDk3iOsuY>;nA!S^GI3KQG!svGeeAvG#K=es0r#&cV<7wV$)`^Aqjo zEd1=Xbyw8G_wISvn5ylXTUI9}Cd9?9NlR{0_ACZ%tFC-h9M~I-kNoiHo_YRwoM7_f z*xp*;;UB>wc=*S$h4uhK%kp)W^8D!;E%URKJ&RF$073bvyai{>$3r3DvrK#=gB%fj z1njgYDHICj+{CCo&!Bu%4it>#cs>Ap%J6&uf?PZw0CtOM)1*)+J4a)-??>gy17j(k z4*;Jfcs>9@fryepk(ece;z!D#*i)dxGn?&4@$ap8U<8314~!tV8&8TLXYCOI#XX-= zb@T07&Yiyd)ORNC!^t!$$d{e+I*9o}ZGZTvyeKl( ze9~NGHiX?AHaqmY&;y~VAs>Wn!?Wiv;-ZKt*bQ9lTjSNn3D_T28Gbj|4U_f%(YNYj z17E)Yz}Vn`Cvn>MJN!6|*S)1%ryJ-eVopXBVc|q}p8PUm^8aBOQD7&#PJV%B`#)Od zl3gdix;p!Rw9F-wPJWq7SU}y6SejJX$*wbnT_WA{BQEU}*~z4nUq-+de}tI$6V}h= zb~5RVV;RGP=EcJC6D`%qu9IJSeDV{_X!Go3*U4i|#VvR&FZaJ-oMR`uPJXF&-G6Co zNp_vQjIp(xfVD2!b@C|}{7h?Ivg_p6y7hCn^ov@PUcF#peP(>gj9Twnmkd4mrC`7> zSPJIa$!LPKjBpXkDg&Y4HR=9j%++xjXUr=DIA%2@=d(-cTzYq>EsoT z4sTBWj{aC?C%aC5w-|9&`rWgW87Es-vFvsO|rt;}sBgB8tq6h_cvgPC% zC;kD(xpuPUdu2`^_JuYh=sGi&q}wM3qio6Kk2#QZhBmc^1bzwSS`Gd3Lh!? z_LyYc$qSSAn4A7W5$fz?WFJUpHSpM9()*izv`oo2>cNw8k7>U|rsOs7=abOD3j4(} zWdfUf$*I=lC7L_KtNp^S4WDR!*}T#m5%y?UL0AAzXD5by60$R7wCNdBN$}a=L&53v z1W!!Rn?W0bM#8awouRk>5xht47ibGi5BMhFnt(X}XYtm!zwQ=13HOEH)!6XGVSpi1 z4_B{=9(=34+}kS8KZGH=~bLPQRW2(c+SR)-f?Tb}|I%tWU>x*k{GTm5aw>t|MA( z?q?khGO`N!doqt@XeZgL7l5qDPSzovi?+sR&pPbs@eRDE?^=KR?+^XAO*98l!h$$*3}Q`!J4o^`d80ZFH< zU_lzYST?HS((~w|&Hcp#1E}mhiL!wxQl6a*O8B}${&4DRCxa5c2=ng1HQ-f)sIKQ>RYGcdRF|{&A3*h@95P-!_wj}3hh@t2UId(E5;k)NQhhju4vXdD} zr}p;Lk;zmiGLl3^wj{i$iXtJZY&+SK@ZFI>pZ6u>d^;JG@SBt&!>r>_x5ZMI__{R> zL){APi)2cEYB@QKrj~{0)=%oQFQ37JpvImhlk?Mn`3FqiIrhwR7q;aGT9Rj+o9Aob zIa*Hh5q>ZFg%2?&hvkGW4%uaL2R~{2FzBq|H$#7YLg1o+M*pjIcZuP}liY?ag}WR2 z`-v^nzXY{7L8X}`}FrAhV3>b=&0{V zvGEEj*m7^dEE|=A;fg^lm7r_Ea3`R)I+1Q8auL z`c~1KT9e$7W)yJa?rO08p}nQASX{h&l=L#GT&wYx4&J!p#J=L)eFN}a+*-VQKSW;T zEl&O_mEKJZGr;(IAy-E_slefPZPhk?r$HI*lQj4}t*447hR)SC3vfYWXF^Q4~ zdS*1;eNr>WeWdsa@d+NYZH)&~i`$m%UZXGGT_IT<-Ee^zRJwbl=JGHB9X#H1i=g9v z3!Fj5O^7F_a#%`rM2i)ryVrqDxtC2+iI)u;DhY!0bQO<7MK}hHnSjd{i0;CswFGQt z?=AzIFUxkv$9K3*M1M>6+$&OV!FZ#=q$65nmG3S_vy_4fHOn8RyNCDg-~?q$Aaj3l zux$4LlR}qSMy*l;I?~-2%Bc>xl>tAMDW2>*@6X_#MLe9&NnW_-(&3s>46PuEF7t}w zj*8tQynYx{CM3jC=AHLq5)!3I6KDYFa$V-n3KD6t#;2dSx^nmMPChX-Bq`T!65v2C z5xy&>ySXlWKB?Tj_P~^S!{Uei!f%C7w=c|Bo5#SXTTNJCs4X-(r+AjY9fK+Vk<=LSa0i#58c9L>T9E9GvBr2vFeuV3weBQ|F&as3`x=n! zjJA%O;L*UC3EJI1l?I9_ongj%X;y>g<7n%6nGKpX2CeP6IYgCFblFofOZzI2d>dmO z@5u&A8j~cIu4^`0w3dyfeI;mS#;P>&-g|FKKBVs+q2;zWg64QUiU#+Ca5Ec=u|Rf2 z`2XurVsEsTO-_3QNCqcZ$0cYa*b8|aj&>oTXpN+*z1{?f(=Q=4)i_Z6S%N8GUxIbG z%u*XSlB6`$EWObheQA3gvivZ?3SFjB#=y6%>Gu)Q8cBA0B}fXBtx+D5L@AnXVuiQR4v7`DSAgW9WNU(l1k-AQ9Dlpk z1-gf5Z^6nz;*9kc41;65*Tt(MF)i9#{W6f8jn%4;$q#MTjl>(Rkt}I11<9f~uaGh1 z#U;y&Rb30FMQbFv?Ij?&FU~riy2vMS-Y$ZxWpL4}CCYAJhD4@#uZ(b4uBR@dMQbEQ z?ZqHj7H>_^6hzKwJrqTY)<`VvMWi4Xkb+G4ab>^D;09N75bC)3(1#*Cshs@(P^ zpc*yNI<}KaF4nXT(Iqd6_Li^!RO=^NM<;ib5K@ilfr_Fvs-pIM5)phn8wVcvYh^!i zS;zK{G(O$l}AoZ?iYr zn@cuG9-q`vFnIEg)%3M97m!f2mt-+WhF{h}5{G-(+Cb8UgrdC#TLh9Fmsz7Q<6zxM z7dN|hIwe}8$!%WE|_|fo|alSFec!B?M|Co?hL+%eq4BZfVL+G@CfmjqR3VkEA z*#Bm{2)o~ZLFgl)7l#H1Mf@7{e$Y|fINfYrh3*NRL$_`Jl#Tr^^k43OrT-uPAN%(W zxIN%RK!ffV-FpFx0usG%;K<)NKpriQ>97P_H6vr*f|S|oG8J2T{Z)i3SJ!uZQ~+}Q zelaoFIwW$JZyE)A)*m>4B)CK|6hZ1vN~!p&P$2B^G~bU3oA4>ZzI4|R-Q}XrAM6eb zD+0@7z7&cLcle}kA3F{G!&B*Fb$xAiOI%CU+}unBeeZolWXVh(7iO7dvWSvFlK4=E z$S1|`2qKUA(knI!y`KE|Vx+bwf2J6HPlHFQg3dNG6w`O2o-IIxL5KC7ca}eB)*dDF3{L@QYf}OroO%(6(O4< zL|O>=3=oAf2oqPxAXr?7Aa$TGp`!PuA-*4#j%6AwzL$K=A~Y01h!}$)HPn|v>20P# zz8{t0%+yD0mVA1PgEHtR4$GjwcstZO(Ld~6F(qnSzPQWZ+CTMCjZ5bMp>XN_i0?;L zUmq5K$F(d%NgCYe%>I1$M${nZPnqiMJ7%5HI`#!N(^0`;sC4+m!3zFU4zU-8% zH@!8pBSpg%VfWrHMg)S-HZfTSTSb8kwumMKshc&fokN2%oc7kPpDA1weeJzbyb1;Z z8~pr4R??2I7b^3G(&I3+1dbZzuY6QGx4zZ)qoPjw9S0Wg8WOqJH;K|Y^;e7Ng&1es z#C!yi*ZL+^WU9YXv`OXME^b4x=^wsH6?y4}W;#U&8uQFwnfI9!!rl%m0eI^Qor^j6 zs*tg!Cro9*zvF7n6ytx4t;X1(SAtds4Ky4xl<0re@6%r#_-bH7VDEr?0;c+Z>A%tc zBHh!vDxKNyVb3fqW>49jJt*5j*H-vr`7Nt)7h~^29LwiA=>luzLzbQh_8e0uJ9Pb zEsG`M>!7$sFD=U0!;SKfv!fHVgavXGTg-`yH1&y2MpnEHPpCxY)lk>oMnS<`F@ILf5UAY3((9tj-YcRVCE&HYIJ#pSG9^IP_<RA>g=mr`4!W?y7vZ0U zD8foRU09jVDqUcabvnRiy0F3vps5G~$g|Uh6~3pvSwyxF>(AZ7clAOG7um0nDbE9J zz9<5s%Con~sxz-^^%8+tq&N*^lIzo)O4DTGZtAEHfFC#X-Qb8 zEE0^J^HASx<3z8{snmH8`C3>fc;s(i1+diR1yzCSy zng8X>PFaeYKN3GkKHmxR3IsohC>fj)vk;{I+m}$;TbWP$epGg;=1+uO^7&pIk--<@ zUCB<{jVXmxq-6fumz}b*HGd%eEUm@k7%M2!qCeq>jjwOJ>IrkaO}Yv)|KntV%* z^{bb@rKXraH@BH5ggqHn6#9Fp8+WWf3)vAe!1N>@CH_75`rye}2(}re72o=xVTN`C z?y=}^)K3rmG;mkosDOt9miqtXf4zUQ?nB)+U6kL8BD&Ya3oz-C6+5q0^c3*DTcLzY z9c0DMyWja?tMyV$dSu1UD!-~7T4zge87aw~c+16iNy911C z9Aw1K&v|d`pgE6h*8gtK)2yGS?8M@uz(F?a{21@vNs}Detg|!Bfn7Amk;(db%yFxB zp;jdhGFj(uBR{yy8jltulXbquZg^_@Fp+d67%z3C%AUY?M%y>LBE%1i1 zz7mqicaZV=P_}_bH0~KJGIoP;j)P3t&(X@eX^BZD?7X(gC1zCB+SuvS>q~2i5IXy9bC+E0S9rWYf-<1CMY^ z{Ue)pzBO;L(sJ`W%-LzV8QF#+R6EF~9SuJaz!-q!p0=SyZC1Ph;vf@tzGYr$qva-< zu=A=nat~Cm&_NdKe6_CHgK8Bx$XK24aNq4A)gxndR`tZ(t4R0ASp7V7@90$!Rf&U) z)p_0f>niBpQU@8U^U73uHAePY$0btj(pd2yzuGz(0w7~`UI2GxLI4)WMduvU#lfjt z28vNxs8){SLYbUz*Rm|MYoTM5Ov$$vU9Nv$GG5{sDUM247fno=2P z@zXEWPtlLk8v?(CCr1D-0ADQP?#zwD#LdSt2TD{#6gRAi3HUbTlsI|JI$C_w>&nmo z<5NZvb9%xWII}Vbi0G^=y;zgCE3$v5n{nkBD?CA*lIQ#J!h#e1NX_Auf@vu0sql&7 zhb2gpLhBDDjdE}ro+#dx0K;WsDY!<)`X*J@Q{fZD<=MN2SVn7UX3i>4tEiivKWD1C z&K&IfQCU|R2l#$e)>Sa1xJM!tmxz~SFkE~ogJI(KJQQn`FQKx6GG6$|?A%@B{j+Lk zC1zPN@){dgD0!NMM%wvN$7e%m(aWb%pSyE0eQB#P(EtWtOSWGs{ z;Cpe~A_QNFX!-5G;>H{VKZ$SUw;x1}JQ(~{+%3-#wZ&{rRdjk%`KqQF(bbB4LvZX5 zHj%$+h3ZVBoCt>eAwF8TYp{RFS+NiNu(tg|249O8W$=wSi;v>roL!N+AH_*zpQ>RQ zN`}h9G(_{hq<-vlI2H1X_@i*w;FPfh3DlI&OHZF&7N0h~QP~iU@%^SO%}0wC*`dy8 zm9eagZqAG^O{yzZy0ZR+_)d1^XGI9Qsjgj&Mv(fFFNJ!{`l9bgr7P>76PqNTSH(?| z&(pq16;bPtb^F-qAWDBy43*M+T}(s}`I>K1rMv5&5%sd=kBc@0sZaSPRl1Y@l-y zVwqH%i^WC+o5pC@mMZ?nC1TEw$ z&%J&)B4{B;S9$n_99rmJgj#63JX)MpU z>#diAC*9)VdAhErg&bYrVSCkqIatRHxB<1wanL0mzFG5bAl0HvJiKb*6~!o=Xwdx~ zK4s{Q@|@5?_jh=$s=N_emE)lMJA64C+Tf-6%^OjzTnAm^;kQ)%Zh{gPI_MG)-v{e& zLLam^@?>MNf)(^s@s~GQd*Mi)Zu0O)@?#Ftkvv`E;p=wIK~gQc#KWuBR|lb5MGm^Z z!yoPD*l_W$z(MzS_@4EMjZ};7@9<0WzIIYAy1&D#7F`tIWk+jOIOzUP0;>kk*>Rk+ z%t7~e_*0kArg?Ulz+CoY;|J;4yKU-+- znkQ58jXQa(b@Ty;_5bVPniW0y(w|*3GdFflNn=T7Ha6%m+3s-G4=Z5UCMWv56repB zuifducD^Gu9FerqVulJr?U7xp-5H zthY7{5zjfS>GF|)+L5Y^d?H*0{m%7O6rkk}EDeozl<Fr&W}fEJ&K!Sm(nHR~=)!_g~yJrD)%tB_`de zHObPRa(hV|A*v^KNY_ z@qX9F!Vkbx4qW*?@vN8@H?2BvT2g6McVWe0Dv9@8Q|!nD_q$}YPydY*ZTDEK^E4Z@ zcE4~JF4cW(ZZ?m^rMmJkf4n|BDdbd0Q%HZqo-9^U^?n?8ImIf9-#*e}e9HU5jp*-~JK7Rf7tgWcS6dc7D8Hu6CSc_rP|BG;#WJjKY*odk&{fm_ywvnY0vPeHQ9@1RtB=ax6Jzj&=1|Aag%bCT&7FF86ZJM;ufT;(MDuN1cN zK7E4D%E?04{THugYo3%^<{eeKa^L5+04|QAWSSM5R80mlZ z0V6GNtd%KwDNMV@I-VRnkMmpM7k+d2T=NfRVZJQv-(kDMCWO8o+8jD8l+~gG^GxDn8*fwF+B=35scs(D$wL;utHCnSm$US}`F0Oqv z3dnD`2A?3C$A^TXy}1km z$uTV#dC3<$Cfc+pBpuP-Tn2(VPKwab$j}v3yqe8j1 zkDItkv__J9ygx`@egoIz=^HMB$9wMf%A5XP5-r-BOFxiY{H8Y-_zFp&(*W%nwwFYU z_SWSBkZgPtb)j6~f*>JYo)q|yP_#Ffz94zulM8t;i6Lh;Dv3ARn@b;%#J#2ELXR*< zC;R5&jrQi!8zg(*qPj%KOpJ-0km9+dtf@_OG+a4&qP@99faDA0lAwJ<1JEIjSJONs z6z$EWm!jpF_t*Cmzg%!t7@p6Sr(v-%o;{h?Nino2(cV16k!Qv`R5M9}>&l)h`M5?a zMIs#Lh39WBo(u$jY{)Imkj zUaC+~6?dVMj*~naO_hqGHLBd>A)q?^u61m(mnk}|w%hBPmlo}%GAV;g{hzobe&lUy zXh*rE{(5(~O2%5Wmqjo#PJf#Q3QaWevAAaKIcZaxJRC9#k_vQu2})ypLwkK5I^?Jicu(2zaQx(O#+mr5Prqt>`z&`|5KSk~p}|@W@r=MA6>5 z`Xm33K2S=Hi8D4?^JUY?jQm+4+DoMaRkA7}IxX$Ne~dgt^}0ei?guKzM`(GkD9D?Y z=iH^EggB0oPOdzTT5{Vrf$Fy|RB&)X&V11FDiuY0B-FkURO3ES@!=R9du` zY6GZtbfJPXDjNBGsNnl1HqJ}69#jiIR`MceSiX`^nW#m3sjdLk9bKp}{>65eJjQE8 zYgCr@7Esl~-_Itm4B_u5-s8ham4+6rQE3Mz4!`h!geRF_H8+_DhCLpZ8~Rn~zR-~& zCqgPhf=zdsvdLC^it#h!mBxWVM}jiprtJp9B>n693Vm3hGjK-0rva@2m%;~8i~m5~ zF@vrQ??X6nUw+1*QYTqH^XuB=e_Io<)tzzf<>$eFV-cR`B-3YpR~B~T&OxH@f3UR9 zagymXzqiQ#5B3&?PBMMwH$o9fEyKi1l5xJ1OrQC^Y1pUOn`S%7^qJr3!IfZtvH4S+ zR#=>5|I8n59Q%}xR>=ODPdVr_I$9wEXufW%Kck}+vVG=xl4bd~pFs-MPBMVT4r8D; z8TDknG2wGMS|QtKz9FvvoQ_t=?3v%>{qQ+9c@@qS*=rKm+?Rdm&nb{`{coYn&hCILWq|Z`by(Nx{grneT+8V9DP= zUKS@AIP*QRF{x!>)XD|%@eM82m9<$7+PIeOB#UQW z9_2g9?3r(r9p9o+3Y}#3%vbi4Z%O0G;+d~!+IP_6S|?dN^9_CDcWCGwCs{o6jS~Dl zDci+Tg?MFK_C1|rlEw4ionvY@I9~o<-r#VOu`}Pz9=w;7jf|anWsA6vl#T41d1a#$ zmF@STNz0uhWVPa0op|OxYZ97txJ=16>A3sRq}9%0G9|CTSKe<;ohs+mNWUxn!q=OB zHLngk6IL7gMQ9n`xmsd+$FvwPTg@{*XPl0=tR@*AHN@lfs&P0Dxe(7)4Z)Kkeepn5 zsEE#to?+PHx3$^qCtiwZ8yO2%b?~i+wQoEv9kH+Rf+Er*D)yA*a88R(Tr5+I;l10& zN*+z%v7mR`$P^hHD>u`zw2ez{Gex zYW)IK0joE_YOq#6xRi=dk&7&aRji2U+tw#kO&~^G-!cjXSqoR;Ujj=a7E^&fsare=|symjOpH3<1Ww|YbAK( zU(hx(P!>mQzM!qIG~Xbqc<&~-LlWX{4^<XSBfqwa2;yR7-J(4Xr8?V1 zMEBEjZUB$Mex4SA;Q&hSaYNS8)xaYLn-`CRv`!wL)FLZ?lWg01a5~+|Dc-yL>slJ% zlpTi$9W|03B(YZ%&h?NQ}P12rBs;88Qs+dK9S)Ov@< zNU5{Wd#H|jsH#Er4XCJh&{1L>0mNN%?yxoLlJk^7TFzDAQ8&obJ8+7H^N|!^`FV_t zI<-eDhbOgYEZjtGS_xKX6jnF^@t)Om2s2h5c*ZLIuY;9L?d@n4;IwkEr+2{1D0b^g z-_)ALV=mOGhh9!HwKzGX?Ls-Qm4nky;6&X+4wE=-?W~8!NyH5CbPsO=Z}%tz_1YmF z0*2X(*NI?f=kl2I_>QpRg&~@NOTpvUP9A6toGf(o18-fVIS<+GbZMk{Lp2^H;L$SF z+dUjZweA6(lIA(SqnCKaL$wT4e}Ia*2Zp*N)V(t?U*^9K5MT^!68uar6rU(|AWQ+M!M z0$#COTD2J&r^wN;(dsTOvTX5HYENpC)&WP0VH2L(ycy3~e`U6s$A`TTwiHf;rM<)Z zcv5o|o-12n3JrcB*kb%0SFNLio(pOW>TP(?ut5Kb{!0Dez~h0-0)qnX2w3F*oBu)o z>AEjxiPR!+Fy`SKVO8j+1m$-pCscPCmHqgi{%7;n?!`k zsGr{`ki(T*^kAIpB+Gt&6ZM6@Z48bG$g-c`u%sE&u+XxRGT2GawpmP^E;T^O>If&5@hSocZrCQwx~hNon+>JIlC)@efMP$ z0Gavo0(dusl{l%sE>o=MOcm_!kZ} zEY4XnCEuyuFZ;NhBfGNc^B>1o3e+54id~2{ZxGp#=2qCrcL4$7{Hn9cQU9KAjK!OLR2 z3|vH2_OBPIDsBjI_e1Iw+6|P|+!YTQf#8DY+7w^kpoA_07)#|)% z)$-(&HAyXvYZfc_Yj zQlu2VLwqdxY!`pXV3Qd5l)|oqLaAi9R{|X$6-^4?DH^~4?ritSV5_)YvhxbGgF^9z z9Ip9~R!XPz+wgtjg-K?wTTdm8BDC;r!Z-tOAaBNd?t6wrZt;k)BQNECclg!f>;fdc zQVhsIQq3#1!d1CH zTn{-!*7_1EU7`1KQ6yzmBZt5tx@u7{7eSS1LXcWXgv~Q&mrq@u*OD7suZ%!p|MUH* zj6h-kCn8=(wZ0P*UY4WXpJJ~3S0}0vr26?%Ds300`FK|HR62av8S$j#^Mm++*#0Gc zll(L<(+Y_)=!E^^o0-x=VQ0mwvbtsB8w8Q1lvEkPm2&ki5tq(F(q-atNH(?DH>py} z-bKD26<2D#3&j>N2v`cYx8&3N=(E;-d4056H_cmMDVe@1WzF;%ibD3$yg?`*)eiIn zWu|;onxW4baaPVy`@{e_p{&-Dc1|b?AJZz|k4m9Ub)p^&Fygi$$Zyi1ay$)wTlgIF zH`r@OhCPkPN&Q2ep)*6i3po%HkE8ufri+441TVv0`+)KCpwmHH;nwVaL!SOS{eFFX z;Cq3a14jqE7*HS3&;N*jAuJwO>%u)RgD-ZGjXu9@X}4_YC!QJA)@x9SiwyO7FF9l| zI`G1_;e(dC$XcH_1FgOgD@}uoto7HhJA~&iY_kk1aFMk>zj({K2 z!j_dS{lvISkUZB##`=6M$v}IDmYgj1`Q*=DA~)kMve@Uh3ByLqZGwx8^?C8pHsQc% zl(@=87W*k|TfaTJ4gQ8*WU_n97n1~Ci;A@y4$^LfEYX;)yi>^i9X-1OU9#J^PFU& ze;%s#iey~mBs+cnwo>?nwis;2$xffwGTke1=)H4-EU}Y}_4yJP-q_k-d?b_SI>}<6 zm&dS6>Bx&L_IWL9x|BBKWUS8@fwb)VOHqUhCmHJ}a2;a*qixA3E7|JvWgV_VS!Kk31Q9W|?E(?#k5U&nS4%>^%cc8EopY{|DS4f9`O^W| zN}2K;bKI5NE)W+4v_;T8gRy=U(vj#i+~!*e<)oC$hGd-sL zB`z`+`@5OFm$YmLL_-g6#{%mT#h-2MFMf_kn-#gpaEw>Fqy#8kg^LWw*gh$)OF*YA zaFO8{+Yb&TLOA&@vK!+k*QJSVcmUT$CS$z*JeDX29T%C5@qsjRVnh^&qXFj0cLK8ZfjPYa5;)xh*idJW=Lr{?kMX5%(`_9hK9k9_U1USXYv0i<9KBz5Ig;nN zE|h~aU+m(K@N&X_ncU(cYcgJ4KDc(zK=HjyUg#o|GQO&J4X1@QS(EYQpeg^t5nx>5 zB9k({LzRy}hstr0Ng2=hPJKU( zBt0A~Q}TM4HL7g_x&I#HcdcLewc!_=Up6l_`-eHh(qaC#H#9orjgTusMw*^6!^CXbL(QG~Muqq1iA%|Af9oZ-Ob@%z*C#t_g_uf75@hf4J@uoyG60-?gwP zPZ?D1B4{^`9pe6&22?EHMW`-6A(c+YgtWv(s4ic*C#TcoL4Ypbea{TRVl^%u{h-W6 zs4l-3Se=f&z!Ddsx_lAdOGgowxCq4MQzp+q$^sXGxV&l}n1R;Ka}kKk&$HooV44Y= ziE8Dz2*l+(?Sh#!m=K7|YZ&>meMT}aauJft&mbp)t{g5do`vMuE`oFU)}U8PHpt`_ z7h$^m=x}rvCTNR`FkL?7fY~&a6Q;{oaOG^8$_dWpd6HfI*RxUB6)wVbc~5ua=Coao z)*wumZw)+9(m!fy%>0#WYHF)9Gjg?wuf|0nFF&UIIETg*0(to{rD!gVDTMFxz3%v2 z8dC`0<$Ln5c{H~Zw9C)!64Q&Ck-d7w!jhJivy#?mRV;B4*86wMX>G0b`n+wgg1pvdE0!Po8-F);pNAmJ_~43d>#ldy%Dr?0lG(yix6JE(N8RZ z3g)>8;pKIkoEW5Jfbmin!MyxQA)ZT!6xYe**)GC*c@=y&19mIj*Maa1g+<4ieI@-1^sEY0XM zWJ+H9zKVtR)wt5noiZn`Z4&N6`uXMSU-8o%cyDeni0FnbqebzQh0!McD~5{J_ z*N^O-vhc3J{lf!p)O>h9d0$JvNqsbMBYj!)%7tZ9Gt*`_sORy2&{4VaQ8`ENb5=y$ z-!j<0&+lRa!eMh zUHWLRz9{SzET_**F`@u`W{4&Pk=mm;N>T-~>oZ*xFG132VgrK6slHh%0A8Ooad@Jc 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

        7UP!Sut6|tsTU}4* zbsXbS93nPdB>zIFJ&uC+B=O@Y{Bcd8$UL9oeEb=K26NvAG){2{#}jOgT&z^+xRwg{ z$fx`1b)5U%t+G(^AbRUwE(6(#J&+GBjk#%g5b|%ey_eJY_tR%}pGK@EraU zApS^W=f8q@a0af#f!q&;LM4XDpCd}5xEMbP=h2Wy7A9Rp1-C4G^EY5;yWhc)z3E|$ z%ltQ}OD)vde9=KB>Eq7=0#Gpy%{}@m&fn?t0n;~($Vi`;JvQwus8miDZ4V${UGu~B z*@6T<%L`{adUq_8d4()cwr4Bj8aYruUbHxnco-2)GM}P`5awgID2}1Kp>6bwklXhH zj0k-u3%z5Aur_xr?32gD@QROAit7+CzG)YW2eg&(qqBdvB8%P$myv_1W zU%DM?h1?%xp}jxi8|Hp53&#qnut)6pGsbw$4M>cfyHgf|6R8jv6K+7-!-2n0BUO0h z3_o-YnUBjxF1ZhLAoBrut*#%}FvQah!SNM@k$evm>9gtjuasbe_n2lsWr3rCa3-bi z((u4R@7#<78L6pnXIlFp`0sVyllE)cJ$TWlUFhb*q=s3a`O- zwWu-u)EN+tS5IHoO?)tY83diU#@m(XacL{mkxPKu*Dk?PWljB3xLL(b)V)ygz-Sol zWS7M?;4b~fm^@|)#tx==&(?EK46q&1M(Xrl6Nzh}U2U&xP9{Xb-t|h%^>Gp`ViIJ8 zsFB{d0kY#*@m$L3J8q)uV&_+CuYoAf*t)p#W5JooUtNHhkmPU@jx(|@ie5u3p>M8l zMHX11kp&^fO2g`Mtk_kod^tSd_^=^$v*6O`y2&MV@EA-JR!>&K;yBB|k+_D{%_<

        NTr%5=C#2J4FNTfPF6Sg?zZ`HEDBpcqvi`A4c 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 a=p8KVwO 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]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 From b3931e7b4c9a16e8930155bb4af96f3ee491567e Mon Sep 17 00:00:00 2001 From: Ferdy Rodriguez Date: Thu, 12 Mar 2026 07:19:44 +0100 Subject: [PATCH 090/114] add focus change handler to input fields for ui event triggering (#4718) --- .../input/ui/provider/TrackerInputProvider.kt | 94 +++++++++++++++++++ 1 file changed, 94 insertions(+) diff --git a/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/provider/TrackerInputProvider.kt b/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/provider/TrackerInputProvider.kt index 0a344595e7f..4cbe893f4de 100644 --- a/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/provider/TrackerInputProvider.kt +++ b/tracker/src/commonMain/kotlin/org/dhis2/tracker/input/ui/provider/TrackerInputProvider.kt @@ -102,6 +102,13 @@ fun TrackerInputProvider( }, imeAction = ImeAction.Next, onImeActionClick = onImeActionClick, + onFocusChanged = { isFocused -> + handleOnFocusChange( + isFocused = isFocused, + inputModelId = inputModel.uid, + onUiEvent = onUiEvent, + ) + }, ) } @@ -124,6 +131,13 @@ fun TrackerInputProvider( }, imeAction = ImeAction.Next, onImeActionClick = onImeActionClick, + onFocusChanged = { isFocused -> + handleOnFocusChange( + isFocused = isFocused, + inputModelId = inputModel.uid, + onUiEvent = onUiEvent, + ) + }, ) } @@ -146,6 +160,13 @@ fun TrackerInputProvider( }, imeAction = ImeAction.Next, onImeActionClick = onImeActionClick, + onFocusChanged = { isFocused -> + handleOnFocusChange( + isFocused = isFocused, + inputModelId = inputModel.uid, + onUiEvent = onUiEvent, + ) + }, ) } @@ -169,6 +190,13 @@ fun TrackerInputProvider( }, imeAction = ImeAction.Next, onImeActionClick = onImeActionClick, + onFocusChanged = { isFocused -> + handleOnFocusChange( + isFocused = isFocused, + inputModelId = inputModel.uid, + onUiEvent = onUiEvent, + ) + }, ) } @@ -192,6 +220,13 @@ fun TrackerInputProvider( }, imeAction = ImeAction.Next, onImeActionClick = onImeActionClick, + onFocusChanged = { isFocused -> + handleOnFocusChange( + isFocused = isFocused, + inputModelId = inputModel.uid, + onUiEvent = onUiEvent, + ) + }, ) } @@ -215,6 +250,13 @@ fun TrackerInputProvider( }, imeAction = ImeAction.Next, onImeActionClick = onImeActionClick, + onFocusChanged = { isFocused -> + handleOnFocusChange( + isFocused = isFocused, + inputModelId = inputModel.uid, + onUiEvent = onUiEvent, + ) + }, ) } @@ -237,6 +279,13 @@ fun TrackerInputProvider( }, imeAction = ImeAction.Next, onImeActionClick = onImeActionClick, + onFocusChanged = { isFocused -> + handleOnFocusChange( + isFocused = isFocused, + inputModelId = inputModel.uid, + onUiEvent = onUiEvent, + ) + }, ) } @@ -259,6 +308,13 @@ fun TrackerInputProvider( }, imeAction = ImeAction.Next, onImeActionClick = onImeActionClick, + onFocusChanged = { isFocused -> + handleOnFocusChange( + isFocused = isFocused, + inputModelId = inputModel.uid, + onUiEvent = onUiEvent, + ) + }, ) } @@ -281,6 +337,13 @@ fun TrackerInputProvider( }, imeAction = ImeAction.Next, onImeActionClick = onImeActionClick, + onFocusChanged = { isFocused -> + handleOnFocusChange( + isFocused = isFocused, + inputModelId = inputModel.uid, + onUiEvent = onUiEvent, + ) + }, ) } @@ -303,6 +366,13 @@ fun TrackerInputProvider( }, imeAction = ImeAction.Next, onImeActionClick = onImeActionClick, + onFocusChanged = { isFocused -> + handleOnFocusChange( + isFocused = isFocused, + inputModelId = inputModel.uid, + onUiEvent = onUiEvent, + ) + }, ) } @@ -325,6 +395,13 @@ fun TrackerInputProvider( }, imeAction = ImeAction.Next, onImeActionClick = onImeActionClick, + onFocusChanged = { isFocused -> + handleOnFocusChange( + isFocused = isFocused, + inputModelId = inputModel.uid, + onUiEvent = onUiEvent, + ) + }, ) } @@ -347,6 +424,13 @@ fun TrackerInputProvider( }, imeAction = ImeAction.Next, onImeActionClick = onImeActionClick, + onFocusChanged = { isFocused -> + handleOnFocusChange( + isFocused = isFocused, + inputModelId = inputModel.uid, + onUiEvent = onUiEvent, + ) + }, ) } @@ -774,3 +858,13 @@ fun manageOnValueChange( } private fun getYesOnlyValue(checked: Boolean): String? = if (!checked) "true" else null + +private fun handleOnFocusChange( + isFocused: Boolean, + inputModelId: String, + onUiEvent: (TrackerInputUiEvent) -> Unit, +) { + if (isFocused) { + onUiEvent(TrackerInputUiEvent.OnItemClick(inputModelId)) + } +} From 0565c52cd34a137ebe03f511c291abd423685be5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Miguel=20Rubio?= Date: Thu, 12 Mar 2026 09:58:43 +0100 Subject: [PATCH 091/114] feat: Add ColorMatcher.kt to find the closest color palette [skip size] (#4700) * feat: Add ColorMatcher.kt to find the closest color palette * fix: [ANDROAPP-7521] Use configuration theme colour * fix: [ANDROAPP-7521] set background compose color to theme color correctly in settings screen * fix: [ANDROAPP-7521] update warnings in colorUtils file * fix: [ANDROAPP-7521] copilot review comments * fix: [ANDROAPP-7521] remember color property to avoid recompositions --------- Co-authored-by: Xavier Molloy --- .../org/dhis2/data/server/ServerModule.kt | 5 +- .../data/server/ServerSettingsRepository.kt | 43 ++++++- .../dhis2/data/server/SystemStyleMapper.kt | 17 --- .../usescases/settings/ui/SettingsScreen.kt | 10 +- .../org/dhis2/commons/resources/ColorUtils.kt | 110 +++--------------- .../dhis2/commons/resources/PaletteThemes.kt | 90 ++++++++++++++ .../mobile/commons/color/ColorMatcher.kt | 88 ++++++++++++++ .../mobile/commons/color/PaletteColor.kt | 21 ++++ .../mobile/commons/color/ColorMatcherTest.kt | 70 +++++++++++ 9 files changed, 339 insertions(+), 115 deletions(-) delete mode 100644 app/src/main/java/org/dhis2/data/server/SystemStyleMapper.kt create mode 100644 commons/src/main/java/org/dhis2/commons/resources/PaletteThemes.kt create mode 100644 commonskmm/src/commonMain/kotlin/org/dhis2/mobile/commons/color/ColorMatcher.kt create mode 100644 commonskmm/src/commonMain/kotlin/org/dhis2/mobile/commons/color/PaletteColor.kt create mode 100644 commonskmm/src/commonTest/kotlin/org/dhis2/mobile/commons/color/ColorMatcherTest.kt diff --git a/app/src/main/java/org/dhis2/data/server/ServerModule.kt b/app/src/main/java/org/dhis2/data/server/ServerModule.kt index 8cd45791161..d1ae9f3e71f 100644 --- a/app/src/main/java/org/dhis2/data/server/ServerModule.kt +++ b/app/src/main/java/org/dhis2/data/server/ServerModule.kt @@ -102,7 +102,10 @@ class ServerModule { @Provides @PerServer - fun providesRepository(d2: D2): ServerSettingsRepository = ServerSettingsRepository(d2) + fun providesRepository( + d2: D2, + colorUtils: ColorUtils, + ): ServerSettingsRepository = ServerSettingsRepository(d2, colorUtils) @Provides @PerServer diff --git a/app/src/main/java/org/dhis2/data/server/ServerSettingsRepository.kt b/app/src/main/java/org/dhis2/data/server/ServerSettingsRepository.kt index 735da2d5033..92bfcd7b3b5 100644 --- a/app/src/main/java/org/dhis2/data/server/ServerSettingsRepository.kt +++ b/app/src/main/java/org/dhis2/data/server/ServerSettingsRepository.kt @@ -2,11 +2,18 @@ package org.dhis2.data.server import io.reactivex.Single import org.dhis2.BuildConfig +import org.dhis2.R +import org.dhis2.commons.resources.ColorUtils +import org.dhis2.commons.resources.paletteThemes +import org.dhis2.mobile.commons.color.ColorMatcher +import org.dhis2.mobile.commons.color.PaletteColor import org.hisp.dhis.android.core.D2 import org.hisp.dhis.android.core.settings.SystemSetting +import timber.log.Timber class ServerSettingsRepository( private val d2: D2, + private val colorUtils: ColorUtils, ) { fun getTheme(): Single> = d2 @@ -14,19 +21,49 @@ class ServerSettingsRepository( .systemSetting() .get() .map { systemSettings -> - val style = + val customColor = systemSettings .firstOrNull { - it.key() == SystemSetting.SystemSettingKey.STYLE + it.key() == SystemSetting.SystemSettingKey.CUSTOM_COLOR }?.value() val flag = systemSettings .firstOrNull { it.key() == SystemSetting.SystemSettingKey.FLAG }?.value() - Pair(flag, SystemStyleMapper(style)) + if (customColor.isNullOrEmpty()) { + Pair(flag, R.style.AppTheme) + } else { + try { + val customColorPalette = PaletteColor.fromHex(customColor) + val closestColor = + ColorMatcher.findClosest( + selectedR = customColorPalette.r, + selectedG = customColorPalette.g, + selectedB = customColorPalette.b, + palette = + paletteThemes.map { (color, _) -> + PaletteColor.fromHex(color) + }, + ) + Pair(flag, getThemeFromClosestColor(closestColor)) + } catch (e: Exception) { + Timber.e(e, "Error parsing custom color, using default theme") + Pair(flag, R.style.AppTheme) + } + } } + private fun getThemeFromClosestColor(color: PaletteColor?): Int = + color?.let { + val serverTheme = colorUtils.getThemeFromColor(it.hex) + if (serverTheme != -1) { + serverTheme + } else { + R.style.AppTheme + } + } ?: R.style.AppTheme + fun allowScreenShare(): Boolean = BuildConfig.DEBUG || d2 diff --git a/app/src/main/java/org/dhis2/data/server/SystemStyleMapper.kt b/app/src/main/java/org/dhis2/data/server/SystemStyleMapper.kt deleted file mode 100644 index a00ceaede9b..00000000000 --- a/app/src/main/java/org/dhis2/data/server/SystemStyleMapper.kt +++ /dev/null @@ -1,17 +0,0 @@ -package org.dhis2.data.server - -import org.dhis2.R - -object SystemStyleMapper { - private const val SERVER_GREEN_THEME = "green" - private const val SERVER_INDIA_THEME = "india" - private const val SERVER_MYANMAR_THEME = "myanmar" - - operator fun invoke(serverStyle: String?): Int = - when { - serverStyle?.contains(SERVER_GREEN_THEME) == true -> R.style.GreenTheme - serverStyle?.contains(SERVER_INDIA_THEME) == true -> R.style.OrangeTheme - serverStyle?.contains(SERVER_MYANMAR_THEME) == true -> R.style.RedTheme - else -> R.style.AppTheme - } -} diff --git a/app/src/main/java/org/dhis2/usescases/settings/ui/SettingsScreen.kt b/app/src/main/java/org/dhis2/usescases/settings/ui/SettingsScreen.kt index 2feb5e357de..a8e058bac17 100644 --- a/app/src/main/java/org/dhis2/usescases/settings/ui/SettingsScreen.kt +++ b/app/src/main/java/org/dhis2/usescases/settings/ui/SettingsScreen.kt @@ -7,7 +7,6 @@ import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.imePadding import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Scaffold import androidx.compose.material3.Snackbar import androidx.compose.material3.SnackbarDefaults @@ -22,7 +21,9 @@ import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.graphics.Color +import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.unit.dp +import org.dhis2.commons.resources.ColorUtils import org.dhis2.usescases.settings.SettingItem import org.dhis2.usescases.settings.SyncManagerPresenter import org.dhis2.usescases.settings.models.DeleteDataState @@ -172,12 +173,17 @@ private fun SettingItemList( exportingDatabase: Boolean, onSettingsUiAction: (SettingsUiAction) -> Unit, ) { + val context = LocalContext.current + val primaryColor = remember(context) { + ColorUtils().getThemePrimaryColor(context) + } + LazyColumn( modifier = modifier .fillMaxSize() .imePadding() - .background(MaterialTheme.colorScheme.primary) + .background(primaryColor) .background(Color.White, RoundedCornerShape(topStart = 16.dp, topEnd = 16.dp)) .clip(RoundedCornerShape(topStart = 16.dp, topEnd = 16.dp)), contentPadding = PaddingValues(8.dp), diff --git a/commons/src/main/java/org/dhis2/commons/resources/ColorUtils.kt b/commons/src/main/java/org/dhis2/commons/resources/ColorUtils.kt index cea91e1e319..0cf64b8f39a 100644 --- a/commons/src/main/java/org/dhis2/commons/resources/ColorUtils.kt +++ b/commons/src/main/java/org/dhis2/commons/resources/ColorUtils.kt @@ -8,8 +8,11 @@ import android.graphics.PorterDuff import android.graphics.drawable.Drawable import android.util.TypedValue import androidx.core.graphics.ColorUtils +import androidx.core.graphics.toColorInt import org.dhis2.commons.R import java.util.Objects +import kotlin.math.pow +import androidx.compose.ui.graphics.Color as ComposeColor class ColorUtils { companion object { @@ -24,16 +27,7 @@ class ColorUtils { val b = hexColor[3] newHexColor = "#$r$r$g$g$b$b" // formatted to #ffff } - return Color.parseColor(newHexColor) - } - - fun getPrimaryColorWithAlpha( - context: Context, - primaryLight: ColorType, - alpha: Float, - ): Int { - val primaryColor = getPrimaryColor(context, primaryLight) - return ColorUtils.setAlphaComponent(primaryColor, 155) + return newHexColor.toColorInt() } fun withAlpha(color: Int): Int = ColorUtils.setAlphaComponent(color, 155) @@ -67,27 +61,18 @@ class ColorUtils { return drawableToTint } - fun tintDrawableWithColor( - drawableToTint: Drawable, - tintColor: Int, - ): Drawable { - drawableToTint.setTint(tintColor) - drawableToTint.setTintMode(PorterDuff.Mode.SRC_IN) - return drawableToTint - } - fun getContrastColor(color: Int): Int = if (getContrast(color) > 0.179) { - Color.parseColor("#b3000000") + "#b3000000".toColorInt() } else { - Color.parseColor("#e6ffffff") + "#e6ffffff".toColorInt() } fun getAlphaContrastColor(color: Int): Int = if (getContrast(color) > 0.500) { - Color.parseColor("#b3000000") + "#b3000000".toColorInt() } else { - Color.parseColor("#e6ffffff") + "#e6ffffff".toColorInt() } private fun getContrast(color: Int): Double { @@ -99,7 +84,7 @@ class ColorUtils { var green: Double? = null var blue: Double? = null rgb.forEach { - if (it <= 0.03928) it / 12.92 else Math.pow((it + 0.055) / 1.055, 2.4) + if (it <= 0.03928) it / 12.92 else ((it + 0.055) / 1.055).pow(2.4) if (red == null) { red = it } else if (green == null) { @@ -111,80 +96,21 @@ class ColorUtils { return 0.2126 * red!! + 0.7152 * green!! + 0.0722 * blue!! } - fun getThemeFromColor(color: String?): Int = - when (color) { - "#ffcdd2" -> R.style.colorPrimary_Pink - "#e57373" -> R.style.colorPrimary_e57 - "#d32f2f" -> R.style.colorPrimary_d32 - "#f06292" -> R.style.colorPrimary_f06 - "#c2185b" -> R.style.colorPrimary_c21 - "#880e4f" -> R.style.colorPrimary_880 - "#f50057" -> R.style.colorPrimary_f50 - "#e1bee7" -> R.style.colorPrimary_e1b - "#ba68c8" -> R.style.colorPrimary_ba6 - "#8e24aa" -> R.style.colorPrimary_8e2 - "#aa00ff" -> R.style.colorPrimary_aa0 - "#7e57c2" -> R.style.colorPrimary_7e5 - "#4527a0" -> R.style.colorPrimary_452 - "#7c4dff" -> R.style.colorPrimary_7c4 - "#6200ea" -> R.style.colorPrimary_620 - "#c5cae9" -> R.style.colorPrimary_c5c - "#7986cb" -> R.style.colorPrimary_798 - "#3949ab" -> R.style.colorPrimary_394 - "#304ffe" -> R.style.colorPrimary_304 - "#e3f2fd" -> R.style.colorPrimary_e3f - "#64b5f6" -> R.style.colorPrimary_64b - "#1976d2" -> R.style.colorPrimary_197 - "#0288d1" -> R.style.colorPrimary_028 - "#40c4ff" -> R.style.colorPrimary_40c - "#00b0ff" -> R.style.colorPrimary_00b - "#80deea" -> R.style.colorPrimary_80d - "#00acc1" -> R.style.colorPrimary_00a - "#00838f" -> R.style.colorPrimary_008 - "#006064" -> R.style.colorPrimary_006 - "#e0f2f1" -> R.style.colorPrimary_e0f - "#80cbc4" -> R.style.colorPrimary_80c - "#00695c" -> R.style.colorPrimary_0069 - "#64ffda" -> R.style.colorPrimary_64f - "#c8e6c9" -> R.style.colorPrimary_c8e - "#66bb6a" -> R.style.colorPrimary_66b - "#2e7d32" -> R.style.colorPrimary_2e7 - "#60ad5e" -> R.style.colorPrimary_60a - "#00e676" -> R.style.colorPrimary_00e - "#aed581" -> R.style.colorPrimary_aed - "#689f38" -> R.style.colorPrimary_689 - "#33691e" -> R.style.colorPrimary_336 - "#76ff03" -> R.style.colorPrimary_76f - "#64dd17" -> R.style.colorPrimary_64d - "#cddc39" -> R.style.colorPrimary_cdd - "#9e9d24" -> R.style.colorPrimary_9e9 - "#827717" -> R.style.colorPrimary_827 - "#fff9c4" -> R.style.colorPrimary_fff - "#fbc02d" -> R.style.colorPrimary_fbc - "#f57f17" -> R.style.colorPrimary_f57 - "#ffff00" -> R.style.colorPrimary_ffff - "#ffcc80" -> R.style.colorPrimary_ffc - "#ffccbc" -> R.style.colorPrimary_ffcc - "#ffab91" -> R.style.colorPrimary_ffa - "#bcaaa4" -> R.style.colorPrimary_bca - "#8d6e63" -> R.style.colorPrimary_8d6 - "#4e342e" -> R.style.colorPrimary_4e3 - "#fafafa" -> R.style.colorPrimary_faf - "#bdbdbd" -> R.style.colorPrimary_bdb - "#757575" -> R.style.colorPrimary_757 - "#424242" -> R.style.colorPrimary_424 - "#cfd8dc" -> R.style.colorPrimary_cfd - "#b0bec5" -> R.style.colorPrimary_b0b - "#607d8b" -> R.style.colorPrimary_607 - "#37474f" -> R.style.colorPrimary_374 - else -> -1 - } + fun getThemeFromColor(color: String?): Int = paletteThemes[color] ?: -1 // fun getPrimaryColor( context: Context, colorType: ColorType, ): Int = context.getPrimaryColor(colorType) + + fun getThemePrimaryColor(context: Context): ComposeColor { + val typedValue = TypedValue() + val a = context.theme.obtainStyledAttributes(typedValue.data, intArrayOf(android.R.attr.colorPrimary)) + val color = a.getColor(0, 0) + a.recycle() + return ComposeColor(color) + } } enum class ColorType { diff --git a/commons/src/main/java/org/dhis2/commons/resources/PaletteThemes.kt b/commons/src/main/java/org/dhis2/commons/resources/PaletteThemes.kt new file mode 100644 index 00000000000..a3a9c88ed45 --- /dev/null +++ b/commons/src/main/java/org/dhis2/commons/resources/PaletteThemes.kt @@ -0,0 +1,90 @@ +package org.dhis2.commons.resources + +import org.dhis2.commons.R + +/** + * Maps each hex color to its corresponding Android theme style resource. + */ +val paletteThemes: Map = + mapOf( + // Reds / Pinks + "#ffcdd2" to R.style.colorPrimary_Pink, + "#e57373" to R.style.colorPrimary_e57, + "#d32f2f" to R.style.colorPrimary_d32, + "#f06292" to R.style.colorPrimary_f06, + "#c2185b" to R.style.colorPrimary_c21, + "#880e4f" to R.style.colorPrimary_880, + "#f50057" to R.style.colorPrimary_f50, + // Purples + "#e1bee7" to R.style.colorPrimary_e1b, + "#ba68c8" to R.style.colorPrimary_ba6, + "#8e24aa" to R.style.colorPrimary_8e2, + "#aa00ff" to R.style.colorPrimary_aa0, + // Deep Purples / Indigos + "#7e57c2" to R.style.colorPrimary_7e5, + "#4527a0" to R.style.colorPrimary_452, + "#7c4dff" to R.style.colorPrimary_7c4, + "#6200ea" to R.style.colorPrimary_620, + "#c5cae9" to R.style.colorPrimary_c5c, + "#7986cb" to R.style.colorPrimary_798, + "#3949ab" to R.style.colorPrimary_394, + "#304ffe" to R.style.colorPrimary_304, + // Blues + "#e3f2fd" to R.style.colorPrimary_e3f, + "#64b5f6" to R.style.colorPrimary_64b, + "#1976d2" to R.style.colorPrimary_197, + "#0288d1" to R.style.colorPrimary_028, + "#40c4ff" to R.style.colorPrimary_40c, + "#00b0ff" to R.style.colorPrimary_00b, + // Cyans / Teals + "#80deea" to R.style.colorPrimary_80d, + "#00acc1" to R.style.colorPrimary_00a, + "#00838f" to R.style.colorPrimary_008, + "#006064" to R.style.colorPrimary_006, + "#e0f2f1" to R.style.colorPrimary_e0f, + "#80cbc4" to R.style.colorPrimary_80c, + "#00695c" to R.style.colorPrimary_0069, + "#64ffda" to R.style.colorPrimary_64f, + // Greens + "#c8e6c9" to R.style.colorPrimary_c8e, + "#66bb6a" to R.style.colorPrimary_66b, + "#2e7d32" to R.style.colorPrimary_2e7, + "#60ad5e" to R.style.colorPrimary_60a, + "#00e676" to R.style.colorPrimary_00e, + // Light Greens / Limes + "#aed581" to R.style.colorPrimary_aed, + "#689f38" to R.style.colorPrimary_689, + "#33691e" to R.style.colorPrimary_336, + "#76ff03" to R.style.colorPrimary_76f, + "#64dd17" to R.style.colorPrimary_64d, + "#cddc39" to R.style.colorPrimary_cdd, + "#9e9d24" to R.style.colorPrimary_9e9, + "#827717" to R.style.colorPrimary_827, + // Yellows + "#fff9c4" to R.style.colorPrimary_fff, + "#fbc02d" to R.style.colorPrimary_fbc, + "#f57f17" to R.style.colorPrimary_f57, + "#ffff00" to R.style.colorPrimary_ffff, + // Oranges / Browns + "#ffcc80" to R.style.colorPrimary_ffc, + "#ffccbc" to R.style.colorPrimary_ffcc, + "#ffab91" to R.style.colorPrimary_ffa, + "#bcaaa4" to R.style.colorPrimary_bca, + "#8d6e63" to R.style.colorPrimary_8d6, + "#4e342e" to R.style.colorPrimary_4e3, + // Greys + "#fafafa" to R.style.colorPrimary_faf, + "#bdbdbd" to R.style.colorPrimary_bdb, + "#757575" to R.style.colorPrimary_757, + "#424242" to R.style.colorPrimary_424, + // Blue Greys + "#cfd8dc" to R.style.colorPrimary_cfd, + "#b0bec5" to R.style.colorPrimary_b0b, + "#607d8b" to R.style.colorPrimary_607, + "#37474f" to R.style.colorPrimary_374, + // User settings old styles + "#ea5911" to R.style.OrangeTheme, + "#467e4a" to R.style.GreenTheme, + "#276696" to R.style.AppTheme, + "#b40303" to R.style.RedTheme, + ) diff --git a/commonskmm/src/commonMain/kotlin/org/dhis2/mobile/commons/color/ColorMatcher.kt b/commonskmm/src/commonMain/kotlin/org/dhis2/mobile/commons/color/ColorMatcher.kt new file mode 100644 index 00000000000..4aafb3ea226 --- /dev/null +++ b/commonskmm/src/commonMain/kotlin/org/dhis2/mobile/commons/color/ColorMatcher.kt @@ -0,0 +1,88 @@ +package org.dhis2.mobile.commons.color + +import kotlin.math.pow +import kotlin.math.sqrt + +/** + * CIE L*a*b* color representation for perceptually uniform distance calculations. + */ +private data class Lab( + val l: Double, + val a: Double, + val b: Double, +) + +/** + * Finds the closest color from the palette to the given selected color + * using the CIE76 Delta E in L*a*b* color space, + * which is more perceptually accurate than simple RGB Euclidean distance. + */ +object ColorMatcher { + fun findClosest( + selectedR: Int, + selectedG: Int, + selectedB: Int, + palette: List, + ): PaletteColor? { + if (palette.isEmpty()) return null + val selectedLab = rgbToLab(selectedR, selectedG, selectedB) + return palette.minByOrNull { color -> + val lab = rgbToLab(color.r, color.g, color.b) + deltaE(selectedLab, lab) + } + } + + /** + * CIE76 Delta E — Euclidean distance in L*a*b* space. + */ + private fun deltaE( + c1: Lab, + c2: Lab, + ): Double = + sqrt( + (c1.l - c2.l).pow(2) + + (c1.a - c2.a).pow(2) + + (c1.b - c2.b).pow(2), + ) + + /** + * Convert sRGB to CIE L*a*b* via XYZ intermediate. + */ + private fun rgbToLab( + r: Int, + g: Int, + b: Int, + ): Lab { + // sRGB -> linear RGB + var rr = r / 255.0 + var gg = g / 255.0 + var bb = b / 255.0 + + rr = if (rr > 0.04045) ((rr + 0.055) / 1.055).pow(2.4) else rr / 12.92 + gg = if (gg > 0.04045) ((gg + 0.055) / 1.055).pow(2.4) else gg / 12.92 + bb = if (bb > 0.04045) ((bb + 0.055) / 1.055).pow(2.4) else bb / 12.92 + + // Linear RGB -> XYZ (D65 illuminant) + val x = (rr * 0.4124564 + gg * 0.3575761 + bb * 0.1804375) / 0.95047 + val y = (rr * 0.2126729 + gg * 0.7151522 + bb * 0.0721750) / 1.00000 + val z = (rr * 0.0193339 + gg * 0.1191920 + bb * 0.9503041) / 1.08883 + + // XYZ -> L*a*b* + val fx = labF(x) + val fy = labF(y) + val fz = labF(z) + + val l = 116.0 * fy - 16.0 + val a = 500.0 * (fx - fy) + val bLab = 200.0 * (fy - fz) + + return Lab(l, a, bLab) + } + + private fun labF(t: Double): Double = + if (t > 0.008856) { + t.pow(1.0 / 3.0) + } else { + (7.787 * t) + (16.0 / 116.0) + } +} diff --git a/commonskmm/src/commonMain/kotlin/org/dhis2/mobile/commons/color/PaletteColor.kt b/commonskmm/src/commonMain/kotlin/org/dhis2/mobile/commons/color/PaletteColor.kt new file mode 100644 index 00000000000..cbdea388636 --- /dev/null +++ b/commonskmm/src/commonMain/kotlin/org/dhis2/mobile/commons/color/PaletteColor.kt @@ -0,0 +1,21 @@ +package org.dhis2.mobile.commons.color + +/** + * Represents a color in RGB space, parsed from a hex string. + */ +data class PaletteColor( + val hex: String, + val r: Int, + val g: Int, + val b: Int, +) { + companion object { + fun fromHex(hex: String): PaletteColor { + val clean = hex.removePrefix("#") + val r = clean.substring(0, 2).toInt(16) + val g = clean.substring(2, 4).toInt(16) + val b = clean.substring(4, 6).toInt(16) + return PaletteColor(hex = "#$clean", r = r, g = g, b = b) + } + } +} diff --git a/commonskmm/src/commonTest/kotlin/org/dhis2/mobile/commons/color/ColorMatcherTest.kt b/commonskmm/src/commonTest/kotlin/org/dhis2/mobile/commons/color/ColorMatcherTest.kt new file mode 100644 index 00000000000..2b8d91aa0ac --- /dev/null +++ b/commonskmm/src/commonTest/kotlin/org/dhis2/mobile/commons/color/ColorMatcherTest.kt @@ -0,0 +1,70 @@ +package org.dhis2.mobile.commons.color + +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertNull + +class ColorMatcherTest { + // Palette sampled from PaletteThemes covering distinct hue regions + private val palette = + listOf( + PaletteColor.fromHex("#d32f2f"), // Red + PaletteColor.fromHex("#1976d2"), // Blue + PaletteColor.fromHex("#2e7d32"), // Green + PaletteColor.fromHex("#fbc02d"), // Amber/Yellow + PaletteColor.fromHex("#424242"), // Dark Grey + ) + + @Test + fun returnsNullWhenPaletteIsEmpty() { + assertNull(ColorMatcher.findClosest(128, 128, 128, emptyList())) + } + + @Test + fun returnsOnlyColorWhenPaletteHasSingleEntry() { + val single = PaletteColor.fromHex("#1976d2") + assertEquals(single, ColorMatcher.findClosest(255, 0, 0, listOf(single))) + } + + @Test + fun exactColorMatchReturnsItself() { + // #d32f2f = rgb(211, 47, 47) + val result = ColorMatcher.findClosest(211, 47, 47, palette) + assertEquals(PaletteColor.fromHex("#d32f2f"), result) + } + + @Test + fun pureRedIsMatchedToRedPaletteEntry() { + // rgb(255, 0, 0) should be perceptually closest to #d32f2f among the palette + val result = ColorMatcher.findClosest(255, 0, 0, palette) + assertEquals(PaletteColor.fromHex("#d32f2f"), result) + } + + @Test + fun pureBlueIsMatchedToBluePaletteEntry() { + // rgb(0, 0, 255) should be perceptually closest to #1976d2 among the palette + val result = ColorMatcher.findClosest(0, 0, 255, palette) + assertEquals(PaletteColor.fromHex("#1976d2"), result) + } + + @Test + fun pureGreenIsMatchedToGreenPaletteEntry() { + // rgb(0, 128, 0) should be perceptually closest to #2e7d32 among the palette + val result = ColorMatcher.findClosest(0, 128, 0, palette) + assertEquals(PaletteColor.fromHex("#2e7d32"), result) + } + + @Test + fun yellowIsMatchedToAmberPaletteEntry() { + // rgb(255, 200, 0) should be perceptually closest to #fbc02d among the palette + val result = ColorMatcher.findClosest(255, 200, 0, palette) + assertEquals(PaletteColor.fromHex("#fbc02d"), result) + } + + @Test + fun darkGreyIsMatchedToGreyPaletteEntry() { + // rgb(64, 64, 64) should be perceptually closest to #424242 among the palette + val result = ColorMatcher.findClosest(64, 64, 64, palette) + assertEquals(PaletteColor.fromHex("#424242"), result) + } +} From b4abb3c6e5a66803c00ce1d2350e93da37b5a20e Mon Sep 17 00:00:00 2001 From: Pablo Date: Thu, 12 Mar 2026 10:47:38 +0100 Subject: [PATCH 092/114] build: Allow rooted devices for training app (#4719) --- .../dhis2/usescases/splash/SplashActivity.kt | 51 ++++++++++--------- 1 file changed, 26 insertions(+), 25 deletions(-) diff --git a/app/src/main/java/org/dhis2/usescases/splash/SplashActivity.kt b/app/src/main/java/org/dhis2/usescases/splash/SplashActivity.kt index dfe8ad83645..18cc352356a 100644 --- a/app/src/main/java/org/dhis2/usescases/splash/SplashActivity.kt +++ b/app/src/main/java/org/dhis2/usescases/splash/SplashActivity.kt @@ -55,23 +55,38 @@ class SplashActivity : override fun onResume() { super.onResume() - if (BuildConfig.DEBUG || !RootBeer(this).isRootedWithoutBusyBoxCheck) { - if (!isDebuggerEnable() || !detectDebugger()) { - presenter.init() - } else { - showRootedDialog( - getString(R.string.security_title), - getString(R.string.security_debugger_message), - ) - } - } else { - showRootedDialog( + val isRooted = !BuildConfig.DEBUG && RootBeer(this).isRootedWithBusyBoxCheck + val isDebuggerActive = isDebuggerEnable() && detectDebugger() + + when { + isRooted -> showRootedDialog( getString(R.string.security_title), getString(R.string.security_rooted_message), ) + + isDebuggerActive -> showRootedDialog( + getString(R.string.security_title), + getString(R.string.security_debugger_message), + ) + + else -> presenter.init() } } + private fun isDebuggerEnable(): Boolean = + if (!BuildConfig.DEBUG && BuildConfig.FLAVOR != "dhis2Training") { + context.applicationContext.applicationInfo.flags and FLAG_DEBUGGABLE != 0 + } else { + false + } + + private fun detectDebugger(): Boolean = + if (!BuildConfig.DEBUG && BuildConfig.FLAVOR != "dhis2Training") { + Debug.isDebuggerConnected() + } else { + false + } + override fun onPause() { presenter.destroy() super.onPause() @@ -153,18 +168,4 @@ class SplashActivity : ) } } - - private fun isDebuggerEnable(): Boolean = - if (!BuildConfig.DEBUG) { - context.applicationContext.applicationInfo.flags and FLAG_DEBUGGABLE != 0 - } else { - false - } - - private fun detectDebugger(): Boolean = - if (!BuildConfig.DEBUG) { - Debug.isDebuggerConnected() - } else { - false - } } From 0df74ceba68c821fc94060ca2f7b7d8fa2612fb2 Mon Sep 17 00:00:00 2001 From: Ferdy Rodriguez Date: Thu, 12 Mar 2026 12:11:05 +0100 Subject: [PATCH 093/114] Updates Rule engine. (#4724) --- gradle/libs.versions.toml | 2 +- gradle/verification-metadata.xml | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 0ca11cf5b17..2b2a37089f8 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -12,7 +12,7 @@ dagger = '2.57.2' jacoco = '0.8.14' designSystem = "0.7.0-SNAPSHOT" dhis2sdk = "1.14.0-SNAPSHOT" -ruleEngine = "3.6.0" +ruleEngine = "3.6.1" expressionParser = "1.3.1" appcompat = "1.7.1" annotation = "1.9.1" diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index 38fbff1307e..2dd792fdd34 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -13230,6 +13230,14 @@ + + + + + + + + From 079c3c7a21a7ca45e3670aac3f6ee923d08aa056 Mon Sep 17 00:00:00 2001 From: Pablo Date: Thu, 12 Mar 2026 12:59:14 +0100 Subject: [PATCH 094/114] fix: [ANDROAPP-7494] Remove compose animation forced version (#4723) --- .../org/dhis2/usescases/login/LoginRobot.kt | 5 + build.gradle.kts | 4 - gradle/verification-metadata.xml | 354 ++++++++++++++++++ 3 files changed, 359 insertions(+), 4 deletions(-) diff --git a/app/src/androidTest/java/org/dhis2/usescases/login/LoginRobot.kt b/app/src/androidTest/java/org/dhis2/usescases/login/LoginRobot.kt index a3fffd53c88..25863c4453c 100644 --- a/app/src/androidTest/java/org/dhis2/usescases/login/LoginRobot.kt +++ b/app/src/androidTest/java/org/dhis2/usescases/login/LoginRobot.kt @@ -43,7 +43,12 @@ class LoginRobot(val composeTestRule: ComposeTestRule) : BaseRobot() { composeTestRule.onNodeWithTag(SERVER_VALIDATION_CONTENT_BUTTON_TAG).performClick() } + @OptIn(ExperimentalTestApi::class) fun typeServerToValidate(server: String) { + composeTestRule.waitUntilExactlyOneExists( + hasTestTag("INPUT_QR_CODE_FIELD"), + TIMEOUT + ) composeTestRule.onNodeWithTag("INPUT_QR_CODE_FIELD").performTextReplacement(server) } diff --git a/build.gradle.kts b/build.gradle.kts index b751339a98c..a923bc4363b 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -61,10 +61,6 @@ allprojects { eachDependency { if (requested.group == "org.jacoco") useVersion("0.8.10") - // Force androidx.compose.animation to 1.9.5 to maintain compatibility with sharedElement API - if (requested.group == "androidx.compose.animation") { - useVersion("1.9.3") - } } } } diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index 2dd792fdd34..778c65281a3 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -557,6 +557,18 @@ + + + + + + + + + + @@ -565,6 +577,12 @@ + + + + + @@ -616,6 +634,26 @@ + + + + + + + + + + + + + + + + @@ -632,6 +670,12 @@ + + + + + @@ -667,6 +711,18 @@ + + + + + + + + + + @@ -721,6 +777,26 @@ + + + + + + + + + + + + + + + + @@ -781,6 +857,12 @@ + + + + + @@ -873,6 +955,16 @@ + + + + + + + + @@ -880,6 +972,12 @@ + + + + + @@ -937,6 +1035,12 @@ + + + + + @@ -1005,6 +1109,17 @@ + + + + + + + + @@ -1566,6 +1681,16 @@ + + + + + + + + @@ -1606,6 +1731,16 @@ + + + + + + + + @@ -13795,6 +13930,16 @@ + + + + + + + + @@ -13839,6 +13984,16 @@ + + + + + + + + @@ -13975,6 +14130,17 @@ + + + + + + + + @@ -14024,6 +14190,17 @@ + + + + + + + + @@ -14112,6 +14289,17 @@ + + + + + + + + @@ -14279,6 +14467,12 @@ + + + + + @@ -14384,6 +14578,16 @@ + + + + + + + + @@ -14460,6 +14664,17 @@ + + + + + + + + @@ -14513,6 +14728,17 @@ + + + + + + + + @@ -14655,6 +14881,12 @@ + + + + + @@ -14683,6 +14915,16 @@ + + + + + + + + @@ -15030,6 +15272,17 @@ + + + + + + + + @@ -15129,6 +15382,16 @@ + + + + + + + + @@ -15189,6 +15452,16 @@ + + + + + + + + @@ -15275,6 +15548,16 @@ + + + + + + + + @@ -15406,6 +15689,16 @@ + + + + + + + + @@ -15459,6 +15752,16 @@ + + + + + + + + @@ -15510,6 +15813,16 @@ + + + + + + + + @@ -15592,6 +15905,17 @@ + + + + + + + + @@ -15727,6 +16051,16 @@ + + + + + + + + @@ -15777,6 +16111,16 @@ + + + + + + + + @@ -15818,6 +16162,16 @@ + + + + + + + + From 8ef16e6ecb62a7633789d065640dd1bd0bc5f990 Mon Sep 17 00:00:00 2001 From: Pablo Date: Fri, 13 Mar 2026 07:44:31 +0100 Subject: [PATCH 095/114] remove legacy unused code --- .../org/dhis2/common/db/TestingDatabase.kt | 61 ------------------- app/src/main/AndroidManifest.xml | 1 - .../java/org/dhis2/utils/WebViewActivity.kt | 57 ----------------- 3 files changed, 119 deletions(-) delete mode 100644 app/src/androidTest/java/org/dhis2/common/db/TestingDatabase.kt delete mode 100644 app/src/main/java/org/dhis2/utils/WebViewActivity.kt diff --git a/app/src/androidTest/java/org/dhis2/common/db/TestingDatabase.kt b/app/src/androidTest/java/org/dhis2/common/db/TestingDatabase.kt deleted file mode 100644 index 6bf505b016c..00000000000 --- a/app/src/androidTest/java/org/dhis2/common/db/TestingDatabase.kt +++ /dev/null @@ -1,61 +0,0 @@ -package org.dhis2.common.db - -import android.os.Environment -import androidx.test.core.app.ApplicationProvider -import androidx.test.ext.junit.runners.AndroidJUnit4 -import org.dhis2.AppTest -import org.dhis2.data.server.ServerModule -import org.dhis2.usescases.BaseTest -import org.hisp.dhis.android.core.D2Manager -import org.junit.Ignore -import org.junit.Test -import org.junit.runner.RunWith -import timber.log.Timber -import java.io.File -import java.io.FileInputStream -import java.io.FileOutputStream - -@RunWith(AndroidJUnit4::class) -class TestingDatabase : BaseTest() { - - companion object { - const val url = "https://play.dhis2.org/android-current/" - const val username = "android" - const val password = "Android123" - } - - @Ignore("This tests exports the Database to SD card, uncomment to use it locally") - @Test - fun copyDatabase() { - - /* Download db */ - val d2 = - D2Manager.blockingInstantiateD2(ServerModule.getD2Configuration(ApplicationProvider.getApplicationContext())) - d2?.userModule() - ?.logIn(username, password, url) - ?.blockingGet() - d2?.metadataModule()?.blockingDownload() - - /* Export Db to sdcard */ - try { - val sd = Environment.getExternalStorageDirectory() - - if (sd.canWrite()) { - val currentDB = - context.getDatabasePath("play-dhis2-org-android-current_android_unencrypted.db") - val backupDBPath = "dhis_test.db" - val backupDB = File(sd, backupDBPath) - - if (currentDB.exists()) { - val src = FileInputStream(currentDB).channel - val dst = FileOutputStream(backupDB).channel - dst.transferFrom(src, 0, src.size()) - src.close() - dst.close() - } - } - } catch (e: Exception) { - Timber.e(e) - } - } -} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e9f21c33902..40613e869a7 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -94,7 +94,6 @@ - diff --git a/app/src/main/java/org/dhis2/utils/WebViewActivity.kt b/app/src/main/java/org/dhis2/utils/WebViewActivity.kt deleted file mode 100644 index 386312314cf..00000000000 --- a/app/src/main/java/org/dhis2/utils/WebViewActivity.kt +++ /dev/null @@ -1,57 +0,0 @@ -package org.dhis2.utils - -import android.annotation.SuppressLint -import android.app.Activity -import android.os.Bundle -import android.view.View -import android.webkit.WebResourceRequest -import android.webkit.WebView -import android.webkit.WebViewClient -import androidx.databinding.DataBindingUtil -import org.dhis2.R -import org.dhis2.databinding.ActivityWebviewBinding - -class WebViewActivity : Activity() { - companion object { - const val WEB_VIEW_URL = "url" - } - - @SuppressLint("SetJavaScriptEnabled") - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - val binding: ActivityWebviewBinding = - DataBindingUtil.setContentView(this, R.layout.activity_webview) - - val url = intent?.extras?.getString(WEB_VIEW_URL) - - url?.let { - // Avoid the WebView to automatically redirect to a browser - binding.webView.webViewClient = - object : WebViewClient() { - override fun shouldOverrideUrlLoading( - view: WebView?, - request: WebResourceRequest, - ): Boolean = super.shouldOverrideUrlLoading(view, request) - - // Compatibility with APIs below 24 - @Deprecated("Deprecated in Java") - override fun shouldOverrideUrlLoading( - view: WebView?, - url: String?, - ): Boolean = super.shouldOverrideUrlLoading(view, url) - } - - binding.webView.settings.javaScriptEnabled = true - binding.webView.loadUrl(it) - } - } - - fun backToLogin(view: View) { - finish() - } - - @Deprecated("Deprecated in Java") - override fun onBackPressed() { - finish() - } -} From 81a8636dedfe7a73029ad39b6b2cf5b02c18c34f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manu=20Mu=C3=B1oz?= Date: Fri, 13 Mar 2026 09:39:41 +0100 Subject: [PATCH 096/114] feat: [ANDROAPP-7445] adapt to mandatory dataset for value (#4717) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: [ANDROAPP-7445] adapt to mandatory dataset for value Signed-off-by: Manu Muñoz * feat: [ANDROAPP-7445] adapt to mandatory dataset for value Signed-off-by: Manu Muñoz * sonarcloud depecrated networkutils Signed-off-by: Manu Muñoz --------- Signed-off-by: Manu Muñoz --- .../dhis2/data/forms/dataentry/ValueStore.kt | 9 -- .../data/forms/dataentry/ValueStoreImpl.kt | 93 ++++--------------- .../development/ConflictGenerator.kt | 49 ++++++---- .../usescases/enrollment/EnrollmentModule.kt | 16 ++-- .../SearchRepositoryImpl.java | 20 ++-- .../searchTrackEntity/SearchTEModule.java | 10 +- .../data/forms/dataentry/ValueStoreTest.kt | 22 +++-- .../searchTrackEntity/SearchRepositoryTest.kt | 4 +- 8 files changed, 90 insertions(+), 133 deletions(-) diff --git a/app/src/main/java/org/dhis2/data/forms/dataentry/ValueStore.kt b/app/src/main/java/org/dhis2/data/forms/dataentry/ValueStore.kt index 337621dc51a..60faa114c38 100644 --- a/app/src/main/java/org/dhis2/data/forms/dataentry/ValueStore.kt +++ b/app/src/main/java/org/dhis2/data/forms/dataentry/ValueStore.kt @@ -15,15 +15,6 @@ interface ValueStore { value: String?, ): Flowable - suspend fun save( - orgUnitUid: String, - periodId: String, - attributeOptionComboUid: String, - dataElementUid: String, - categoryOptionComboUid: String, - value: String?, - ): Flowable - fun deleteOptionValues(optionCodeValuesToDelete: List) fun deleteOptionValueIfSelected( diff --git a/app/src/main/java/org/dhis2/data/forms/dataentry/ValueStoreImpl.kt b/app/src/main/java/org/dhis2/data/forms/dataentry/ValueStoreImpl.kt index c505471e2c0..a6203eadaf0 100644 --- a/app/src/main/java/org/dhis2/data/forms/dataentry/ValueStoreImpl.kt +++ b/app/src/main/java/org/dhis2/data/forms/dataentry/ValueStoreImpl.kt @@ -1,16 +1,19 @@ package org.dhis2.data.forms.dataentry import io.reactivex.Flowable +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.stateIn import org.dhis2.bindings.blockingSetCheck import org.dhis2.bindings.withValueTypeCheck import org.dhis2.commons.data.EntryMode -import org.dhis2.commons.network.NetworkUtils import org.dhis2.commons.resources.ResourceManager +import org.dhis2.commons.viewmodel.DispatcherProvider import org.dhis2.data.dhislogic.DhisEnrollmentUtils import org.dhis2.form.R import org.dhis2.form.model.StoreResult import org.dhis2.form.model.ValueStoreResult -import org.dhis2.mobile.commons.providers.FieldErrorMessageProvider +import org.dhis2.mobile.commons.network.NetworkStatusProvider import org.dhis2.mobile.commons.reporting.CrashReportController import org.dhis2.utils.DhisTextUtils import org.hisp.dhis.android.core.D2 @@ -28,14 +31,22 @@ class ValueStoreImpl( private val entryMode: EntryMode, private val dhisEnrollmentUtils: DhisEnrollmentUtils, private val crashReportController: CrashReportController, - private val networkUtils: NetworkUtils, private val searchTEIRepository: SearchTEIRepository, - private val fieldErrorMessageProvider: FieldErrorMessageProvider, private val resourceManager: ResourceManager, + networkStatusProvider: NetworkStatusProvider, + dispatcherProvider: DispatcherProvider, ) : ValueStore { var enrollmentRepository: EnrollmentObjectRepository? = null var overrideProgramUid: String? = null + private val isNetworkOnline = + networkStatusProvider.connectionStatus + .stateIn( + CoroutineScope(dispatcherProvider.io()), + SharingStarted.Eagerly, + false, + ) + override fun overrideProgram(programUid: String?) { overrideProgramUid = programUid } @@ -67,78 +78,6 @@ class ValueStoreImpl( ) } - override suspend fun save( - orgUnitUid: String, - periodId: String, - attributeOptionComboUid: String, - dataElementUid: String, - categoryOptionComboUid: String, - value: String?, - ): Flowable { - val dataValueObject = - d2.dataValueModule().dataValues().value( - periodId, - orgUnitUid, - dataElementUid, - categoryOptionComboUid, - attributeOptionComboUid, - ) - - val validator = - d2 - .dataElementModule() - .dataElements() - .uid(dataElementUid) - .blockingGet() - ?.valueType() - ?.validator - - return if (!value.isNullOrEmpty()) { - if (dataValueObject.blockingExists() && - dataValueObject.blockingGet()?.value() == value - ) { - Flowable.just(StoreResult("", ValueStoreResult.VALUE_HAS_NOT_CHANGED)) - } else { - when (val validation = validator?.validate(value)) { - is Result.Failure -> - Flowable.just( - StoreResult( - uid = "", - valueStoreResult = ValueStoreResult.ERROR_UPDATING_VALUE, - valueStoreResultMessage = - fieldErrorMessageProvider - .getFriendlyErrorMessage(validation.failure), - ), - ) - - is Result.Success -> - dataValueObject - .set(value) - .andThen(Flowable.just(StoreResult("", ValueStoreResult.VALUE_CHANGED))) - - else -> - Flowable.just( - StoreResult( - uid = "", - valueStoreResult = ValueStoreResult.ERROR_UPDATING_VALUE, - valueStoreResultMessage = - fieldErrorMessageProvider - .defaultValidationErrorMessage(), - ), - ) - } - } - } else { - if (dataValueObject.blockingExists()) { - dataValueObject - .deleteIfExist() - .andThen(Flowable.just(StoreResult("", ValueStoreResult.VALUE_CHANGED))) - } else { - Flowable.just(StoreResult("", ValueStoreResult.VALUE_HAS_NOT_CHANGED)) - } - } - } - override fun saveWithTypeCheck( uid: String, value: String?, @@ -304,7 +243,7 @@ class ValueStoreImpl( value: String?, teiUid: String, ): Boolean = - if (!networkUtils.isOnline()) { + if (!isNetworkOnline.value) { dhisEnrollmentUtils.isTrackedEntityAttributeValueUnique(uid, value, teiUid) } else { val programUid = overrideProgramUid ?: enrollmentRepository?.blockingGet()?.program() diff --git a/app/src/main/java/org/dhis2/usescases/development/ConflictGenerator.kt b/app/src/main/java/org/dhis2/usescases/development/ConflictGenerator.kt index b8b9243cbdb..99c7dced63c 100644 --- a/app/src/main/java/org/dhis2/usescases/development/ConflictGenerator.kt +++ b/app/src/main/java/org/dhis2/usescases/development/ConflictGenerator.kt @@ -128,24 +128,37 @@ class ConflictGenerator( dataValueConflict.categoryOptionCombo() != null && dataValueConflict.attributeOptionCombo() != null ) { - val dataValue = - d2 - .dataValueModule() - .dataValues() - .value( - dataValueConflict.period()!!, - dataValueConflict.orgUnit()!!, - dataValueConflict.dataElement()!!, - dataValueConflict.categoryOptionCombo()!!, - dataValueConflict.attributeOptionCombo()!!, - ).blockingGet() - val dv = - dataValue?.toBuilder()?.syncState(State.SYNCED)?.build() - dv?.let { - runBlocking { - d2.databaseAdapter().upsertObject(it, DataValue::class) + d2 + .dataSetModule() + .dataSetCompleteRegistrations() + .byPeriod() + .eq(dataValueConflict.period()!!) + .byOrganisationUnitUid() + .eq(dataValueConflict.orgUnit()!!) + .byAttributeOptionComboUid() + .eq(dataValueConflict.attributeOptionCombo()!!) + .blockingGet() + .forEach { + val dataValue = + d2 + .dataValueModule() + .dataValues() + .value( + dataValueConflict.period()!!, + dataValueConflict.orgUnit()!!, + dataValueConflict.dataElement()!!, + dataValueConflict.categoryOptionCombo()!!, + dataValueConflict.attributeOptionCombo()!!, + it.dataSet(), + ).blockingGet() + val dv = + dataValue?.toBuilder()?.syncState(State.SYNCED)?.build() + dv?.let { + runBlocking { + d2.databaseAdapter().upsertObject(it, DataValue::class) + } + } } - } } }.also { runBlocking { @@ -534,7 +547,7 @@ class ConflictGenerator( syncState: String, ): String = "UPDATE Enrollment SET syncState = '$syncState'," + - " aggregatedSyncState = '$syncState' where uid = '$enrollmentUid'" + " aggregatedSyncState = '$syncState' where uid = '$enrollmentUid'" private fun updateTei( teiUid: String, diff --git a/app/src/main/java/org/dhis2/usescases/enrollment/EnrollmentModule.kt b/app/src/main/java/org/dhis2/usescases/enrollment/EnrollmentModule.kt index 53ecfd232e1..d0324b7a46d 100644 --- a/app/src/main/java/org/dhis2/usescases/enrollment/EnrollmentModule.kt +++ b/app/src/main/java/org/dhis2/usescases/enrollment/EnrollmentModule.kt @@ -8,7 +8,6 @@ import io.reactivex.processors.PublishProcessor import org.dhis2.commons.data.EntryMode import org.dhis2.commons.di.dagger.PerActivity import org.dhis2.commons.matomo.MatomoAnalyticsController -import org.dhis2.commons.network.NetworkUtils import org.dhis2.commons.prefs.PreferenceProvider import org.dhis2.commons.resources.DhisPeriodUtils import org.dhis2.commons.resources.EventResourcesProvider @@ -39,7 +38,7 @@ import org.dhis2.form.ui.provider.LegendValueProviderImpl import org.dhis2.form.ui.provider.UiEventTypesProviderImpl import org.dhis2.mobile.commons.customintents.CustomIntentRepository import org.dhis2.mobile.commons.customintents.CustomIntentRepositoryImpl -import org.dhis2.mobile.commons.providers.FieldErrorMessageProvider +import org.dhis2.mobile.commons.network.NetworkStatusProvider import org.dhis2.mobile.commons.reporting.CrashReportController import org.dhis2.usescases.teiDashboard.TeiAttributesProvider import org.dhis2.utils.analytics.AnalyticsHelper @@ -187,23 +186,22 @@ class EnrollmentModule( d2: D2, enrollmentRepository: EnrollmentObjectRepository, crashReportController: CrashReportController, - networkUtils: NetworkUtils, searchTEIRepository: SearchTEIRepository, resourceManager: ResourceManager, - ): ValueStore { - val fieldErrorMessageProvider = FieldErrorMessageProvider() - return ValueStoreImpl( + networkStatusProvider: NetworkStatusProvider, + dispatcherProvider: DispatcherProvider, + ): ValueStore = + ValueStoreImpl( d2, enrollmentRepository.blockingGet()?.trackedEntityInstance()!!, EntryMode.ATTR, DhisEnrollmentUtils(d2), crashReportController, - networkUtils, searchTEIRepository, - fieldErrorMessageProvider, resourceManager, + networkStatusProvider, + dispatcherProvider, ) - } @Provides @PerActivity diff --git a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryImpl.java b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryImpl.java index f994e09b025..ce0ebbcecbb 100644 --- a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryImpl.java +++ b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryImpl.java @@ -15,6 +15,7 @@ import org.dhis2.commons.network.NetworkUtils; import org.dhis2.commons.resources.MetadataIconProvider; import org.dhis2.commons.resources.ResourceManager; +import org.dhis2.commons.viewmodel.DispatcherProvider; import org.dhis2.data.dhislogic.DhisEnrollmentUtils; import org.dhis2.data.forms.dataentry.SearchTEIRepository; import org.dhis2.data.forms.dataentry.ValueStore; @@ -26,6 +27,7 @@ import org.dhis2.metadata.usecases.TrackedEntityInstanceConfiguration; import org.dhis2.mobile.commons.customintents.CustomIntentRepository; import org.dhis2.mobile.commons.model.CustomIntentActionTypeModel; +import org.dhis2.mobile.commons.network.NetworkStatusProvider; import org.dhis2.mobile.commons.providers.FieldErrorMessageProvider; import org.dhis2.mobile.commons.reporting.CrashReportController; import org.dhis2.tracker.data.ProfilePictureProvider; @@ -72,6 +74,7 @@ import org.hisp.dhis.android.core.trackedentity.search.TrackedEntitySearchItemAttribute; import org.hisp.dhis.android.core.trackedentity.search.TrackedEntitySearchItemHelper; import org.jetbrains.annotations.NotNull; +import org.matomo.sdk.dispatcher.Dispatcher; import java.util.ArrayList; import java.util.Collections; @@ -94,13 +97,14 @@ public class SearchRepositoryImpl implements SearchRepository { private final ResourceManager resources; private final D2 d2; private final SearchSortingValueSetter sortingValueSetter; + private final DispatcherProvider dispatcherProvider; private TrackedEntitySearchCollectionRepository trackedEntityInstanceQuery; private FilterPresenter filterPresenter; private String currentProgram; private final Charts charts; private final CrashReportController crashReportController; private DateUtils dateUtils; - private final NetworkUtils networkUtils; + private final NetworkStatusProvider networkStatusProvider; private final SearchTEIRepository searchTEIRepository; private TrackedEntityInstanceDownloader downloadRepository = null; private ThemeManager themeManager; @@ -127,13 +131,14 @@ public class SearchRepositoryImpl implements SearchRepository { SearchSortingValueSetter sortingValueSetter, Charts charts, CrashReportController crashReportController, - NetworkUtils networkUtils, + NetworkStatusProvider networkStatusProvider, SearchTEIRepository searchTEIRepository, ThemeManager themeManager, MetadataIconProvider metadataIconProvider, ProfilePictureProvider profilePictureProvider, DateUtils dateUtils, - CustomIntentRepository customIntentRepository + CustomIntentRepository customIntentRepository, + DispatcherProvider dispatcherProvider ) { this.teiType = teiType; this.d2 = d2; @@ -144,7 +149,7 @@ public class SearchRepositoryImpl implements SearchRepository { this.crashReportController = crashReportController; this.dateUtils = dateUtils; this.currentProgram = initialProgram; - this.networkUtils = networkUtils; + this.networkStatusProvider = networkStatusProvider; this.searchTEIRepository = searchTEIRepository; this.themeManager = themeManager; this.teiDownloader = new TeiDownloader( @@ -156,6 +161,7 @@ public class SearchRepositoryImpl implements SearchRepository { this.metadataIconProvider = metadataIconProvider; this.profilePictureProvider = profilePictureProvider; this.customIntentRepository = customIntentRepository; + this.dispatcherProvider = dispatcherProvider; } @@ -275,10 +281,10 @@ public Observable> saveToEnroll(@NonNull String teiType, EntryMode.ATTR, new DhisEnrollmentUtils(d2), crashReportController, - networkUtils, searchTEIRepository, - new FieldErrorMessageProvider(), - resources + resources, + networkStatusProvider, + dispatcherProvider ); if (queryData.containsKey(Constants.ENROLLMENT_DATE_UID)) diff --git a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEModule.java b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEModule.java index 7289b6ecca1..48630a68fb2 100644 --- a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEModule.java +++ b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/SearchTEModule.java @@ -170,12 +170,13 @@ SearchRepository searchRepository(@NonNull D2 d2, SearchSortingValueSetter searchSortingValueSetter, Charts charts, CrashReportController crashReportController, - NetworkUtils networkUtils, + NetworkStatusProvider networkStatusProvider, SearchTEIRepository searchTEIRepository, ThemeManager themeManager, MetadataIconProvider metadataIconProvider, DateUtils dateUtils, - CustomIntentRepository customIntentRepository) { + CustomIntentRepository customIntentRepository, + DispatcherProvider dispatcherProvider) { ProfilePictureProvider profilePictureProvider = new ProfilePictureProvider(d2); return new SearchRepositoryImpl(teiType, initialProgram, @@ -185,13 +186,14 @@ SearchRepository searchRepository(@NonNull D2 d2, searchSortingValueSetter, charts, crashReportController, - networkUtils, + networkStatusProvider, searchTEIRepository, themeManager, metadataIconProvider, profilePictureProvider, dateUtils, - customIntentRepository); + customIntentRepository, + dispatcherProvider); } @Provides diff --git a/app/src/test/java/org/dhis2/data/forms/dataentry/ValueStoreTest.kt b/app/src/test/java/org/dhis2/data/forms/dataentry/ValueStoreTest.kt index 68189846a02..d686b14769a 100644 --- a/app/src/test/java/org/dhis2/data/forms/dataentry/ValueStoreTest.kt +++ b/app/src/test/java/org/dhis2/data/forms/dataentry/ValueStoreTest.kt @@ -1,10 +1,13 @@ package org.dhis2.data.forms.dataentry +import kotlinx.coroutines.Dispatchers import org.dhis2.commons.data.EntryMode import org.dhis2.commons.network.NetworkUtils import org.dhis2.commons.resources.ResourceManager +import org.dhis2.commons.viewmodel.DispatcherProvider import org.dhis2.data.dhislogic.DhisEnrollmentUtils import org.dhis2.form.model.ValueStoreResult +import org.dhis2.mobile.commons.network.NetworkStatusProvider import org.dhis2.mobile.commons.providers.FieldErrorMessageProvider import org.dhis2.mobile.commons.reporting.CrashReportController import org.hisp.dhis.android.core.D2 @@ -28,11 +31,14 @@ class ValueStoreTest { private lateinit var dvValueStore: ValueStore private val d2: D2 = Mockito.mock(D2::class.java, Mockito.RETURNS_DEEP_STUBS) private val dhisEnrollmentUtils: DhisEnrollmentUtils = DhisEnrollmentUtils(d2) - private val fieldErrorMessageProvider: FieldErrorMessageProvider = mock() private val crashReportController: CrashReportController = mock() - private val networkUtils: NetworkUtils = mock() + private val networkStatusProvider: NetworkStatusProvider = mock() private val searchTEIRepository: SearchTEIRepository = mock() private val resourceManager: ResourceManager = mock() + private val dispatchers: DispatcherProvider = + mock { + on { io() } doReturn Dispatchers.IO + } @Before fun setUp() { @@ -43,10 +49,10 @@ class ValueStoreTest { EntryMode.ATTR, dhisEnrollmentUtils, crashReportController, - networkUtils, searchTEIRepository, - fieldErrorMessageProvider, resourceManager, + networkStatusProvider, + dispatchers, ) deValueStore = ValueStoreImpl( @@ -55,10 +61,10 @@ class ValueStoreTest { EntryMode.DE, dhisEnrollmentUtils, crashReportController, - networkUtils, searchTEIRepository, - fieldErrorMessageProvider, resourceManager, + networkStatusProvider, + dispatchers, ) dvValueStore = ValueStoreImpl( @@ -67,10 +73,10 @@ class ValueStoreTest { EntryMode.DV, dhisEnrollmentUtils, crashReportController, - networkUtils, searchTEIRepository, - fieldErrorMessageProvider, resourceManager, + networkStatusProvider, + dispatchers, ) } diff --git a/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryTest.kt b/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryTest.kt index e67ade57eed..ff3113ab982 100644 --- a/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryTest.kt +++ b/app/src/test/java/org/dhis2/usescases/searchTrackEntity/SearchRepositoryTest.kt @@ -16,6 +16,7 @@ import org.dhis2.form.model.FieldUiModel import org.dhis2.form.model.FieldUiModelImpl import org.dhis2.form.model.UiRenderType import org.dhis2.mobile.commons.customintents.CustomIntentRepository +import org.dhis2.mobile.commons.network.NetworkStatusProvider import org.dhis2.mobile.commons.reporting.CrashReportController import org.dhis2.tracker.data.ProfilePictureProvider import org.dhis2.ui.ThemeManager @@ -95,7 +96,7 @@ class SearchRepositoryTest { private val sortingValueSetter: SearchSortingValueSetter = mock() private val charts: Charts = mock() private val crashReporterController: CrashReportController = mock() - private val networkUtils: NetworkUtils = mock() + private val networkUtils: NetworkStatusProvider = mock() private val searchTEIRepository: SearchTEIRepository = mock() private val themeManager: ThemeManager = mock() private val profilePictureProvider: ProfilePictureProvider = mock() @@ -147,6 +148,7 @@ class SearchRepositoryTest { profilePictureProvider, dateUtils, customIntentRepository, + dispatchers ) } From 36d86fb75edaa98b4b9888e3208983f11b60307e Mon Sep 17 00:00:00 2001 From: Pablo Date: Fri, 13 Mar 2026 12:41:49 +0100 Subject: [PATCH 097/114] fix: [ANDROAPP-7530] Sync config status not updating occasionally (#4722) * fix: [ANDROAPP-7530] Sync config status not updating occasionally * added test * fix rebase --- .../usescases/settings/domain/LaunchSync.kt | 44 ++++------- .../settings/domain/LaunchSyncTest.kt | 73 ++++++++++++++++++- 2 files changed, 85 insertions(+), 32 deletions(-) diff --git a/app/src/main/java/org/dhis2/usescases/settings/domain/LaunchSync.kt b/app/src/main/java/org/dhis2/usescases/settings/domain/LaunchSync.kt index cf92469b58e..20d213fb8c1 100644 --- a/app/src/main/java/org/dhis2/usescases/settings/domain/LaunchSync.kt +++ b/app/src/main/java/org/dhis2/usescases/settings/domain/LaunchSync.kt @@ -3,7 +3,7 @@ package org.dhis2.usescases.settings.domain import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.merge -import kotlinx.coroutines.flow.update +import kotlinx.coroutines.flow.updateAndGet import org.dhis2.commons.Constants import org.dhis2.commons.matomo.Actions import org.dhis2.commons.matomo.Categories @@ -11,6 +11,7 @@ import org.dhis2.commons.prefs.PreferenceProvider import org.dhis2.mobile.commons.providers.TIME_DATA import org.dhis2.mobile.commons.providers.TIME_META import org.dhis2.mobile.sync.data.SyncBackgroundJobAction +import org.dhis2.mobile.sync.model.SyncJobStatus import org.dhis2.utils.analytics.AnalyticsHelper import org.dhis2.utils.analytics.CLICK import org.dhis2.utils.analytics.SYNC_DATA_NOW @@ -34,36 +35,16 @@ class LaunchSync( syncBackgroundJobAction .observeMetadataJob() .map { workStatuses -> - var workState = workStatuses.firstOrNull()?.status - when (workState) { - Status.Enqueue, - Status.Running, - Status.Blocked, - -> syncStatus.update { it.copy(metadataSyncProgress = SyncStatus.InProgress) } - - Status.Cancelled -> syncStatus.update { it.copy(metadataSyncProgress = SyncStatus.Cancelled) } - null -> syncStatus.update { it.copy(dataSyncProgress = SyncStatus.None) } - else -> syncStatus.update { it.copy(metadataSyncProgress = SyncStatus.Finished) } - } - syncStatus.value + val currentSyncStatus = combinedStatus(workStatuses) + syncStatus.updateAndGet { it.copy(metadataSyncProgress = currentSyncStatus) } } private val dataWorkInfo = syncBackgroundJobAction .observeDataJob() .map { workStatuses -> - var workState = workStatuses.firstOrNull()?.status - when (workState) { - Status.Enqueue, - Status.Running, - Status.Blocked, - -> syncStatus.update { it.copy(dataSyncProgress = SyncStatus.InProgress) } - - Status.Cancelled -> syncStatus.update { it.copy(dataSyncProgress = SyncStatus.Cancelled) } - null -> syncStatus.update { it.copy(dataSyncProgress = SyncStatus.None) } - else -> syncStatus.update { it.copy(dataSyncProgress = SyncStatus.Finished) } - } - syncStatus.value + val currentSyncStatus = combinedStatus(workStatuses) + syncStatus.updateAndGet { it.copy(dataSyncProgress = currentSyncStatus) } } val syncWorkInfo = merge(metadataWorkInfo, dataWorkInfo) @@ -100,9 +81,9 @@ class LaunchSync( metadataWasRunning: Boolean, dataWasRunning: Boolean, ) = metadataSyncProgress == SyncStatus.Finished && - metadataWasRunning || - dataSyncProgress == SyncStatus.Finished && - dataWasRunning + metadataWasRunning || + dataSyncProgress == SyncStatus.Finished && + dataWasRunning } suspend operator fun invoke(syncAction: SyncAction) { @@ -153,4 +134,11 @@ class LaunchSync( preferenceProvider.setValue(TIME_DATA, seconds) syncBackgroundJobAction.launchDataSync(seconds.toLong()) } + + private fun combinedStatus(workStatuses: List) = when { + workStatuses.any { (it.status is Status.Running) or (it.status is Status.Blocked) } -> SyncStatus.InProgress + workStatuses.all { it.status is Status.Enqueue } -> SyncStatus.None + workStatuses.all { it.status is Status.Cancelled } -> SyncStatus.Cancelled + else -> SyncStatus.Finished + } } diff --git a/app/src/test/java/org/dhis2/usescases/settings/domain/LaunchSyncTest.kt b/app/src/test/java/org/dhis2/usescases/settings/domain/LaunchSyncTest.kt index 1a8b4951a7d..36d38577a53 100644 --- a/app/src/test/java/org/dhis2/usescases/settings/domain/LaunchSyncTest.kt +++ b/app/src/test/java/org/dhis2/usescases/settings/domain/LaunchSyncTest.kt @@ -132,7 +132,11 @@ class LaunchSyncTest { awaitItem() awaitItem() mockedMetadataWorkInfo.emit(listOf(startedMetadataWorkInfo)) - assertState(awaitItem(), LaunchSync.SyncStatus.InProgress, LaunchSync.SyncStatus.None) + assertState( + awaitItem(), + LaunchSync.SyncStatus.InProgress, + LaunchSync.SyncStatus.None + ) mockedDataWorkInfo.emit(listOf(startedDataWorkInfo)) with(awaitItem()) { assertState( @@ -140,7 +144,12 @@ class LaunchSyncTest { LaunchSync.SyncStatus.InProgress, LaunchSync.SyncStatus.InProgress, ) - assertFalse(this.hasSyncFinished(metadataWasRunning = true, dataWasRunning = false)) + assertFalse( + this.hasSyncFinished( + metadataWasRunning = true, + dataWasRunning = false + ) + ) } mockedMetadataWorkInfo.emit(listOf(finishedMetadataWorkInfo)) @@ -150,14 +159,70 @@ class LaunchSyncTest { LaunchSync.SyncStatus.Finished, LaunchSync.SyncStatus.InProgress, ) - assertTrue(this.hasSyncFinished(metadataWasRunning = true, dataWasRunning = true)) + assertTrue( + this.hasSyncFinished( + metadataWasRunning = true, + dataWasRunning = true + ) + ) } mockedDataWorkInfo.emit(listOf(finishedDataWorkInfo)) - assertState(awaitItem(), LaunchSync.SyncStatus.Finished, LaunchSync.SyncStatus.Finished) + assertState( + awaitItem(), + LaunchSync.SyncStatus.Finished, + LaunchSync.SyncStatus.Finished + ) cancelAndIgnoreRemainingEvents() } } + @Test + fun shouldCombineMetadataProgress() = + runTest { + launchSync.syncWorkInfo.test { + awaitItem() + awaitItem() + syncStatuses.forEach { metadataSyncStatus -> + syncStatuses.forEach { metadataNowSyncStatus -> + mockedMetadataWorkInfo.emit( + listOf( + metadataSyncStatus, + metadataNowSyncStatus + ) + ) + val expectedValue = when { + (metadataSyncStatus.status is SyncStatus.Running) or (metadataNowSyncStatus.status is SyncStatus.Running) -> LaunchSync.SyncStatus.InProgress + (metadataSyncStatus.status is SyncStatus.Blocked) or (metadataNowSyncStatus.status is SyncStatus.Blocked) -> LaunchSync.SyncStatus.InProgress + (metadataSyncStatus.status is SyncStatus.Enqueue) and (metadataNowSyncStatus.status is SyncStatus.Enqueue) -> LaunchSync.SyncStatus.None + (metadataSyncStatus.status is SyncStatus.Cancelled) and (metadataNowSyncStatus.status is SyncStatus.Cancelled) -> LaunchSync.SyncStatus.Cancelled + else -> LaunchSync.SyncStatus.Finished + + + } + + assertState( + awaitItem(), + expectedValue, + LaunchSync.SyncStatus.None + ) + } + } + } + } + + private val syncStatuses = listOf( + mockedMetadataSyncJobStatus(SyncStatus.Enqueue), + mockedMetadataSyncJobStatus(SyncStatus.Running), + mockedMetadataSyncJobStatus(SyncStatus.Succeed), + mockedMetadataSyncJobStatus(SyncStatus.Failed), + mockedMetadataSyncJobStatus(SyncStatus.Blocked), + mockedMetadataSyncJobStatus(SyncStatus.Cancelled), + ) + + private fun mockedMetadataSyncJobStatus(mockedStatus: SyncStatus) = mock { + on { status } doReturn mockedStatus + } + private fun assertState( syncStatusProgress: LaunchSync.SyncStatusProgress, metadataSyncProgress: LaunchSync.SyncStatus, From 83d3dbb7e3c8d69fd0da54ae1202cfc38b05e509 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manu=20Mu=C3=B1oz?= Date: Fri, 13 Mar 2026 13:58:17 +0100 Subject: [PATCH 098/114] fix: [ANDROAPP-7496] hide enrolled orgunit (#4726) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Manu Muñoz --- .../usescases/searchTrackEntity/ui/mapper/TEICardMapper.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/ui/mapper/TEICardMapper.kt b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/ui/mapper/TEICardMapper.kt index 0ff1b4721e9..794ba07e04d 100644 --- a/app/src/main/java/org/dhis2/usescases/searchTrackEntity/ui/mapper/TEICardMapper.kt +++ b/app/src/main/java/org/dhis2/usescases/searchTrackEntity/ui/mapper/TEICardMapper.kt @@ -148,7 +148,7 @@ class TEICardMapper( ownerOrgUnit = searchTEIModel.ownerOrgUnit, ) } - if (searchTEIModel.displayOrgUnit) { + if (searchTEIModel.displayOrgUnit && searchTEIModel.enrolledOrgUnit != null) { checkEnrolledIn( list = list, enrolledOrgUnit = searchTEIModel.enrolledOrgUnit, From e229decccfc23796c5f4f8823e09adb6cc9c818e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Miguel=20Rubio?= Date: Mon, 16 Mar 2026 13:32:26 +0100 Subject: [PATCH 099/114] ANDROAPP-7448 Replace Pin layout [skip size] (#4712) * feat: Modify PinBottomSheet file to use fullScreenDialog component * feat: Remove old PinView.kt and replace it by PinBottomSheet * test: remove pin test * refactor: update ViewCompositionStrategy in PinBottomSheetLauncher (#4707) * fix: manage PIN bottom sheet lifecycle in MainActivity * feat: refactor PinBottomSheet to support previews and improve landscape layout * refactor: rename PinBottomSheet to PinDialog and reorganize PIN models * refactor: update PIN UI state management and resource handling * feat: add key icon to PIN dialog primary button when in SET mode * refactor: simplify PinDialog by passing uiState to PinInputBlock and renaming components * fix: Set contentDescription to null for Pin Icon in PinDialog.kt * fix: enable vertical scrolling and update layout constraints in PinDialog * refactor: update PinDialog layout to use a Row with side-by-side scrollable columns --------- Co-authored-by: Xavier Molloy --- app/build.gradle.kts | 1 - .../org/dhis2/usescases/UseCaseTestsSuite.kt | 2 - .../org/dhis2/usescases/main/MainRobot.kt | 4 - .../java/org/dhis2/usescases/pin/PinRobot.kt | 40 -- .../java/org/dhis2/usescases/pin/PinTest.kt | 35 -- app/src/main/java/org/dhis2/App.java | 14 - .../org/dhis2/data/user/UserComponent.java | 5 - .../general/SessionManagerActivity.kt | 63 +-- .../org/dhis2/usescases/main/MainActivity.kt | 33 +- .../java/org/dhis2/utils/session/PinDialog.kt | 142 ----- .../org/dhis2/utils/session/PinExtensions.kt | 23 - .../java/org/dhis2/utils/session/PinModule.kt | 42 -- .../org/dhis2/utils/session/PinPresenter.kt | 58 -- .../java/org/dhis2/utils/session/PinView.kt | 7 - .../dhis2/utils/session/SessionComponent.kt | 33 -- app/src/main/res/layout-land/layout_pin.xml | 89 --- app/src/main/res/layout/activity_main.xml | 5 - app/src/main/res/layout/dialog_pin.xml | 87 --- app/src/main/res/layout/layout_pin.xml | 101 ---- .../dhis2/utils/session/PinPresenterTest.kt | 165 ------ gradle.properties | 1 - gradle/libs.versions.toml | 2 - gradle/verification-metadata.xml | 59 +- login/build.gradle.kts | 2 +- .../login/pin/PinBottomSheetLauncher.kt | 45 ++ .../login/main/ui/screen/CredentialsScreen.kt | 6 +- .../dhis2/mobile/login/pin/di/PinModule.kt | 11 +- .../mobile/login/pin/domain/model/PinMode.kt | 16 + .../mobile/login/pin/domain/model/PinState.kt | 41 -- .../login/pin/ui/components/PinBottomSheet.kt | 363 ------------- .../login/pin/ui/components/PinDialog.kt | 511 ++++++++++++++++++ .../pin/ui/provider/PinResourceProvider.kt | 94 +++- .../mobile/login/pin/ui/state/PinUiState.kt | 31 ++ .../login/pin/ui/viewmodel/PinViewModel.kt | 124 +++-- .../pin/ui/viewmodel/PinViewModelTest.kt | 247 ++++----- 35 files changed, 965 insertions(+), 1537 deletions(-) delete mode 100644 app/src/androidTest/java/org/dhis2/usescases/pin/PinRobot.kt delete mode 100644 app/src/androidTest/java/org/dhis2/usescases/pin/PinTest.kt delete mode 100644 app/src/main/java/org/dhis2/utils/session/PinDialog.kt delete mode 100644 app/src/main/java/org/dhis2/utils/session/PinExtensions.kt delete mode 100644 app/src/main/java/org/dhis2/utils/session/PinModule.kt delete mode 100644 app/src/main/java/org/dhis2/utils/session/PinPresenter.kt delete mode 100644 app/src/main/java/org/dhis2/utils/session/PinView.kt delete mode 100644 app/src/main/java/org/dhis2/utils/session/SessionComponent.kt delete mode 100644 app/src/main/res/layout-land/layout_pin.xml delete mode 100644 app/src/main/res/layout/dialog_pin.xml delete mode 100644 app/src/main/res/layout/layout_pin.xml delete mode 100644 app/src/test/java/org/dhis2/utils/session/PinPresenterTest.kt create mode 100644 login/src/androidMain/kotlin/org/dhis2/mobile/login/pin/PinBottomSheetLauncher.kt create mode 100644 login/src/commonMain/kotlin/org/dhis2/mobile/login/pin/domain/model/PinMode.kt delete mode 100644 login/src/commonMain/kotlin/org/dhis2/mobile/login/pin/domain/model/PinState.kt delete mode 100644 login/src/commonMain/kotlin/org/dhis2/mobile/login/pin/ui/components/PinBottomSheet.kt create mode 100644 login/src/commonMain/kotlin/org/dhis2/mobile/login/pin/ui/components/PinDialog.kt create mode 100644 login/src/commonMain/kotlin/org/dhis2/mobile/login/pin/ui/state/PinUiState.kt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 7b2c4bc3e44..2c6219b2902 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -306,7 +306,6 @@ dependencies { implementation(libs.androidx.biometric) implementation(libs.androidx.material3) implementation(libs.google.guava) - implementation(libs.github.pinlock) implementation(libs.github.fancyshowcase) implementation(libs.lottie) implementation(libs.network.okhttp) diff --git a/app/src/androidTest/java/org/dhis2/usescases/UseCaseTestsSuite.kt b/app/src/androidTest/java/org/dhis2/usescases/UseCaseTestsSuite.kt index 84e2ac1e94f..fa9ddbf28ff 100644 --- a/app/src/androidTest/java/org/dhis2/usescases/UseCaseTestsSuite.kt +++ b/app/src/androidTest/java/org/dhis2/usescases/UseCaseTestsSuite.kt @@ -6,7 +6,6 @@ import org.dhis2.usescases.event.EventTest import org.dhis2.usescases.eventsWithoutRegistration.eventDetails.EventInitialTest import org.dhis2.usescases.login.LoginTest import org.dhis2.usescases.main.MainTest -import org.dhis2.usescases.pin.PinTest import org.dhis2.usescases.programevent.ProgramEventTest import org.dhis2.usescases.searchte.SearchTETest import org.dhis2.usescases.settings.SettingsTest @@ -23,7 +22,6 @@ import org.junit.runners.Suite EventInitialTest::class, EventTest::class, MainTest::class, - PinTest::class, ProgramEventTest::class, SearchTETest::class, SettingsTest::class, diff --git a/app/src/androidTest/java/org/dhis2/usescases/main/MainRobot.kt b/app/src/androidTest/java/org/dhis2/usescases/main/MainRobot.kt index 3ab5103fef8..daa49524a31 100644 --- a/app/src/androidTest/java/org/dhis2/usescases/main/MainRobot.kt +++ b/app/src/androidTest/java/org/dhis2/usescases/main/MainRobot.kt @@ -37,10 +37,6 @@ class MainRobot(val composeTestRule: ComposeTestRule) : BaseRobot() { waitToDebounce(FRAGMENT_TRANSITION) } - fun clickOnPin() = apply { - onView(withId(R.id.nav_view)).perform(NavigationViewActions.navigateTo(R.id.block_button)) - } - fun clickAbout() = apply { onView(withId(R.id.nav_view)).perform(NavigationViewActions.navigateTo(R.id.menu_about)) waitToDebounce(FRAGMENT_TRANSITION) diff --git a/app/src/androidTest/java/org/dhis2/usescases/pin/PinRobot.kt b/app/src/androidTest/java/org/dhis2/usescases/pin/PinRobot.kt deleted file mode 100644 index a77476e6560..00000000000 --- a/app/src/androidTest/java/org/dhis2/usescases/pin/PinRobot.kt +++ /dev/null @@ -1,40 +0,0 @@ -package org.dhis2.usescases.pin - -import androidx.test.espresso.Espresso.onView -import androidx.test.espresso.action.ViewActions.click -import androidx.test.espresso.assertion.ViewAssertions.matches -import androidx.test.espresso.intent.Intents -import androidx.test.espresso.intent.matcher.IntentMatchers.hasComponent -import androidx.test.espresso.matcher.ViewMatchers.isDisplayed -import androidx.test.espresso.matcher.ViewMatchers.withId -import androidx.test.espresso.matcher.ViewMatchers.withText -import org.dhis2.R -import org.dhis2.common.BaseRobot -import org.dhis2.common.matchers.isToast -import org.dhis2.usescases.main.MainActivity -import org.hamcrest.CoreMatchers.allOf - -fun pinRobot(pinBody: PinRobot.() -> Unit) { - PinRobot().apply { - pinBody() - } -} - -class PinRobot : BaseRobot() { - - fun clickForgotCode() { - onView(withId(R.id.forgotCode)).perform(click()) - } - - fun clickPinButton(button: String) { - onView(withText(button)).perform(click()) - } - - fun checkRedirectToHome() { - Intents.intended(allOf(hasComponent(MainActivity::class.java.name))) - } - - fun checkToastDisplayed(toastText: String) { - onView(withText(toastText)).inRoot(isToast()).check(matches(isDisplayed())) - } -} diff --git a/app/src/androidTest/java/org/dhis2/usescases/pin/PinTest.kt b/app/src/androidTest/java/org/dhis2/usescases/pin/PinTest.kt deleted file mode 100644 index d05622e8d83..00000000000 --- a/app/src/androidTest/java/org/dhis2/usescases/pin/PinTest.kt +++ /dev/null @@ -1,35 +0,0 @@ -package org.dhis2.usescases.pin - -import androidx.compose.ui.test.junit4.createComposeRule -import androidx.test.ext.junit.runners.AndroidJUnit4 -import androidx.test.rule.ActivityTestRule -import org.dhis2.usescases.BaseTest -import org.dhis2.usescases.main.MainActivity -import org.dhis2.usescases.main.homeRobot -import org.junit.Rule -import org.junit.Test -import org.junit.runner.RunWith - -@RunWith(AndroidJUnit4::class) -class PinTest : BaseTest() { - - @get:Rule - val rule = ActivityTestRule(MainActivity::class.java, false, false) - - @get:Rule - val composeTestRule = createComposeRule() - - @Test - fun openPin() { - startActivity() - - homeRobot(composeTestRule) { - clickOnNavigationDrawerMenu() - clickOnPin() - } - } - - private fun startActivity() { - rule.launchActivity(null) - } -} diff --git a/app/src/main/java/org/dhis2/App.java b/app/src/main/java/org/dhis2/App.java index 74aa75c7115..d1fc1043f4e 100644 --- a/app/src/main/java/org/dhis2/App.java +++ b/app/src/main/java/org/dhis2/App.java @@ -45,8 +45,6 @@ import org.dhis2.usescases.teiDashboard.TeiDashboardModule; import org.dhis2.utils.analytics.AnalyticsModule; import org.dhis2.utils.granularsync.SyncStatusDialogProvider; -import org.dhis2.utils.session.PinModule; -import org.dhis2.utils.session.SessionComponent; import org.dhis2.utils.timber.DebugTree; import org.hisp.dhis.android.core.D2Manager; import org.hisp.dhis.android.core.datastore.KeyValuePair; @@ -87,9 +85,6 @@ public class App extends android.app.Application implements Components, Lifecycl @PerActivity private TeiDashboardComponent dashboardComponent; - @Nullable - private SessionComponent sessionComponent; - private boolean fromBackGround = false; private boolean recreated; @@ -274,15 +269,6 @@ public void releaseDashboardComponent() { } } - @NotNull - public SessionComponent createSessionComponent(PinModule pinModule) { - return (sessionComponent = userComponent.plus(pinModule)); - } - - public void releaseSessionComponent() { - sessionComponent = null; - } - @OnLifecycleEvent(Lifecycle.Event.ON_STOP) public void onAppBackgrounded() { Timber.tag("BG").d("App in background"); diff --git a/app/src/main/java/org/dhis2/data/user/UserComponent.java b/app/src/main/java/org/dhis2/data/user/UserComponent.java index 945eda6e50d..821e61f4cd7 100644 --- a/app/src/main/java/org/dhis2/data/user/UserComponent.java +++ b/app/src/main/java/org/dhis2/data/user/UserComponent.java @@ -64,8 +64,6 @@ import org.dhis2.usescases.teiDashboard.dialogs.scheduling.SchedulingModule; import org.dhis2.usescases.teiDashboard.teiProgramList.TeiProgramListComponent; import org.dhis2.usescases.teiDashboard.teiProgramList.TeiProgramListModule; -import org.dhis2.utils.session.PinModule; -import org.dhis2.utils.session.SessionComponent; import dagger.Subcomponent; import dhis2.org.analytics.charts.ui.di.AnalyticsFragmentComponent; @@ -170,9 +168,6 @@ public interface UserComponent { @NonNull EventDetailsComponent plus(EventDetailsModule eventDetailsModule); - @NonNull - SessionComponent plus(PinModule pinModule); - @NonNull SchedulingComponent plus(SchedulingModule schedulingModule); } diff --git a/app/src/main/java/org/dhis2/usescases/general/SessionManagerActivity.kt b/app/src/main/java/org/dhis2/usescases/general/SessionManagerActivity.kt index 6e4af775015..a8bd1f4a477 100644 --- a/app/src/main/java/org/dhis2/usescases/general/SessionManagerActivity.kt +++ b/app/src/main/java/org/dhis2/usescases/general/SessionManagerActivity.kt @@ -28,8 +28,8 @@ import org.dhis2.usescases.splash.SplashActivity import org.dhis2.utils.analytics.AnalyticsHelper import org.dhis2.utils.analytics.CLICK import org.dhis2.utils.analytics.FORGOT_CODE -import org.dhis2.utils.session.PIN_DIALOG_TAG -import org.dhis2.utils.session.PinDialog +import org.dhis2.mobile.login.pin.addPinBottomSheet +import org.dhis2.mobile.login.pin.domain.model.PinMode import org.koin.android.ext.android.inject import javax.inject.Inject @@ -50,7 +50,7 @@ abstract class SessionManagerActivity : @Inject lateinit var analyticsHelper: AnalyticsHelper - private var pinDialog: PinDialog? = null + private var pinComposeView: androidx.compose.ui.platform.ComposeView? = null private var lifeCycleObservable: BehaviorSubject = BehaviorSubject.create() @@ -135,23 +135,27 @@ abstract class SessionManagerActivity : this.activityResultObserver = activityResultObserver } - private fun initPinDialog() { - pinDialog = - PinDialog( - PinDialog.Mode.ASK, - (this is LoginActivity), - { - startActivity(MainActivity::class.java, null, true, true, null) - null - }, - { - analyticsHelper.setEvent(FORGOT_CODE, CLICK, FORGOT_CODE) - if (this !is LoginActivity) { - startActivity(LoginActivity::class.java, null, true, true, null) - } - null - }, - ) + private fun showPinBottomSheet() { + if (pinComposeView != null) return + pinComposeView = addPinBottomSheet( + mode = PinMode.ASK, + onSuccess = { + startActivity(MainActivity::class.java, null, true, true, null) + }, + onDismiss = { + analyticsHelper.setEvent(FORGOT_CODE, CLICK, FORGOT_CODE) + if (this !is LoginActivity) { + startActivity(LoginActivity::class.java, null, true, true, null) + } + }, + ) + } + + private fun removePinBottomSheet() { + pinComposeView?.let { view -> + (window?.decorView as? android.view.ViewGroup)?.removeView(view) + } + pinComposeView = null } override fun unsubscribe() { @@ -184,10 +188,6 @@ abstract class SessionManagerActivity : if (finishCurrent) finish() } - private fun showPinDialog() { - pinDialog!!.show(supportFragmentManager, PIN_DIALOG_TAG) - } - @Deprecated("Deprecated in Java") override fun onActivityResult( requestCode: Int, @@ -219,8 +219,7 @@ abstract class SessionManagerActivity : override fun onStop() { super.onStop() - val dialog = pinDialog - dialog?.dismissAllowingStateLoss() + removePinBottomSheet() } override fun onDestroy() { @@ -244,11 +243,8 @@ abstract class SessionManagerActivity : comesFromImageSource = false } else { if (this.app().isSessionBlocked && this !is SplashActivity && this !is LoginActivity) { - if (pinDialog == null) { - initPinDialog() - showPinDialog() - } else if (pinDialog?.isVisible == false) { - showPinDialog() + if (pinComposeView == null) { + showPinBottomSheet() } } else { if (this !is LoginActivity && this !is SplashActivity) { @@ -260,9 +256,8 @@ abstract class SessionManagerActivity : private fun sessionAction(accountsCount: Int) { if (this.app().isSessionBlocked && this !is SplashActivity) { - if (pinDialog == null) { - initPinDialog() - showPinDialog() + if (pinComposeView == null) { + showPinBottomSheet() } } else { navigateToLogin(accountsCount) diff --git a/app/src/main/java/org/dhis2/usescases/main/MainActivity.kt b/app/src/main/java/org/dhis2/usescases/main/MainActivity.kt index 69801d886e7..a457e2570ab 100644 --- a/app/src/main/java/org/dhis2/usescases/main/MainActivity.kt +++ b/app/src/main/java/org/dhis2/usescases/main/MainActivity.kt @@ -21,6 +21,7 @@ import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.livedata.observeAsState import androidx.compose.runtime.remember +import androidx.compose.ui.platform.ComposeView import androidx.compose.ui.platform.ViewCompositionStrategy import androidx.constraintlayout.widget.ConstraintSet import androidx.core.app.NotificationCompat @@ -58,8 +59,8 @@ import org.dhis2.utils.customviews.navigationbar.NavigationPage import org.dhis2.utils.customviews.navigationbar.NavigationPageConfigurator import org.dhis2.utils.extension.navigateTo import org.dhis2.utils.granularsync.SyncStatusDialog -import org.dhis2.utils.session.PIN_DIALOG_TAG -import org.dhis2.utils.session.PinDialog +import org.dhis2.mobile.login.pin.addPinBottomSheet +import org.dhis2.mobile.login.pin.domain.model.PinMode import org.hisp.dhis.mobile.ui.designsystem.component.navigationBar.NavigationBar import org.koin.android.ext.android.inject import java.io.File @@ -97,6 +98,7 @@ class MainActivity : } private var backDropActive = false + private var pinComposeView: ComposeView? = null private val requestWritePermissions = registerForActivityResult(ActivityResultContracts.RequestPermission()) { granted -> @@ -114,8 +116,6 @@ class MainActivity : } } - private var isPinLayoutVisible = false - private lateinit var mainNavigator: MainNavigator private val navigationLauncher = @@ -265,6 +265,7 @@ class MainActivity : override fun onPause() { presenter.onDetach() + removePinBottomSheet() super.onPause() } @@ -514,23 +515,31 @@ class MainActivity : override fun onLockClick() { if (!presenter.isPinStored()) { + if (pinComposeView != null) return binding.mainDrawerLayout.closeDrawers() - PinDialog( - PinDialog.Mode.SET, - true, - { presenter.blockSession() }, - {}, - ).show(supportFragmentManager, PIN_DIALOG_TAG) - isPinLayoutVisible = true + pinComposeView = addPinBottomSheet( + mode = PinMode.SET, + onSuccess = { + removePinBottomSheet() + presenter.blockSession() + }, + onDismiss = { removePinBottomSheet() }, + ) } else { presenter.blockSession() } } + private fun removePinBottomSheet() { + pinComposeView?.let { view -> + (window?.decorView as? android.view.ViewGroup)?.removeView(view) + } + pinComposeView = null + } + private fun backPressed() { when { !mainNavigator.isHome() -> presenter.onNavigateBackToHome() - isPinLayoutVisible -> isPinLayoutVisible = false else -> back() } } diff --git a/app/src/main/java/org/dhis2/utils/session/PinDialog.kt b/app/src/main/java/org/dhis2/utils/session/PinDialog.kt deleted file mode 100644 index caa274c6db8..00000000000 --- a/app/src/main/java/org/dhis2/utils/session/PinDialog.kt +++ /dev/null @@ -1,142 +0,0 @@ -package org.dhis2.utils.session - -import android.app.Dialog -import android.os.Bundle -import android.os.Handler -import android.os.Process -import android.view.LayoutInflater -import android.view.View -import android.view.ViewGroup -import android.view.Window -import android.widget.Toast -import androidx.fragment.app.DialogFragment -import androidx.fragment.app.FragmentManager -import org.dhis2.R -import org.dhis2.bindings.app -import org.dhis2.databinding.DialogPinBinding -import javax.inject.Inject - -const val PIN_DIALOG_TAG: String = "PINDIALOG" - -class PinDialog( - val mode: Mode, - private val canBeClosed: Boolean, - private val unlockCallback: () -> Unit, - private val forgotPinCallback: () -> Unit, -) : DialogFragment(), - PinView { - private lateinit var binding: DialogPinBinding - - @Inject - lateinit var presenter: PinPresenter - - enum class Mode { - SET, - ASK, - } - - private var pinAttempts = 0 - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setStyle(STYLE_NO_TITLE, android.R.style.Theme_DeviceDefault_Light_NoActionBar) - app().createSessionComponent(PinModule(this)).inject(this) - } - - override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { - val dialog = super.onCreateDialog(savedInstanceState) - dialog.window!!.apply { - requestFeature(Window.FEATURE_NO_TITLE) - setBackgroundDrawableResource(android.R.color.transparent) - setWindowAnimations(R.style.pin_dialog_animation) - isCancelable = false - } - return dialog - } - - override fun onCreateView( - inflater: LayoutInflater, - container: ViewGroup?, - savedInstanceState: Bundle?, - ): View? { - binding = DialogPinBinding.inflate(layoutInflater, container, false) - binding.closeButton.apply { - visibility = if (canBeClosed) View.VISIBLE else View.GONE - setOnClickListener { closeDialog() } - } - - when (mode) { - Mode.ASK -> { - binding.title.text = getString(R.string.unblock_session) - binding.forgotCode.apply { - visibility = View.VISIBLE - setOnClickListener { recoverPin() } - } - } - Mode.SET -> { - binding.title.text = getString(R.string.set_pin) - binding.forgotCode.visibility = View.GONE - } - } - - binding.pinLockView.attachIndicatorDots(binding.indicatorDots) - binding.pinLockView.onPinSet { - when (mode) { - Mode.SET -> { - presenter.savePin(it) - blockSession() - } - Mode.ASK -> - presenter.unlockSession( - it, - attempts = pinAttempts, - onPinCorrect = unlockCallback, - onError = { - pinAttempts += 1 - Toast - .makeText( - context, - getString(R.string.wrong_pin), - Toast.LENGTH_LONG, - ).show() - binding.pinLockView.resetPinLockView() - }, - onTwoManyAttempts = { recoverPin() }, - ) - } - } - - return binding.root - } - - private fun blockSession() { - Handler().postDelayed( - { Process.killProcess(Process.myPid()) }, - 1500, - ) - } - - override fun closeDialog() { - dismissAllowingStateLoss() - } - - override fun dismiss() { - app().releaseSessionComponent() - dismissAllowingStateLoss() - } - - override fun recoverPin() { - presenter.logOut() - forgotPinCallback.invoke() - dismissAllowingStateLoss() - } - - override fun show( - manager: FragmentManager, - tag: String?, - ) { - if (manager.findFragmentByTag(tag) == null) { - manager.beginTransaction().add(this, tag).commitAllowingStateLoss() - } - } -} diff --git a/app/src/main/java/org/dhis2/utils/session/PinExtensions.kt b/app/src/main/java/org/dhis2/utils/session/PinExtensions.kt deleted file mode 100644 index 68c0f5319f3..00000000000 --- a/app/src/main/java/org/dhis2/utils/session/PinExtensions.kt +++ /dev/null @@ -1,23 +0,0 @@ -package org.dhis2.utils.session - -import com.andrognito.pinlockview.PinLockListener -import com.andrognito.pinlockview.PinLockView - -inline fun PinLockView.onPinSet(crossinline continuation: (String) -> Unit) { - setPinLockListener( - object : PinLockListener { - override fun onEmpty() { - } - - override fun onComplete(pin: String) { - continuation(pin) - } - - override fun onPinChange( - pinLength: Int, - intermediatePin: String?, - ) { - } - }, - ) -} diff --git a/app/src/main/java/org/dhis2/utils/session/PinModule.kt b/app/src/main/java/org/dhis2/utils/session/PinModule.kt deleted file mode 100644 index b09629983b3..00000000000 --- a/app/src/main/java/org/dhis2/utils/session/PinModule.kt +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright (c) 2004 - 2019, University of Oslo - * All rights reserved. - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * Neither the name of the HISP project nor the names of its contributors may - * be used to endorse or promote products derived from this software without - * specific prior written permission. - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -package org.dhis2.utils.session - -import dagger.Module -import dagger.Provides -import org.dhis2.commons.prefs.PreferenceProvider -import org.hisp.dhis.android.core.D2 - -@Module -class PinModule( - val view: PinView, -) { - @Provides - fun providesPresenter( - d2: D2, - preferenceProvider: PreferenceProvider, - ): PinPresenter = PinPresenter(view, preferenceProvider, d2) -} diff --git a/app/src/main/java/org/dhis2/utils/session/PinPresenter.kt b/app/src/main/java/org/dhis2/utils/session/PinPresenter.kt deleted file mode 100644 index ddbd8e97112..00000000000 --- a/app/src/main/java/org/dhis2/utils/session/PinPresenter.kt +++ /dev/null @@ -1,58 +0,0 @@ -package org.dhis2.utils.session - -import org.dhis2.commons.prefs.Preference -import org.dhis2.commons.prefs.PreferenceProvider -import org.hisp.dhis.android.core.D2 -import timber.log.Timber - -class PinPresenter( - val view: PinView, - val preferenceProvider: PreferenceProvider, - val d2: D2, -) { - fun unlockSession( - pin: String, - attempts: Int, - onPinCorrect: () -> Unit, - onError: () -> Unit, - onTwoManyAttempts: () -> Unit, - ) { - val pinStored = - d2 - .dataStoreModule() - .localDataStore() - .value(Preference.PIN) - .blockingGet() - ?.value() - when { - pinStored == pin -> { - onPinCorrect() - } - attempts < 2 -> onError() - else -> onTwoManyAttempts() - } - } - - fun savePin(pin: String) { - d2 - .dataStoreModule() - .localDataStore() - .value(Preference.PIN) - .blockingSet(pin) - preferenceProvider.setValue(Preference.SESSION_LOCKED, true) - } - - fun logOut() { - try { - d2 - .dataStoreModule() - .localDataStore() - .value(Preference.PIN) - .blockingDelete() - d2.userModule().blockingLogOut() - preferenceProvider.setValue(Preference.SESSION_LOCKED, false) - } catch (e: Exception) { - Timber.e(e) - } - } -} diff --git a/app/src/main/java/org/dhis2/utils/session/PinView.kt b/app/src/main/java/org/dhis2/utils/session/PinView.kt deleted file mode 100644 index 1f5df61eb7d..00000000000 --- a/app/src/main/java/org/dhis2/utils/session/PinView.kt +++ /dev/null @@ -1,7 +0,0 @@ -package org.dhis2.utils.session - -interface PinView { - fun closeDialog() - - fun recoverPin() -} diff --git a/app/src/main/java/org/dhis2/utils/session/SessionComponent.kt b/app/src/main/java/org/dhis2/utils/session/SessionComponent.kt deleted file mode 100644 index ea6b8372ca4..00000000000 --- a/app/src/main/java/org/dhis2/utils/session/SessionComponent.kt +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (c) 2004 - 2019, University of Oslo - * All rights reserved. - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright notice, this - * list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * Neither the name of the HISP project nor the names of its contributors may - * be used to endorse or promote products derived from this software without - * specific prior written permission. - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR - * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -package org.dhis2.utils.session - -import dagger.Subcomponent - -@Subcomponent(modules = [PinModule::class]) -interface SessionComponent { - fun inject(pinDialog: PinDialog) -} diff --git a/app/src/main/res/layout-land/layout_pin.xml b/app/src/main/res/layout-land/layout_pin.xml deleted file mode 100644 index 3a8dd114cc2..00000000000 --- a/app/src/main/res/layout-land/layout_pin.xml +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index c8565416d31..046b0745396 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -193,11 +193,6 @@ app:itemTextColor="@color/text_black_333" app:menu="@menu/main_menu" /> - - diff --git a/app/src/main/res/layout/dialog_pin.xml b/app/src/main/res/layout/dialog_pin.xml deleted file mode 100644 index 2a7ee79489a..00000000000 --- a/app/src/main/res/layout/dialog_pin.xml +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/layout_pin.xml b/app/src/main/res/layout/layout_pin.xml deleted file mode 100644 index 284544d1295..00000000000 --- a/app/src/main/res/layout/layout_pin.xml +++ /dev/null @@ -1,101 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/test/java/org/dhis2/utils/session/PinPresenterTest.kt b/app/src/test/java/org/dhis2/utils/session/PinPresenterTest.kt deleted file mode 100644 index 09e73782e96..00000000000 --- a/app/src/test/java/org/dhis2/utils/session/PinPresenterTest.kt +++ /dev/null @@ -1,165 +0,0 @@ -package org.dhis2.utils.session - -import org.dhis2.commons.prefs.Preference -import org.dhis2.commons.prefs.PreferenceProvider -import org.hisp.dhis.android.core.D2 -import org.junit.Before -import org.junit.Test -import org.mockito.Mockito -import org.mockito.kotlin.doReturn -import org.mockito.kotlin.mock -import org.mockito.kotlin.times -import org.mockito.kotlin.verify -import org.mockito.kotlin.whenever - -class PinPresenterTest { - lateinit var presenter: PinPresenter - private var pinView: PinView = mock() - private var preferenceProvider: PreferenceProvider = mock() - private val d2: D2 = Mockito.mock(D2::class.java, Mockito.RETURNS_DEEP_STUBS) - - private val onPinCorrect: () -> Unit = mock() - private val onError: () -> Unit = mock() - private val onTwoManyAttempts: () -> Unit = mock() - - @Before - fun setUp() { - presenter = PinPresenter(pinView, preferenceProvider, d2) - } - - @Test - fun `Should return true if pin is correct`() { - val testPin = "testPin" - - whenever(d2.dataStoreModule()) doReturn mock() - whenever(d2.dataStoreModule().localDataStore()) doReturn mock() - whenever( - d2.dataStoreModule().localDataStore().value(Preference.PIN), - ) doReturn mock() - whenever( - d2 - .dataStoreModule() - .localDataStore() - .value(Preference.PIN) - .blockingGet(), - ) doReturn mock() - whenever( - d2 - .dataStoreModule() - .localDataStore() - .value(Preference.PIN) - .blockingGet() - ?.value(), - ) doReturn testPin - - presenter.unlockSession( - testPin, - attempts = 0, - onError = onError, - onPinCorrect = onPinCorrect, - onTwoManyAttempts = onTwoManyAttempts, - ) - - // SESSION_LOCKED stays true (PIN is still configured), no state change - verify(onPinCorrect).invoke() - } - - @Test - fun `Should return false if pin is wrong`() { - val testPin = "testPin" - val wrongPin = "wrongPin" - - whenever(d2.dataStoreModule()) doReturn mock() - whenever(d2.dataStoreModule().localDataStore()) doReturn mock() - whenever( - d2.dataStoreModule().localDataStore().value(Preference.PIN), - ) doReturn mock() - whenever( - d2 - .dataStoreModule() - .localDataStore() - .value(Preference.PIN) - .blockingGet(), - ) doReturn mock() - whenever( - d2 - .dataStoreModule() - .localDataStore() - .value(Preference.PIN) - .blockingGet() - ?.value(), - ) doReturn testPin - - presenter.unlockSession( - wrongPin, - attempts = 0, - onError = onError, - onPinCorrect = onPinCorrect, - onTwoManyAttempts = onTwoManyAttempts, - ) - - verify(onError).invoke() - } - - @Test - fun `Should call onTwoManyAttempts when try 3 times`() { - val testPin = "testPin" - val wrongPin = "wrongPin" - - whenever(d2.dataStoreModule()) doReturn mock() - whenever(d2.dataStoreModule().localDataStore()) doReturn mock() - whenever( - d2.dataStoreModule().localDataStore().value(Preference.PIN), - ) doReturn mock() - whenever( - d2 - .dataStoreModule() - .localDataStore() - .value(Preference.PIN) - .blockingGet(), - ) doReturn mock() - whenever( - d2 - .dataStoreModule() - .localDataStore() - .value(Preference.PIN) - .blockingGet() - ?.value(), - ) doReturn testPin - - presenter.unlockSession( - wrongPin, - attempts = 3, - onError = onError, - onPinCorrect = onPinCorrect, - onTwoManyAttempts = onTwoManyAttempts, - ) - - verify(onTwoManyAttempts).invoke() - } - - @Test - fun `Should save pin and block session`() { - val testPin = "testPin" - - whenever(d2.dataStoreModule()) doReturn mock() - whenever(d2.dataStoreModule().localDataStore()) doReturn mock() - whenever(d2.dataStoreModule().localDataStore().value(Preference.PIN)) doReturn mock() - - presenter.savePin(testPin) - verify(d2.dataStoreModule().localDataStore().value(Preference.PIN)).blockingSet(testPin) - verify(preferenceProvider, times(1)).setValue(Preference.SESSION_LOCKED, true) - } - - @Test - fun `Should clear pin and block session when logout`() { - whenever(d2.dataStoreModule()) doReturn mock() - whenever(d2.dataStoreModule().localDataStore()) doReturn mock() - whenever(d2.dataStoreModule().localDataStore().value(Preference.PIN)) doReturn mock() - - presenter.logOut() - - verify(d2.dataStoreModule().localDataStore().value(Preference.PIN)).blockingDelete() - verify(preferenceProvider, times(1)).setValue(Preference.SESSION_LOCKED, false) - } -} diff --git a/gradle.properties b/gradle.properties index 7d5c150076d..70e8c2b5087 100644 --- a/gradle.properties +++ b/gradle.properties @@ -16,7 +16,6 @@ org.gradle.jvmargs=-Xmx4096M -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects # org.gradle.parallel=true android.useAndroidX=true -android.enableJetifier=true # TODO: Remove when SonarQube Gradle plugin supports AGP 9.x new DSL (AppExtension removal) # NOTE: AGP 9.1.0 also removed getCDirectories() from SourceProvider, breaking sonar-scanner-gradle # 7.2.3.7755. Pinned to AGP 9.0.1 until SonarQube Gradle plugin 7.3 adds AGP 9.1+ support. diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 2b2a37089f8..93622073e88 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -36,7 +36,6 @@ viewModelCompose = "2.9.4" material = "1.13.0" material3 = "1.4.0" themeAdapter = "0.36.0" -pinlock = "2.1.0" fancyshowcase = "1.4.0" lottie = "6.6.10" rxjava = "2.2.21" @@ -157,7 +156,6 @@ dagger-compiler = { group = "com.google.dagger", name = "dagger-compiler", versi rx-java = { group = "io.reactivex.rxjava2", name = "rxjava", version.ref = "rxjava" } rx-android = { group = "io.reactivex.rxjava2", name = "rxandroid", version.ref = "rxandroid" } rx-relay = { group = "com.jakewharton.rxrelay2", name = "rxrelay", version.ref = "rxrelay" } -github-pinlock = { group = "com.github.aritraroy", name = "PinLockView", version.ref = "pinlock" } github-fancyshowcase = { group = "com.github.faruktoptas", name = "FancyShowCaseView", version.ref = "fancyshowcase" } github-glide = { group = "com.github.bumptech.glide", name = "glide", version.ref = "glide" } github-glide-compiler = { group = "com.github.bumptech.glide", name = "compiler", version.ref = "glide" } diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index 778c65281a3..3d18c6a6663 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -6405,22 +6405,19 @@ - - - + + + + + + + + + + + - - - - - - - - @@ -6662,6 +6659,14 @@ + + + + + + + + @@ -10787,16 +10792,14 @@ - - - - - - - - + + + + + + + + @@ -14550,11 +14553,9 @@ - - - + + + diff --git a/login/build.gradle.kts b/login/build.gradle.kts index 18660c8ff9d..2f0a3fa1a72 100644 --- a/login/build.gradle.kts +++ b/login/build.gradle.kts @@ -82,7 +82,7 @@ kotlin { implementation(libs.koin.androidx.compose) implementation(libs.androidx.activity.compose) implementation(libs.androidx.browser) - compileOnly(libs.androidx.compose.uitooling) + implementation(libs.androidx.compose.uitooling) } } diff --git a/login/src/androidMain/kotlin/org/dhis2/mobile/login/pin/PinBottomSheetLauncher.kt b/login/src/androidMain/kotlin/org/dhis2/mobile/login/pin/PinBottomSheetLauncher.kt new file mode 100644 index 00000000000..8a2da1bea2c --- /dev/null +++ b/login/src/androidMain/kotlin/org/dhis2/mobile/login/pin/PinBottomSheetLauncher.kt @@ -0,0 +1,45 @@ +package org.dhis2.mobile.login.pin + +import android.view.ViewGroup +import android.view.ViewGroup.LayoutParams.MATCH_PARENT +import androidx.compose.ui.platform.ComposeView +import androidx.compose.ui.platform.ViewCompositionStrategy +import androidx.fragment.app.FragmentActivity +import org.dhis2.mobile.login.pin.domain.model.PinMode +import org.dhis2.mobile.login.pin.ui.components.PinDialog +import org.hisp.dhis.mobile.ui.designsystem.theme.DHIS2Theme + +/** + * Adds a [PinDialog] composable as an overlay on the Activity's decor view. + * + * Returns the [ComposeView] that was added, so the caller can remove it if needed + * (e.g., on Activity stop). The [PinDialog] is displayed via [FullScreenDialog] internally, + * which creates its own dialog window on top of the Activity. + * + * @param mode PIN mode: SET (create PIN) or ASK (verify PIN). + * @param onSuccess Invoked when the PIN operation completes successfully. + * @param onDismiss Invoked when the dialog is dismissed (back press, forgot PIN, too many attempts). + * @return The [ComposeView] added to the window, or null if the decor view is unavailable. + */ +fun FragmentActivity.addPinBottomSheet( + mode: PinMode, + onSuccess: () -> Unit, + onDismiss: () -> Unit, +): ComposeView? { + val decorView = window?.decorView as? ViewGroup ?: return null + return ComposeView(this).apply { + setViewCompositionStrategy( + ViewCompositionStrategy.DisposeOnDetachedFromWindowOrReleasedFromPool, + ) + setContent { + DHIS2Theme { + PinDialog( + mode = mode, + onSuccess = onSuccess, + onDismiss = onDismiss, + ) + } + } + decorView.addView(this, MATCH_PARENT, MATCH_PARENT) + } +} diff --git a/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/ui/screen/CredentialsScreen.kt b/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/ui/screen/CredentialsScreen.kt index bdf7cc64e90..491f5ca2de5 100644 --- a/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/ui/screen/CredentialsScreen.kt +++ b/login/src/commonMain/kotlin/org/dhis2/mobile/login/main/ui/screen/CredentialsScreen.kt @@ -60,8 +60,8 @@ import org.dhis2.mobile.login.main.ui.state.CredentialsUpdate import org.dhis2.mobile.login.main.ui.state.LoginState import org.dhis2.mobile.login.main.ui.state.OidcInfo import org.dhis2.mobile.login.main.ui.viewmodel.CredentialsViewModel -import org.dhis2.mobile.login.pin.ui.components.PinBottomSheet -import org.dhis2.mobile.login.pin.ui.components.PinMode +import org.dhis2.mobile.login.pin.domain.model.PinMode +import org.dhis2.mobile.login.pin.ui.components.PinDialog import org.dhis2.mobile.login.resources.Res import org.dhis2.mobile.login.resources.action_log_in import org.dhis2.mobile.login.resources.action_manage_account @@ -252,7 +252,7 @@ fun CredentialsScreen( } if (screenState.isSessionLocked) { - PinBottomSheet( + PinDialog( mode = PinMode.ASK, onSuccess = { viewModel.onPinUnlocked() diff --git a/login/src/commonMain/kotlin/org/dhis2/mobile/login/pin/di/PinModule.kt b/login/src/commonMain/kotlin/org/dhis2/mobile/login/pin/di/PinModule.kt index f5bcb514cb0..5f9529f4db6 100644 --- a/login/src/commonMain/kotlin/org/dhis2/mobile/login/pin/di/PinModule.kt +++ b/login/src/commonMain/kotlin/org/dhis2/mobile/login/pin/di/PinModule.kt @@ -1,15 +1,16 @@ package org.dhis2.mobile.login.pin.di +import org.dhis2.mobile.login.pin.domain.model.PinMode import org.dhis2.mobile.login.pin.domain.usecase.ForgotPinUseCase import org.dhis2.mobile.login.pin.domain.usecase.GetIsSessionLockedUseCase import org.dhis2.mobile.login.pin.domain.usecase.SavePinUseCase import org.dhis2.mobile.login.pin.domain.usecase.ValidatePinUseCase import org.dhis2.mobile.login.pin.ui.provider.PinResourceProvider +import org.dhis2.mobile.login.pin.ui.provider.PinResourceProviderImpl import org.dhis2.mobile.login.pin.ui.viewmodel.PinViewModel import org.koin.core.module.Module import org.koin.core.module.dsl.factoryOf -import org.koin.core.module.dsl.singleOf -import org.koin.core.module.dsl.viewModelOf +import org.koin.core.module.dsl.viewModel import org.koin.dsl.module /** @@ -24,10 +25,10 @@ internal val pinModule = factoryOf(::GetIsSessionLockedUseCase) // PIN resource provider - singleOf(::PinResourceProvider) + single { PinResourceProviderImpl() } - // PIN ViewModel - viewModelOf(::PinViewModel) + // PIN ViewModel — receives PinMode as a runtime parameter via Koin parametersOf + viewModel { params -> PinViewModel(params.get(), get(), get(), get(), get()) } } /** diff --git a/login/src/commonMain/kotlin/org/dhis2/mobile/login/pin/domain/model/PinMode.kt b/login/src/commonMain/kotlin/org/dhis2/mobile/login/pin/domain/model/PinMode.kt new file mode 100644 index 00000000000..e7b48108cf3 --- /dev/null +++ b/login/src/commonMain/kotlin/org/dhis2/mobile/login/pin/domain/model/PinMode.kt @@ -0,0 +1,16 @@ +package org.dhis2.mobile.login.pin.domain.model + +/** + * PIN mode enumeration for different bottom sheet behaviors. + */ +enum class PinMode { + /** + * SET mode - Used when creating/setting a new PIN. + */ + SET, + + /** + * ASK mode - Used when verifying/entering an existing PIN. + */ + ASK, +} diff --git a/login/src/commonMain/kotlin/org/dhis2/mobile/login/pin/domain/model/PinState.kt b/login/src/commonMain/kotlin/org/dhis2/mobile/login/pin/domain/model/PinState.kt deleted file mode 100644 index 57c49ff0cb2..00000000000 --- a/login/src/commonMain/kotlin/org/dhis2/mobile/login/pin/domain/model/PinState.kt +++ /dev/null @@ -1,41 +0,0 @@ -package org.dhis2.mobile.login.pin.domain.model - -/** - * Represents the different states of PIN operations in the UI. - */ -sealed class PinState { - /** - * Initial/Idle state - waiting for user interaction. - */ - data object Idle : PinState() - - /** - * PIN operation in progress. - */ - data object Loading : PinState() - - /** - * PIN validation or save was successful. - */ - data object Success : PinState() - - /** - * The PIN entry UI was dismissed. - */ - data object Dismissed : PinState() - - /** - * PIN validation failed with an error message. - * @param message The error message to display. - * @param remainingAttempts Number of remaining attempts before forced logout (null if not applicable). - */ - data class Error( - val message: String, - val remainingAttempts: Int? = null, - ) : PinState() - - /** - * Too many failed attempts - will trigger forgot PIN flow. - */ - data object TooManyAttempts : PinState() -} diff --git a/login/src/commonMain/kotlin/org/dhis2/mobile/login/pin/ui/components/PinBottomSheet.kt b/login/src/commonMain/kotlin/org/dhis2/mobile/login/pin/ui/components/PinBottomSheet.kt deleted file mode 100644 index 24f56f4246a..00000000000 --- a/login/src/commonMain/kotlin/org/dhis2/mobile/login/pin/ui/components/PinBottomSheet.kt +++ /dev/null @@ -1,363 +0,0 @@ -package org.dhis2.mobile.login.pin.ui.components - -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.PaddingValues -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.RowScope -import androidx.compose.foundation.layout.Spacer -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.height -import androidx.compose.foundation.layout.padding -import androidx.compose.material3.windowsizeclass.ExperimentalMaterial3WindowSizeClassApi -import androidx.compose.material3.windowsizeclass.WindowSizeClass -import androidx.compose.material3.windowsizeclass.WindowWidthSizeClass -import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.collectAsState -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.setValue -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.focus.FocusRequester -import androidx.compose.ui.focus.focusRequester -import androidx.compose.ui.text.style.TextAlign -import org.dhis2.mobile.commons.extensions.getWindowSizeClass -import org.dhis2.mobile.login.pin.domain.model.PinState -import org.dhis2.mobile.login.pin.ui.viewmodel.PinViewModel -import org.dhis2.mobile.login.resources.Res -import org.dhis2.mobile.login.resources.create_pin -import org.dhis2.mobile.login.resources.create_pin_button -import org.dhis2.mobile.login.resources.create_pin_description -import org.dhis2.mobile.login.resources.enter_pin -import org.dhis2.mobile.login.resources.enter_pin_button -import org.dhis2.mobile.login.resources.enter_pin_description -import org.dhis2.mobile.login.resources.forgot_pin_button -import org.dhis2.mobile.login.resources.pin_error_remaining_attempts -import org.hisp.dhis.mobile.ui.designsystem.component.BottomSheetShell -import org.hisp.dhis.mobile.ui.designsystem.component.Button -import org.hisp.dhis.mobile.ui.designsystem.component.ButtonStyle -import org.hisp.dhis.mobile.ui.designsystem.component.InputSegmentedShell -import org.hisp.dhis.mobile.ui.designsystem.component.SupportingTextData -import org.hisp.dhis.mobile.ui.designsystem.component.SupportingTextState -import org.hisp.dhis.mobile.ui.designsystem.component.model.SegmentedShellType -import org.hisp.dhis.mobile.ui.designsystem.component.state.BottomSheetShellDefaults -import org.hisp.dhis.mobile.ui.designsystem.component.state.BottomSheetShellUIState -import org.hisp.dhis.mobile.ui.designsystem.theme.Spacing -import org.jetbrains.compose.resources.stringResource -import org.koin.compose.viewmodel.koinViewModel - -/** - * PIN mode enumeration for different bottom sheet behaviors. - */ -enum class PinMode { - /** - * SET mode - Used when creating/setting a new PIN. - */ - SET, - - /** - * ASK mode - Used when verifying/entering an existing PIN. - */ - ASK, -} - -/** - * DHIS2 PIN Bottom Sheet component with integrated ViewModel. - * - * A modal bottom sheet that displays a PIN input interface using DHIS2 Mobile UI components. - * Supports both SET (creating PIN) and ASK (verifying PIN) modes. - * Uses [BottomSheetShell] as container and [InputSegmentedShell] for PIN input. - * - * State management is handled internally by [PinViewModel], automatically injected via Koin, - * including PIN validation, attempt tracking, and error messages. - * - * @param mode The PIN mode (SET for creation, ASK for verification). - * @param onSuccess Callback invoked when PIN operation succeeds. - * @param onDismiss Callback invoked when the bottom sheet is dismissed. - * @param modifier Optional modifier for customization. - * @param windowSizeClass Window size class for layout adjustments. - */ -@OptIn(ExperimentalMaterial3WindowSizeClassApi::class) -@Composable -fun PinBottomSheet( - mode: PinMode, - onSuccess: () -> Unit, - onDismiss: () -> Unit, - modifier: Modifier = Modifier, - windowSizeClass: WindowSizeClass = getWindowSizeClass(), -) { - val viewModel: PinViewModel = koinViewModel() - val uiState by viewModel.uiState.collectAsState() - var currentPin by remember { mutableStateOf("") } - val focusRequester = remember { FocusRequester() } - - // Handle state changes from ViewModel - LaunchedEffect(uiState) { - when (uiState) { - is PinState.Success -> { - onSuccess() - } - - is PinState.TooManyAttempts -> { - viewModel.onForgotPin() - } - - is PinState.Dismissed -> { - viewModel.resetAttempts() - viewModel.resetState() - onDismiss() - } - - else -> { // Do nothing for Idle, Loading, Error - } - } - } - - // Reset attempts when dismissed - LaunchedEffect(Unit) { - return@LaunchedEffect - } - - LaunchedEffect(Unit) { - focusRequester.requestFocus() - } - - val (title, subtitle) = - when (mode) { - PinMode.SET -> stringResource(Res.string.create_pin) to stringResource(Res.string.create_pin_description) - PinMode.ASK -> stringResource(Res.string.enter_pin) to stringResource(Res.string.enter_pin_description) - } - - val primaryButtonText = - when (mode) { - PinMode.SET -> stringResource(Res.string.create_pin_button) - PinMode.ASK -> stringResource(Res.string.enter_pin_button) - } - - val secondaryButtonText = - when (mode) { - PinMode.SET -> null - PinMode.ASK -> stringResource(Res.string.forgot_pin_button) - } - - // Get error message from ViewModel state - val errorMessage = - when (val state = uiState) { - is PinState.Error -> { - state.remainingAttempts?.let { attempts -> - "${state.message}. ${ - stringResource( - Res.string.pin_error_remaining_attempts, - attempts, - ) - }" - } ?: state.message - } - - else -> null - } - - val pinLength = 4 - val isLoading = uiState is PinState.Loading - - fun onPrimaryClick() { - viewModel.onPinComplete( - pin = currentPin.replace("-", ""), - mode = mode, - ) - } - - fun onSecondaryClick() { - viewModel.onForgotPin() - } - - val primaryButtonIsEnabled = - currentPin - .replace( - "-", - "", - ).length == pinLength && !isLoading - - val secondaryButtonIsEnabled = !isLoading - - BottomSheetShell( - uiState = - BottomSheetShellUIState( - title = title, - subtitle = null, - description = subtitle, - showTopSectionDivider = false, - showBottomSectionDivider = false, - headerTextAlignment = TextAlign.Center, - animateHeaderOnKeyboardAppearance = false, - scrollableContainerMinHeight = Spacing.Spacing40, - scrollableContainerMaxHeight = Spacing.Spacing840, - contentPadding = - PaddingValues( - horizontal = Spacing.Spacing24, - vertical = Spacing.Spacing0, - ), - ), - modifier = modifier, - content = { - Column( - modifier = Modifier.fillMaxWidth(), - verticalArrangement = Arrangement.spacedBy(Spacing.Spacing16), - ) { - Spacer(modifier = Modifier.height(Spacing.Spacing8)) - - // PIN Input using InputSegmentedShell - InputSegmentedShell( - modifier = - Modifier - .fillMaxWidth() - .focusRequester(focusRequester), - segmentCount = pinLength, - initialValue = null, - supportingTextData = - errorMessage?.let { - SupportingTextData( - text = it, - state = SupportingTextState.ERROR, - ) - }, - segmentedShellType = SegmentedShellType.Numeric, - onValueChanged = { newPin -> - currentPin = newPin - // Clear error when user starts typing - if (uiState is PinState.Error) { - viewModel.resetState() - } - }, - ) - - Spacer(modifier = Modifier.height(Spacing.Spacing8)) - } - }, - buttonBlock = { - when (windowSizeClass.widthSizeClass) { - WindowWidthSizeClass.Compact -> - VerticalButtonBlock( - primaryButton = { - PinPrimaryButton( - modifier = Modifier.fillMaxWidth(), - enabled = primaryButtonIsEnabled, - buttonText = primaryButtonText, - onClick = ::onPrimaryClick, - ) - }, - secondaryButton = - secondaryButtonText?.let { buttonText -> - { - PinSecondaryButton( - modifier = Modifier.fillMaxWidth(), - enabled = secondaryButtonIsEnabled, - buttonText = buttonText, - onClick = ::onSecondaryClick, - ) - } - }, - ) - - else -> - HorizontalButtonBlock( - primaryButton = { - PinPrimaryButton( - modifier = Modifier.weight(1f), - enabled = primaryButtonIsEnabled, - buttonText = primaryButtonText, - onClick = ::onPrimaryClick, - ) - }, - secondaryButton = - secondaryButtonText?.let { buttonText -> - { - PinSecondaryButton( - modifier = Modifier.weight(1f), - enabled = secondaryButtonIsEnabled, - buttonText = buttonText, - onClick = ::onSecondaryClick, - ) - } - }, - ) - } - }, - onDismiss = { - viewModel.resetAttempts() - viewModel.resetState() - onDismiss() - }, - ) -} - -@Composable -private fun VerticalButtonBlock( - primaryButton: @Composable () -> Unit, - secondaryButton: (@Composable () -> Unit)?, -) { - Column( - modifier = - Modifier - .fillMaxWidth() - .padding(BottomSheetShellDefaults.buttonBlockPaddings()), - verticalArrangement = Arrangement.spacedBy(Spacing.Spacing8), - horizontalAlignment = Alignment.CenterHorizontally, - ) { - primaryButton() - secondaryButton?.invoke() - } -} - -@Composable -private fun HorizontalButtonBlock( - primaryButton: @Composable RowScope.() -> Unit, - secondaryButton: (@Composable RowScope.() -> Unit)?, -) { - Row( - modifier = - Modifier - .fillMaxWidth() - .padding(BottomSheetShellDefaults.buttonBlockPaddings()), - horizontalArrangement = Arrangement.spacedBy(Spacing.Spacing8), - verticalAlignment = Alignment.CenterVertically, - ) { - secondaryButton?.invoke(this) - primaryButton() - } -} - -@Composable -private fun PinPrimaryButton( - modifier: Modifier, - enabled: Boolean, - buttonText: String, - onClick: () -> Unit, -) { - Button( - modifier = modifier, - enabled = enabled, - style = ButtonStyle.FILLED, - text = buttonText, - onClick = onClick, - ) -} - -@Composable -private fun PinSecondaryButton( - modifier: Modifier, - enabled: Boolean, - buttonText: String, - onClick: () -> Unit, -) { - Button( - modifier = modifier, - enabled = enabled, - style = ButtonStyle.OUTLINED, - text = buttonText, - onClick = onClick, - ) -} diff --git a/login/src/commonMain/kotlin/org/dhis2/mobile/login/pin/ui/components/PinDialog.kt b/login/src/commonMain/kotlin/org/dhis2/mobile/login/pin/ui/components/PinDialog.kt new file mode 100644 index 00000000000..59aaa8ed19d --- /dev/null +++ b/login/src/commonMain/kotlin/org/dhis2/mobile/login/pin/ui/components/PinDialog.kt @@ -0,0 +1,511 @@ +package org.dhis2.mobile.login.pin.ui.components + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.RowScope +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.imePadding +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Key +import androidx.compose.material.icons.outlined.Pin +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.VerticalDivider +import androidx.compose.material3.windowsizeclass.ExperimentalMaterial3WindowSizeClassApi +import androidx.compose.material3.windowsizeclass.WindowSizeClass +import androidx.compose.material3.windowsizeclass.WindowWidthSizeClass +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.focus.FocusRequester +import androidx.compose.ui.focus.focusRequester +import androidx.compose.ui.unit.DpSize +import androidx.compose.ui.unit.dp +import org.dhis2.mobile.commons.extensions.deviceIsInLandscapeMode +import org.dhis2.mobile.commons.extensions.getWindowSizeClass +import org.dhis2.mobile.login.pin.domain.model.PinMode +import org.dhis2.mobile.login.pin.ui.state.PinUiState +import org.dhis2.mobile.login.pin.ui.viewmodel.PinViewModel +import org.hisp.dhis.mobile.ui.designsystem.component.Button +import org.hisp.dhis.mobile.ui.designsystem.component.ButtonStyle +import org.hisp.dhis.mobile.ui.designsystem.component.FullScreenDialog +import org.hisp.dhis.mobile.ui.designsystem.component.InputSegmentedShell +import org.hisp.dhis.mobile.ui.designsystem.component.SupportingTextData +import org.hisp.dhis.mobile.ui.designsystem.component.SupportingTextState +import org.hisp.dhis.mobile.ui.designsystem.component.model.SegmentedShellType +import org.hisp.dhis.mobile.ui.designsystem.component.state.BottomSheetShellDefaults +import org.hisp.dhis.mobile.ui.designsystem.theme.DHIS2Theme +import org.hisp.dhis.mobile.ui.designsystem.theme.Spacing +import org.jetbrains.compose.ui.tooling.preview.Preview +import org.koin.compose.viewmodel.koinViewModel +import org.koin.core.parameter.parametersOf + +/** + * DHIS2 PIN Bottom Sheet component with integrated ViewModel. + * + * A modal bottom sheet that displays a PIN input interface using DHIS2 Mobile UI components. + * Supports both SET (creating PIN) and ASK (verifying PIN) modes. + * Uses [FullScreenDialog] as container and [InputSegmentedShell] for PIN input. + * + * State management is handled internally by [PinViewModel], automatically injected via Koin, + * including PIN validation, attempt tracking, and error messages. + * + * @param mode The PIN mode (SET for creation, ASK for verification). + * @param onSuccess Callback invoked when PIN operation succeeds. + * @param onDismiss Callback invoked when the bottom sheet is dismissed. + * @param modifier Optional modifier for customization. + * @param windowSizeClass Window size class for layout adjustments. + */ +@OptIn(ExperimentalMaterial3WindowSizeClassApi::class) +@Composable +fun PinDialog( + mode: PinMode, + onSuccess: () -> Unit, + onDismiss: () -> Unit, + modifier: Modifier = Modifier, + windowSizeClass: WindowSizeClass = getWindowSizeClass(), +) { + val viewModel: PinViewModel = koinViewModel { parametersOf(mode) } + val uiState by viewModel.uiState.collectAsState() + val isLandscape = deviceIsInLandscapeMode() + + LaunchedEffect(uiState.isSuccess, uiState.isDismissed, uiState.isTooManyAttempts) { + when { + uiState.isSuccess -> onSuccess() + uiState.isTooManyAttempts -> viewModel.onForgotPin() + uiState.isDismissed -> { + viewModel.resetAttempts() + viewModel.resetState() + onDismiss() + } + } + } + + PinContent( + uiState = uiState, + mode = mode, + isLandscape = isLandscape, + windowSizeClass = windowSizeClass, + onPinChanged = viewModel::onPinChanged, + onPrimaryClick = viewModel::onPinComplete, + onSecondaryClick = viewModel::onForgotPin, + onDismiss = { + viewModel.resetAttempts() + viewModel.resetState() + onDismiss() + }, + modifier = modifier, + ) +} + +/** + * Stateless UI content for the PIN bottom sheet. + * + * Renders the [FullScreenDialog] with either a portrait (stacked) or landscape (side-by-side) + * layout depending on [isLandscape]. This composable holds no business logic and is safe + * to use in Compose Previews. + * + * @param uiState The current UI state containing display content and button states. + * @param isLandscape Whether the device is in landscape orientation. + * @param windowSizeClass Window size class used to choose the button layout. + * @param onPinChanged Callback invoked on every PIN value change. + * @param onPrimaryClick Callback for the primary button click. + * @param onSecondaryClick Callback for the secondary button click. + * @param onDismiss Callback invoked when the dialog is dismissed. + * @param modifier Optional modifier for customization. + */ +@OptIn(ExperimentalMaterial3WindowSizeClassApi::class) +@Composable +internal fun PinContent( + uiState: PinUiState, + mode: PinMode, + isLandscape: Boolean, + windowSizeClass: WindowSizeClass, + onPinChanged: (String) -> Unit, + onPrimaryClick: () -> Unit, + onSecondaryClick: () -> Unit, + onDismiss: () -> Unit, + modifier: Modifier = Modifier, +) { + val focusRequester = remember { FocusRequester() } + + FullScreenDialog( + onDismiss = onDismiss, + content = { + if (!isLandscape) { + Column( + modifier = + Modifier + .fillMaxSize() + .imePadding() + .verticalScroll(rememberScrollState()), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.Top, + ) { + PinHeader( + title = uiState.title, + subtitle = uiState.subtitle, + ) + + PinInputBlock( + uiState = uiState, + focusRequester = focusRequester, + windowSizeClass = windowSizeClass, + showPrimaryButtonIcon = mode == PinMode.SET, + onPinChanged = onPinChanged, + onPrimaryClick = onPrimaryClick, + onSecondaryClick = onSecondaryClick, + ) + } + } else { + Row( + modifier = + Modifier + .fillMaxSize() + .imePadding() + .padding(horizontal = Spacing.Spacing56), + horizontalArrangement = Arrangement.spacedBy(Spacing.Spacing56), + verticalAlignment = Alignment.CenterVertically, + ) { + Column( + modifier = + Modifier + .weight(1f) + .fillMaxHeight() + .verticalScroll(rememberScrollState()) + .padding(vertical = Spacing.Spacing32), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.Center, + ) { + PinHeader( + title = uiState.title, + subtitle = uiState.subtitle, + ) + } + + VerticalDivider( + modifier = Modifier.padding(vertical = Spacing.Spacing32), + thickness = Spacing.Spacing1, + color = MaterialTheme.colorScheme.outlineVariant, + ) + + Column( + modifier = + Modifier + .weight(1f) + .fillMaxHeight() + .verticalScroll(rememberScrollState()) + .padding(vertical = Spacing.Spacing32), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.Center, + ) { + PinInputBlock( + uiState = uiState, + focusRequester = focusRequester, + windowSizeClass = windowSizeClass, + showPrimaryButtonIcon = mode == PinMode.SET, + onPinChanged = onPinChanged, + onPrimaryClick = onPrimaryClick, + onSecondaryClick = onSecondaryClick, + ) + } + } + } + }, + ) +} + +/** + * Displays the PIN screen header: a PIN icon, a title, and a subtitle. + * + * @param title The main heading text. + * @param subtitle The descriptive text shown below the title. + * @param modifier Optional modifier for customization. + */ +@Composable +private fun PinHeader( + title: String, + subtitle: String, + modifier: Modifier = Modifier, +) { + Column( + modifier = modifier, + horizontalAlignment = Alignment.CenterHorizontally, + ) { + Icon( + imageVector = Icons.Outlined.Pin, + contentDescription = null, + tint = MaterialTheme.colorScheme.primary, + ) + + Text( + text = title, + style = MaterialTheme.typography.headlineSmall, + color = MaterialTheme.colorScheme.onSurface, + modifier = Modifier.padding(vertical = Spacing.Spacing16), + ) + + Text( + text = subtitle, + style = MaterialTheme.typography.bodyMedium, + color = MaterialTheme.colorScheme.onSurfaceVariant, + modifier = Modifier.padding(bottom = Spacing.Spacing16), + ) + } +} + +/** + * Displays the PIN input field and action buttons. + * + * Renders [InputSegmentedShell] for PIN entry and adapts the button layout + * (vertical vs horizontal) based on [windowSizeClass]. + * + * @param focusRequester Focus requester to autofocus the input field. + * @param windowSizeClass Window size class used to choose the button layout. + * @param onPinChanged Callback invoked on every PIN value change. + * @param onPrimaryClick Callback for the primary button click. + * @param onSecondaryClick Callback for the secondary button click. + * @param modifier Optional modifier for customization. + */ +@OptIn(ExperimentalMaterial3WindowSizeClassApi::class) +@Composable +private fun PinInputBlock( + uiState: PinUiState, + focusRequester: FocusRequester, + windowSizeClass: WindowSizeClass, + showPrimaryButtonIcon: Boolean, + onPinChanged: (String) -> Unit, + onPrimaryClick: () -> Unit, + onSecondaryClick: () -> Unit, + modifier: Modifier = Modifier, +) { + // Stabilize supportingTextData to prevent recomposition issues + val supportingTextData = + remember(uiState.errorMessage) { + uiState.errorMessage?.let { + SupportingTextData( + text = it, + state = SupportingTextState.ERROR, + ) + } + } + + // Request focus on initial composition only + LaunchedEffect(Unit) { + focusRequester.requestFocus() + } + + Column( + modifier = modifier.fillMaxWidth(), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.Center, + ) { + InputSegmentedShell( + modifier = + Modifier + .fillMaxWidth() + .padding(horizontal = Spacing.Spacing16) + .focusRequester(focusRequester), + segmentCount = uiState.pinLength, + initialValue = null, + supportingTextData = supportingTextData, + segmentedShellType = SegmentedShellType.Numeric, + onValueChanged = onPinChanged, + ) + + Spacer(modifier = Modifier.height(Spacing.Spacing32)) + + when (windowSizeClass.widthSizeClass) { + WindowWidthSizeClass.Compact -> + VerticalButtonBlock( + primaryButton = { + PinPrimaryButton( + modifier = Modifier.fillMaxWidth(), + enabled = uiState.primaryButtonIsEnabled, + buttonText = uiState.primaryButtonText, + showIcon = showPrimaryButtonIcon, + onClick = onPrimaryClick, + ) + }, + secondaryButton = + uiState.secondaryButtonText?.let { buttonText -> + { + PinSecondaryButton( + modifier = Modifier.fillMaxWidth(), + enabled = !uiState.isLoading, + buttonText = buttonText, + onClick = onSecondaryClick, + ) + } + }, + ) + + else -> + HorizontalButtonBlock( + primaryButton = { + PinPrimaryButton( + modifier = Modifier.weight(1f), + enabled = uiState.primaryButtonIsEnabled, + buttonText = uiState.primaryButtonText, + showIcon = showPrimaryButtonIcon, + onClick = onPrimaryClick, + ) + }, + secondaryButton = + uiState.secondaryButtonText?.let { buttonText -> + { + PinSecondaryButton( + modifier = Modifier.weight(1f), + enabled = !uiState.isLoading, + buttonText = buttonText, + onClick = onSecondaryClick, + ) + } + }, + ) + } + } +} + +@Composable +private fun VerticalButtonBlock( + primaryButton: @Composable () -> Unit, + secondaryButton: (@Composable () -> Unit)?, +) { + Column( + modifier = + Modifier + .fillMaxWidth() + .padding(BottomSheetShellDefaults.buttonBlockPaddings()), + verticalArrangement = Arrangement.spacedBy(Spacing.Spacing8), + horizontalAlignment = Alignment.CenterHorizontally, + ) { + primaryButton() + secondaryButton?.invoke() + } +} + +@Composable +private fun HorizontalButtonBlock( + primaryButton: @Composable RowScope.() -> Unit, + secondaryButton: (@Composable RowScope.() -> Unit)?, +) { + Row( + modifier = + Modifier + .fillMaxWidth() + .padding(BottomSheetShellDefaults.buttonBlockPaddings()), + horizontalArrangement = Arrangement.spacedBy(Spacing.Spacing8), + verticalAlignment = Alignment.CenterVertically, + ) { + secondaryButton?.invoke(this) + primaryButton() + } +} + +@Composable +private fun PinPrimaryButton( + modifier: Modifier, + enabled: Boolean, + buttonText: String, + showIcon: Boolean, + onClick: () -> Unit, +) { + Button( + modifier = modifier, + enabled = enabled, + style = ButtonStyle.FILLED, + text = buttonText, + icon = + if (showIcon) { + { + Icon( + imageVector = Icons.Outlined.Key, + contentDescription = null, + ) + } + } else { + null + }, + onClick = onClick, + ) +} + +@Composable +private fun PinSecondaryButton( + modifier: Modifier, + enabled: Boolean, + buttonText: String, + onClick: () -> Unit, +) { + Button( + modifier = modifier, + enabled = enabled, + style = ButtonStyle.OUTLINED, + text = buttonText, + onClick = onClick, + ) +} + +@OptIn(ExperimentalMaterial3WindowSizeClassApi::class) +@Preview(showBackground = true, widthDp = 360, heightDp = 800) +@Composable +fun PinAskPortraitPreview() { + val windowSizeClass = WindowSizeClass.calculateFromSize(DpSize(360.dp, 800.dp)) + DHIS2Theme { + PinContent( + uiState = + PinUiState( + title = "Enter your PIN", + subtitle = "Enter your 4-digit PIN to access your account.", + primaryButtonText = "Unlock", + secondaryButtonText = "Forgot your PIN?", + ), + mode = PinMode.ASK, + isLandscape = false, + windowSizeClass = windowSizeClass, + onPinChanged = {}, + onPrimaryClick = {}, + onSecondaryClick = {}, + onDismiss = {}, + ) + } +} + +@OptIn(ExperimentalMaterial3WindowSizeClassApi::class) +@Preview(showBackground = true, widthDp = 1280, heightDp = 800) +@Composable +fun PinAskLandscapePreview() { + val windowSizeClass = WindowSizeClass.calculateFromSize(DpSize(1280.dp, 800.dp)) + DHIS2Theme { + PinContent( + uiState = + PinUiState( + title = "Enter your PIN", + subtitle = "Enter your 4-digit PIN to access your account.", + primaryButtonText = "Unlock", + secondaryButtonText = "Forgot your PIN?", + ), + mode = PinMode.ASK, + isLandscape = true, + windowSizeClass = windowSizeClass, + onPinChanged = {}, + onPrimaryClick = {}, + onSecondaryClick = {}, + onDismiss = {}, + ) + } +} diff --git a/login/src/commonMain/kotlin/org/dhis2/mobile/login/pin/ui/provider/PinResourceProvider.kt b/login/src/commonMain/kotlin/org/dhis2/mobile/login/pin/ui/provider/PinResourceProvider.kt index d31006d250c..4dd47b49af4 100644 --- a/login/src/commonMain/kotlin/org/dhis2/mobile/login/pin/ui/provider/PinResourceProvider.kt +++ b/login/src/commonMain/kotlin/org/dhis2/mobile/login/pin/ui/provider/PinResourceProvider.kt @@ -1,34 +1,86 @@ package org.dhis2.mobile.login.pin.ui.provider +import org.dhis2.mobile.login.pin.domain.model.PinMode import org.dhis2.mobile.login.resources.Res +import org.dhis2.mobile.login.resources.create_pin +import org.dhis2.mobile.login.resources.create_pin_button +import org.dhis2.mobile.login.resources.create_pin_description +import org.dhis2.mobile.login.resources.enter_pin +import org.dhis2.mobile.login.resources.enter_pin_button +import org.dhis2.mobile.login.resources.enter_pin_description +import org.dhis2.mobile.login.resources.forgot_pin_button import org.dhis2.mobile.login.resources.pin_error_incorrect import org.dhis2.mobile.login.resources.pin_error_no_pin +import org.dhis2.mobile.login.resources.pin_error_remaining_attempts import org.dhis2.mobile.login.resources.pin_error_reset_failed import org.dhis2.mobile.login.resources.pin_error_save_failed import org.jetbrains.compose.resources.getString /** * Provides string resources for PIN feature. - * This class decouples resource access from ViewModels, making testing easier. + * Extracted as an interface to allow test-friendly mocking. */ -class PinResourceProvider { - /** - * Returns the error message for incorrect PIN. - */ - suspend fun getPinErrorIncorrect(): String = getString(Res.string.pin_error_incorrect) - - /** - * Returns the error message when no PIN is stored. - */ - suspend fun getPinErrorNoPinStored(): String = getString(Res.string.pin_error_no_pin) - - /** - * Returns the error message when PIN save fails. - */ - suspend fun getPinErrorSaveFailed(): String = getString(Res.string.pin_error_save_failed) - - /** - * Returns the error message when PIN reset fails. - */ - suspend fun getPinErrorResetFailed(): String = getString(Res.string.pin_error_reset_failed) +interface PinResourceProvider { + suspend fun getPinTitle(mode: PinMode): String + + suspend fun getPinSubtitle(mode: PinMode): String + + suspend fun getPrimaryButtonText(mode: PinMode): String + + suspend fun getSecondaryButtonText(mode: PinMode): String? + + suspend fun getPinErrorIncorrect(): String + + suspend fun getPinErrorWithAttempts( + message: String, + attempts: Int, + ): String + + suspend fun getPinErrorNoPinStored(): String + + suspend fun getPinErrorSaveFailed(): String + + suspend fun getPinErrorResetFailed(): String +} + +/** + * Default implementation of [PinResourceProvider] using Compose Multiplatform string resources. + */ +class PinResourceProviderImpl : PinResourceProvider { + override suspend fun getPinTitle(mode: PinMode): String = + when (mode) { + PinMode.SET -> getString(Res.string.create_pin) + PinMode.ASK -> getString(Res.string.enter_pin) + } + + override suspend fun getPinSubtitle(mode: PinMode): String = + when (mode) { + PinMode.SET -> getString(Res.string.create_pin_description) + PinMode.ASK -> getString(Res.string.enter_pin_description) + } + + override suspend fun getPrimaryButtonText(mode: PinMode): String = + when (mode) { + PinMode.SET -> getString(Res.string.create_pin_button) + PinMode.ASK -> getString(Res.string.enter_pin_button) + } + + override suspend fun getSecondaryButtonText(mode: PinMode): String? = + when (mode) { + PinMode.SET -> null + PinMode.ASK -> getString(Res.string.forgot_pin_button) + } + + override suspend fun getPinErrorIncorrect(): String = getString(Res.string.pin_error_incorrect) + + override suspend fun getPinErrorWithAttempts( + message: String, + attempts: Int, + ): String = "$message. ${getString(Res.string.pin_error_remaining_attempts, attempts)}" + + override suspend fun getPinErrorNoPinStored(): String = getString(Res.string.pin_error_no_pin) + + override suspend fun getPinErrorSaveFailed(): String = getString(Res.string.pin_error_save_failed) + + override suspend fun getPinErrorResetFailed(): String = getString(Res.string.pin_error_reset_failed) } diff --git a/login/src/commonMain/kotlin/org/dhis2/mobile/login/pin/ui/state/PinUiState.kt b/login/src/commonMain/kotlin/org/dhis2/mobile/login/pin/ui/state/PinUiState.kt new file mode 100644 index 00000000000..b35c311ab8a --- /dev/null +++ b/login/src/commonMain/kotlin/org/dhis2/mobile/login/pin/ui/state/PinUiState.kt @@ -0,0 +1,31 @@ +package org.dhis2.mobile.login.pin.ui.state + +/** + * UI state for the PIN dialog content. + * Exposed by [org.dhis2.mobile.login.pin.ui.viewmodel.PinViewModel] and consumed by composables. + * + * @param title The main heading text. + * @param subtitle The descriptive text shown below the title. + * @param primaryButtonText Label for the primary action button. + * @param secondaryButtonText Optional label for the secondary action button. + * @param errorMessage Optional error message shown below the PIN input field. + * @param primaryButtonIsEnabled Whether the primary action button is enabled. + * @param isLoading Whether a PIN operation is in progress. + * @param isSuccess Whether the PIN operation completed successfully. + * @param isDismissed Whether the PIN dialog was dismissed (e.g. after forgot-PIN flow). + * @param isTooManyAttempts Whether the user exceeded the maximum number of PIN attempts. + * @param pinLength Number of PIN digits. + */ +data class PinUiState( + val title: String = "", + val subtitle: String = "", + val primaryButtonText: String = "", + val secondaryButtonText: String? = null, + val errorMessage: String? = null, + val primaryButtonIsEnabled: Boolean = false, + val isLoading: Boolean = false, + val isSuccess: Boolean = false, + val isDismissed: Boolean = false, + val isTooManyAttempts: Boolean = false, + val pinLength: Int = 4, +) diff --git a/login/src/commonMain/kotlin/org/dhis2/mobile/login/pin/ui/viewmodel/PinViewModel.kt b/login/src/commonMain/kotlin/org/dhis2/mobile/login/pin/ui/viewmodel/PinViewModel.kt index 6b848e02497..adc127c3872 100644 --- a/login/src/commonMain/kotlin/org/dhis2/mobile/login/pin/ui/viewmodel/PinViewModel.kt +++ b/login/src/commonMain/kotlin/org/dhis2/mobile/login/pin/ui/viewmodel/PinViewModel.kt @@ -8,101 +8,131 @@ import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.launch import org.dhis2.mobile.commons.domain.invoke import org.dhis2.mobile.login.pin.domain.model.PinError -import org.dhis2.mobile.login.pin.domain.model.PinState +import org.dhis2.mobile.login.pin.domain.model.PinMode import org.dhis2.mobile.login.pin.domain.model.ValidatePinInput import org.dhis2.mobile.login.pin.domain.usecase.ForgotPinUseCase import org.dhis2.mobile.login.pin.domain.usecase.SavePinUseCase import org.dhis2.mobile.login.pin.domain.usecase.ValidatePinUseCase -import org.dhis2.mobile.login.pin.ui.components.PinMode import org.dhis2.mobile.login.pin.ui.provider.PinResourceProvider +import org.dhis2.mobile.login.pin.ui.state.PinUiState /** * ViewModel for managing PIN operations. * Coordinates between the UI and use cases for PIN creation, validation, and recovery. + * + * @param mode The PIN mode (SET for creation, ASK for verification). */ class PinViewModel( + private val mode: PinMode, private val savePinUseCase: SavePinUseCase, private val validatePinUseCase: ValidatePinUseCase, private val forgotPinUseCase: ForgotPinUseCase, private val resourceProvider: PinResourceProvider, ) : ViewModel() { - private val _uiState = MutableStateFlow(PinState.Idle) - val uiState: StateFlow = _uiState.asStateFlow() + private val _uiState = MutableStateFlow(PinUiState()) + val uiState: StateFlow = _uiState.asStateFlow() private var pinAttempts = 0 + private var currentPin = "" + + init { + viewModelScope.launch { + _uiState.value = + _uiState.value.copy( + title = resourceProvider.getPinTitle(mode), + subtitle = resourceProvider.getPinSubtitle(mode), + primaryButtonText = resourceProvider.getPrimaryButtonText(mode), + secondaryButtonText = resourceProvider.getSecondaryButtonText(mode), + ) + } + } + + /** + * Updates the current PIN value and recomputes button enablement. + * Clears any existing error message when the user starts typing. + * + * @param pin The current PIN value from the input field. + */ + fun onPinChanged(pin: String) { + currentPin = pin + _uiState.value = + _uiState.value.copy( + errorMessage = null, + primaryButtonIsEnabled = pin.replace("-", "").length == _uiState.value.pinLength, + ) + } /** * Handles PIN completion based on the current mode. - * @param pin The PIN entered by the user. - * @param mode The current PIN mode (SET or ASK). */ - fun onPinComplete( - pin: String, - mode: PinMode, - ) { + fun onPinComplete() { + val pin = currentPin.replace("-", "") when (mode) { PinMode.SET -> savePin(pin) PinMode.ASK -> validatePin(pin) } } - /** - * Saves a new PIN. - * @param pin The PIN to save. - */ private fun savePin(pin: String) { viewModelScope.launch { - _uiState.value = PinState.Loading + _uiState.value = _uiState.value.copy(isLoading = true, primaryButtonIsEnabled = false) savePinUseCase(pin) .onSuccess { - _uiState.value = PinState.Success + _uiState.value = _uiState.value.copy(isLoading = false, isSuccess = true) }.onFailure { error -> _uiState.value = - PinState.Error( - message = error.message ?: resourceProvider.getPinErrorSaveFailed(), + _uiState.value.copy( + isLoading = false, + errorMessage = error.message ?: resourceProvider.getPinErrorSaveFailed(), + primaryButtonIsEnabled = currentPin.replace("-", "").length == _uiState.value.pinLength, ) } } } - /** - * Validates the entered PIN against the stored PIN. - * @param pin The PIN to validate. - */ private fun validatePin(pin: String) { viewModelScope.launch { - _uiState.value = PinState.Loading + _uiState.value = _uiState.value.copy(isLoading = true, primaryButtonIsEnabled = false) validatePinUseCase(ValidatePinInput(pin, pinAttempts)).fold( onSuccess = { - _uiState.value = PinState.Success + _uiState.value = _uiState.value.copy(isLoading = false, isSuccess = true) pinAttempts = 0 }, - onFailure = { failure: Throwable -> + onFailure = { failure -> when (failure) { is PinError.Failed -> { pinAttempts++ + val message = resourceProvider.getPinErrorIncorrect() + val fullMessage = + resourceProvider.getPinErrorWithAttempts(message, failure.attemptsLeft) _uiState.value = - PinState.Error( - message = resourceProvider.getPinErrorIncorrect(), - remainingAttempts = failure.attemptsLeft, + _uiState.value.copy( + isLoading = false, + errorMessage = fullMessage, + primaryButtonIsEnabled = currentPin.replace("-", "").length == _uiState.value.pinLength, ) } is PinError.TooManyAttempts -> { - _uiState.value = PinState.TooManyAttempts + _uiState.value = + _uiState.value.copy(isLoading = false, isTooManyAttempts = true) } is PinError.NoPinStored -> { _uiState.value = - PinState.Error( - message = resourceProvider.getPinErrorNoPinStored(), + _uiState.value.copy( + isLoading = false, + errorMessage = resourceProvider.getPinErrorNoPinStored(), + primaryButtonIsEnabled = currentPin.replace("-", "").length == _uiState.value.pinLength, ) } else -> { _uiState.value = - PinState.Error( - message = failure.message ?: "Unknown error occurred", + _uiState.value.copy( + isLoading = false, + errorMessage = failure.message ?: "Unknown error occurred", + primaryButtonIsEnabled = currentPin.replace("-", "").length == _uiState.value.pinLength, ) } } @@ -116,26 +146,40 @@ class PinViewModel( * This will log out the user and clear the PIN. */ fun onForgotPin() { + if (_uiState.value.isLoading) return viewModelScope.launch { - _uiState.value = PinState.Loading + _uiState.value = _uiState.value.copy(isLoading = true, primaryButtonIsEnabled = false) forgotPinUseCase() .onSuccess { - _uiState.value = PinState.Dismissed + _uiState.value = + _uiState.value.copy( + isLoading = false, + isDismissed = true, + isTooManyAttempts = false, + ) }.onFailure { error -> _uiState.value = - PinState.Error( - message = error.message ?: resourceProvider.getPinErrorResetFailed(), + _uiState.value.copy( + isLoading = false, + errorMessage = error.message ?: resourceProvider.getPinErrorResetFailed(), + primaryButtonIsEnabled = currentPin.replace("-", "").length == _uiState.value.pinLength, ) } } } /** - * Resets the UI state to idle. - * Useful for clearing error messages. + * Resets transient UI state flags (error, success, dismissed, tooManyAttempts). + * Useful when the dialog is dismissed or re-shown. */ fun resetState() { - _uiState.value = PinState.Idle + _uiState.value = + _uiState.value.copy( + errorMessage = null, + isSuccess = false, + isDismissed = false, + isTooManyAttempts = false, + ) } /** diff --git a/login/src/commonTest/kotlin/org/dhis2/mobile/login/pin/ui/viewmodel/PinViewModelTest.kt b/login/src/commonTest/kotlin/org/dhis2/mobile/login/pin/ui/viewmodel/PinViewModelTest.kt index bd68b60dfaa..1ef3fb35d45 100644 --- a/login/src/commonTest/kotlin/org/dhis2/mobile/login/pin/ui/viewmodel/PinViewModelTest.kt +++ b/login/src/commonTest/kotlin/org/dhis2/mobile/login/pin/ui/viewmodel/PinViewModelTest.kt @@ -1,27 +1,29 @@ package org.dhis2.mobile.login.pin.ui.viewmodel -import app.cash.turbine.test import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.runBlocking import kotlinx.coroutines.test.StandardTestDispatcher import kotlinx.coroutines.test.advanceUntilIdle import kotlinx.coroutines.test.resetMain import kotlinx.coroutines.test.runTest import kotlinx.coroutines.test.setMain import org.dhis2.mobile.login.pin.domain.model.PinError -import org.dhis2.mobile.login.pin.domain.model.PinState +import org.dhis2.mobile.login.pin.domain.model.PinMode import org.dhis2.mobile.login.pin.domain.model.ValidatePinInput import org.dhis2.mobile.login.pin.domain.usecase.ForgotPinUseCase import org.dhis2.mobile.login.pin.domain.usecase.SavePinUseCase import org.dhis2.mobile.login.pin.domain.usecase.ValidatePinUseCase -import org.dhis2.mobile.login.pin.ui.components.PinMode import org.dhis2.mobile.login.pin.ui.provider.PinResourceProvider +import org.mockito.kotlin.any import org.mockito.kotlin.mock import org.mockito.kotlin.whenever import kotlin.test.AfterTest import kotlin.test.BeforeTest import kotlin.test.Test import kotlin.test.assertEquals +import kotlin.test.assertFalse +import kotlin.test.assertNull import kotlin.test.assertTrue @OptIn(ExperimentalCoroutinesApi::class) @@ -36,6 +38,12 @@ class PinViewModelTest { @BeforeTest fun setUp() { Dispatchers.setMain(testDispatcher) + runBlocking { + whenever(resourceProvider.getPinTitle(any())).thenReturn("") + whenever(resourceProvider.getPinSubtitle(any())).thenReturn("") + whenever(resourceProvider.getPrimaryButtonText(any())).thenReturn("") + whenever(resourceProvider.getSecondaryButtonText(any())).thenReturn(null) + } } @AfterTest @@ -44,277 +52,252 @@ class PinViewModelTest { } @Test - fun `initial state is Idle`() = + fun `initial state has no error and no active flags`() = runTest { - // Given viewModel = createViewModel() - // Then - assertEquals(PinState.Idle, viewModel.uiState.value) + val state = viewModel.uiState.value + assertNull(state.errorMessage) + assertFalse(state.isLoading) + assertFalse(state.isSuccess) + assertFalse(state.isDismissed) + assertFalse(state.isTooManyAttempts) } @Test fun `onPinComplete with SET mode saves PIN successfully`() = runTest { - // Given - viewModel = createViewModel() + viewModel = createViewModel(PinMode.SET) val pin = "1234" whenever(savePinUseCase(pin)).thenReturn(Result.success(Unit)) - // When - viewModel.onPinComplete(pin, PinMode.SET) + viewModel.onPinChanged(pin) + viewModel.onPinComplete() advanceUntilIdle() - // Then - assertTrue(viewModel.uiState.value is PinState.Success) + assertTrue(viewModel.uiState.value.isSuccess) } @Test fun `onPinComplete with SET mode shows error when save fails`() = runTest { - // Given - viewModel = createViewModel() + viewModel = createViewModel(PinMode.SET) val pin = "1234" - val error = Exception("Save failed") - whenever(savePinUseCase(pin)).thenReturn(Result.failure(error)) + whenever(savePinUseCase(pin)).thenReturn(Result.failure(Exception("Save failed"))) - // When - viewModel.onPinComplete(pin, PinMode.SET) + viewModel.onPinChanged(pin) + viewModel.onPinComplete() advanceUntilIdle() - // Then - val state = viewModel.uiState.value - assertTrue(state is PinState.Error) - assertEquals("Save failed", state.message) + assertEquals("Save failed", viewModel.uiState.value.errorMessage) } @Test fun `onPinComplete with SET mode uses resource provider when error message is null`() = runTest { - // Given - viewModel = createViewModel() + viewModel = createViewModel(PinMode.SET) val pin = "1234" - val error = Exception() - whenever(savePinUseCase(pin)).thenReturn(Result.failure(error)) + whenever(savePinUseCase(pin)).thenReturn(Result.failure(Exception())) whenever(resourceProvider.getPinErrorSaveFailed()).thenReturn("Failed to save PIN") - // When - viewModel.onPinComplete(pin, PinMode.SET) + viewModel.onPinChanged(pin) + viewModel.onPinComplete() advanceUntilIdle() - // Then - val state = viewModel.uiState.value - assertTrue(state is PinState.Error) - assertEquals("Failed to save PIN", state.message) + assertEquals("Failed to save PIN", viewModel.uiState.value.errorMessage) } @Test fun `onPinComplete with ASK mode validates PIN successfully`() = runTest { - // Given - viewModel = createViewModel() + viewModel = createViewModel(PinMode.ASK) val pin = "1234" whenever(validatePinUseCase(ValidatePinInput(pin, 0))).thenReturn(Result.success(Unit)) - // When - viewModel.onPinComplete(pin, PinMode.ASK) + viewModel.onPinChanged(pin) + viewModel.onPinComplete() advanceUntilIdle() - // Then - assertTrue(viewModel.uiState.value is PinState.Success) + assertTrue(viewModel.uiState.value.isSuccess) } @Test fun `onPinComplete with ASK mode shows error when PIN is incorrect`() = runTest { - // Given - viewModel = createViewModel() + viewModel = createViewModel(PinMode.ASK) val pin = "0000" - whenever(validatePinUseCase(ValidatePinInput(pin, 0))).thenReturn(Result.failure(PinError.Failed(attemptsLeft = 2))) + whenever(validatePinUseCase(ValidatePinInput(pin, 0))).thenReturn( + Result.failure(PinError.Failed(attemptsLeft = 2)), + ) whenever(resourceProvider.getPinErrorIncorrect()).thenReturn("Incorrect PIN") + whenever(resourceProvider.getPinErrorWithAttempts("Incorrect PIN", 2)) + .thenReturn("Incorrect PIN. 2 attempts remaining") - // When - viewModel.onPinComplete(pin, PinMode.ASK) + viewModel.onPinChanged(pin) + viewModel.onPinComplete() advanceUntilIdle() - // Then - val state = viewModel.uiState.value - assertTrue(state is PinState.Error) - assertEquals("Incorrect PIN", state.message) - assertEquals(2, state.remainingAttempts) + assertEquals("Incorrect PIN. 2 attempts remaining", viewModel.uiState.value.errorMessage) } @Test fun `onPinComplete with ASK mode shows TooManyAttempts after 3 failed attempts`() = runTest { - // Given - viewModel = createViewModel() + viewModel = createViewModel(PinMode.ASK) val pin = "0000" whenever(resourceProvider.getPinErrorIncorrect()).thenReturn("Incorrect PIN") - // First attempt - whenever(validatePinUseCase(ValidatePinInput(pin, 0))).thenReturn(Result.failure(PinError.Failed(attemptsLeft = 2))) - viewModel.onPinComplete(pin, PinMode.ASK) + whenever(validatePinUseCase(ValidatePinInput(pin, 0))).thenReturn( + Result.failure(PinError.Failed(attemptsLeft = 2)), + ) + viewModel.onPinChanged(pin) + viewModel.onPinComplete() advanceUntilIdle() - // Second attempt - whenever(validatePinUseCase(ValidatePinInput(pin, 1))).thenReturn(Result.failure(PinError.Failed(attemptsLeft = 1))) - viewModel.onPinComplete(pin, PinMode.ASK) + whenever(validatePinUseCase(ValidatePinInput(pin, 1))).thenReturn( + Result.failure(PinError.Failed(attemptsLeft = 1)), + ) + viewModel.onPinChanged(pin) + viewModel.onPinComplete() advanceUntilIdle() - // Third attempt - whenever(validatePinUseCase(ValidatePinInput(pin, 2))).thenReturn(Result.failure(PinError.TooManyAttempts)) - viewModel.onPinComplete(pin, PinMode.ASK) + whenever(validatePinUseCase(ValidatePinInput(pin, 2))).thenReturn( + Result.failure(PinError.TooManyAttempts), + ) + viewModel.onPinChanged(pin) + viewModel.onPinComplete() advanceUntilIdle() - // Then - assertTrue(viewModel.uiState.value is PinState.TooManyAttempts) + assertTrue(viewModel.uiState.value.isTooManyAttempts) } @Test fun `onPinComplete with ASK mode shows error when no PIN is stored`() = runTest { - // Given - viewModel = createViewModel() + viewModel = createViewModel(PinMode.ASK) val pin = "1234" - whenever(validatePinUseCase(ValidatePinInput(pin, 0))).thenReturn(Result.failure(PinError.NoPinStored)) + whenever(validatePinUseCase(ValidatePinInput(pin, 0))).thenReturn( + Result.failure(PinError.NoPinStored), + ) whenever(resourceProvider.getPinErrorNoPinStored()).thenReturn("No PIN stored") - // When - viewModel.onPinComplete(pin, PinMode.ASK) + viewModel.onPinChanged(pin) + viewModel.onPinComplete() advanceUntilIdle() - // Then - val state = viewModel.uiState.value - assertTrue(state is PinState.Error) - assertEquals("No PIN stored", state.message) + assertEquals("No PIN stored", viewModel.uiState.value.errorMessage) } @Test fun `onForgotPin executes successfully`() = runTest { - // Given viewModel = createViewModel() whenever(forgotPinUseCase(Unit)).thenReturn(Result.success(Unit)) - // When viewModel.onForgotPin() advanceUntilIdle() - // Then - assertTrue(viewModel.uiState.value is PinState.Dismissed) + assertTrue(viewModel.uiState.value.isDismissed) } @Test fun `onForgotPin shows error when it fails`() = runTest { - // Given viewModel = createViewModel() - val error = Exception("Logout failed") - whenever(forgotPinUseCase(Unit)).thenReturn(Result.failure(error)) + whenever(forgotPinUseCase(Unit)).thenReturn(Result.failure(Exception("Logout failed"))) - // When viewModel.onForgotPin() advanceUntilIdle() - // Then - val state = viewModel.uiState.value - assertTrue(state is PinState.Error) - assertEquals("Logout failed", state.message) + assertEquals("Logout failed", viewModel.uiState.value.errorMessage) } @Test fun `onForgotPin uses resource provider when error message is null`() = runTest { - // Given viewModel = createViewModel() - val error = Exception() - whenever(forgotPinUseCase(Unit)).thenReturn(Result.failure(error)) + whenever(forgotPinUseCase(Unit)).thenReturn(Result.failure(Exception())) whenever(resourceProvider.getPinErrorResetFailed()).thenReturn("Failed to reset PIN") - // When viewModel.onForgotPin() advanceUntilIdle() - // Then - val state = viewModel.uiState.value - assertTrue(state is PinState.Error) - assertEquals("Failed to reset PIN", state.message) + assertEquals("Failed to reset PIN", viewModel.uiState.value.errorMessage) } @Test - fun `resetState changes state to Idle`() = + fun `resetState clears error and active flags`() = runTest { - // Given - viewModel = createViewModel() + viewModel = createViewModel(PinMode.ASK) val pin = "0000" - whenever(validatePinUseCase(ValidatePinInput(pin, 0))).thenReturn(Result.failure(PinError.Failed(attemptsLeft = 2))) + whenever(validatePinUseCase(ValidatePinInput(pin, 0))).thenReturn( + Result.failure(PinError.Failed(attemptsLeft = 2)), + ) whenever(resourceProvider.getPinErrorIncorrect()).thenReturn("Incorrect PIN") - viewModel.onPinComplete(pin, PinMode.ASK) + viewModel.onPinChanged(pin) + viewModel.onPinComplete() advanceUntilIdle() - // When viewModel.resetState() - // Then - assertEquals(PinState.Idle, viewModel.uiState.value) + val state = viewModel.uiState.value + assertNull(state.errorMessage) + assertFalse(state.isLoading) + assertFalse(state.isSuccess) + assertFalse(state.isDismissed) + assertFalse(state.isTooManyAttempts) } @Test fun `resetAttempts resets the attempt counter`() = runTest { - // Given - viewModel = createViewModel() + viewModel = createViewModel(PinMode.ASK) val pin = "0000" whenever(resourceProvider.getPinErrorIncorrect()).thenReturn("Incorrect PIN") - - // Make a failed attempt - whenever(validatePinUseCase(ValidatePinInput(pin, 0))).thenReturn(Result.failure(PinError.Failed(attemptsLeft = 2))) - viewModel.onPinComplete(pin, PinMode.ASK) + whenever(resourceProvider.getPinErrorWithAttempts("Incorrect PIN", 2)) + .thenReturn("Incorrect PIN. 2 attempts remaining") + + // First failed attempt (attempt index 0) + whenever(validatePinUseCase(ValidatePinInput(pin, 0))).thenReturn( + Result.failure(PinError.Failed(attemptsLeft = 2)), + ) + viewModel.onPinChanged(pin) + viewModel.onPinComplete() advanceUntilIdle() - // When + // Reset attempt counter viewModel.resetAttempts() - // Try again - should use attempts = 0 - whenever(validatePinUseCase(ValidatePinInput(pin, 0))).thenReturn(Result.failure(PinError.Failed(attemptsLeft = 2))) - viewModel.onPinComplete(pin, PinMode.ASK) + // Second attempt should restart from index 0 + whenever(validatePinUseCase(ValidatePinInput(pin, 0))).thenReturn( + Result.failure(PinError.Failed(attemptsLeft = 2)), + ) + viewModel.onPinChanged(pin) + viewModel.onPinComplete() advanceUntilIdle() - // Then - should still have 2 attempts left - val state = viewModel.uiState.value - assertTrue(state is PinState.Error) - assertEquals(2, state.remainingAttempts) + assertEquals("Incorrect PIN. 2 attempts remaining", viewModel.uiState.value.errorMessage) } @Test - fun `state changes are emitted correctly`() = + fun `state transitions through loading to success`() = runTest { - // Given - viewModel = createViewModel() + viewModel = createViewModel(PinMode.SET) val pin = "1234" whenever(savePinUseCase(pin)).thenReturn(Result.success(Unit)) - // When/Then - viewModel.uiState.test { - // Initial state - assertEquals(PinState.Idle, awaitItem()) - - // Trigger save - viewModel.onPinComplete(pin, PinMode.SET) - - // Loading state - assertEquals(PinState.Loading, awaitItem()) - - advanceUntilIdle() + viewModel.onPinChanged(pin) + viewModel.onPinComplete() + advanceUntilIdle() - // Success state - assertEquals(PinState.Success, awaitItem()) - } + val state = viewModel.uiState.value + assertFalse(state.isLoading) + assertTrue(state.isSuccess) } - private fun createViewModel() = + private fun createViewModel(mode: PinMode = PinMode.ASK) = PinViewModel( + mode = mode, savePinUseCase = savePinUseCase, validatePinUseCase = validatePinUseCase, forgotPinUseCase = forgotPinUseCase, From 9e28875e88639ecf05e5ee56cc5dd586f53f9326 Mon Sep 17 00:00:00 2001 From: Pablo Date: Tue, 17 Mar 2026 08:38:09 +0100 Subject: [PATCH 100/114] build: [ANDROAPP-7455] Improve Program Rule performance in forms [skip size] (#4733) * add way to skip display related actions in rules * fix rebase * fix: [ANDROAPP-7455] Improve program rules performance * fix test * fix tests * remove parameter --- .../mobileProgramRules/RulesRepository.kt | 6 +- form/build.gradle.kts | 1 + .../kotlin/org/dhis2/form/ui/FormTest.kt | 2 - .../ui/provider/inputfield/AgeProviderTest.kt | 11 - .../org/dhis2/form/data/FormRepository.kt | 3 - .../org/dhis2/form/data/FormRepositoryImpl.kt | 16 +- .../main/java/org/dhis2/form/di/Injector.kt | 4 +- .../java/org/dhis2/form/model/FormSection.kt | 2 +- form/src/main/java/org/dhis2/form/ui/Form.kt | 15 +- .../main/java/org/dhis2/form/ui/FormView.kt | 43 +-- .../java/org/dhis2/form/ui/FormViewModel.kt | 75 ++--- .../org/dhis2/form/ui/FormViewModelFactory.kt | 3 + .../ui/provider/inputfield/AgeProvider.kt | 13 +- .../provider/inputfield/CheckBoxProvider.kt | 7 +- .../inputfield/CoordinatesProvider.kt | 9 +- .../ui/provider/inputfield/FieldProvider.kt | 10 - .../provider/inputfield/ImageInputProvider.kt | 9 +- .../provider/inputfield/InputFileProvider.kt | 5 +- .../inputfield/RadioButtonProvider.kt | 7 +- form/src/main/res/values/strings.xml | 1 - .../form/integration/ProgramRulesTest.kt | 301 +++++++++--------- .../dhis2/form/ui/DataEntryIntegrationTest.kt | 240 +++++++------- .../org/dhis2/form/ui/FormViewModelTest.kt | 10 +- 23 files changed, 371 insertions(+), 422 deletions(-) diff --git a/dhis2-mobile-program-rules/src/main/java/org/dhis2/mobileProgramRules/RulesRepository.kt b/dhis2-mobile-program-rules/src/main/java/org/dhis2/mobileProgramRules/RulesRepository.kt index ad8d50388a1..2274b85a44f 100644 --- a/dhis2-mobile-program-rules/src/main/java/org/dhis2/mobileProgramRules/RulesRepository.kt +++ b/dhis2-mobile-program-rules/src/main/java/org/dhis2/mobileProgramRules/RulesRepository.kt @@ -68,9 +68,9 @@ class RulesRepository( ?.programStage() } - return queryRules(programUid).toRuleList().filter { - it.programStage == null || it.programStage == programStage - } + return queryRules(programUid) + .filter { it.programStage() == null || it.programStage()?.uid() == programStage } + .toRuleList() } suspend fun ruleVariables(programUid: String): List = diff --git a/form/build.gradle.kts b/form/build.gradle.kts index cd63a9bcdf5..97deb6fcfc0 100644 --- a/form/build.gradle.kts +++ b/form/build.gradle.kts @@ -67,6 +67,7 @@ dependencies { implementation(libs.androidx.activity.compose) testImplementation(libs.bundles.form.test) testImplementation(libs.test.junit) + testImplementation(libs.test.turbine) androidTestImplementation(libs.test.compose.ui.test) androidTestImplementation(libs.test.mockitoCore) androidTestImplementation(libs.test.mockitoKotlin) diff --git a/form/src/androidTest/kotlin/org/dhis2/form/ui/FormTest.kt b/form/src/androidTest/kotlin/org/dhis2/form/ui/FormTest.kt index 5153e9dfe2c..aa44b59425c 100644 --- a/form/src/androidTest/kotlin/org/dhis2/form/ui/FormTest.kt +++ b/form/src/androidTest/kotlin/org/dhis2/form/ui/FormTest.kt @@ -10,7 +10,6 @@ import org.hisp.dhis.android.core.common.ValueType import org.hisp.dhis.mobile.ui.designsystem.component.SectionState import org.junit.Rule import org.junit.Test -import org.mockito.Mockito.mock class FormTest { @@ -75,7 +74,6 @@ class FormTest { sections = sections, intentHandler = {}, uiEventHandler = {}, - resources = mock(), ) } composeTestRule.onNodeWithTag(FORM_VIEW).assertIsDisplayed() diff --git a/form/src/androidTest/kotlin/org/dhis2/form/ui/provider/inputfield/AgeProviderTest.kt b/form/src/androidTest/kotlin/org/dhis2/form/ui/provider/inputfield/AgeProviderTest.kt index f2435faa967..b7ff3d891b8 100644 --- a/form/src/androidTest/kotlin/org/dhis2/form/ui/provider/inputfield/AgeProviderTest.kt +++ b/form/src/androidTest/kotlin/org/dhis2/form/ui/provider/inputfield/AgeProviderTest.kt @@ -10,8 +10,6 @@ import androidx.compose.ui.test.onNodeWithText import androidx.compose.ui.test.performClick import androidx.compose.ui.test.performTextInput import androidx.compose.ui.test.printToLog -import androidx.test.platform.app.InstrumentationRegistry -import org.dhis2.form.di.Injector import org.hisp.dhis.android.core.common.ValueType import org.hisp.dhis.mobile.ui.designsystem.component.InputStyle import org.junit.Rule @@ -19,8 +17,6 @@ import org.junit.Test class AgeProviderTest { - private val resourceManager = - Injector.provideResourcesManager(InstrumentationRegistry.getInstrumentation().getContext()) companion object { @@ -56,7 +52,6 @@ class AgeProviderTest { inputStyle = InputStyle.DarkInputStyle(), fieldUiModel = dateValueTypeFieldUiModel, intentHandler = {}, - resources = resourceManager, onNextClicked = {}, ) } @@ -75,7 +70,6 @@ class AgeProviderTest { inputStyle = InputStyle.DarkInputStyle(), fieldUiModel = dateValueTypeFieldUiModel, intentHandler = {}, - resources = resourceManager, onNextClicked = { }, ) } @@ -94,7 +88,6 @@ class AgeProviderTest { inputStyle = InputStyle.DarkInputStyle(), fieldUiModel = dateValueTypeFieldUiModel, intentHandler = {}, - resources = resourceManager, onNextClicked = {}, ) } @@ -115,7 +108,6 @@ class AgeProviderTest { inputStyle = InputStyle.DarkInputStyle(), fieldUiModel = dateValueTypeFieldUiModel, intentHandler = {}, - resources = resourceManager, onNextClicked = {}, ) @@ -137,7 +129,6 @@ class AgeProviderTest { inputStyle = InputStyle.DarkInputStyle(), fieldUiModel = dateValueTypeFieldUiModel, intentHandler = {}, - resources = resourceManager, onNextClicked = {}, ) } @@ -164,7 +155,6 @@ class AgeProviderTest { inputStyle = InputStyle.DarkInputStyle(), fieldUiModel = dateValueTypeFieldUiModel, intentHandler = {}, - resources = resourceManager, onNextClicked = {}, ) } @@ -185,7 +175,6 @@ class AgeProviderTest { inputStyle = InputStyle.DarkInputStyle(), fieldUiModel = dateValueTypeFieldUiModel, intentHandler = {}, - resources = resourceManager, onNextClicked = {}, ) } diff --git a/form/src/main/java/org/dhis2/form/data/FormRepository.kt b/form/src/main/java/org/dhis2/form/data/FormRepository.kt index dc06bc1a2f8..7955f56acf6 100644 --- a/form/src/main/java/org/dhis2/form/data/FormRepository.kt +++ b/form/src/main/java/org/dhis2/form/data/FormRepository.kt @@ -21,9 +21,6 @@ interface FormRepository { suspend fun runDataIntegrityCheck(backPressed: Boolean): DataIntegrityCheckResult fun completedFieldsPercentage(value: List): Float - - fun calculationLoopOverLimit(): Boolean - fun backupOfChangedItems(): List fun updateErrorList(action: RowAction) diff --git a/form/src/main/java/org/dhis2/form/data/FormRepositoryImpl.kt b/form/src/main/java/org/dhis2/form/data/FormRepositoryImpl.kt index fe05870549d..d120016492c 100644 --- a/form/src/main/java/org/dhis2/form/data/FormRepositoryImpl.kt +++ b/form/src/main/java/org/dhis2/form/data/FormRepositoryImpl.kt @@ -25,8 +25,6 @@ import org.hisp.dhis.android.core.common.ValueType.LONG_TEXT import org.hisp.dhis.android.core.event.EventStatus import org.hisp.dhis.rules.models.RuleEffect -private const val LOOP_THRESHOLD = 5 - class FormRepositoryImpl( private val formValueStore: FormValueStore, private val fieldErrorMessageProvider: FieldErrorMessageProvider, @@ -47,7 +45,6 @@ class FormRepositoryImpl( private var ruleEffects: List = emptyList() private var ruleEffectsResult: RuleUtilsProviderResult? = null private var runDataIntegrity: Boolean = false - private var calculationLoop: Int = 0 private var backupList: List = emptyList() private val fieldsWithOptionEffects = mutableListOf() @@ -75,7 +72,6 @@ class FormRepositoryImpl( } override suspend fun composeList(skipProgramRules: Boolean): List { - calculationLoop = 0 return itemList .applyRuleEffects(skipProgramRules) .mergeListWithErrorFields(itemsWithError) @@ -449,9 +445,6 @@ class FormRepositoryImpl( ) override fun completedFieldsPercentage(value: List): Float = completionPercentage - - override fun calculationLoopOverLimit(): Boolean = calculationLoop == LOOP_THRESHOLD - override fun backupOfChangedItems() = backupList.minus(itemList.applyRuleEffects()) private suspend fun getFieldsWithError() = @@ -528,14 +521,7 @@ class FormRepositoryImpl( } } - return if (ruleEffectsResult?.fieldsToUpdate?.isNotEmpty() == true && - calculationLoop < LOOP_THRESHOLD - ) { - calculationLoop += 1 - ArrayList(fieldMap.values).applyRuleEffects(skipProgramRules) - } else { - ArrayList(fieldMap.values) - } + return ArrayList(fieldMap.values) } private fun List.setFocusedItem(): List = diff --git a/form/src/main/java/org/dhis2/form/di/Injector.kt b/form/src/main/java/org/dhis2/form/di/Injector.kt index 87da96a7f7a..f9493c16132 100644 --- a/form/src/main/java/org/dhis2/form/di/Injector.kt +++ b/form/src/main/java/org/dhis2/form/di/Injector.kt @@ -31,6 +31,7 @@ import org.dhis2.form.model.coroutine.FormDispatcher import org.dhis2.form.ui.FieldViewModelFactory import org.dhis2.form.ui.FieldViewModelFactoryImpl import org.dhis2.form.ui.FormViewModelFactory +import org.dhis2.form.ui.mapper.FormSectionMapper import org.dhis2.form.ui.provider.AutoCompleteProviderImpl import org.dhis2.form.ui.provider.DisplayNameProviderImpl import org.dhis2.form.ui.provider.EnrollmentFormLabelsProvider @@ -67,6 +68,7 @@ object Injector { provideDispatchers(), openErrorLocation, provideFormResultDialogProvider(context), + FormSectionMapper(), ) private fun provideFormResultDialogProvider(context: Context) = @@ -241,7 +243,7 @@ object Injector { private fun provideNetworkUtils(context: Context) = NetworkUtils(context) - fun provideResourcesManager(context: Context) = + private fun provideResourcesManager(context: Context) = ResourceManager( context, provideColorUtils(), diff --git a/form/src/main/java/org/dhis2/form/model/FormSection.kt b/form/src/main/java/org/dhis2/form/model/FormSection.kt index 093db60ac6a..6543f3045ab 100644 --- a/form/src/main/java/org/dhis2/form/model/FormSection.kt +++ b/form/src/main/java/org/dhis2/form/model/FormSection.kt @@ -8,7 +8,7 @@ data class FormSection( val description: String? = null, val state: SectionState, val fields: List, - var warningMessage: Int? = null, + val warningMessage: Int? = null, val completeFields: Int = 0, val totalFields: Int = 0, val warnings: Int = 0, diff --git a/form/src/main/java/org/dhis2/form/ui/Form.kt b/form/src/main/java/org/dhis2/form/ui/Form.kt index cedc99d03b9..d9cc15a9ff3 100644 --- a/form/src/main/java/org/dhis2/form/ui/Form.kt +++ b/form/src/main/java/org/dhis2/form/ui/Form.kt @@ -26,8 +26,8 @@ import androidx.compose.ui.focus.FocusManager import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalFocusManager import androidx.compose.ui.platform.testTag +import androidx.compose.ui.res.stringResource import kotlinx.coroutines.launch -import org.dhis2.commons.resources.ResourceManager import org.dhis2.form.R import org.dhis2.form.model.FieldUiModel import org.dhis2.form.model.FormSection @@ -46,7 +46,6 @@ fun Form( sections: List = emptyList(), intentHandler: (FormIntent) -> Unit, uiEventHandler: (RecyclerViewUiEvents) -> Unit, - resources: ResourceManager, ) { val scrollState = rememberLazyListState() val focusManager = LocalFocusManager.current @@ -77,7 +76,8 @@ fun Form( bottomStart = Spacing.Spacing0, bottomEnd = Spacing.Spacing0, ), - ).clickable( + ) + .clickable( interactionSource = remember { MutableInteractionSource() @@ -118,7 +118,7 @@ fun Form( state = section.state, errorCount = section.errors, warningCount = section.warnings, - warningMessage = section.warningMessage?.let { resources.getString(it) }, + warningMessage = section.warningMessage?.let { stringResource(it) }, onNextSection = onNextSection, onSectionClick = { intentHandler.invoke(FormIntent.OnSection(section.uid)) @@ -132,7 +132,6 @@ fun Form( fieldUiModel = fieldUiModel, uiEventHandler = uiEventHandler, intentHandler = intentHandler, - resources = resources, focusManager = focusManager, onNextClicked = { manageOnNextEvent( @@ -164,7 +163,7 @@ fun Form( } } if (shouldDisplayNoFieldsWarning(sections)) { - NoFieldsWarning(resources) + NoFieldsWarning() } } @@ -190,7 +189,7 @@ fun shouldDisplayNoFieldsWarning(sections: List): Boolean = } @Composable -fun NoFieldsWarning(resources: ResourceManager) { +fun NoFieldsWarning() { Column( modifier = Modifier @@ -201,7 +200,7 @@ fun NoFieldsWarning(resources: ResourceManager) { Modifier .clip(shape = RoundedCornerShape(Radius.Full)) .background(SurfaceColor.WarningContainer), - text = resources.getString(R.string.form_without_fields), + text = stringResource(R.string.form_without_fields), icon = { Icon( imageVector = Icons.Outlined.ErrorOutline, diff --git a/form/src/main/java/org/dhis2/form/ui/FormView.kt b/form/src/main/java/org/dhis2/form/ui/FormView.kt index 443da35b29d..1e57d0abb68 100644 --- a/form/src/main/java/org/dhis2/form/ui/FormView.kt +++ b/form/src/main/java/org/dhis2/form/ui/FormView.kt @@ -13,8 +13,8 @@ import android.view.ViewGroup import android.widget.Toast import androidx.activity.result.contract.ActivityResultContracts import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue -import androidx.compose.runtime.livedata.observeAsState import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue @@ -46,8 +46,8 @@ import org.dhis2.form.data.RulesUtilsProviderConfigurationError import org.dhis2.form.data.scan.ScanContract import org.dhis2.form.data.toMessage import org.dhis2.form.di.Injector -import org.dhis2.form.model.FieldUiModel import org.dhis2.form.model.FormRepositoryRecords +import org.dhis2.form.model.FormSection import org.dhis2.form.model.InfoUiModel import org.dhis2.form.model.RowAction import org.dhis2.form.model.UiRenderType @@ -193,12 +193,7 @@ class FormView : Fragment() { ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed, ) setContent { - val items by viewModel.items.observeAsState() - val sections = - items?.let { - formSectionMapper.mapFromFieldUiModelList(it) - } ?: emptyList() - + val items by viewModel.items.collectAsState(emptyList()) var resultDialogData: FormViewModel.FormActions.ShowResultDialog? by remember { mutableStateOf(null) } @@ -216,12 +211,14 @@ class FormView : Fragment() { } Form( - sections = sections, + sections = items, intentHandler = ::intentHandler, uiEventHandler = ::uiEventHandler, - resources = Injector.provideResourcesManager(context), ) + LaunchedEffect(items) { + render(items) + } resultDialogData?.let { DataEntryBottomSheet( model = it.model, @@ -267,12 +264,6 @@ class FormView : Fragment() { onItemChangeListener?.let { it(rowAction) } } - viewModel.items.observe( - viewLifecycleOwner, - ) { items -> - render(items) - } - viewModel.loading.observe( viewLifecycleOwner, ) { loading -> @@ -308,14 +299,6 @@ class FormView : Fragment() { ) { percentage -> completionListener?.invoke(percentage) } - - viewModel.calculationLoop.observe( - viewLifecycleOwner, - ) { displayLoopWarning -> - if (displayLoopWarning) { - showLoopWarning() - } - } } private fun showInfoDialog(infoUiModel: InfoUiModel) { @@ -330,15 +313,6 @@ class FormView : Fragment() { ).show() } - private fun showLoopWarning() { - MaterialAlertDialogBuilder(requireContext(), R.style.DhisMaterialDialog) - .setTitle(getString(R.string.program_rules_loop_warning_title)) - .setMessage(getString(R.string.program_rules_loop_warning_message)) - .setPositiveButton(R.string.action_accept) { _, _ -> } - .setCancelable(false) - .show() - } - private fun uiEventHandler(uiEvent: RecyclerViewUiEvents) { when (uiEvent) { is RecyclerViewUiEvents.RequestLocationByMap -> requestLocationByMap(uiEvent) @@ -465,10 +439,9 @@ class FormView : Fragment() { } } - private fun render(items: List) { + private fun render(items: List) { viewModel.calculateCompletedFields() viewModel.updateConfigurationErrors() - viewModel.displayLoopWarningIfNeeded() viewModel.onItemsRendered() onFieldItemsRendered?.invoke(items.isEmpty()) } diff --git a/form/src/main/java/org/dhis2/form/ui/FormViewModel.kt b/form/src/main/java/org/dhis2/form/ui/FormViewModel.kt index e1eb21e6108..5c09c57329b 100644 --- a/form/src/main/java/org/dhis2/form/ui/FormViewModel.kt +++ b/form/src/main/java/org/dhis2/form/ui/FormViewModel.kt @@ -13,11 +13,15 @@ import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.channels.consumeEach import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableSharedFlow +import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.firstOrNull import kotlinx.coroutines.flow.flowOn import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onEach import kotlinx.coroutines.flow.receiveAsFlow +import kotlinx.coroutines.flow.shareIn import kotlinx.coroutines.launch import org.dhis2.commons.date.DateUtils import org.dhis2.commons.dialogs.bottomsheet.BottomSheetDialogUiModel @@ -49,6 +53,7 @@ import org.dhis2.form.model.ValueStoreResult import org.dhis2.form.ui.event.RecyclerViewUiEvents import org.dhis2.form.ui.idling.FormCountingIdlingResource import org.dhis2.form.ui.intent.FormIntent +import org.dhis2.form.ui.mapper.FormSectionMapper import org.dhis2.form.ui.provider.FormResultDialogProvider import org.dhis2.mobile.commons.model.CustomIntentRequestArgumentModel import org.dhis2.mobile.commons.providers.CustomIntentFailure @@ -74,6 +79,7 @@ class FormViewModel( private val geometryController: GeometryController = GeometryController(GeometryParserImpl()), private val openErrorLocation: Boolean = false, private val resultDialogUiProvider: FormResultDialogProvider, + private val formSectionMapper: FormSectionMapper, ) : ViewModel() { val loading = MutableLiveData(true) val showToast = MutableLiveData() @@ -81,8 +87,12 @@ class FormViewModel( val showInfo = MutableLiveData() val confError = MutableLiveData>() var dateFormatConfig: String = "ddMMyyyy" - private val _items = MutableLiveData>() - val items: LiveData> = _items + + private val _items = MutableSharedFlow>() + + val items = _items.map { items -> + formSectionMapper.mapFromFieldUiModelList(items) + }.shareIn(viewModelScope, SharingStarted.Eagerly, 0) var previousActionItem: RowAction? = null @@ -107,9 +117,6 @@ class FormViewModel( private val _completionPercentage = MutableLiveData() val completionPercentage = _completionPercentage - private val _calculationLoop = MutableLiveData(false) - val calculationLoop = _calculationLoop - private val pendingIntents = MutableSharedFlow() private val fieldListChannel = @@ -143,7 +150,7 @@ class FormViewModel( fieldListChannel.consumeEach { fieldListConfiguration -> FormCountingIdlingResource.increment() val result = repository.composeList(fieldListConfiguration.skipProgramRules) - _items.postValue(result) + _items.emit(result) if (fieldListConfiguration.finish) { runDataIntegrityCheck() } @@ -436,26 +443,26 @@ class FormViewModel( false } else { valueType.isNumeric || - valueType.isText && - renderType?.isPolygon() != true || - valueType == ValueType.URL || - valueType == ValueType.EMAIL || - valueType == ValueType.PHONE_NUMBER + valueType.isText && + renderType?.isPolygon() != true || + valueType == ValueType.URL || + valueType == ValueType.EMAIL || + valueType == ValueType.PHONE_NUMBER } private fun getLastFocusedTextItem() = repository.currentFocusedItem()?.takeIf { it.optionSet == null && - ( - valueTypeIsTextField( - it.valueType, - it.renderingType, - ) || - it.valueType == ValueType.AGE || - it.valueType == ValueType.DATETIME || - it.valueType == ValueType.DATE || - it.valueType == ValueType.TIME - ) + ( + valueTypeIsTextField( + it.valueType, + it.renderingType, + ) || + it.valueType == ValueType.AGE || + it.valueType == ValueType.DATETIME || + it.valueType == ValueType.DATE || + it.valueType == ValueType.TIME + ) } private fun rowActionFromIntent(intent: FormIntent): RowAction = @@ -833,7 +840,7 @@ class FormViewModel( Timber.e(e) } finally { val list = repository.composeList() - _items.postValue(list) + _items.emit(list) FormCountingIdlingResource.decrement() } } @@ -874,7 +881,7 @@ class FormViewModel( EventStatus.SCHEDULE, EventStatus.VISITED, EventStatus.OVERDUE, - -> FormActions.OnFinish + -> FormActions.OnFinish } private fun provideShowResultDialog(result: DataIntegrityCheckResult): FormActions.ShowResultDialog? = @@ -941,7 +948,9 @@ class FormViewModel( viewModelScope.launch { val result = async(dispatcher.io()) { - repository.completedFieldsPercentage(_items.value ?: emptyList()) + repository.completedFieldsPercentage( + value = _items.firstOrNull() ?: emptyList() + ) } try { _completionPercentage.postValue(result.await()) @@ -969,20 +978,6 @@ class FormViewModel( } } - fun displayLoopWarningIfNeeded() { - viewModelScope.launch { - val result = - async(dispatcher.io()) { - repository.calculationLoopOverLimit() - } - try { - _calculationLoop.postValue(result.await()) - } catch (e: Exception) { - Timber.e(e) - } - } - } - fun discardChanges() { repository.backupOfChangedItems().forEach { submitIntent( @@ -1022,10 +1017,10 @@ class FormViewModel( repository.getDateFormatConfiguration() }.await() try { - _items.postValue(result) + _items.emit(result) } catch (e: Exception) { Timber.e(e) - _items.postValue(emptyList()) + _items.emit(emptyList()) } finally { FormCountingIdlingResource.decrement() } diff --git a/form/src/main/java/org/dhis2/form/ui/FormViewModelFactory.kt b/form/src/main/java/org/dhis2/form/ui/FormViewModelFactory.kt index aecfa9def13..ec0773d9b5e 100644 --- a/form/src/main/java/org/dhis2/form/ui/FormViewModelFactory.kt +++ b/form/src/main/java/org/dhis2/form/ui/FormViewModelFactory.kt @@ -4,6 +4,7 @@ import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import org.dhis2.commons.viewmodel.DispatcherProvider import org.dhis2.form.data.FormRepository +import org.dhis2.form.ui.mapper.FormSectionMapper import org.dhis2.form.ui.provider.FormResultDialogProvider class FormViewModelFactory( @@ -11,6 +12,7 @@ class FormViewModelFactory( private val dispatcher: DispatcherProvider, private val openErrorLocation: Boolean, private val resultDialogUiProvider: FormResultDialogProvider, + private val formSectionMapper: FormSectionMapper, ) : ViewModelProvider.Factory { override fun create(modelClass: Class): T = FormViewModel( @@ -18,5 +20,6 @@ class FormViewModelFactory( dispatcher = dispatcher, openErrorLocation = openErrorLocation, resultDialogUiProvider = resultDialogUiProvider, + formSectionMapper = formSectionMapper, ) as T } diff --git a/form/src/main/java/org/dhis2/form/ui/provider/inputfield/AgeProvider.kt b/form/src/main/java/org/dhis2/form/ui/provider/inputfield/AgeProvider.kt index ed9ff8f3c5e..f7bae8c565b 100644 --- a/form/src/main/java/org/dhis2/form/ui/provider/inputfield/AgeProvider.kt +++ b/form/src/main/java/org/dhis2/form/ui/provider/inputfield/AgeProvider.kt @@ -7,9 +7,9 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.TextRange import androidx.compose.ui.text.input.TextFieldValue -import org.dhis2.commons.resources.ResourceManager import org.dhis2.form.R import org.dhis2.form.extensions.inputState import org.dhis2.form.extensions.legend @@ -34,7 +34,6 @@ fun ProvideInputAge( inputStyle: InputStyle, fieldUiModel: FieldUiModel, intentHandler: (FormIntent) -> Unit, - resources: ResourceManager, onNextClicked: () -> Unit, ) { var inputType by remember { @@ -96,11 +95,11 @@ fun ProvideInputAge( title = fieldUiModel.label, inputStyle = inputStyle, isRequired = fieldUiModel.mandatory, - dateOfBirthLabel = resources.getString(R.string.date_birth), - orLabel = resources.getString(R.string.or), - ageLabel = resources.getString(R.string.age), - cancelText = resources.getString(R.string.cancel), - acceptText = resources.getString(R.string.ok), + dateOfBirthLabel = stringResource(R.string.date_birth), + orLabel = stringResource(R.string.or), + ageLabel = stringResource(R.string.age), + cancelText = stringResource(R.string.cancel), + acceptText = stringResource(R.string.ok), selectableDates = fieldUiModel.selectableDates, ), inputType = inputType, diff --git a/form/src/main/java/org/dhis2/form/ui/provider/inputfield/CheckBoxProvider.kt b/form/src/main/java/org/dhis2/form/ui/provider/inputfield/CheckBoxProvider.kt index 5d90a72c3ed..2e920ed081a 100644 --- a/form/src/main/java/org/dhis2/form/ui/provider/inputfield/CheckBoxProvider.kt +++ b/form/src/main/java/org/dhis2/form/ui/provider/inputfield/CheckBoxProvider.kt @@ -2,8 +2,8 @@ package org.dhis2.form.ui.provider.inputfield import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource import androidx.paging.compose.collectAsLazyPagingItems -import org.dhis2.commons.resources.ResourceManager import org.dhis2.form.R import org.dhis2.form.extensions.inputState import org.dhis2.form.extensions.legend @@ -77,7 +77,6 @@ internal fun ProvideYesNoCheckBoxInput( inputStyle: InputStyle, fieldUiModel: FieldUiModel, intentHandler: (FormIntent) -> Unit, - resources: ResourceManager, ) { val data = listOf( @@ -85,13 +84,13 @@ internal fun ProvideYesNoCheckBoxInput( uid = "true", checked = fieldUiModel.isAffirmativeChecked, enabled = true, - textInput = resources.getString(R.string.yes), + textInput = stringResource(R.string.yes), ), CheckBoxData( uid = "false", checked = fieldUiModel.isNegativeChecked, enabled = true, - textInput = resources.getString(R.string.no), + textInput = stringResource(R.string.no), ), ) diff --git a/form/src/main/java/org/dhis2/form/ui/provider/inputfield/CoordinatesProvider.kt b/form/src/main/java/org/dhis2/form/ui/provider/inputfield/CoordinatesProvider.kt index 7b7a677e104..8b07c757062 100644 --- a/form/src/main/java/org/dhis2/form/ui/provider/inputfield/CoordinatesProvider.kt +++ b/form/src/main/java/org/dhis2/form/ui/provider/inputfield/CoordinatesProvider.kt @@ -2,7 +2,7 @@ package org.dhis2.form.ui.provider.inputfield import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import org.dhis2.commons.resources.ResourceManager +import androidx.compose.ui.res.stringResource import org.dhis2.form.R import org.dhis2.form.extensions.inputState import org.dhis2.form.extensions.legend @@ -42,7 +42,6 @@ fun ProvideInputCoordinate( fieldUiModel: FieldUiModel, intentHandler: (FormIntent) -> Unit, uiEventHandler: (RecyclerViewUiEvents) -> Unit, - resources: ResourceManager, ) { InputCoordinate( title = fieldUiModel.label, @@ -50,9 +49,9 @@ fun ProvideInputCoordinate( supportingText = fieldUiModel.supportingText(), legendData = fieldUiModel.legend(), coordinates = mapGeometry(fieldUiModel.value, FeatureType.POINT), - latitudeText = resources.getString(R.string.latitude), - longitudeText = resources.getString(R.string.longitude), - addLocationBtnText = resources.getString(R.string.add_location), + latitudeText = stringResource(R.string.latitude), + longitudeText = stringResource(R.string.longitude), + addLocationBtnText = stringResource(R.string.add_location), isRequired = fieldUiModel.mandatory, modifier = modifier, onResetButtonClicked = { diff --git a/form/src/main/java/org/dhis2/form/ui/provider/inputfield/FieldProvider.kt b/form/src/main/java/org/dhis2/form/ui/provider/inputfield/FieldProvider.kt index 07b5e50839e..4de80f0d5d8 100644 --- a/form/src/main/java/org/dhis2/form/ui/provider/inputfield/FieldProvider.kt +++ b/form/src/main/java/org/dhis2/form/ui/provider/inputfield/FieldProvider.kt @@ -26,7 +26,6 @@ import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.text.input.TextFieldValue import kotlinx.coroutines.delay import kotlinx.coroutines.launch -import org.dhis2.commons.resources.ResourceManager import org.dhis2.form.data.EventRepository.Companion.EVENT_ORG_UNIT_UID import org.dhis2.form.extensions.autocompleteList import org.dhis2.form.extensions.inputState @@ -63,7 +62,6 @@ fun FieldProvider( fieldUiModel: FieldUiModel, uiEventHandler: (RecyclerViewUiEvents) -> Unit, intentHandler: (FormIntent) -> Unit, - resources: ResourceManager, focusManager: FocusManager, onNextClicked: () -> Unit, onFileSelected: (String) -> Unit, @@ -150,7 +148,6 @@ fun FieldProvider( fieldUiModel = fieldUiModel, intentHandler = intentHandler, uiEventHandler = uiEventHandler, - resources = resources, focusRequester = focusRequester, onNextClicked = onNextClicked, focusManager = focusManager, @@ -166,7 +163,6 @@ fun ProvideByValueType( fieldUiModel: FieldUiModel, intentHandler: (FormIntent) -> Unit, uiEventHandler: (RecyclerViewUiEvents) -> Unit, - resources: ResourceManager, focusRequester: FocusRequester, onNextClicked: () -> Unit, focusManager: FocusManager, @@ -309,7 +305,6 @@ fun ProvideByValueType( ProvideInputFileResource( modifier = modifier, fieldUiModel = fieldUiModel, - resources = resources, onFileSelected = onFileSelected, uiEventHandler = uiEventHandler, ) @@ -337,7 +332,6 @@ fun ProvideByValueType( inputStyle = inputStyle, fieldUiModel = fieldUiModel, intentHandler = intentHandler, - resources = resources, ) } @@ -347,7 +341,6 @@ fun ProvideByValueType( inputStyle = inputStyle, fieldUiModel = fieldUiModel, intentHandler = intentHandler, - resources = resources, ) } } @@ -429,7 +422,6 @@ fun ProvideByValueType( fieldUiModel = fieldUiModel, intentHandler = intentHandler, uiEventHandler = uiEventHandler, - resources = resources, onFileSelected = onFileSelected, ) } @@ -451,7 +443,6 @@ fun ProvideByValueType( fieldUiModel = fieldUiModel, intentHandler = intentHandler, uiEventHandler = uiEventHandler, - resources = resources, ) } } @@ -463,7 +454,6 @@ fun ProvideByValueType( inputStyle = inputStyle, fieldUiModel = fieldUiModel, intentHandler = intentHandler, - resources = resources, onNextClicked = onNextClicked, ) } diff --git a/form/src/main/java/org/dhis2/form/ui/provider/inputfield/ImageInputProvider.kt b/form/src/main/java/org/dhis2/form/ui/provider/inputfield/ImageInputProvider.kt index b419091e208..713c1cc5d66 100644 --- a/form/src/main/java/org/dhis2/form/ui/provider/inputfield/ImageInputProvider.kt +++ b/form/src/main/java/org/dhis2/form/ui/provider/inputfield/ImageInputProvider.kt @@ -12,8 +12,8 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.painter.BitmapPainter import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource import androidx.core.content.ContextCompat -import org.dhis2.commons.resources.ResourceManager import org.dhis2.form.R import org.dhis2.form.extensions.inputState import org.dhis2.form.extensions.legend @@ -32,7 +32,6 @@ import org.hisp.dhis.mobile.ui.designsystem.component.UploadState internal fun ProvideInputImage( modifier: Modifier, fieldUiModel: FieldUiModel, - resources: ResourceManager, intentHandler: (FormIntent) -> Unit, uiEventHandler: (RecyclerViewUiEvents) -> Unit, onFileSelected: (filePath: String) -> Unit, @@ -75,7 +74,7 @@ internal fun ProvideInputImage( state = fieldUiModel.inputState(), supportingText = fieldUiModel.supportingText(), legendData = fieldUiModel.legend(), - addImageBtnText = resources.getString(R.string.add_image), + addImageBtnText = stringResource(R.string.add_image), isRequired = fieldUiModel.mandatory, uploadState = uploadState, painterFor = { remember { it!! } }, @@ -113,8 +112,8 @@ internal fun ProvideInputImage( ImagePickerOptionsDialog( title = fieldUiModel.label, showImageOptions = showImageOptions, - cameraButtonLabel = resources.getString(R.string.take_photo), - galleryButtonLabel = resources.getString(R.string.from_gallery_v2), + cameraButtonLabel = stringResource(R.string.take_photo), + galleryButtonLabel = stringResource(R.string.from_gallery_v2), onDismiss = { showImageOptions = false }, onTakePicture = { if (ContextCompat.checkSelfPermission( diff --git a/form/src/main/java/org/dhis2/form/ui/provider/inputfield/InputFileProvider.kt b/form/src/main/java/org/dhis2/form/ui/provider/inputfield/InputFileProvider.kt index 87dc4266e68..7e20ff9d99d 100644 --- a/form/src/main/java/org/dhis2/form/ui/provider/inputfield/InputFileProvider.kt +++ b/form/src/main/java/org/dhis2/form/ui/provider/inputfield/InputFileProvider.kt @@ -7,7 +7,7 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier -import org.dhis2.commons.resources.ResourceManager +import androidx.compose.ui.res.stringResource import org.dhis2.form.R import org.dhis2.form.extensions.inputState import org.dhis2.form.extensions.legend @@ -24,7 +24,6 @@ import java.text.DecimalFormat internal fun ProvideInputFileResource( modifier: Modifier, fieldUiModel: FieldUiModel, - resources: ResourceManager, onFileSelected: (filePath: String) -> Unit, uiEventHandler: (RecyclerViewUiEvents) -> Unit, ) { @@ -45,7 +44,7 @@ internal fun ProvideInputFileResource( title = fieldUiModel.label, inputShellState = fieldUiModel.inputState(), supportingText = fieldUiModel.supportingText(), - buttonText = resources.getString(R.string.add_file), + buttonText = stringResource(R.string.add_file), uploadFileState = uploadState, fileName = file?.name, fileWeight = file?.length()?.let { fileSizeLabel(it) }, diff --git a/form/src/main/java/org/dhis2/form/ui/provider/inputfield/RadioButtonProvider.kt b/form/src/main/java/org/dhis2/form/ui/provider/inputfield/RadioButtonProvider.kt index 5769e35abc8..d0cb1b28b11 100644 --- a/form/src/main/java/org/dhis2/form/ui/provider/inputfield/RadioButtonProvider.kt +++ b/form/src/main/java/org/dhis2/form/ui/provider/inputfield/RadioButtonProvider.kt @@ -2,8 +2,8 @@ package org.dhis2.form.ui.provider.inputfield import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource import androidx.paging.compose.collectAsLazyPagingItems -import org.dhis2.commons.resources.ResourceManager import org.dhis2.form.R import org.dhis2.form.extensions.inputState import org.dhis2.form.extensions.legend @@ -76,7 +76,6 @@ internal fun ProvideYesNoRadioButtonInput( inputStyle: InputStyle, fieldUiModel: FieldUiModel, intentHandler: (FormIntent) -> Unit, - resources: ResourceManager, ) { val data = listOf( @@ -84,13 +83,13 @@ internal fun ProvideYesNoRadioButtonInput( uid = "true", selected = fieldUiModel.isAffirmativeChecked, enabled = true, - textInput = resources.getString(R.string.yes), + textInput = stringResource(R.string.yes), ), RadioButtonData( uid = "false", selected = fieldUiModel.isNegativeChecked, enabled = true, - textInput = resources.getString(R.string.no), + textInput = stringResource(R.string.no), ), ) diff --git a/form/src/main/res/values/strings.xml b/form/src/main/res/values/strings.xml index dbb9e7fa1de..d6a292f9f03 100644 --- a/form/src/main/res/values/strings.xml +++ b/form/src/main/res/values/strings.xml @@ -61,7 +61,6 @@ Camera permission is denied.\nYou need to enable it to use this feature. Close Program rules warning - There is a configuration issue causing a loop in the rules. Contact you administrator. Copied No info for this field Take Photo diff --git a/form/src/test/java/org/dhis2/form/integration/ProgramRulesTest.kt b/form/src/test/java/org/dhis2/form/integration/ProgramRulesTest.kt index e82111ac419..252ec89ee86 100644 --- a/form/src/test/java/org/dhis2/form/integration/ProgramRulesTest.kt +++ b/form/src/test/java/org/dhis2/form/integration/ProgramRulesTest.kt @@ -2,6 +2,7 @@ package org.dhis2.form.integration import androidx.arch.core.executor.testing.InstantTaskExecutorRule import androidx.databinding.ObservableField +import app.cash.turbine.test import io.reactivex.Flowable import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.Dispatchers @@ -31,6 +32,7 @@ import org.dhis2.form.model.StoreResult import org.dhis2.form.model.ValueStoreResult import org.dhis2.form.ui.FormViewModel import org.dhis2.form.ui.intent.FormIntent +import org.dhis2.form.ui.mapper.FormSectionMapper import org.dhis2.form.ui.provider.FormResultDialogProvider import org.dhis2.mobileProgramRules.RuleEngineHelper import org.hisp.dhis.android.core.D2 @@ -110,10 +112,10 @@ class ProgramRulesTest { } whenever(formValueStore.save(any(), anyOrNull(), anyOrNull())) doReturn - StoreResult( - "", - ValueStoreResult.VALUE_CHANGED, - ) + StoreResult( + "", + ValueStoreResult.VALUE_CHANGED, + ) repository = FormRepositoryImpl( @@ -142,6 +144,7 @@ class ProgramRulesTest { }, geometryController, resultDialogUiProvider = resultDialogUiProvider, + formSectionMapper = FormSectionMapper(), ) testingDispatcher.scheduler.advanceUntilIdle() @@ -158,17 +161,17 @@ class ProgramRulesTest { fun `Should assign a value`() = runTest { whenever(ruleEngineHelper.evaluate()) doReturn - listOf( - RuleEffect( - "", - RuleAction( - "assignedValue", - ProgramRuleActionType.ASSIGN.name, - mutableMapOf(Pair("field", "uid001")), + listOf( + RuleEffect( + "", + RuleAction( + "assignedValue", + ProgramRuleActionType.ASSIGN.name, + mutableMapOf(Pair("field", "uid001")), + ), + "newValue", ), - "newValue", - ), - ) + ) val intent = FormIntent.OnSave( @@ -177,12 +180,13 @@ class ProgramRulesTest { valueType = ValueType.TEXT, ) - formViewModel.submitIntent(intent) - advanceUntilIdle() + formViewModel.items.test { + formViewModel.submitIntent(intent) + val items = awaitItem() - val items = formViewModel.items.value ?: emptyList() + assert(items.find { it -> it.fields.find { field -> field.uid == "uid001" }?.value == "newValue" } != null) + } - assert(items.find { it.uid == "uid001" }?.value == "newValue") } @OptIn(ExperimentalCoroutinesApi::class) @@ -190,19 +194,19 @@ class ProgramRulesTest { fun `Should hide field`() = runTest { whenever(ruleEngineHelper.evaluate()) doReturn - listOf( - RuleEffect( - "ruleUid", - RuleAction( - "data", - ProgramRuleActionType.HIDEFIELD.name, - mutableMapOf( - "content" to "content", - "field" to "uid001", + listOf( + RuleEffect( + "ruleUid", + RuleAction( + "data", + ProgramRuleActionType.HIDEFIELD.name, + mutableMapOf( + "content" to "content", + "field" to "uid001", + ), ), ), - ), - ) + ) val intent = FormIntent.OnSave( @@ -211,15 +215,17 @@ class ProgramRulesTest { valueType = ValueType.TEXT, ) - formViewModel.submitIntent(intent) - advanceUntilIdle() - - val items = formViewModel.items.value ?: emptyList() + formViewModel.items.test { + formViewModel.submitIntent(intent) + val sections = awaitItem() - items.forEach { - assert(it.uid != "uid001") + sections.forEach { + assert(it.fields.size == 6) + it.fields.forEach { field -> + assert(field.uid != "uid001") + } + } } - assert(items.size == 6) } @OptIn(ExperimentalCoroutinesApi::class) @@ -227,20 +233,20 @@ class ProgramRulesTest { fun `Should hide section`() = runTest { whenever(ruleEngineHelper.evaluate()) doReturn - listOf( - RuleEffect( - "ruleUid", - RuleAction( - "data", - ProgramRuleActionType.HIDESECTION.name, - mutableMapOf( - "content" to "content", - "programStageSection" to "section1", + listOf( + RuleEffect( + "ruleUid", + RuleAction( + "data", + ProgramRuleActionType.HIDESECTION.name, + mutableMapOf( + "content" to "content", + "programStageSection" to "section1", + ), ), + "data", ), - "data", - ), - ) + ) val intent = FormIntent.OnSave( @@ -249,16 +255,18 @@ class ProgramRulesTest { valueType = ValueType.TEXT, ) - formViewModel.submitIntent(intent) - advanceUntilIdle() + formViewModel.items.test { + formViewModel.submitIntent(intent) + val sections = awaitItem() - val items = formViewModel.items.value ?: emptyList() + assert(sections.size == 1) + assertTrue(sections.first().fields.size == 4) + assertTrue(sections.first().fields[0].uid == "uid004") + assertTrue(sections.first().fields[1].uid == "uid005") + assertTrue(sections.first().fields[2].uid == "uid006") + assertTrue(sections.first().fields[3].uid == "uid007") + } - assertTrue(items.size == 4) - assertTrue(items[0].uid == "uid004") - assertTrue(items[1].uid == "uid005") - assertTrue(items[2].uid == "uid006") - assertTrue(items[3].uid == "uid007") } @OptIn(ExperimentalCoroutinesApi::class) @@ -266,32 +274,32 @@ class ProgramRulesTest { fun `Should show warning and error message`() = runTest { whenever(ruleEngineHelper.evaluate()) doReturn - listOf( - RuleEffect( - "ruleUid", - RuleAction( - "data", - ProgramRuleActionType.SHOWWARNING.name, - mutableMapOf( - "content" to "content", - "field" to "uid002", + listOf( + RuleEffect( + "ruleUid", + RuleAction( + "data", + ProgramRuleActionType.SHOWWARNING.name, + mutableMapOf( + "content" to "content", + "field" to "uid002", + ), ), + "warning message", ), - "warning message", - ), - RuleEffect( - "ruleUid2", - RuleAction( - "data", - ProgramRuleActionType.SHOWERROR.name, - mutableMapOf( - "content" to "content", - "field" to "uid005", + RuleEffect( + "ruleUid2", + RuleAction( + "data", + ProgramRuleActionType.SHOWERROR.name, + mutableMapOf( + "content" to "content", + "field" to "uid005", + ), ), + "error message", ), - "error message", - ), - ) + ) val intent = FormIntent.OnSave( @@ -300,19 +308,21 @@ class ProgramRulesTest { valueType = ValueType.TEXT, ) - formViewModel.submitIntent(intent) - advanceUntilIdle() - - val items = formViewModel.items.value ?: emptyList() - - items.forEach { - if (it.uid == "uid002") { - assertNotNull(it.warning) - assertEquals(it.warning, "content warning message") - } - if (it.uid == "uid005") { - assertNotNull(it.error) - assertEquals(it.error, "content error message") + formViewModel.items.test { + formViewModel.submitIntent(intent) + + val sections = awaitItem() + assertTrue(sections.size == 1) + + sections.first().fields.forEach { + if (it.uid == "uid002") { + assertNotNull(it.warning) + assertEquals(it.warning, "content warning message") + } + if (it.uid == "uid005") { + assertNotNull(it.error) + assertEquals(it.error, "content error message") + } } } } @@ -322,20 +332,20 @@ class ProgramRulesTest { fun `Should set mandatory field`() = runTest { whenever(ruleEngineHelper.evaluate()) doReturn - listOf( - RuleEffect( - "ruleUid", - RuleAction( - "data", - ProgramRuleActionType.SETMANDATORYFIELD.name, - mutableMapOf( - "content" to "content", - "field" to "uid003", + listOf( + RuleEffect( + "ruleUid", + RuleAction( + "data", + ProgramRuleActionType.SETMANDATORYFIELD.name, + mutableMapOf( + "content" to "content", + "field" to "uid003", + ), ), + "data", ), - "data", - ), - ) + ) val intent = FormIntent.OnSave( @@ -344,16 +354,17 @@ class ProgramRulesTest { valueType = ValueType.TEXT, ) - formViewModel.submitIntent(intent) - advanceUntilIdle() - - val items = formViewModel.items.value ?: emptyList() - - items.forEach { - if (it.uid == "uid003") { - assertTrue(it.mandatory) + formViewModel.items.test { + formViewModel.submitIntent(intent) + val sections = awaitItem() + assertTrue(sections.size == 1) + sections.first().fields.forEach { + if (it.uid == "uid003") { + assertTrue(it.mandatory) + } } } + } @OptIn(ExperimentalCoroutinesApi::class) @@ -361,21 +372,21 @@ class ProgramRulesTest { fun `Should show option`() = runTest { whenever(ruleEngineHelper.evaluate()) doReturn - listOf( - RuleEffect( - "ruleUid", - RuleAction( - "data", - ProgramRuleActionType.SHOWOPTIONGROUP.name, - mutableMapOf( - "content" to "content", - "field" to "uid006", - "optionGroup" to "optionGroupId", + listOf( + RuleEffect( + "ruleUid", + RuleAction( + "data", + ProgramRuleActionType.SHOWOPTIONGROUP.name, + mutableMapOf( + "content" to "content", + "field" to "uid006", + "optionGroup" to "optionGroupId", + ), ), + "data", ), - "data", - ), - ) + ) whenever( dataEntryRepository.options( @@ -394,10 +405,10 @@ class ProgramRulesTest { ) whenever(formValueStore.deleteOptionValueIfSelected(any(), any())) doReturn - StoreResult( - "uid006", - ValueStoreResult.VALUE_CHANGED, - ) + StoreResult( + "uid006", + ValueStoreResult.VALUE_CHANGED, + ) formViewModel.submitIntent(intent) advanceUntilIdle() @@ -415,21 +426,21 @@ class ProgramRulesTest { fun `Should hide option`() = runTest { whenever(ruleEngineHelper.evaluate()) doReturn - listOf( - RuleEffect( - "ruleUid", - RuleAction( - "data", - ProgramRuleActionType.HIDEOPTION.name, - mutableMapOf( - "content" to "content", - "field" to "uid007", - "option" to "Option2", + listOf( + RuleEffect( + "ruleUid", + RuleAction( + "data", + ProgramRuleActionType.HIDEOPTION.name, + mutableMapOf( + "content" to "content", + "field" to "uid007", + "option" to "Option2", + ), ), + "data", ), - "data", - ), - ) + ) whenever( dataEntryRepository.options( @@ -448,10 +459,10 @@ class ProgramRulesTest { ) whenever(formValueStore.deleteOptionValueIfSelected(any(), any())) doReturn - StoreResult( - "uid007", - ValueStoreResult.VALUE_HAS_NOT_CHANGED, - ) + StoreResult( + "uid007", + ValueStoreResult.VALUE_HAS_NOT_CHANGED, + ) formViewModel.submitIntent(intent) advanceUntilIdle() diff --git a/form/src/test/java/org/dhis2/form/ui/DataEntryIntegrationTest.kt b/form/src/test/java/org/dhis2/form/ui/DataEntryIntegrationTest.kt index a2baa1d88c9..88b11944b12 100644 --- a/form/src/test/java/org/dhis2/form/ui/DataEntryIntegrationTest.kt +++ b/form/src/test/java/org/dhis2/form/ui/DataEntryIntegrationTest.kt @@ -2,8 +2,8 @@ package org.dhis2.form.ui import androidx.arch.core.executor.testing.InstantTaskExecutorRule import androidx.databinding.ObservableField -import androidx.lifecycle.Observer import androidx.paging.PagingData +import app.cash.turbine.test import io.reactivex.Flowable import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.ExperimentalCoroutinesApi @@ -30,6 +30,7 @@ import org.dhis2.form.model.SectionUiModelImpl import org.dhis2.form.model.StoreResult import org.dhis2.form.model.ValueStoreResult import org.dhis2.form.ui.intent.FormIntent +import org.dhis2.form.ui.mapper.FormSectionMapper import org.dhis2.form.ui.provider.DisplayNameProvider import org.dhis2.form.ui.provider.FormResultDialogProvider import org.dhis2.form.ui.provider.LegendValueProvider @@ -164,140 +165,143 @@ class DataEntryIntegrationTest { geometryController = geometryController, openErrorLocation = false, resultDialogUiProvider = resultDialogUiProvider, + formSectionMapper = FormSectionMapper(), ) } @Test fun shouldAllowDataEntryCorrectly() = runTest { - val observedItems = mutableListOf>() - val observer = - Observer> { items -> - observedItems.add(items) - } - - formViewModel.items.observeForever(observer) - - val focusOnReportDateIntent = - FormIntent.OnFocus( - uid = "EVENT_REPORT_DATE_UID", - value = "", + formViewModel.items.test { + + val focusOnReportDateIntent = + FormIntent.OnFocus( + uid = "EVENT_REPORT_DATE_UID", + value = "", + ) + formViewModel.submitIntent(focusOnReportDateIntent) + + assert( + awaitItem().first().fields + .find { it.uid == "EVENT_REPORT_DATE_UID" } + ?.value + .isNullOrEmpty(), ) - formViewModel.submitIntent(focusOnReportDateIntent) - - assert( - observedItems - .last() - .find { it.uid == "EVENT_REPORT_DATE_UID" } - ?.value - .isNullOrEmpty(), - ) - - val enterReportDateIntent = - FormIntent.OnTextChange( - uid = "EVENT_REPORT_DATE_UID", - value = "2024-03-20", - valueType = ValueType.DATE, - ) - formViewModel.submitIntent(enterReportDateIntent) - - val focusOnOrgUnitIntent = - FormIntent.OnFocus( - uid = "EVENT_ORG_UNIT_UID", - value = "", - ) - formViewModel.submitIntent(focusOnOrgUnitIntent) - val enterOrgUnitIntent = - FormIntent.OnTextChange( - uid = "EVENT_ORG_UNIT_UID", - value = "g8upMTyEZGZ", - valueType = ValueType.ORGANISATION_UNIT, + val enterReportDateIntent = + FormIntent.OnTextChange( + uid = "EVENT_REPORT_DATE_UID", + value = "2024-03-20", + valueType = ValueType.DATE, + ) + formViewModel.submitIntent(enterReportDateIntent) + + val focusOnOrgUnitIntent = + FormIntent.OnFocus( + uid = "EVENT_ORG_UNIT_UID", + value = "", + ) + formViewModel.submitIntent(focusOnOrgUnitIntent) + + assert( + awaitItem().first().fields + .find { it.uid == "EVENT_REPORT_DATE_UID" }?.value == "2024-03-20", ) - formViewModel.submitIntent(enterOrgUnitIntent) - val focusOnCoordinatesIntent = - FormIntent.OnFocus( - uid = "EVENT_COORDINATE_UID", - value = "", + val enterOrgUnitIntent = + FormIntent.OnTextChange( + uid = "EVENT_ORG_UNIT_UID", + value = "g8upMTyEZGZ", + valueType = ValueType.ORGANISATION_UNIT, + ) + formViewModel.submitIntent(enterOrgUnitIntent) + + val focusOnCoordinatesIntent = + FormIntent.OnFocus( + uid = "EVENT_COORDINATE_UID", + value = "", + ) + formViewModel.submitIntent(focusOnCoordinatesIntent) + + assert( + awaitItem().first().fields + .find { it.uid == "EVENT_ORG_UNIT_UID" }?.value == "g8upMTyEZGZ", ) - formViewModel.submitIntent(focusOnCoordinatesIntent) - // Change section - formViewModel.submitIntent(FormIntent.OnSection(sectionUid = "EVENT_DATA_SECTION_UID")) - - // Focus on age - val focusOnAgeIntent = - FormIntent.OnFocus( - uid = "qrur9Dvnyt5", - value = "", - ) - formViewModel.submitIntent(focusOnAgeIntent) - - // Enter age - val enterAgeIntent = - FormIntent.OnTextChange( - uid = "qrur9Dvnyt5", - value = "20", - valueType = ValueType.AGE, + // Change section + formViewModel.submitIntent(FormIntent.OnSection(sectionUid = "EVENT_DATA_SECTION_UID")) + + awaitItem() + + // Focus on age + val focusOnAgeIntent = + FormIntent.OnFocus( + uid = "qrur9Dvnyt5", + value = "", + ) + formViewModel.submitIntent(focusOnAgeIntent) + + // Enter age + val enterAgeIntent = + FormIntent.OnTextChange( + uid = "qrur9Dvnyt5", + value = "20", + valueType = ValueType.AGE, + ) + formViewModel.submitIntent(enterAgeIntent) + + awaitItem() + + // focus on input field with legend + val focusOnLegendFieldIntent = + FormIntent.OnFocus( + uid = "INPUT_NUMBER_WITH_LEGEND_UID", + value = "", + ) + formViewModel.submitIntent(focusOnLegendFieldIntent) + + assert( + awaitItem()[1].fields + .find { it.uid == "qrur9Dvnyt5" }?.value == "20", ) - formViewModel.submitIntent(enterAgeIntent) - // focus on input field with legend - val focusOnLegendFieldIntent = - FormIntent.OnFocus( - uid = "INPUT_NUMBER_WITH_LEGEND_UID", - value = "", - ) - formViewModel.submitIntent(focusOnLegendFieldIntent) - - // enter value on input field with legend - val enterValueOnLegendFieldIntent = - FormIntent.OnTextChange( - uid = "INPUT_NUMBER_WITH_LEGEND_UID", - value = "25", - valueType = ValueType.NUMBER, + // enter value on input field with legend + val enterValueOnLegendFieldIntent = + FormIntent.OnTextChange( + uid = "INPUT_NUMBER_WITH_LEGEND_UID", + value = "25", + valueType = ValueType.NUMBER, + ) + + formViewModel.submitIntent(enterValueOnLegendFieldIntent) + + // Focus on gender + val focusOnGenderIntent = + FormIntent.OnFocus( + uid = "oZg33kd9taw", + value = "", + ) + formViewModel.submitIntent(focusOnGenderIntent) + + assert( + awaitItem()[1].fields + .find { it.uid == "INPUT_NUMBER_WITH_LEGEND_UID" } + ?.legend == legendValueItem, ) - formViewModel.submitIntent(enterValueOnLegendFieldIntent) - - // Focus on gender - val focusOnGenderIntent = - FormIntent.OnFocus( - uid = "oZg33kd9taw", - value = "", + val enterGenderIntent = + FormIntent.OnSave( + uid = "oZg33kd9taw", + value = "Female", + valueType = ValueType.MULTI_TEXT, + ) + formViewModel.submitIntent(enterGenderIntent) + + assert( + awaitItem()[1].fields + .find { it.uid == "oZg33kd9taw" }?.value == "Female", ) - formViewModel.submitIntent(focusOnGenderIntent) - - val enterGenderIntent = - FormIntent.OnSave( - uid = "oZg33kd9taw", - value = "Female", - valueType = ValueType.MULTI_TEXT, - ) - formViewModel.submitIntent(enterGenderIntent) - - assert( - observedItems.last().find { it.uid == "EVENT_REPORT_DATE_UID" }?.value == "2024-03-20", - ) - assert( - observedItems.last().find { it.uid == "EVENT_ORG_UNIT_UID" }?.value == "g8upMTyEZGZ", - ) - assert( - observedItems - .last() - .find { it.uid == "INPUT_NUMBER_WITH_LEGEND_UID" } - ?.legend == legendValueItem, - ) - assert( - observedItems.last().find { it.uid == "qrur9Dvnyt5" }?.value == "20", - ) - assert( - observedItems.last().find { it.uid == "oZg33kd9taw" }?.value == "Female", - ) - - // Clean up - formViewModel.items.removeObserver(observer) + } } private fun provideMalariaCaseRegistrationEventItems(): List { diff --git a/form/src/test/java/org/dhis2/form/ui/FormViewModelTest.kt b/form/src/test/java/org/dhis2/form/ui/FormViewModelTest.kt index d18234f3660..f10c4d96255 100644 --- a/form/src/test/java/org/dhis2/form/ui/FormViewModelTest.kt +++ b/form/src/test/java/org/dhis2/form/ui/FormViewModelTest.kt @@ -4,6 +4,7 @@ import android.content.Intent import androidx.arch.core.executor.testing.InstantTaskExecutorRule import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.runBlocking import kotlinx.coroutines.test.StandardTestDispatcher import kotlinx.coroutines.test.advanceUntilIdle import kotlinx.coroutines.test.runTest @@ -16,6 +17,7 @@ import org.dhis2.form.model.FieldUiModel import org.dhis2.form.model.RowAction import org.dhis2.form.ui.event.RecyclerViewUiEvents import org.dhis2.form.ui.intent.FormIntent +import org.dhis2.form.ui.mapper.FormSectionMapper import org.dhis2.form.ui.provider.FormResultDialogProvider import org.dhis2.mobile.commons.model.CustomIntentRequestArgumentModel import org.hisp.dhis.android.core.common.ValueType @@ -37,7 +39,10 @@ class FormViewModelTest { @get:Rule val instantExecutorRule = InstantTaskExecutorRule() - private val repository: FormRepository = mock() + private val repository: FormRepository = mock { + on { runBlocking { fetchFormItems(any()) } } doReturn emptyList() + on { runBlocking { composeList(any()) } } doReturn emptyList() + } private val testingDispatcher = StandardTestDispatcher() private val dispatcher: DispatcherProvider = mock { @@ -46,6 +51,8 @@ class FormViewModelTest { private val geometryController: GeometryController = mock() private val resultDialogUiProvider: FormResultDialogProvider = mock() + private val formSectionMapper = FormSectionMapper() + private lateinit var viewModel: FormViewModel @Before @@ -58,6 +65,7 @@ class FormViewModelTest { dispatcher, geometryController, resultDialogUiProvider = resultDialogUiProvider, + formSectionMapper = formSectionMapper, ) whenever(repository.getDateFormatConfiguration()) doReturn "ddMMyyyy" } From 50b5004ad0bfb1e637caa79e1e11f60c28320358 Mon Sep 17 00:00:00 2001 From: Xavier Molloy Date: Tue, 17 Mar 2026 09:13:03 +0100 Subject: [PATCH 101/114] fix: [ANDROAPP-7539] optimize data loading in stock management (#4736) * fix: [ANDROAPP-7539] optimize data loading in stock management * fix: [ANDROAPP-7539] fix tests --- .../android/rtsm/services/StockManagerImpl.kt | 71 +++++++++++-------- .../android/rtsm/services/StockManagerTest.kt | 42 +++++++---- 2 files changed, 69 insertions(+), 44 deletions(-) diff --git a/stock-usecase/src/main/java/org/dhis2/android/rtsm/services/StockManagerImpl.kt b/stock-usecase/src/main/java/org/dhis2/android/rtsm/services/StockManagerImpl.kt index 2333f7ec820..589d3a5bf1e 100644 --- a/stock-usecase/src/main/java/org/dhis2/android/rtsm/services/StockManagerImpl.kt +++ b/stock-usecase/src/main/java/org/dhis2/android/rtsm/services/StockManagerImpl.kt @@ -33,7 +33,6 @@ import org.hisp.dhis.android.core.trackedentity.TrackedEntityInstance import org.hisp.dhis.android.core.usecase.stock.StockUseCase import org.hisp.dhis.rules.models.RuleEffect import timber.log.Timber -import java.util.Collections class StockManagerImpl( val d2: D2, @@ -67,14 +66,14 @@ class StockManagerImpl( if (!query.name.isNullOrEmpty()) { teiRepository - .byQuery() + .byFilter(config.itemDescription) .like(query.name) .also { teiRepository = it } } if (!query.code.isNullOrEmpty()) { teiRepository - .byQuery() + .byFilter(config.itemCode) .eq(query.code) .also { teiRepository = it } } @@ -134,37 +133,29 @@ class StockManagerImpl( tei: TrackedEntityInstance, stockOnHandUid: String, ): String? { + + val activeEnrollments = + d2.enrollmentModule().enrollments().byTrackedEntityInstance().eq(tei.uid()).byStatus() + .eq(EnrollmentStatus.ACTIVE) + .blockingGetUids() + val events = d2 .eventModule() .events() - .byTrackedEntityInstanceUids(Collections.singletonList(tei.uid())) - .byDataValue(stockOnHandUid) - .like("") + .byEnrollmentUid().`in`(activeEnrollments) .byDeleted() .isFalse - .withTrackedEntityDataValues() .blockingGet() .sortForRuleEngine() - events - .filter { - d2 - .enrollmentModule() - .enrollments() - .uid(it.enrollment()) - .blockingGet() - ?.status() == EnrollmentStatus.ACTIVE - }.forEach { event -> - event.trackedEntityDataValues()?.forEach { dataValue -> - dataValue.dataElement().let { dv -> - if (dv.equals(stockOnHandUid)) { - return dataValue.value() - } - } - } + events.forEach { event -> + val dataValue = d2.trackedEntityModule().trackedEntityDataValues() + .value(event.uid(), stockOnHandUid).blockingGet() + dataValue?.let { + return it.value() } - + } return null } @@ -176,9 +167,9 @@ class StockManagerImpl( ): String { Timber.tag("EVENT_CREATION").i( "Enrollment: ${enrollment.uid()}\n" + - "Program: ${programUid}\n" + - "Stage: ${programStage.uid()}\n" + - "OU: ${facility.uid}\n", + "Program: ${programUid}\n" + + "Stage: ${programStage.uid()}\n" + + "OU: ${facility.uid}\n", ) return d2.eventModule().events().blockingAdd( EventCreateProjection @@ -210,7 +201,14 @@ class StockManagerImpl( items.forEach { entry -> getEnrollment(entry.item.id)?.let { enrollment -> - createEvent(entry, programStage, enrollment, transaction, stockUseCase, hasErrorOnComplete) + createEvent( + entry, + programStage, + enrollment, + transaction, + stockUseCase, + hasErrorOnComplete + ) } } return Single.just(Unit) @@ -310,7 +308,14 @@ class StockManagerImpl( try { Timber.i("event:$eventUid") - Timber.i("de:${getTransactionDataElement(transaction.transactionType, stockUseCase)}") + Timber.i( + "de:${ + getTransactionDataElement( + transaction.transactionType, + stockUseCase + ) + }" + ) Timber.i("data to save:${item.qty}") d2 .trackedEntityModule() @@ -355,7 +360,13 @@ class StockManagerImpl( } try { - updateStockOnHand(item, stockUseCase.programUid, transaction, eventUid, stockUseCase) + updateStockOnHand( + item, + stockUseCase.programUid, + transaction, + eventUid, + stockUseCase + ) } catch (e: Exception) { if (e is D2Error) { Timber.e(e.originalException()) diff --git a/stock-usecase/src/test/java/org/dhis2/android/rtsm/services/StockManagerTest.kt b/stock-usecase/src/test/java/org/dhis2/android/rtsm/services/StockManagerTest.kt index 004feaa75f7..bd36314e0c3 100644 --- a/stock-usecase/src/test/java/org/dhis2/android/rtsm/services/StockManagerTest.kt +++ b/stock-usecase/src/test/java/org/dhis2/android/rtsm/services/StockManagerTest.kt @@ -15,6 +15,7 @@ import org.dhis2.android.rtsm.data.models.StockEntry import org.dhis2.android.rtsm.data.models.Transaction import org.hisp.dhis.android.core.D2 import org.hisp.dhis.android.core.arch.repositories.filters.internal.BooleanFilterConnector +import org.hisp.dhis.android.core.arch.repositories.filters.internal.EnumFilterConnector import org.hisp.dhis.android.core.arch.repositories.filters.internal.StringFilterConnector import org.hisp.dhis.android.core.arch.repositories.`object`.ReadOnlyOneObjectRepositoryFinalImpl import org.hisp.dhis.android.core.arch.repositories.scope.RepositoryScope @@ -22,6 +23,7 @@ import org.hisp.dhis.android.core.common.ObjectWithUid import org.hisp.dhis.android.core.enrollment.Enrollment import org.hisp.dhis.android.core.enrollment.EnrollmentCollectionRepository import org.hisp.dhis.android.core.enrollment.EnrollmentStatus +import org.hisp.dhis.android.core.event.EventCollectionRepository import org.hisp.dhis.android.core.event.EventObjectRepository import org.hisp.dhis.android.core.event.EventStatus import org.hisp.dhis.android.core.option.Option @@ -46,7 +48,6 @@ import org.mockito.kotlin.mock import org.mockito.kotlin.times import org.mockito.kotlin.verify import org.mockito.kotlin.whenever -import java.util.Collections @OptIn(ExperimentalCoroutinesApi::class) class StockManagerTest { @@ -227,19 +228,32 @@ class StockManagerTest { } private fun mockStockOnHand() { - whenever( - d2 - .eventModule() - .events() - .byTrackedEntityInstanceUids(Collections.singletonList(any())) - .byDataValue(any()) - .like("") - .byDeleted() - .isFalse - .withTrackedEntityDataValues() - .orderByEventDate(RepositoryScope.OrderByDirection.DESC) - .blockingGet(), - ) doReturn emptyList() + // Mock enrollment chain for getStockOnHand + val enrollmentRepo1: EnrollmentCollectionRepository = mock() + val enrollmentRepo2: EnrollmentCollectionRepository = mock() + val enrollmentStatusFilter: EnumFilterConnector = mock() + val enrollmentTeiFilter: StringFilterConnector = mock() + + whenever(d2.enrollmentModule().enrollments()) doReturn enrollmentRepo1 + whenever(enrollmentRepo1.byTrackedEntityInstance()) doReturn enrollmentTeiFilter + whenever(enrollmentTeiFilter.eq("teiUid")) doReturn enrollmentRepo2 + whenever(enrollmentRepo2.byStatus()) doReturn enrollmentStatusFilter + whenever(enrollmentStatusFilter.eq(EnrollmentStatus.ACTIVE)) doReturn enrollmentRepo2 + whenever(enrollmentRepo2.blockingGetUids()) doReturn listOf("enrollmentUid") + + // Mock event chain for getStockOnHand + val eventRepo1 = mock() + val eventRepo2 = mock() + val eventRepo3 = mock() + val eventUidFilter = mock>() + val eventDeletedFilter = mock>() + + whenever(d2.eventModule().events()) doReturn eventRepo1 + whenever(eventRepo1.byEnrollmentUid()) doReturn eventUidFilter + whenever(eventUidFilter.`in`(listOf("enrollmentUid"))) doReturn eventRepo2 + whenever(eventRepo2.byDeleted()) doReturn eventDeletedFilter + whenever(eventDeletedFilter.isFalse) doReturn eventRepo3 + whenever(eventRepo3.blockingGet()) doReturn emptyList() } @Test From db543107f9f94f47840364470427f70ee6c4b6d4 Mon Sep 17 00:00:00 2001 From: "@dhis2-bot" Date: Tue, 17 Mar 2026 12:34:48 +0100 Subject: [PATCH 102/114] fix(translations): sync translations from transifex (develop) [skip size] (#4731) * fix(translations): sync translations from transifex (develop) WARNING: This automated sync from transifex removed more lines than it added. Please check carefully before merging! * fix(translations): fix ellipsis character entities in vi and uz-rUZ strings * fix(translations): remove unnecessary backslash escapes from question marks in strings.xml * fix(translations): remove `data_sync_warning_program` string from multiple locales and fix character escaping in Spanish translation. --------- Co-authored-by: andresmr --- app/src/main/res/values-ar/strings.xml | 3 - app/src/main/res/values-cs/strings.xml | 7 +- app/src/main/res/values-en-rUS/strings.xml | 1 + app/src/main/res/values-es-rES/strings.xml | 3 - app/src/main/res/values-es/strings.xml | 3 - app/src/main/res/values-fr/strings.xml | 13 +-- app/src/main/res/values-id/strings.xml | 2 - app/src/main/res/values-km/strings.xml | 1 - app/src/main/res/values-lo/strings.xml | 3 - app/src/main/res/values-nb/strings.xml | 3 - app/src/main/res/values-nl/strings.xml | 3 - app/src/main/res/values-pt/strings.xml | 3 - app/src/main/res/values-ru/strings.xml | 3 - app/src/main/res/values-sv/strings.xml | 1 - app/src/main/res/values-uk/strings.xml | 3 - app/src/main/res/values-uz-rUZ/strings.xml | 3 - app/src/main/res/values-uz/strings.xml | 3 - app/src/main/res/values-vi/strings.xml | 5 +- app/src/main/res/values-zh-rCN/strings.xml | 3 - app/src/main/res/values-zh/strings.xml | 3 - app/src/main/res/values/strings.xml | 1 - commons/src/main/res/values-vi/strings.xml | 2 +- .../values-ar-rEG/strings.xml | 7 +- .../values-ar-rIQ/strings.xml | 7 +- .../composeResources/values-ar/strings.xml | 11 +- .../composeResources/values-ckb/strings.xml | 5 +- .../composeResources/values-cs/strings.xml | 11 +- .../composeResources/values-da/strings.xml | 5 +- .../values-en-rUS/strings.xml | 11 +- .../values-es-rES/strings.xml | 9 +- .../composeResources/values-es/strings.xml | 11 +- .../composeResources/values-fr/strings.xml | 100 +++++++++--------- .../values-hi-rIN/strings.xml | 5 +- .../composeResources/values-id/strings.xml | 5 +- .../composeResources/values-km/strings.xml | 5 +- .../composeResources/values-lo/strings.xml | 9 +- .../composeResources/values-my/strings.xml | 5 +- .../composeResources/values-nb/strings.xml | 5 +- .../composeResources/values-ne/strings.xml | 7 +- .../composeResources/values-nl/strings.xml | 9 +- .../composeResources/values-prs/strings.xml | 5 +- .../composeResources/values-ps/strings.xml | 5 +- .../values-pt-rBR/strings.xml | 5 +- .../composeResources/values-pt/strings.xml | 9 +- .../composeResources/values-ro/strings.xml | 7 +- .../composeResources/values-ru/strings.xml | 11 +- .../composeResources/values-sv/strings.xml | 5 +- .../composeResources/values-tet/strings.xml | 5 +- .../composeResources/values-tg/strings.xml | 5 +- .../composeResources/values-uk/strings.xml | 35 +++--- .../composeResources/values-ur/strings.xml | 5 +- .../values-uz-rUZ/strings.xml | 5 +- .../composeResources/values-uz/strings.xml | 7 +- .../composeResources/values-vi/strings.xml | 9 +- .../values-zh-rCN/strings.xml | 9 +- .../composeResources/values-zh/strings.xml | 11 +- form/src/main/res/values-vi/strings.xml | 2 +- .../values-ar-rIQ/strings.xml | 2 +- .../composeResources/values-ar/strings.xml | 2 +- .../composeResources/values-bn/strings.xml | 2 +- .../composeResources/values-ckb/strings.xml | 2 +- .../composeResources/values-cs/strings.xml | 12 +-- .../composeResources/values-da/strings.xml | 2 +- .../values-en-rUS/strings.xml | 2 +- .../values-es-rES/strings.xml | 2 +- .../composeResources/values-id/strings.xml | 2 +- .../composeResources/values-km/strings.xml | 2 +- .../composeResources/values-my/strings.xml | 2 +- .../composeResources/values-nb/strings.xml | 2 +- .../composeResources/values-or/strings.xml | 2 +- .../composeResources/values-prs/strings.xml | 2 +- .../composeResources/values-ps/strings.xml | 2 +- .../values-pt-rBR/strings.xml | 2 +- .../composeResources/values-ro/strings.xml | 2 +- .../composeResources/values-si/strings.xml | 2 +- .../composeResources/values-sv/strings.xml | 2 +- .../composeResources/values-tet/strings.xml | 2 +- .../composeResources/values-tg/strings.xml | 2 +- .../composeResources/values-ur/strings.xml | 2 +- .../values-uz-rUZ/strings.xml | 2 +- .../composeResources/values-uz/strings.xml | 2 +- .../values-zh-rCN/strings.xml | 2 +- .../composeResources/values-zh/strings.xml | 5 +- .../src/main/res/values-cs/strings.xml | 26 ++--- .../src/main/res/values-es/strings.xml | 10 +- .../src/main/res/values-lo/strings.xml | 5 +- .../src/main/res/values-nl/strings.xml | 16 +-- .../src/main/res/values-pt/strings.xml | 10 +- .../src/main/res/values-uz-rUZ/strings.xml | 13 ++- .../src/main/res/values-vi/strings.xml | 12 +-- .../src/main/res/values-zh/strings.xml | 16 ++- .../composeResources/values-ar/strings.xml | 4 +- .../composeResources/values-ckb/strings.xml | 2 + .../composeResources/values-cs/strings.xml | 5 +- .../values-en-rUS/strings.xml | 1 + .../values-es-rES/strings.xml | 4 +- .../composeResources/values-es/strings.xml | 5 +- .../composeResources/values-fr/strings.xml | 5 +- .../values-hi-rIN/strings.xml | 3 +- .../composeResources/values-id/strings.xml | 4 +- .../composeResources/values-km/strings.xml | 2 + .../composeResources/values-lo/strings.xml | 4 +- .../composeResources/values-my/strings.xml | 2 + .../composeResources/values-nb/strings.xml | 4 +- .../composeResources/values-nl/strings.xml | 2 +- .../composeResources/values-or/strings.xml | 5 + .../values-pt-rBR/strings.xml | 2 + .../composeResources/values-pt/strings.xml | 4 +- .../composeResources/values-ru/strings.xml | 4 +- .../composeResources/values-sv/strings.xml | 2 + .../composeResources/values-uk/strings.xml | 5 +- .../values-uz-rUZ/strings.xml | 2 +- .../composeResources/values-uz/strings.xml | 4 +- .../composeResources/values-vi/strings.xml | 4 +- .../values-zh-rCN/strings.xml | 2 + .../composeResources/values-zh/strings.xml | 8 +- 116 files changed, 337 insertions(+), 364 deletions(-) create mode 100644 tracker/src/commonMain/composeResources/values-or/strings.xml diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index 795f1ac441b..14a40bf0707 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -37,7 +37,6 @@ خطأ في المزامنة حدث خطأ أثناء المزامنة. يرجى اعادة المحاولة. انتهت المزامنة ولكن لم نتلق تأكيدًا من الخادم لجميع السجلات. هذه السجلات لا تزال تحمل علامة \"غير مزامن\" في التطبيق. نوصي بإعادة محاولة المزامنة. - تحذير: تم مزامنة معظم البيانات الخاصة بك ولكن يوجد تعارضات في بعض الحقول. قم بعمل مزامنة للتكوين الخاص بك وحاول مرة أخرى. إذا استمر التحذير ، فتحقق من حالة المزامنة: يتم وضع علامة @ على البرامج و TEI والأحداث المتعارضة. حدث خطأ ولم يستجب الخادم. تواصل مع مديرك. تم العثور على %s نتيجة @@ -301,7 +300,6 @@ تحتاج إلى ادخال %d على الأقل من السمات للقيام بالبحث تحتاج إلى ادخال واحدة على الأقل من السمات للقيام بالبحث هناك أكثر من %d نتيجة. يرجى إدخال معايير بحث أخرى - لم يتم ايجاد أي نتيجة لمعايير البحث التي ادخلتها.\n راجعها أو قم بتسجيل %s جديد ادخل معايير البحث التي تريد @@ -714,7 +712,6 @@ هذا الحقل إلزامي لأسباب أمنية ، لا يُسمح باستخدام هذه النسخة من التطبيق مع adb. الرجاء استخدام نسخة هذا التطبيق المخصصة للتدريب. - للأسف! شيء ما لم يسير كما هو مخطط له.\n دعنا نعيدك إلى العمل. رجوع إغلاق التطبيق تفاصيل أكثر diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index 7c95d05181f..53fc3b952ff 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -37,7 +37,6 @@ Synchronizace dokončena, ale neobdrželi jsme potvrzení serveru pro všechny záznamy. Tyto záznamy jsou v aplikaci stále označeny jako „offline“. Doporučujeme synchronizaci zopakovat. CHYBA: V procesu synchronizace se něco pokazilo. Pokud máte připojení, zkuste to prosím znovu. Pokud chyba přetrvává, obraťte se na správce. Ve vašich datech jsou rozpory. Synchronizujte prosím svou konfiguraci, zkontrolujte svá data a zkuste synchronizaci provést znovu. - UPOZORNĚNÍ: Většina vašich dat je synchronizována, ale některá pole vykazovala konflikty. Synchronizujte svou konfiguraci a zkuste to znovu. Pokud varování přetrvává, zkontrolujte jejich stav synchronizace: programy, TEI a události s konflikty jsou označeny jako @. Některá vaše data se nepodařilo synchronizovat. Došlo k chybě a server neodpovídá. Kontaktujte svého správce. @@ -311,7 +310,6 @@ Chcete-li provést vyhledávání, musíte zadat alespoň %d atributy Chcete-li provést vyhledávání, musíte zadat alespoň jeden z atributů Je toho víc než %d výsledků. Zadejte prosím další kritéria hledání - Vaše vyhledávací kritéria nevrátila žádný výsledek.\nOpravte svá kritéria nebo zapište nová %s Zadejte kritéria hledání @@ -688,9 +686,9 @@ Detaily Komentáře Uloženo! - Chcete zkontrolovat kvalitu dat? + Chcete zkontrolovat kvalitu dat\? Všechno vypadá dobře! - Chcete také vyplnit soubor dat? + Chcete také vyplnit soubor dat\? Označit jak dokončené Název Vzorec @@ -726,7 +724,6 @@ Toto pole je povinné Z bezpečnostních důvodů není možné tuto verzi aplikace používat s adb. Použijte tréninkovou verzi. - Jejda! Něco nevyšlo podle plánu. \nDáme vás zpět do akce. Zpět Zavřít aplikaci Více detailů diff --git a/app/src/main/res/values-en-rUS/strings.xml b/app/src/main/res/values-en-rUS/strings.xml index a28a6cbd146..cdfded1b7ba 100644 --- a/app/src/main/res/values-en-rUS/strings.xml +++ b/app/src/main/res/values-en-rUS/strings.xml @@ -85,4 +85,5 @@ %s details Not now Coordinates + Show less diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index 15df8b14832..5efc9389b6f 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -34,7 +34,6 @@ Error en sincronizacion La sincronizacion ha fallado. Intentelo de nuevo. La sincronización ha terminado pero no se ha recibido confirmación del servidor en algunos rescursos. Éstos estarán marcados como \"no sincronizados\" en la App. Recomendamos reintentar la sincronización. - WARNING: la mayoría de sus datos se han sincronizado, pero algunos generaron conflictos. Sincronice su configuración y pruebe otra vez. Si el error persiste, revise el estado de sincronización: los programas, TEIs y events con conflictos tienen el icono @ Hubo un error y el serivdor no respondío. Contacte su administrador. %s resultados @@ -280,7 +279,6 @@ Es necesario introducir al menos %d de los atributos para iniciar una búsqueda Hay que rellenar al menos un atributo para buscar Hay más de %d resultados. Por favor, especifique más su búsqueda - Sus criterios de búsqueda no devolvieron ningún resultado. \nModifíquelos o cree una nueva %s Introduzca algún criterio de búsqueda @@ -688,7 +686,6 @@ El campo es obligatorio Por razones de seguridad, esta versión de la app no permite el uso de adb. Por favor use la versión de formación. - ¡Vaya! Algo no ha ido como estaba previsto.\nDéjenos poner todo en marcha de nuevo. Ir atrás Cerrar app Más detalles diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index 8b22f556b2a..bb2fb3d0c75 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -34,7 +34,6 @@ Error en sincronizacion La sincronizacion ha fallado. Intentelo de nuevo. La sincronización ha terminado pero no se ha recibido confirmación del servidor en algunos rescursos. Éstos estarán marcados como \"no sincronizados\" en la App. Recomendamos reintentar la sincronización. - WARNING: la mayoría de sus datos se han sincronizado, pero algunos generaron conflictos. Sincronice su configuración y pruebe otra vez. Si el error persiste, revise el estado de sincronización: los programas, TEIs y events con conflictos tienen el icono @ Hubo un error y el serivdor no respondío. Contacte su administrador. %s resultados @@ -305,7 +304,6 @@ Es necesario introducir al menos %d de los atributos para iniciar una búsqueda Hay que rellenar al menos un atributo para buscar Hay más de %d resultados. Por favor, especifique más su búsqueda - Sus criterios de búsqueda no devolvieron ningún resultado. \nModifíquelos o cree una nueva %s Introduzca algún criterio de búsqueda @@ -720,7 +718,6 @@ El campo es obligatorio Por razones de seguridad, esta versión de la app no permite el uso de adb. Por favor use la versión de formación. - ¡Vaya! Algo no ha ido como estaba previsto.\nDéjenos poner todo en marcha de nuevo. Ir atrás Cerrar app Más detalles diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 9cdc56e5576..d9e83ec2069 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -34,7 +34,6 @@ Problème de synchronisation Une erreur s´est produite pendant sync. Essayez à nouveau. La synchronisation est terminée, mais nous n\'avons pas reçu de confirmation du serveur pour tous les enregistrements. Ces enregistrements sont toujours marqués comme \"hors ligne\" dans l\'application. Nous vous recommandons de réessayer la synchronisation. - AVERTISSEMENT: La plupart de vos données ont été syncrhonisées mais certains champs ont eu des conflits. Synchronisez votre configuration et ressayez, Si l\'erreur persiste, vérifiez le statut de synchronisation: les programmes, TEIs et évènements avec conflits sont marqués avec @. Une erreur s\'est produite et le serveur n\'a pas répondu. Contactez votre administrateur. %s résultats trouvé @@ -112,7 +111,7 @@ Mettre à jour Date Unités d´Organisation - Il n\'y a pas d\'Unité d\'organisation Ouvert pour la date sélectionnée. Merci de sélectionner une autre date ou une autre Unité d\'Organisation. + Il n\'y a pas d\'unité d\'organisation ouverte pour la date sélectionnée. Merci de sélectionner une autre date ou une autre unité d\'organisation. Options de catégorie Latitude Longitude @@ -286,7 +285,6 @@ Vous devez entrer au moins %d des attributs pour lancer une recherche Vous devez renseigner au moins un des attributs afin d\'effectuer la recherche il y a plus de %d des résultats. Veuillez entrer les autres critères de recherche - Vos critères de recherche ne renvoient aucun résultat.\nVérifiez-les ou créez une nouvelle inscription %s Entrez vos critères de recherche @@ -303,7 +301,7 @@ Aucune donnée Code QR invalide Cet attribut ne peut pas être ajouté - Cette inscription ne peu pas être ajoutée + Cette entité ne peut pas être enrôlée À propos Programmes disponibles pour l´admission @@ -493,7 +491,7 @@ Maintenant vous pouvez vérifier l\'information de synchronisation en cliquant ici Cette donnée est enregistrée seulement sur votre appareil et n\'a pas été synchronisée avec le serveur. Vous êtes à jour! Toutes vos données ont été envoyées au serveur. - Vous ne pouvez pas établir de relation une donnée avec elle-même + Vous ne pouvez pas établir de relation entre une donnée et elle-même Dévérouiller la session Terminer Ouvrir @@ -505,7 +503,7 @@ Hebdomadaire Semaine Paramètre de synchronisation: %s - La donnée à laquelle vous essayer d\'acceéer n\'a pas d\'enrôlement. Vous ne pouvez pas accéder au tableau de bord. + La donnée à laquelle vous essayer d\'accéder n\'a pas d\'enrôlement. Vous ne pouvez pas accéder au tableau de bord. Erreur de formattage Supprimer 1%s Vous n\'avez pas l\'autorité pour supprimer cette donnée @@ -696,7 +694,6 @@ Ce champ est obligatoire Pour des raisons de sécurité, cette version de l\'application ne peut pas être utilisée avec adb. Veuillez utiliser la version de formation. - Oups! Quelque chose ne s\'est pas déroulé comme prévu.\nLaissez-nous vous remettre en action. Précédent Fermer l\'application Plus de détails @@ -772,7 +769,7 @@ Valeurs Semaine %d %s à %s Ne pas montrer de nouveau - 1%s ne peut pas être analysé comme une date + %s ne peut pas être analysé comme une date Ce champ n\'a pas pu être mis à jour. Veuillez réessayer Disponible Ces données ne sont pas modifiables car elles sont marquées comme terminées diff --git a/app/src/main/res/values-id/strings.xml b/app/src/main/res/values-id/strings.xml index 820b42c2ed8..944211ac917 100644 --- a/app/src/main/res/values-id/strings.xml +++ b/app/src/main/res/values-id/strings.xml @@ -31,7 +31,6 @@ Sync error Terjadi kesalahan saat sinkronisasi. Silakan coba kembali. - PERINGATAN: Sebagian besar data telah tersinkronisasi tapi terdapat beberapa konflik. Sinkronisasi konfigurasi Anda dan coba kembali. Jika status sinkronisasi: program, TEI, dan event yang berkonflik ditandai sebagai @. Terjadi kesalahan dan server tidak merespon. Hubungi administrator anda. %s hasil ditemukan @@ -785,7 +784,6 @@ Bidang ini wajib Untuk alasan keamanan, versi aplikasi ini tidak diizinkan untuk digunakan dengan adb. Silakan gunakan versi pelatihan. - Ups! Sesuatu tidak berjalan sesuai rencana.\nIzinkan kami mengembalikan Anda ke tindakan. Kembali Tutup aplikasi Keterangan lebih lanjut diff --git a/app/src/main/res/values-km/strings.xml b/app/src/main/res/values-km/strings.xml index 1d212968e7a..43297c9e28d 100644 --- a/app/src/main/res/values-km/strings.xml +++ b/app/src/main/res/values-km/strings.xml @@ -197,7 +197,6 @@ បន្ទាប់ អ្នកត្រូវបញ្ចូលយ៉ាងហោចណាស់ %d នៃលក្ខណៈ (Attributes) ដើម្បីធ្វើការស្វែងរក មានលទ្ធផលច្រើនជាង %d សូមបញ្ចូលលក្ខខណ្ឌផ្សេងទៀតដើម្បីស្វែងរកបន្ថែម - លក្ខខណ្ឌក្នុងការស្វែងរករបស់អ្នកមិនមានលទ្ធផល\nកំណត់លក្ខខណ្ឌម្ដងទៀត រឺ ចុះឈ្មោះថ្មី %s បញ្ចូលលក្ខខណ្ឌដើម្បីស្វែងរក diff --git a/app/src/main/res/values-lo/strings.xml b/app/src/main/res/values-lo/strings.xml index c6ab3e8edc6..08ec9f2f8b3 100644 --- a/app/src/main/res/values-lo/strings.xml +++ b/app/src/main/res/values-lo/strings.xml @@ -32,7 +32,6 @@ ຄໍາຜິດທີ່ເກີດຈາກການທໍາງານຮ່ວມກັນຂອງລະບົບ ມີຄໍາຜິດເກີດຂື້ນໃນຂະນະທີ່ລະບົບທໍາງານຮ່ວມກັນ. ກະລຸນາ, ທົດລອງເບີ່ງອີກ... ອັບເດດຂໍ້ມູນໃຫ້ຄືກັນສຳເລັດແລ້ວ ແຕ່ພວກເຮົາບໍ່ໄດ້ຮັບການຢືນຢັນຈາກເຄື່ອງຄອມພິວເຕິ້ໜ່ວຍແມ່ສຳລັບບັນທຶກທັງໝົດ. ເຫຼົ່ານັ້ນຍັງຖືກໝາຍເປັນ \"ອອບລາຍ\" ໃນແອັບ. ພວກເຮົາແນະນຳໃຫ້ລອງການຕັ້ງຄ່າການຊິ້ງຂໍ້ມູນອີກຄັ້ງ. - ຂໍ້ຄວນລະວັງ: ຂໍ້ມູນຂອງທ່ານໄດ້ຖຶກຊິ້ງແລ້ວ ແຕ່ບາງຂໍ້ມູນມີຂໍ້ຂັດແຍ້ງ. ກົດການຕັ້ງຄ່າການຊິ້ງຂໍ້ມູນ ແລະ ລອງໃໝ່ອີກຄັ້ງ. ຖ້າຂໍ້ຄວນລະວັງຍັງຄົງຢູ່ ໃຫ້ກວດເບີ່ງສະຖານະການຊິິ້ງຂອງ: ໂປຣແກຣມ, TEI\'s ແລະ ເຫດການທີ່ມີການຂັດແຍ້ງຈະຖຶກໝາຍເປັນ @. ເກີດຂໍ້ຜິດພາດ ແລະເຄື່ອງຄອມພິວເຕິ້ໜ່ວຍແມ່ບໍ່ຕອບສະໜອງ. ຕິດຕໍ່ຜູ້ດູແລລະບົບຂອງທ່ານ. %sຜົນໄດ້ຮັບທີ່ຖືກພົບເຫັນ @@ -288,7 +287,6 @@ ທ່ານຕ້ອງປ້ອນຢ່າງໜອຍ %d ຂອງ ຄຸນລັກສະນະເຂົ້າເພື່ອຊອກຫາ ທ່ານຕ້ອງໃສ່ຢ່າງຫນ້ອຍຫນຶ່ງ ຂອງຄຸນລັກສະນະເພື່ອເຮັດການຄົ້ນຫາ ມີຫຼາຍກ່ວາ %d ຂອງຜົນໄດ້ຮັບ. ກະລຸນາເພີ່ມເງື່ອນໄຂໃນການຄົ້ນຫາເຂົ້າຕື່ມ - ເງື່ອນໄຂການຄົ້ນຫາຂອງທ່ານບໍ່ໄດ້ຜົນຫຍັງກັບຄືນມາໃ\nທົບທວນເບີ່ງເງື່ອນໄຂຂອງທ່ານ ຫຼື ຂື້ນທະບຽນໃໝ່ %s ປ້ອນເງື່ອນໄຂການຊອກຫາຂອງທ່ານ @@ -688,7 +686,6 @@ ຊ່ອງປ້ອນຂໍ້ມູນນີ້ແມ່ນຈໍາເປັນຕ້ອງປ້ອນຂໍ້ມູນໃສ່ ເຫດຜົນດ້ານຄວາມປອດໄພ, ແອັບເວີຊັ່ນນີ້ບໍ່ອະນຸຍາດໃຫ້ໃຊ້ກັບ adb. ກະລຸນາໃຊ້ເວີຊັ່ນທີ່ໃຊ້ສະເພາະການຝຶກອົບຮົມ. - ມີບາງຢ່າງບໍ່ເປັນໄປຕາມແຜນທີ່ວາງໄວ້.\nໃຫ້ພວກເຮົານຳທ່ານກັບມາເພື່ອດຳເນີນການຄືນ. ກັບຄືນ ປິດແອັບ ລາຍ​ລະ​ອຽດ​ເພີ່ມ​ເຕີມ diff --git a/app/src/main/res/values-nb/strings.xml b/app/src/main/res/values-nb/strings.xml index f37faac1a69..608ab50834e 100644 --- a/app/src/main/res/values-nb/strings.xml +++ b/app/src/main/res/values-nb/strings.xml @@ -32,7 +32,6 @@ Synkroniseringsfeil En feil har oppstått under synkronisering. Vennligst prøv på nytt - ADVARSEL: Mesteparten av dine data er synkroniserte men noen felter presenterte konflinkter. Synkroniser din konfigurasjon og prøv igjen. Hvis advarselen vedvarer, sjekk deres synkroniseringsstatus: programmer, TEI\'s og hendelser med konflikter er merket som @. %sresultater funnet Legg til ny Legg til @@ -275,7 +274,6 @@ Du må legge inn minst %dav attributtene for å foreta et søk Du må legge inn minst en av attributtene for å foreta et søk Det er mer enn%dresultater. Vennligst legg inn flere søkekriterier - Ditt søkekriterie returnerte ingen resultater.\nRevurder dine kriterier eller registrer en ny%s Skriv inn søkekriterier @@ -676,7 +674,6 @@ Dette feltet er obligatorisk Av sikkerhetsgrunner, så er denne versjonen av appen ikke tillatt til å bli brukt med adb. Vennligst bruk treningsversjonen. - Beklager! Noe gikk ikke som planlagt. La oss få deg tilbake i aksjon. Gå tilbake Lukk app Flere detaljer diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml index 0a62a1985e0..7975fc4772d 100644 --- a/app/src/main/res/values-nl/strings.xml +++ b/app/src/main/res/values-nl/strings.xml @@ -33,7 +33,6 @@ Synchronisatiefout Er is een fout opgetreden tijdens de synchronisatie. Probeer het opnieuw. De synchronisatie is voltooid, maar we hebben geen serverbevestiging ontvangen voor alle records. Die gegevens zijn nog steeds gemarkeerd als \"offline\" in de app. We raden aan om de synchronisatie opnieuw te proberen. - WAARSCHUWING: de meeste van uw gegevens zijn gesynchroniseerd, maar sommige velden leverden problemen op. Synchroniseer uw configuratie en probeer het opnieuw. Als de waarschuwing aanhoudt, controleer dan hun synchronisatiestatus: programma\'s, TEI\'s en gebeurtenissen met conflicten zijn gemarkeerd als @. Er is een fout opgetreden en de server heeft niet gereageerd. Neem contact op met uw beheerder. %s resultaten gevonden @@ -283,7 +282,6 @@ U moet minimaal %d van de attributen invoeren om een zoekopdracht uit te voeren U moet ten minste één van de kenmerken invoeren om een zoekopdracht uit te voeren Er zijn meer dan %d resultaten. Vul a.u.b. verdere zoekcriteria in - Uw zoekcriteria hebben geen resultaat opgeleverd.\nHerzie uw criteria of schrijf een nieuwe %s in Voer uw zoekcriteria in @@ -694,7 +692,6 @@ Dit veld is verplicht Om veiligheidsredenen mag deze versie van de app niet worden gebruikt met adb. Gebruik de trainingsversie. - Oeps! Er is iets niet gegaan zoals gepland.\nLaat ons je weer aan het werk helpen. Ga terug App sluiten Meer details diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml index d3ab2b35547..fe689450992 100644 --- a/app/src/main/res/values-pt/strings.xml +++ b/app/src/main/res/values-pt/strings.xml @@ -34,7 +34,6 @@ Erro de sincronização Ocorreu um erro durante a sincronização. Por favor tente novamente. A sincronização foi concluída, mas não recebemos a confirmação do servidor para todos os registos. Esses registos ainda estão marcados como “offline” na aplicação. Recomendamos que tente novamente a sincronização. - AVISO: A maioria dos seus dados é sincronizada, mas alguns campos apresentaram conflitos. Sincronize sua configuração e tente novamente. Se o aviso persistir, verifique o status de sincronização: programas, TEIs e eventos com conflitos são marcados como @. Ocorreu um erro e o servidor não respondeu. Contacte o seu administrador. %s resultados encontrados @@ -303,7 +302,6 @@ Você precisa inserir pelo menos %d dos atributos para fazer uma pesquisa Você precisa inserir pelo menos um dos atributos para fazer uma pesquisa Há mais de %d resultados. Digite mais critérios de pesquisa - Seus critérios de pesquisa não retornaram nenhum resultado.\nReveja seus critérios ou inscreva um novo %s Digite seu critério de pesquisa @@ -717,7 +715,6 @@ Este campo é obrigatório Por razões de segurança, esta versão do aplicativo não pode ser usada com o adb. Por favor, use a versão de treinamento. - Ops! Algo não saiu como planejado.\nDeixe-nos colocar você de volta em ação. Voltar Fechar aplicativo Mais detalhes diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index f24f2038586..dd8681952be 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -35,7 +35,6 @@ Ошибка синхронизации Во время синхронизации произошла ошибка. Пожалуйста, повторите попытку. Синхронизация завершена, но мы не получили подтверждения сервера для всех записей. Эти записи по-прежнему отмечены в приложении как \"оффлайн\". Мы рекомендуем повторить синхронизацию. - ВНИМАНИЕ: Большая часть данных синхронизирована, но некоторые поля представлены с конфликтами. Синхронизируйте конфигурацию и повторите попытку. Если предупреждение сохраняется, проверьте статус синхронизации: программы, отслеживаемые объекты и события с конфликтами отмечены как @. Произошла ошибка, и сервер не ответил. Обратитесь к своему администратору. %s результатов найдено @@ -297,7 +296,6 @@ Для поиска необходимо ввести как минимум %d атрибутов. Чтобы выполнить поиск, необходимо ввести хотя бы один из атрибутов Есть больше, чем %d результатов. Пожалуйста, введите дополнительные критерии поиска - Ваши критерии поиска не дали результатов.Пересмотрите свои критерии или введите новые %s Введите критерии поиска @@ -689,7 +687,6 @@ Это поле обязательно для заполнения По соображениям безопасности эта версия приложения не может быть использована с adb. Пожалуйста, используйте учебную версию. - Упс! Что-то пошло не по плану. Позвольте нам вернуть Вас назад в действии. Вернуться Закрыть приложение Подробнее diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml index b60cf960f3b..476e7c3003e 100644 --- a/app/src/main/res/values-sv/strings.xml +++ b/app/src/main/res/values-sv/strings.xml @@ -196,7 +196,6 @@ Nästa Du måste ange minst %d av attributen för att göra en sökning Det finns mer än %d resultat. Vänligen ange ytterligare sökkriterier - Dina sökvillkor gav inget resultat\nÄndra dina kriterier eller registrera en ny %s Definiera sökkriterier diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index 5d026635f3f..aa67ed0f9a5 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -35,7 +35,6 @@ Помилка синхронізації Під час синхронізації сталася помилка. Будь ласка, повторіть спробу. Синхронізацію завершено, але ми не отримали підтвердження від серверу для усіх записів. Ці записи все ще позначено як \"офлайн\" у програмі. Рекомендуємо повторити спробу синхронізації. - ПОПЕРЕДЖЕННЯ: Більшість Ваших даних синхронізовано, але виникли конфлікти в деяких полях. Синхронізуйте конфігурацію та повторіть спробу. Якщо попередження не зникає, перевірте стан синхронізації: програм, об’єктів, які відстежуються та випадків з конфліктами позначені як @. Сталася помилка, і сервер не відповідає. Зверніться до свого адміністратора. %s результатів знайдено @@ -296,7 +295,6 @@ Для пошуку потрібно ввести принаймні %d атрибутів Для пошуку потрібно ввести принаймні один із атрибутів Є більше ніж %d результатів. Будь ласка, введіть додаткові критерії пошуку - Ваші критерії пошуку не дали результатів.Перегляньте свої критерії або зареєструйте новий %s Введіть критерії пошуку @@ -706,7 +704,6 @@ Це поле обов\'язкове для заповнення З міркувань безпеки цю версію додатку не можна використовувати з adb. Будь ласка, використовуйте навчальну версію. - Ой! Щось пішло не так, як планувалося. Дозвольте нам повернути Вас у попередню дію. Повернутися Закрити додаток Детальніше diff --git a/app/src/main/res/values-uz-rUZ/strings.xml b/app/src/main/res/values-uz-rUZ/strings.xml index 81af89fe43f..c451ecc3382 100644 --- a/app/src/main/res/values-uz-rUZ/strings.xml +++ b/app/src/main/res/values-uz-rUZ/strings.xml @@ -26,7 +26,6 @@ Sinxronlashda xatolik Sinxronlash paytida xatolik yuz berdi. Iltimos, qayta urinib koʼring - OGOHLАNTIRISh: Maʼlumotlarning aksariyat qismi sinxronlashtirildi. Lekin, baʼzi ziddiyatlar kelib chiqdi. Konfiguratsiyani sinxronlang va qaytadan urinib koʼring. Аgar ogohlantirish davom etsa, ularning sinxronlash holatini tekshiring: @ sifatida belgilangan dasturlar, TEIni va hodisa/tadbirlarni. 1 %s natijalar topildi Янгисини қўшиш Qoʼshish @@ -259,7 +258,6 @@ Qidiruv uchun kamida %d atributni kiritish kerak Qidiruv uchun kamida 1 ta atributni kiritish kerak %d dan ortiq natijalar mavjud. Iltimos, qoʼshimcha qidiruv mezonlarini kiriting - Siz tanlangan qidiruv mezonlari hech qanday natija bermadi. \n. Kriteriyalarni qayta koʼrib chiqing yoki yangi %s yozing Qidiruv mezonlarini kiriting @@ -653,7 +651,6 @@ Maydon toʼldirilishi majburiy Xavfsizlik sababli ushbu versiyadan adb formatidan foydalanishga ruxsat berilmagan.Ilitmos, mashq versiyasidan foydalaning. - Аfsus! Rejalashtirilganidek amalga oshmadi. \N Hozir sizni harakatga qaytaramiz Orqaga qayting Ilovani yopish Batafsil maʼlumot diff --git a/app/src/main/res/values-uz/strings.xml b/app/src/main/res/values-uz/strings.xml index 5e84cfba12b..714451bfe01 100644 --- a/app/src/main/res/values-uz/strings.xml +++ b/app/src/main/res/values-uz/strings.xml @@ -31,7 +31,6 @@ Синхронлашда хатолик Синхронлаш пайтида хатолик юз берди. Илтимос, қайта уриниб кўринг - ОГОҲЛАНТИРИШ: Маълумотларнинг аксарият қисми синхронлаштирилди. Лекин, баъзи зиддиятлар келиб чиқди. Конфигурацияни синхронланг ва қайтадан уриниб кўринг. Агар огоҳлантириш давом этса, уларнинг синхронлаш ҳолатини текширинг: @ сифатида белгиланган дастурлар, TEIни ва ҳодиса/тадбирларни. Бу ерда хатолик юз берди ва сервер жавоб бермади. Ўз администраторингиз билан алоқа боғланг. 1 %s натижалар топилди @@ -275,7 +274,6 @@ Қидирув учун камида %d атрибутни киритиш керак Қидирув учун камида 1 та атрибутни киритиш керак %d дан ортиқ натижалар мавжуд. Илтимос, қўшимча қидирув мезонларини киритинг - Сиз танланган қидирув мезонлари ҳеч қандай натижа бермади. \n. Критерияларни қайта кўриб чиқинг ёки янги %s ёзинг Қидирув мезонларини киритинг @@ -678,7 +676,6 @@ Майдон тўлдирилиши мажбурий Хавфсизлик сабабли ушбу версиядан adb форматидан фойдаланишга рухсат берилмаган.Илитмос, машқ версиясидан фойдаланинг. - Афсус! Режалаштирилганидек амалга ошмади. \N Ҳозир сизни ҳаракатга қайтарамиз Орқага қайтинг Иловани ёпиш Батафсил маълумот diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml index 30f4c979edc..1a718fa79fb 100644 --- a/app/src/main/res/values-vi/strings.xml +++ b/app/src/main/res/values-vi/strings.xml @@ -32,7 +32,6 @@ Lỗi đồng bộ Xảy ra lỗi trong quá trình đồng bộ. Vui lòng thử lại. Đồng bộ đã hoàn tất nhưng chúng tôi không nhận được xác nhận máy chủ cho tất cả dữ liệu. Các dữ liệu vẫn được đánh dấu là \"Ngoại tuyến\" trong Ứng dụng. Chúng tôi khuyên bạn thử đồng bộ lại. - CẢNH BÁO: Hầu hết dữ liệu của bạn đã được đồng bộ nhưng một vài dữ liệu vẫn bị xung đột. Hãy thử đồng bộ cấu hình và thử lại. Nếu cảnh báo vẫn tiếp diễn, kiểm tra trạng thái đồng bộ của chương trình, các Đối Tượng Theo Dõi và các sự kiện với các dấu hiệu xung đột là @. Có lỗi và máy chủ không phản hồi. Liên hệ quản trị viên của bạn. Tìm thấy %s kết quả @@ -299,7 +298,6 @@ Bạn cần nhập ít nhất %d thuộc tính để thực hiện tìm kiếm Bạn cần nhập ít nhất một thuộc tính để tìm kiếm Có nhiều hơn %d kết quả. Vui lòng nhập thêm thông số tìm kiếm khác - Thông số tìm kiếm của bạn không trả về kết quả nào. \n Sửa lại thông số tìm kiếm hoặc đăng ký %s mới Nhập thông số tìm kiếm của bạn @@ -713,7 +711,6 @@ Trường dữ liệu này bắt buộc Vì lí do bảo mật, phiên bản ứng dụng này không cho phép sử dụng với adb. Vui lòng sử dụng phiên bản đào tạo. - Ồ! Có gì đó không xảy ra như dự kiến.\nHãy quay trở lại hành động trước. Quay lại Đóng ứng dụng Thêm chi tiết @@ -795,7 +792,7 @@ Xem Radar Không thể cài đặt kiểu tọa độ Đã theo dõi %s - %s không thể chuyển đổi thành Ngày + %s không thể chuyển đổi dữ liệu Ngày Không thể cập nhật trường dữ liệu này. Xin vui lòng thử lại. Chỉnh sửa Hiện có diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 580b97a7e34..ba54cdf804a 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -32,7 +32,6 @@ 同步错误 同步中发生错误,请重试 同步完成,但我们没有收到所有记录的服务器确认。这些记录在应用程序中仍被标记为“离线”状态。我们建议重试同步。 - 警告:你的大多数数据已经同步,但是有些字段存在冲突,同步你的配置再试。如果警告仍然存在,检查你的同步状态:项目、跟踪实体和事件如果有冲突会标记为@。 发生错误,服务器未响应。与您的管理员联系。 发现结果:1%s @@ -299,7 +298,6 @@ 你至少需要输入 %d个属性便于搜索 你至少需要输入 一个属性便于搜索 有多余%d个结果,请再细化搜索条件 - 你的搜索没有返回任何结果,修改你的条件或者注册一个新的 %s 输入你的搜索条件 @@ -713,7 +711,6 @@ 此字段是必填字段 出于安全原因,此版本的应用程序不允许与adb一起使用。请使用培训版本。 - 糟糕!某些事情并没有按计划进行。\ n 我们让您重新执行。 回退 关闭应用 更多细节 diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index 8a0f0c97aa0..1936f3925c6 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -34,7 +34,6 @@ 同步完成,但我们没有收到所有记录的服务器确认。这些记录在应用程序中仍被标记为“离线”状态。我们建议重试同步。 失败:同步过程中出了问题。如果有连接,请重试。如果错误仍然存在,请联系您的管理员。 您的数据存在冲突。请同步您的配置,查看数据并尝试再次同步。 - 警告:你的大多数数据已经同步,但是有些字段存在冲突,同步你的配置再试。如果警告仍然存在,检查你的同步状态:项目、跟踪实体和事件如果有冲突会标记为@。 您的部分数据未能同步。 发生错误,服务器未响应。与您的管理员联系。 @@ -305,7 +304,6 @@ 你至少需要输入 %d个属性便于搜索 你至少需要输入 一个属性便于搜索 有多余%d个结果,请再细化搜索条件 - 你的搜索没有返回任何结果,修改你的条件或者加入一个新的 %s 输入你的搜索条件 @@ -720,7 +718,6 @@ 此字段是必填字段 出于安全原因,此版本的应用程序不允许与adb一起使用。请使用培训版本。 - 糟糕!某些事情并没有按计划进行。\ n 让我们返回想办法。 后退 关闭应用 更多细节 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index f4aa3019257..e9a55d33666 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -37,7 +37,6 @@ Sync finished but we did not receive server confirmation for all records. Those record are still marked as \"offline\" in the App. We recommend to retry the synchronization. FAIL: Something went wrong in the sync process. If you have connection please try again. If the error persists, contact your administrator. There are conflicts in your data. Please sync your configuration, review your data and try syncing again. - WARNING: Most of your data is synced but some fields presented conflicts. Sync your configuration and try again. If warning persists, check their sync status: programs, TEI\'s and events with conflicts are marked as @. Some of your data failed to sync. There was an error and the server did not respond. Contact your administrator. diff --git a/commons/src/main/res/values-vi/strings.xml b/commons/src/main/res/values-vi/strings.xml index d5d27531d7b..32c878e2fb8 100644 --- a/commons/src/main/res/values-vi/strings.xml +++ b/commons/src/main/res/values-vi/strings.xml @@ -202,7 +202,7 @@ Phiên bản của Cài Đặt Ứng Dụng Web này không hỗ trợ Cài Đặt Ứng Dụng Web không được cài trong máy chủ. Máy chủ mất quá nhiều thời gian để trả lời. Chúng tôi đã hủy yêu cầu. - Không thể cập nhật mối quan hệ với bệnh nhân + Mối quan hệ không thể cập nhật. Có quá nhiều thời điểm Chúng tôi không thể tìm thấy đường dẫn liên kết. Vui lòng kiểm tra nó. Tài khoảng của bạn đã bị vô hiệu. Nếu đây là lỗi, vui lòng liên hệ quản lý của bạn. diff --git a/commonskmm/src/commonMain/composeResources/values-ar-rEG/strings.xml b/commonskmm/src/commonMain/composeResources/values-ar-rEG/strings.xml index ccf89c85128..d7e0718e1c0 100644 --- a/commonskmm/src/commonMain/composeResources/values-ar-rEG/strings.xml +++ b/commonskmm/src/commonMain/composeResources/values-ar-rEG/strings.xml @@ -7,8 +7,5 @@ إلغاء لم يتم العثور على نتائج ابحث للعثور على المزيد - - - \ No newline at end of file + إلغاء + \ No newline at end of file diff --git a/commonskmm/src/commonMain/composeResources/values-ar-rIQ/strings.xml b/commonskmm/src/commonMain/composeResources/values-ar-rIQ/strings.xml index 8e50096d019..f029f4b5e88 100644 --- a/commonskmm/src/commonMain/composeResources/values-ar-rIQ/strings.xml +++ b/commonskmm/src/commonMain/composeResources/values-ar-rIQ/strings.xml @@ -14,8 +14,5 @@ تنزيل قبول إلغاء - - - \ No newline at end of file + إلغاء + \ No newline at end of file diff --git a/commonskmm/src/commonMain/composeResources/values-ar/strings.xml b/commonskmm/src/commonMain/composeResources/values-ar/strings.xml index 70b8ee21dfc..83e3ebf920f 100644 --- a/commonskmm/src/commonMain/composeResources/values-ar/strings.xml +++ b/commonskmm/src/commonMain/composeResources/values-ar/strings.xml @@ -20,7 +20,7 @@ إختر وحدة تنظيمية هذا الحقل إلزامي لديك بعض الرسائل التحذيرية. - لديك بعض الرسائل التحذيرية.\nهل تريد وضع علامة "مكتمل" على هذا النموذج؟ + لديك بعض الرسائل التحذيرية.\nهل تريد وضع علامة \"مكتمل\" على هذا النموذج؟ مطلوب التاريخ السنوات @@ -119,7 +119,7 @@ ابحث للعثور على المزيد تم غير مدعوم - كلمة المرور مفقودة. الرجاء إدخال كلمة المرور. @@ -142,7 +142,6 @@ لم يتم تعيين إصدار التطبيق. الغاء الإنشاء. الكائن موجود مسبقًا. احباط عملية الحذف، الكائن غير موجود. - لم نتمكن من الاحتفاظ بقيم لهذه السجلات. يرجى الاتصال بالمسؤول الخاص بك. الرجاء تسجيل الدخول لتصدير قاعدة البيانات. تصدير قاعدة بيانات مشفرة غير مدعوم. أنت تستورد قاعدة بيانات موجودة مسبقًا. @@ -167,7 +166,6 @@ استغرق الخادم وقتًا طويلاً للاستجابة. لقد ألغينا الطلب. لا يمكن تحديث العلاقة. هناك فترات كثيرة جدا. - لم نتمكن من العثور على URL. الرجاء التحقق منه. تم تعطيل حساب المستخدم الخاص بك. إذا كان هذا خطأ ، اتصل بالمسؤول. حساب المستخدم الخاص بك مغلق. إذا كان هذا خطأ ، اتصل بالمسؤول. تعذر تعيين القيمة. @@ -178,8 +176,11 @@ البحث على الإنترنت متاح فقط للوحدات التنظيمية المتاحة للمستخدم للبحث. الخادم غير متوفر حالياً. حاول مرة أخرى في وقت لاحق. أنت غير متصل بالإنترنت. اتصل بالإنترنت وحاول مرة أخرى. - + أو + إلغاء + موافق \ No newline at end of file diff --git a/commonskmm/src/commonMain/composeResources/values-ckb/strings.xml b/commonskmm/src/commonMain/composeResources/values-ckb/strings.xml index 3e62754b89b..6a9892c930a 100644 --- a/commonskmm/src/commonMain/composeResources/values-ckb/strings.xml +++ b/commonskmm/src/commonMain/composeResources/values-ckb/strings.xml @@ -15,8 +15,7 @@ پەسندکردن لابردن تةواو كرا - + لابردن + تةواو \ No newline at end of file diff --git a/commonskmm/src/commonMain/composeResources/values-cs/strings.xml b/commonskmm/src/commonMain/composeResources/values-cs/strings.xml index 5e8d38ae346..22916eb7e5c 100644 --- a/commonskmm/src/commonMain/composeResources/values-cs/strings.xml +++ b/commonskmm/src/commonMain/composeResources/values-cs/strings.xml @@ -138,7 +138,7 @@ Hledat pro nalezení dalších Hotovo Není podporováno - Chybí heslo. Prosím vložte heslo. @@ -164,7 +164,6 @@ Vytváření přerušeno. Objekt již existuje. Mazání přerušeno. Objekt neexistuje. Nelze vytvořit instanci úložiště klíčů. - Pro tyto záznamy jsme nemohli vyhradit hodnoty. Kontaktujte prosím svého administrátora. Pro export databáze se prosím přihlaste. Export šifrované databáze není podporován. Importujete již existující databázi. @@ -191,7 +190,6 @@ Serveru trvalo příliš dlouho, než odpověděl. Žádost jsme zrušili. Vztah nelze aktualizovat. Období je příliš mnoho. - Adresu URL jsme nenašli. Prosím ověřte to. Váš uživatelský účet byl deaktivován. Pokud se jedná o chybu, kontaktujte svého správce. Váš uživatelský účet je uzamčen. Pokud se jedná o chybu, kontaktujte svého správce. Hodnotu nelze nastavit. @@ -207,8 +205,13 @@ Neplatný soubor Není v režimu registrace TOTP 2FA Ověřování zrušeno - + OR + VĚK + DATUM NAROZENÍ + Zrušit + OK \ No newline at end of file diff --git a/commonskmm/src/commonMain/composeResources/values-da/strings.xml b/commonskmm/src/commonMain/composeResources/values-da/strings.xml index 1bf475e2ded..0a9e6fa0ffe 100644 --- a/commonskmm/src/commonMain/composeResources/values-da/strings.xml +++ b/commonskmm/src/commonMain/composeResources/values-da/strings.xml @@ -8,8 +8,7 @@ Incident date Cancel No results found - + Cancel + OK \ No newline at end of file diff --git a/commonskmm/src/commonMain/composeResources/values-en-rUS/strings.xml b/commonskmm/src/commonMain/composeResources/values-en-rUS/strings.xml index 451502a78b9..64b9f608a19 100644 --- a/commonskmm/src/commonMain/composeResources/values-en-rUS/strings.xml +++ b/commonskmm/src/commonMain/composeResources/values-en-rUS/strings.xml @@ -110,7 +110,7 @@ Search to find more Done Not supported - Password is missing. Please enter password. @@ -136,7 +136,6 @@ Creation aborted. The object already exists. Deletion aborted. The object does not exist. Unable to instantiate keystore. - We couldn´t reserve values for these record. Please contact your admin. Please login to export the database. Exporting an encrypted database is not supported. You are importing an already existing database. @@ -163,7 +162,6 @@ The server took too much time to respond. We canceled the request. The relationship can\'t be updated. There are too many periods. - We couldn´t find the URL. Please verify it. Your user account have been disabled. If this is an error, contact your administrator. Your user account is locked. If this is an error, contact your administrator. The value could not be set. @@ -178,8 +176,5 @@ Database import failed Invalid file Not in TOTP 2FA enrollment mode - - - \ No newline at end of file + Cancel + \ No newline at end of file diff --git a/commonskmm/src/commonMain/composeResources/values-es-rES/strings.xml b/commonskmm/src/commonMain/composeResources/values-es-rES/strings.xml index 8e63a0b0b46..ea31a79c61e 100644 --- a/commonskmm/src/commonMain/composeResources/values-es-rES/strings.xml +++ b/commonskmm/src/commonMain/composeResources/values-es-rES/strings.xml @@ -103,7 +103,7 @@ Añadir imagen No se han encontrado resultados Terminado - La contraseña está vacía. Ingrese la contraseña. @@ -129,7 +129,6 @@ No se puede crear un objeto que ya existe. No se puede eliminar un objeto que no existe. No se puede inicializar el almacén de llaves. - No se pudo reservar los valores. Por favor contacte a su administrador Inicie sesión para exportar la base de datos. Exportar una base de datos encriptada no está soportado. Está intentando importar una base de datos que ya existe. @@ -156,7 +155,6 @@ El servidor ha tardado mucho en responder. Se ha cancelado la petición. La relación no puede actualizarse. Hay demasiados periodos. - No pudimos encontrar la URL. Por favor revísela. Su cuenta de usuario ha sido desactivada. Si esto es un error, contacte con su administrador. Su cuenta de usuario ha sido bloqueada. Si es un error, contacte con su administrador. No se ha podido cambiar el valor. @@ -166,8 +164,7 @@ No hay suficientes atributos para realizar la búsqueda. Por favor redefina la búsqueda añadiendo más atributos. La búsqueda online solo está disponible para las unidades organizativas de búsqueda. El query contiene caracteres invalidos. Por favor contacte a su administrador para verificar la configuración del servidor (relaxedQueryChars,...). - + Cancelar + Correcto \ No newline at end of file diff --git a/commonskmm/src/commonMain/composeResources/values-es/strings.xml b/commonskmm/src/commonMain/composeResources/values-es/strings.xml index 734e809d218..a1aea5f6b2e 100644 --- a/commonskmm/src/commonMain/composeResources/values-es/strings.xml +++ b/commonskmm/src/commonMain/composeResources/values-es/strings.xml @@ -137,7 +137,7 @@ Busca para ver más Hecho No soportado - La contraseña está vacía. Ingrese la contraseña. @@ -163,7 +163,6 @@ No se puede crear un objeto que ya existe. No se puede eliminar un objeto que no existe. No se puede inicializar el almacén de llaves. - No se pudo reservar los valores. Por favor contacte a su administrador Inicie sesión para exportar la base de datos. Exportar una base de datos encriptada no está soportado. Está intentando importar una base de datos que ya existe. @@ -190,7 +189,6 @@ El servidor ha tardado mucho en responder. Se ha cancelado la petición. La relación no puede actualizarse. Hay demasiados periodos. - No pudimos encontrar la URL. Por favor revísela. Su cuenta de usuario ha sido desactivada. Si esto es un error, contacte con su administrador. Su cuenta de usuario ha sido bloqueada. Si es un error, contacte con su administrador. No se ha podido cambiar el valor. @@ -204,8 +202,9 @@ Estas desconectado. Conéctese a Internet e inténtelo nuevamente. Importación de la base de datos fallida Archivo no válido - + EDAD + FECHA DE NACIMIENTO + Cancelar + Aceptar \ No newline at end of file diff --git a/commonskmm/src/commonMain/composeResources/values-fr/strings.xml b/commonskmm/src/commonMain/composeResources/values-fr/strings.xml index 68a7c39666e..61235128076 100644 --- a/commonskmm/src/commonMain/composeResources/values-fr/strings.xml +++ b/commonskmm/src/commonMain/composeResources/values-fr/strings.xml @@ -9,20 +9,20 @@ Seuls les nombres négatifs sont autorisés Seuls les nombres positifs ou zéro sont autorisés Seules les valeurs de 0 à 1 sont autorisées - Ceci n'est pas un lien URL valide + Ceci n\'est pas un lien URL valide La valeur doit être un entier - Ceci n'est pas le format correcte. + Ceci n\'est pas le format correcte. Le modèle configuré 1%s est erroné. - Ce champ n'a pas pu être mis à jour. Veuillez réessayer + Ce champ n\'a pas pu être mis à jour. Veuillez réessayer Erreur - La valeur doit être unique, une coincidence a été trouvée. Elle n'a pas été sauvegardée. Veuillez vérifier. - Sélectionnez l'heure + La valeur doit être unique, une coincidence a été trouvée. Elle n\'a pas été sauvegardée. Veuillez vérifier. + Sélectionnez l\'heure Choisissez une date - Choisissez l'unité d'organisation - La règle du programme 1%s tente d'attribuer une valeur 1%s qui n'appartient pas au jeu d'options 1%s - La valeur du champ 1%s n'appartient pas à l'option définie dans 1%s + Choisissez l\'unité d\'organisation + La règle du programme 1%s tente d\'attribuer une valeur 1%s qui n\'appartient pas au jeu d\'options 1%s + La valeur du champ 1%s n\'appartient pas à l\'option définie dans 1%s Ce champ est obligatoire - Vous avez des messages d'avertissement. + Vous avez des messages d\'avertissement. Requis Date Années @@ -47,7 +47,7 @@ Entrez une lettre Saisir texte long Saisir du texte - Date d'échéance + Date d\'échéance Champ obligatoire Non enregistré! Vérifier @@ -66,31 +66,31 @@ Avertissement relatif aux règles du programme Il y a un problème de configuration provoquant une boucle dans les règles. Contactez votre administrateur. Copié - Pas d'information pour ce champ + Pas d\'information pour ce champ Prendre une photo Attention. Vérifiez ceci! Ne pas montrer de nouveau - la valeur fournie n'est pas autorisée pour ce champ + la valeur fournie n\'est pas autorisée pour ce champ Caractère invalide 0 Caractère invalide 1 - La valeur n'est ni vraie ni fausse - Ce format de date n'est pas valide - Ce format de date et d'heure n'est pas valide - Ce format d'heure n'est pas valide + La valeur n\'est ni vraie ni fausse + Ce format de date n\'est pas valide + Ce format de date et d\'heure n\'est pas valide + Ce format d\'heure n\'est pas valide La valeur est vide - La valeur contient plus d'une lettre - La valeur n'est pas une lettre + La valeur contient plus d\'une lettre + La valeur n\'est pas une lettre Le texte est trop long - La valeur n'est ni vraie ni fausse + La valeur n\'est ni vraie ni fausse Ce champ ne peut être vrai Caractère invalide 1 - Les DataValues ne peuvent pas être enregistrées à l'aide de ces arguments. Utilisez l'autre. + Les DataValues ne peuvent pas être enregistrées à l\'aide de ces arguments. Utilisez l\'autre. Les zéros non significatifs ne sont pas autorisés Attributs - %s Coordonnées pour - Il n'y a plus de valeurs réservées. Veuillez contacter votre administrateur système. + Il n\'y a plus de valeurs réservées. Veuillez contacter votre administrateur système. Date de l´incident - L'autorisation de localisation est nécessaire pour capturer les coordonnées. Veuillez les activer dans les paramètres de l'application + L\'autorisation de localisation est nécessaire pour capturer les coordonnées. Veuillez les activer dans les paramètres de l\'application Ouvrir avec Aucune option trouvée Télécharger @@ -98,10 +98,10 @@ Code QR Code-barre Ajouter un lieu - Ce formulaire n'a pas de champs configurés + Ce formulaire n\'a pas de champs configurés %s détails %s donnée - Unité d'organisation + Unité d\'organisation Coordonnées La combo de catégories Aucune option disponible @@ -121,40 +121,44 @@ Aucun résultat trouvé Terminé Non supporté - Le mot de passe est manquant. Veuillez entrer le mot de passe. - Le nom d'utilisateur est manquant. Veuillez entrer le nom d'utilisateur. - Ce serveur a une version différente de 2.29. Mettre à jour la version ou utiliser un environnement d'essai pour continuer - L'URL fournie n'est pas un serveur DHIS2. - Nom d'utilisateur ou le mot de passe sont incorrects + Le nom d\'utilisateur est manquant. Veuillez entrer le nom d\'utilisateur. + Ce serveur a une version différente de 2.29. Mettre à jour la version ou utiliser un environnement d\'essai pour continuer + L\'URL fournie n\'est pas un serveur DHIS2. + Nom d\'utilisateur ou le mot de passe sont incorrects Serveur inconnu - Erreur lors de l'analyse des résultats - Un probème inattendu s'est produit - Votre utilisateur possède plusieurs unités d'organisation . Vérifiez votre configuration ou contactez votre administrateur. + Erreur lors de l\'analyse des résultats + Un probème inattendu s\'est produit + Votre utilisateur possède plusieurs unités d\'organisation . Vérifiez votre configuration ou contactez votre administrateur. Le serveur est un peu occupé en ce moment. Veuillez essayer un peu plus tard. - L'utilisateur est déjà connecté - La requête du serveur n'est pas valide. - Nous ne pouvions pas réserver de valeurs pour ces enregistrements. Veuillez contacter votre administrateur. + L\'utilisateur est déjà connecté + La requête du serveur n\'est pas valide. Veuillez vous déconnecter pour importer une nouvelle base de données. Vous êtes peut-être à court de valeurs disponibles. - Il n'y a pas d'utilisateur authentifié. - Aucun utilisateur n'est authentifié hors ligne. - Il n'y a pas assez de valeurs à réserver sur le serveur. Veuillez contacter votre administrateur. + Il n\'y a pas d\'utilisateur authentifié. + Aucun utilisateur n\'est authentifié hors ligne. + Il n\'y a pas assez de valeurs à réserver sur le serveur. Veuillez contacter votre administrateur. Vous essayez de vous connecter hors ligne avec un autre utilisateur. - Aucune valeur réservée n'est disponible. Accédez aux paramètres et remplissez les valeurs lorsque vous disposez d'une connexion Internet. - Vous n'avez pas accès. - L'URL du serveur est manquante. Veuillez saisir l'URL. - L'URL du serveur n'est pas bien formée. S'il te plaît vérifie l' addresse - Votre compte utilisateur a été désactivé. S'il s'agit d'une erreur, contactez votre administrateur. - Votre compte utilisateur est verrouillé. S'il s'agit d'une erreur, contactez votre administrateur. + Aucune valeur réservée n\'est disponible. Accédez aux paramètres et remplissez les valeurs lorsque vous disposez d\'une connexion Internet. + Vous n\'avez pas accès. + L\'URL du serveur est manquante. Veuillez saisir l\'URL. + L\'URL du serveur n\'est pas bien formée. S\'il te plaît vérifie l\' addresse + Votre compte utilisateur a été désactivé. S\'il s\'agit d\'une erreur, contactez votre administrateur. + Votre compte utilisateur est verrouillé. S\'il s\'agit d\'une erreur, contactez votre administrateur. Il y a un problème avec les certificats du serveur. Veuillez contacter votre administrateur. - Il n'y a pas assez d'attributs pour effectuer la recherche. Veuillez affiner votre recherche avec plus d'attributs. - La recherche en ligne n'est disponible que pour vos unités organisationnelles de recherche d'utilisateurs. - Vous n'êtes pas connecté. Veuillez-vous connecter et réssayer. - + OR + ÂGE + DATE DE NAISSANCE + Annuler + Ok \ No newline at end of file diff --git a/commonskmm/src/commonMain/composeResources/values-hi-rIN/strings.xml b/commonskmm/src/commonMain/composeResources/values-hi-rIN/strings.xml index 7b6e0115917..ce60d43e806 100644 --- a/commonskmm/src/commonMain/composeResources/values-hi-rIN/strings.xml +++ b/commonskmm/src/commonMain/composeResources/values-hi-rIN/strings.xml @@ -68,8 +68,7 @@ खोजें और अधिक पाएं पूरा हुआ सपोर्टेड नहीं है - + रद्द करें + ठीक है \ No newline at end of file diff --git a/commonskmm/src/commonMain/composeResources/values-id/strings.xml b/commonskmm/src/commonMain/composeResources/values-id/strings.xml index ac6327ee130..4b1c57297c4 100644 --- a/commonskmm/src/commonMain/composeResources/values-id/strings.xml +++ b/commonskmm/src/commonMain/composeResources/values-id/strings.xml @@ -76,8 +76,7 @@ Tidak didukung Server ini menjalankan versi dhis yang berbeda dari 2.29. Perbarui versi server Anda atau gunakan pengujian lingkungan untuk melanjutkan. Kesalahan saat penguraian hasil - + Batal + OK \ No newline at end of file diff --git a/commonskmm/src/commonMain/composeResources/values-km/strings.xml b/commonskmm/src/commonMain/composeResources/values-km/strings.xml index 5ba0a42556a..f43b201d40c 100644 --- a/commonskmm/src/commonMain/composeResources/values-km/strings.xml +++ b/commonskmm/src/commonMain/composeResources/values-km/strings.xml @@ -46,8 +46,7 @@ មិនគាំទ្រ​ / មិនអាចធ្វើឡើងបានទេ ម៉ាស៊ីនមេនេះកំពុងដំណើរការខុសពី DHIS ២.២៩។ សូមធ្វើបច្ចុប្បន្នភាពលើម៉ាស៊ីនមេរបស់អ្នក​ កំហុសខណៈពេលញែកលទ្ធផល - + បោះបង់ + យល់ព្រម \ No newline at end of file diff --git a/commonskmm/src/commonMain/composeResources/values-lo/strings.xml b/commonskmm/src/commonMain/composeResources/values-lo/strings.xml index 8bacfa370ce..b2a003396cf 100644 --- a/commonskmm/src/commonMain/composeResources/values-lo/strings.xml +++ b/commonskmm/src/commonMain/composeResources/values-lo/strings.xml @@ -103,7 +103,7 @@ ບໍ່ພົບຜົນການຊອກຫາ ສຳເລັດ ບໍ່ຮອງຮັບ - ບໍ່ມີລະຫັດຜ່ານ. ກະລຸນາໃສ່ລະຫັດຜ່ານ. @@ -128,7 +128,6 @@ ບໍ່ສາມາດເຂົ້າເຖິງທີ່ເກັບຂອງອຸປະກອນໄດ້. ການສ້າງຖືກຍົກເລີກ. ມີວັດຖຸຢູ່ແລ້ວ. ຍົກເລິກການລົບແລ້ວ. ບໍ່ມີວັດຖຸຢູ່ - ພວກເຮົາບໍ່ສາມາດຈອງຄ່າສໍາລັບບັນທຶກເຫຼົ່ານີ້. ກະລຸນາຕິດຕໍ່ຜູ້ດູແລລະບົບຂອງທ່ານ. ກະລຸນາເຂົ້າສູ່ລະບົບເພື່ອສົ່ງອອກຖານຂໍ້ມູນ. ບໍ່ຮອງຮັບການສົ່ງອອກຖານຂໍ້ມູນທີ່ຖືກເຂົ້າລະຫັດ. ທ່ານກໍາລັງນໍາເຂົ້າຖານຂໍ້ມູນທີ່ມີຢູ່ແລ້ວ. @@ -154,7 +153,6 @@ ເຄື່ອງຄອມພິວເຕີໜ່ວຍແມ່ໃຊ້ເວລາຕອບສະໜອງດົນເກີນໄປ. ພວກເຮົາຍົກເລິກການຮ້ອງຂໍ ບໍ່ສາມາດອັບເດດຄວາມສຳພັນໄດ້. ຊ່ວງເວລາມີຫຼາຍເກີນໄປ - ພວກເຮົາບໍ່ສາມາດຊອກຫາ URL ໄດ້. ກະລຸນາກວດສອບມັນ. ບັນຊີຂອງທ່ານຖືກປິດການນຳໃຊ້ແລ້ວ. ຖ້ານີ້ແມ່ນຄວາມຜິດພາດ, ກະລຸນາຕິດຕໍ່ຜູ້ດູແລລະບົບຂອງທ່ານ. ບັນຊີຜູ້ໃຊ້ຂອງທ່ານຖືກລັອກ. ຖ້າຫາກນີ້ແມ່ນຂໍ້ຜິດພາດ, ຕິດຕໍ່ຜູ້ດູແລລະບົບຂອງທ່ານ. ບໍ່ສາມາດຕັ້ງຄ່າໄດ້. @@ -164,8 +162,11 @@ ຄຸນລັກສະນະບໍ່ພຽງພໍທີ່ຈະດໍາເນີນການຄົ້ນຫາ. ກະລຸນາປັບປຸງການຄົ້ນຫາຂອງທ່ານດ້ວຍຄຸນລັກສະນະເພີ່ມເຕີມ. ການຄົ້ນຫາອອນລາຍໃຊ້ໄດ້ກັບຫົວຫນ່ວຍການຈັດຕັ້ງທີ່ຄົ້ນຫາຜູ້ໃຊ້ຂອງທ່ານເທົ່ານັ້ນ. ທ່ານອອຟລາຍຢູ່. ເຊື່ອມຕໍ່ອິນເຕີເນັດ ແລະ ລອງໃໝ່ອີກຄັ້ງ - + OR + ຍົກເລີກ + ​ຕົກ​ລົງ \ No newline at end of file diff --git a/commonskmm/src/commonMain/composeResources/values-my/strings.xml b/commonskmm/src/commonMain/composeResources/values-my/strings.xml index 3f240d322a6..a302e05d7c1 100644 --- a/commonskmm/src/commonMain/composeResources/values-my/strings.xml +++ b/commonskmm/src/commonMain/composeResources/values-my/strings.xml @@ -18,8 +18,7 @@ ပယ်ဖျက်သည် No results found Done - + ပယ်ဖျက်သည် + လက်ခံသည် \ No newline at end of file diff --git a/commonskmm/src/commonMain/composeResources/values-nb/strings.xml b/commonskmm/src/commonMain/composeResources/values-nb/strings.xml index 368486d6897..7c8635f1aae 100644 --- a/commonskmm/src/commonMain/composeResources/values-nb/strings.xml +++ b/commonskmm/src/commonMain/composeResources/values-nb/strings.xml @@ -77,8 +77,11 @@ Ikke støttet Denne serveren kjører en dhis versjon som er forskjellig fra 2.29. Oppdater din serverversjon eller bruk testmiljøet for å fortsette. Feil under analyse av resultater - + ELLER + Avbryt + OK \ No newline at end of file diff --git a/commonskmm/src/commonMain/composeResources/values-ne/strings.xml b/commonskmm/src/commonMain/composeResources/values-ne/strings.xml index 67d960618f7..ff683920192 100644 --- a/commonskmm/src/commonMain/composeResources/values-ne/strings.xml +++ b/commonskmm/src/commonMain/composeResources/values-ne/strings.xml @@ -4,8 +4,5 @@ स्वीकार रद्द गर्नुहोस् कुनै पनि नतिजा भेटिएन - - - \ No newline at end of file + रद्द गर्नुहोस् + \ No newline at end of file diff --git a/commonskmm/src/commonMain/composeResources/values-nl/strings.xml b/commonskmm/src/commonMain/composeResources/values-nl/strings.xml index 206c502aa19..0eb2bbc0ad3 100644 --- a/commonskmm/src/commonMain/composeResources/values-nl/strings.xml +++ b/commonskmm/src/commonMain/composeResources/values-nl/strings.xml @@ -109,7 +109,7 @@ Geen resultaten gevonden Klaar Niet ondersteund - Wachtwoord ontbreekt. Voer wachtwoord in alstublieft. @@ -135,7 +135,6 @@ Creatie afgebroken. Het object bestaat al. Verwijdering afgebroken. Het voorwerp bestaat niet. Kan sleutelarchief niet instantiëren. - We konden geen waarden voor deze plaat reserveren. Neem contact op met uw beheerder. Log in om de database te exporteren. Het exporteren van een versleutelde database wordt niet ondersteund. U importeert een reeds bestaande database. @@ -162,7 +161,6 @@ De server nam te veel tijd om te reageren. We hebben het verzoek geannuleerd. De relatie kan niet worden bijgewerkt. Er zijn te veel periodes. - We konden de URL niet vinden. Controleer het alstublieft. Uw gebruikersaccount is uitgeschakeld. Neem contact op met uw beheerder als dit een fout is. Uw gebruikersaccount is vergrendeld. Neem contact op met uw beheerder als dit een fout is. De waarde kon niet worden ingesteld. @@ -172,8 +170,7 @@ Er zijn niet genoeg attributen om de zoekopdracht uit te voeren. Verfijn uw zoekopdracht met meer attributen. Online zoeken is alleen beschikbaar voor uw organisatie-eenheden voor het zoeken van gebruikers. Er zijn ongeldige tekens in de vraag. Vraag de beheerder om de serverconfiguratie te verifiëren (relaxedQueryChars,...). - + Annuleren + OK \ No newline at end of file diff --git a/commonskmm/src/commonMain/composeResources/values-prs/strings.xml b/commonskmm/src/commonMain/composeResources/values-prs/strings.xml index 385fef3c969..b791b633594 100644 --- a/commonskmm/src/commonMain/composeResources/values-prs/strings.xml +++ b/commonskmm/src/commonMain/composeResources/values-prs/strings.xml @@ -27,8 +27,11 @@ طول البلد هیج نتیجه ی یافت نشد انجام شد - + یا + انصراف + تأیید \ No newline at end of file diff --git a/commonskmm/src/commonMain/composeResources/values-ps/strings.xml b/commonskmm/src/commonMain/composeResources/values-ps/strings.xml index 2b86d6ececd..51825c9dc24 100644 --- a/commonskmm/src/commonMain/composeResources/values-ps/strings.xml +++ b/commonskmm/src/commonMain/composeResources/values-ps/strings.xml @@ -24,8 +24,7 @@ لانګېټيوډ هېڅ پایله ترلاسه نه شوه ترسره شو - + رد یې کړئ [ ژباړه ـ ردول ] + سم دی \ No newline at end of file diff --git a/commonskmm/src/commonMain/composeResources/values-pt-rBR/strings.xml b/commonskmm/src/commonMain/composeResources/values-pt-rBR/strings.xml index 86e2dbfc597..7caad5b8e83 100644 --- a/commonskmm/src/commonMain/composeResources/values-pt-rBR/strings.xml +++ b/commonskmm/src/commonMain/composeResources/values-pt-rBR/strings.xml @@ -29,8 +29,7 @@ Longitude Nenhum resultado encontrado Concluído - + Cancelar + Aprovado \ No newline at end of file diff --git a/commonskmm/src/commonMain/composeResources/values-pt/strings.xml b/commonskmm/src/commonMain/composeResources/values-pt/strings.xml index b40e2d571b2..b947ca885da 100644 --- a/commonskmm/src/commonMain/composeResources/values-pt/strings.xml +++ b/commonskmm/src/commonMain/composeResources/values-pt/strings.xml @@ -124,7 +124,7 @@ Nenhum resultado encontrado Feito Não suportado - A palavra-passe está em falta. Introduza a palavra-passe. @@ -150,7 +150,6 @@ Criação abortada. O objeto já existe. Eliminação abortada. O objeto não existe. Não foi possível instanciar o keystore. - Não foi possível reservar valores para este registo. Por favor, contacte o seu administrador. Inicie sessão para exportar a base de dados. A exportação de uma base de dados encriptada não é suportada. Está a importar uma base de dados já existente. @@ -177,7 +176,6 @@ O servidor demorou demasiado tempo a responder. Cancelamos a requisição. O relacionamento não pode ser actualizado. Existem muitos períodos. - Não foi possível encontrar a URL. Por favor, verifique-o. A sua conta de utilizador foi desactivada. Se isto for um erro, contacte o seu administrador. A sua conta de utilizador está bloqueada. Se isto for um erro, contacte o seu administrador. O valor não pode ser definido. @@ -189,8 +187,11 @@ Existem caracteres inválidos na consulta. Por favor, peça ao administrador para verificar a configuração do servidor (relaxedQueryChars,...). O servidor está indisponível do momento. Tente novamente mais tarde. Está off-line. Ligue-se à Internet e tente novamente. - + OR + Cancelar + OK \ No newline at end of file diff --git a/commonskmm/src/commonMain/composeResources/values-ro/strings.xml b/commonskmm/src/commonMain/composeResources/values-ro/strings.xml index 8e2f5f540a6..901c7f098ad 100644 --- a/commonskmm/src/commonMain/composeResources/values-ro/strings.xml +++ b/commonskmm/src/commonMain/composeResources/values-ro/strings.xml @@ -13,8 +13,5 @@ Anulare Nu au fost găsite rezultate Terminat - - - \ No newline at end of file + Anulare + \ No newline at end of file diff --git a/commonskmm/src/commonMain/composeResources/values-ru/strings.xml b/commonskmm/src/commonMain/composeResources/values-ru/strings.xml index 9477e859482..2c17acd492e 100644 --- a/commonskmm/src/commonMain/composeResources/values-ru/strings.xml +++ b/commonskmm/src/commonMain/composeResources/values-ru/strings.xml @@ -128,7 +128,7 @@ Искать, чтобы найти больше Готово Не поддерживается - Пароль отсутствует. Пожалуйста, введите пароль. @@ -152,7 +152,6 @@ Невозможно получить доступ к хранилищу ключей устройства. Создание прервано. Объект уже существует. Удаление прервано. Объект не существует. - Мы не смогли зарезервировать значения для этих записей. Пожалуйста, свяжитесь с вашим администратором. Пожалуйста, войдите в систему, чтобы экспортировать базу данных. Экспорт зашифрованной базы данных не поддерживается. Вы импортируете уже существующую базу данных. @@ -171,7 +170,6 @@ Серверу потребовалось слишком много времени для ответа. Мы отменили запрос. Связь не может быть обновлена. Слишком много периодов. - Мы не смогли найти URL-адрес. Пожалуйста, проверьте его. Ваша учетная запись пользователя была отключена. Если это ошибка, обратитесь к своему администратору. Ваша учетная запись заблокирована. Если это ошибка, обратитесь к своему администратору. Значение не удалось установить. @@ -180,8 +178,13 @@ Онлайн-поиск доступен только для подразделений вашей организации по поиску пользователей. Сервер в настоящее время недоступен. Повторите попытку позже. Вы находитесь оффлайн. Подключитесь к Интернету и повторите попытку. - + ИЛИ + ВОЗРАСТ + ДАТА РОЖДЕНИЯ + Отменить + ОК \ No newline at end of file diff --git a/commonskmm/src/commonMain/composeResources/values-sv/strings.xml b/commonskmm/src/commonMain/composeResources/values-sv/strings.xml index 7dfff1d44f2..d5751363d53 100644 --- a/commonskmm/src/commonMain/composeResources/values-sv/strings.xml +++ b/commonskmm/src/commonMain/composeResources/values-sv/strings.xml @@ -45,8 +45,7 @@ Inga resultat hittades Den här servern kör en dhis-version som skiljer sig från 2.29. Uppdatera din serverversion eller använd testmiljön för att fortsätta. Fel vid tolkning av resultat - + Avbryt + ok \ No newline at end of file diff --git a/commonskmm/src/commonMain/composeResources/values-tet/strings.xml b/commonskmm/src/commonMain/composeResources/values-tet/strings.xml index 548c1951621..f7f9abb5148 100644 --- a/commonskmm/src/commonMain/composeResources/values-tet/strings.xml +++ b/commonskmm/src/commonMain/composeResources/values-tet/strings.xml @@ -10,8 +10,7 @@ Taka Hatun Kansela - + Kansela + OK \ No newline at end of file diff --git a/commonskmm/src/commonMain/composeResources/values-tg/strings.xml b/commonskmm/src/commonMain/composeResources/values-tg/strings.xml index f1ff83d2524..877496fe1aa 100644 --- a/commonskmm/src/commonMain/composeResources/values-tg/strings.xml +++ b/commonskmm/src/commonMain/composeResources/values-tg/strings.xml @@ -22,8 +22,11 @@ Тӯл Арз Иҷро шуд - + Ё + Бекор кардан + OK \ No newline at end of file diff --git a/commonskmm/src/commonMain/composeResources/values-uk/strings.xml b/commonskmm/src/commonMain/composeResources/values-uk/strings.xml index 3aec6ebbf39..543f1adaa55 100644 --- a/commonskmm/src/commonMain/composeResources/values-uk/strings.xml +++ b/commonskmm/src/commonMain/composeResources/values-uk/strings.xml @@ -21,8 +21,8 @@ Оберіть організаційний підрозділ Правило програми %s намагається призначити значення %s, яке не належить до набору параметрів %s Значення для поля %s не належить параметру, встановленому в %s - Це поле обов'язкове для заповнення - Обов'язкове поле + Це поле обов\'язкове для заповнення + Обов\'язкове поле Дата Роки Місяці @@ -47,7 +47,7 @@ Введіть довгий текст Введіть текст Запланована дата - Обов'язкове поле + Обов\'язкове поле Широта: Довгота: Не збережено @@ -112,33 +112,32 @@ Результатів не знайдено Зроблено Не підтримується - Пароль відсутній. Будь ласка, введіть пароль. - Ім'я користувача відсутнє. Будь ласка, введіть ім'я користувача. + Ім\'я користувача відсутнє. Будь ласка, введіть ім\'я користувача. На цьому сервері працює інша версія dhis, ніж 2.29. Щоб продовжити, оновіть версію серверу або скористайтеся середовищем тестування. На цьому сервері працює версія DHIS2, що відрізняється від %s. Оновіть версію серверу або сконтактуйте з системним адміністратором. Сталася помилка. Будь ласка, перевірте правильність URL-адреси серверу, імені користувача та пароля і повторіть спробу. Вибачте! На сервері сталася помилка. Надана URL-адреса не є сервером DHIS2. - Ім'я користувача або пароль неправильні + Ім\'я користувача або пароль неправильні Невідомий сервер Помилка аналізу результатів Неочікувана помилка. Ваш користувач має більше одного кореневого організаційного підрозділу. Перегляньте свою конфігурацію або зверніться до адміністратора. - Онлайн-результати перевищують максимальну кількість об'єктів, які можливо показати. Будь ласка, уточніть свій пошук. + Онлайн-результати перевищують максимальну кількість об\'єктів, які можливо показати. Будь ласка, уточніть свій пошук. На даний момент сервер трохи зайнятий. Будь ласка, спробуйте пізніше. Користувач уже авторизований. Запит уже виконано. Запит на сервер недійсний. - Ім'я додатку не встановлено. + Ім\'я додатку не встановлено. Версію додатку не встановлено. Неможливо отримати доступ до сховища ключів пристрою. - Створення перервано. Об'єкт вже існує. - Видалення перервано. Об'єкт не існує. + Створення перервано. Об\'єкт вже існує. + Видалення перервано. Об\'єкт не існує. Не вдалося створити екземпляр сховища ключів. - Ми не змогли зарезервувати значення для цих записів. Будь ласка, зверніться до свого адміністратора. Увійдіть в систему, щоб експортувати базу даних. Експорт зашифрованої бази даних не підтримується. Ви імпортуєте вже існуючу базу даних. @@ -154,8 +153,8 @@ На сервері недостатньо значень для резервування. Будь ласка, зверніться до свого адміністратора. Ви намагаєтесь увійти в систему, перебуваючи офлайн, під іншим користувачем. Значення геометрії недійсне. - Немає доступних зарезервованих значень. Перейдіть до налаштувань і поповніть значення, коли у Вас з'явиться підключення до Інтернету. - Об'єкт не вдалося оновити. + Немає доступних зарезервованих значень. Перейдіть до налаштувань і поповніть значення, коли у Вас з\'явиться підключення до Інтернету. + Об\'єкт не вдалося оновити. Не вдалося вставити об’єкт. Ви не маєте доступу. Відсутня URL-адреса сервера. Будь ласка, введіть URL-адресу. @@ -163,9 +162,8 @@ Ця версія налаштувань веб-програми не підтримується. Налаштування веб-програми не встановлено на сервері. Сервер надто довго відповідав. Ми скасували запит. - Зв'язки не можна оновити. + Зв\'язки не можна оновити. Надто багато періодів. - Не вдалося знайти URL-адресу. Будь ласка, перевірте це. Ваш обліковий запис користувача вимкнено. Якщо це помилка, зверніться до адміністратора. Ваш обліковий запис користувача заблоковано. Якщо це помилка, зверніться до адміністратора. Не вдалося встановити значення. @@ -175,8 +173,9 @@ Недостатньо атрибутів для виконання пошуку. Уточніть пошук за допомогою додаткових атрибутів. Онлайн-пошук доступний лише для організаційних підрозділів користувача. У запиті є недійсні символи. Попросіть адміністратора перевірити конфігурацію сервера (relaxedQueryChars,...). - + ВІК + ДАТА НАРОДЖЕННЯ + Скасувати + ОК \ No newline at end of file diff --git a/commonskmm/src/commonMain/composeResources/values-ur/strings.xml b/commonskmm/src/commonMain/composeResources/values-ur/strings.xml index 2732a5b0808..30391151185 100644 --- a/commonskmm/src/commonMain/composeResources/values-ur/strings.xml +++ b/commonskmm/src/commonMain/composeResources/values-ur/strings.xml @@ -26,8 +26,11 @@ لمبائی کوئی نتیجہ نہیں ملا ہو گیا - + یا + منسوخ + ٹھیک \ No newline at end of file diff --git a/commonskmm/src/commonMain/composeResources/values-uz-rUZ/strings.xml b/commonskmm/src/commonMain/composeResources/values-uz-rUZ/strings.xml index d72ae5ff712..85c7a70918e 100644 --- a/commonskmm/src/commonMain/composeResources/values-uz-rUZ/strings.xml +++ b/commonskmm/src/commonMain/composeResources/values-uz-rUZ/strings.xml @@ -74,8 +74,7 @@ Ushbu server 2.29 dan farqli versiyani ishlatmoqda. Server versiyasini yangilang yoki davom etish uchun sinov muddatidan foydalaning. Nimadir notoʼgʼri bajarildi. Server URL manzili, foydalanuvchi nomi va parol toʼgʼri ekanligini tekshiring va qaytadan urining. Natijalarni tahlil qilishda xatolik yuz berdi - + Бекор қилиш + OK \ No newline at end of file diff --git a/commonskmm/src/commonMain/composeResources/values-uz/strings.xml b/commonskmm/src/commonMain/composeResources/values-uz/strings.xml index 8f26c0404fd..26de626e199 100644 --- a/commonskmm/src/commonMain/composeResources/values-uz/strings.xml +++ b/commonskmm/src/commonMain/composeResources/values-uz/strings.xml @@ -83,8 +83,13 @@ Қўллаб қувватланмайди Ушбу сервер 2.29 дан фарқли версияни ишлатмоқда. Сервер версиясини янгиланг ёки давом этиш учун синов муддатидан фойдаланинг. Натижаларни таҳлил қилишда хатолик юз берди - + ЁКИ + ЁШИ + ТУҒИЛГАН КУНИ + Рад этиш + ЯХШИ \ No newline at end of file diff --git a/commonskmm/src/commonMain/composeResources/values-vi/strings.xml b/commonskmm/src/commonMain/composeResources/values-vi/strings.xml index 5de626561f2..d0cd5c9d1e0 100644 --- a/commonskmm/src/commonMain/composeResources/values-vi/strings.xml +++ b/commonskmm/src/commonMain/composeResources/values-vi/strings.xml @@ -137,7 +137,7 @@ Tìm kiếm để tìm thêm Hoàn thành Không được hỗ trợ - Thiếu mật khẩu. Xin vui lòng nhập mật khẩu @@ -163,7 +163,6 @@ Không thể tạo. Đối tượng đang tồn tại. Xóa bị từ chối. Đối tượng không tồn tại Không thể tạo kho khóa - Chúng ta không thể đặt trước giá trị cho các dữ liệu này. Vui lòng liên hệ quản lý của bạn. Vui lòng đăng nhập để xuất cơ sở dữ liệu. Xuất dữ liệu mã hóa không hỗ trợ Bạn đang nhập cơ sở dữ liệu đang tồn tại @@ -190,7 +189,6 @@ Máy chủ mất quá nhiều thời gian để trả lời. Chúng tôi đã hủy yêu cầu. Mối quan hệ không thể cập nhật. Có quá nhiều thời điểm - Chúng tôi không thể tìm thấy đường dẫn liên kết. Vui lòng kiểm tra lại. Tài khoảng của bạn đã bị vô hiệu hóa. Nếu đây là lỗi, vui lòng liên hệ quản lý của bạn. Tài khoảng của bạn đã bị khóa. Nếu đây là lỗi, vui lòng liên hệ quản lý của bạn. Giá trị không thể được thiết lập @@ -205,8 +203,11 @@ Nhập cơ sở dữ liệu không thành công Tệp không hợp lệ Không ở chế độ đăng ký TOTP 2FA - + HOẶC + Hủy + OK \ No newline at end of file diff --git a/commonskmm/src/commonMain/composeResources/values-zh-rCN/strings.xml b/commonskmm/src/commonMain/composeResources/values-zh-rCN/strings.xml index 3013da7eafc..d21528424cd 100644 --- a/commonskmm/src/commonMain/composeResources/values-zh-rCN/strings.xml +++ b/commonskmm/src/commonMain/composeResources/values-zh-rCN/strings.xml @@ -125,7 +125,7 @@ 没有结果 完成 不支持 - 密码丢失。请输入密码。 @@ -151,7 +151,6 @@ 创作中止。对象已经存在。 删除已中止。对象不存在。 无法实例化密钥库。 - 我们无法为这些记录保留值。请联系您的管理员。 请登录以导出数据库。 不支持导出加密数据库。 您正在导入一个已经存在的数据库。 @@ -178,7 +177,6 @@ 服务器花费了太多时间来响应。我们取消了请求。 关系无法更新。 期间太多了。 - 我们找不到 URL。请验证一下。 您的用户帐户已被禁用。如果这是错误,请联系您的管理员。 您的用户帐户被锁定。如果这是错误,请联系您的管理员。 无法设置该值。 @@ -190,8 +188,11 @@ 查询中有无效字符。请让管理员验证服务器配置(relaxedQueryChars,...)。 服务器当前不可用。稍后再试。 您已离线。连接到互联网并重试。 - + OR + 取消 + OK \ No newline at end of file diff --git a/commonskmm/src/commonMain/composeResources/values-zh/strings.xml b/commonskmm/src/commonMain/composeResources/values-zh/strings.xml index fb0c24ba6bc..b3e356705b9 100644 --- a/commonskmm/src/commonMain/composeResources/values-zh/strings.xml +++ b/commonskmm/src/commonMain/composeResources/values-zh/strings.xml @@ -138,7 +138,7 @@ 搜索查找更多信息 完成 不支持 - 密码丢失。请输入密码。 @@ -164,7 +164,6 @@ 创作中止。对象已经存在。 删除已中止。对象不存在。 无法实例化密钥库。 - 我们无法为这些记录保留值。请联系您的管理员。 请登录以导出数据库。 不支持导出加密数据库。 您正在导入一个已经存在的数据库。 @@ -191,7 +190,6 @@ 服务器花费了太多时间来响应。我们取消了请求。 关系无法更新。 期间太多了。 - 我们找不到 URL。请验证一下。 您的用户帐户已被禁用。如果这是错误,请联系您的管理员。 您的用户帐户被锁定。如果这是错误,请联系您的管理员。 无法设置该值。 @@ -207,8 +205,13 @@ 无效文件 未进入 TOTP 2FA 注册模式 认证取消 - + OR + 年龄 + 出生日期 + 取消 + \ No newline at end of file diff --git a/form/src/main/res/values-vi/strings.xml b/form/src/main/res/values-vi/strings.xml index 68de45cb60a..2ec97e83842 100644 --- a/form/src/main/res/values-vi/strings.xml +++ b/form/src/main/res/values-vi/strings.xml @@ -16,7 +16,7 @@ Năm Tháng Ngày - %s không thể chuyển đổi thành Ngày + %s không thể chuyển đổi dữ liệu Ngày Bản đồ Vĩ độ Kinh độ diff --git a/login/src/commonMain/composeResources/values-ar-rIQ/strings.xml b/login/src/commonMain/composeResources/values-ar-rIQ/strings.xml index 9bd139301f0..54c20417320 100644 --- a/login/src/commonMain/composeResources/values-ar-rIQ/strings.xml +++ b/login/src/commonMain/composeResources/values-ar-rIQ/strings.xml @@ -1,4 +1,4 @@ - + التالي اسم المستخدم diff --git a/login/src/commonMain/composeResources/values-ar/strings.xml b/login/src/commonMain/composeResources/values-ar/strings.xml index aff9209a9cc..4aabf6b8e45 100644 --- a/login/src/commonMain/composeResources/values-ar/strings.xml +++ b/login/src/commonMain/composeResources/values-ar/strings.xml @@ -1,4 +1,4 @@ - + التالي تسجيل الدخول السريع diff --git a/login/src/commonMain/composeResources/values-bn/strings.xml b/login/src/commonMain/composeResources/values-bn/strings.xml index 7713f637a38..b413e40faef 100644 --- a/login/src/commonMain/composeResources/values-bn/strings.xml +++ b/login/src/commonMain/composeResources/values-bn/strings.xml @@ -1,4 +1,4 @@ - + হ্যাঁ \ No newline at end of file diff --git a/login/src/commonMain/composeResources/values-ckb/strings.xml b/login/src/commonMain/composeResources/values-ckb/strings.xml index 8a027b413b2..c7e2cab6921 100644 --- a/login/src/commonMain/composeResources/values-ckb/strings.xml +++ b/login/src/commonMain/composeResources/values-ckb/strings.xml @@ -1,4 +1,4 @@ - + داهاتوو بەڵێ diff --git a/login/src/commonMain/composeResources/values-cs/strings.xml b/login/src/commonMain/composeResources/values-cs/strings.xml index 2598d71c8c1..23259f8bfec 100644 --- a/login/src/commonMain/composeResources/values-cs/strings.xml +++ b/login/src/commonMain/composeResources/values-cs/strings.xml @@ -1,4 +1,4 @@ - + Přidat nový účet Dvoufaktorové ověřování @@ -22,7 +22,7 @@ Zpět na nastavení Další Navázání spojení... - Ke kterému serveru se chcete připojit? + Ke kterému serveru se chcete připojit\? URL serveru Je zapnuté dvoufaktorové ověřování. Vypnutí dvoufaktorového ověřování @@ -34,7 +34,7 @@ Nepodařilo se vypnout dvoufaktorové ověřování. Není platná URL serveru Rychlé přihlášení - Chcete se přihlásit pomocí otisku prstu nebo jiné biometrické metody? + Chcete se přihlásit pomocí otisku prstu nebo jiné biometrické metody\? Pověření již byla uložena Pověření nebyla uložena Uživatelské jméno @@ -45,7 +45,7 @@ Nebo Přihlášení pomocí openID Správa účtů - Chcete nám pomoci vylepšit tuto aplikaci? + Chcete nám pomoci vylepšit tuto aplikaci\? Pokud řeknete ano, aplikace bude odesílat anonymní statistiky a protokoly o chybách, které nám pomáhají zlepšovat uživatelský komfort a výkon. Další podrobnosti naleznete v našem Zásady ochrany osobních údajů @@ -57,7 +57,7 @@ Zadejte svůj kód PIN Pro přístup k účtu zadejte čtyřmístný kód PIN. Odemknout - Zapomněli jste kód PIN? + Zapomněli jste kód PIN\? Nesprávný kód PIN Není nakonfigurován žádný kód PIN Nepodařilo se uložit kód PIN @@ -67,4 +67,4 @@ Import byl úspěšný Přihlášení bylo zrušeno Neplatný výsledek autorizace - \ No newline at end of file + \ No newline at end of file diff --git a/login/src/commonMain/composeResources/values-da/strings.xml b/login/src/commonMain/composeResources/values-da/strings.xml index e48cd4774df..9ae14a93640 100644 --- a/login/src/commonMain/composeResources/values-da/strings.xml +++ b/login/src/commonMain/composeResources/values-da/strings.xml @@ -1,4 +1,4 @@ - + Next Username diff --git a/login/src/commonMain/composeResources/values-en-rUS/strings.xml b/login/src/commonMain/composeResources/values-en-rUS/strings.xml index 3b3f80dc158..1df60655540 100644 --- a/login/src/commonMain/composeResources/values-en-rUS/strings.xml +++ b/login/src/commonMain/composeResources/values-en-rUS/strings.xml @@ -1,4 +1,4 @@ - + Not now \ No newline at end of file diff --git a/login/src/commonMain/composeResources/values-es-rES/strings.xml b/login/src/commonMain/composeResources/values-es-rES/strings.xml index bda435c5146..4d9ff87946b 100644 --- a/login/src/commonMain/composeResources/values-es-rES/strings.xml +++ b/login/src/commonMain/composeResources/values-es-rES/strings.xml @@ -1,4 +1,4 @@ - + Siguiente Nombre de usuario diff --git a/login/src/commonMain/composeResources/values-id/strings.xml b/login/src/commonMain/composeResources/values-id/strings.xml index 0337aae27b2..4c0f15d42d9 100644 --- a/login/src/commonMain/composeResources/values-id/strings.xml +++ b/login/src/commonMain/composeResources/values-id/strings.xml @@ -1,4 +1,4 @@ - + Selanjutnya Nama pengguna diff --git a/login/src/commonMain/composeResources/values-km/strings.xml b/login/src/commonMain/composeResources/values-km/strings.xml index 8b653396bbe..1fa4a3e05f6 100644 --- a/login/src/commonMain/composeResources/values-km/strings.xml +++ b/login/src/commonMain/composeResources/values-km/strings.xml @@ -1,4 +1,4 @@ - + បន្ទាប់ ឈ្មោះ​គណនី diff --git a/login/src/commonMain/composeResources/values-my/strings.xml b/login/src/commonMain/composeResources/values-my/strings.xml index c3b11bebb24..27b9d88841a 100644 --- a/login/src/commonMain/composeResources/values-my/strings.xml +++ b/login/src/commonMain/composeResources/values-my/strings.xml @@ -1,4 +1,4 @@ - + ရှေ့သို့ အသုံးပြုသူအမည် diff --git a/login/src/commonMain/composeResources/values-nb/strings.xml b/login/src/commonMain/composeResources/values-nb/strings.xml index 0696e46c4da..90b1cbf0a1f 100644 --- a/login/src/commonMain/composeResources/values-nb/strings.xml +++ b/login/src/commonMain/composeResources/values-nb/strings.xml @@ -1,4 +1,4 @@ - + Neste Brukernavn diff --git a/login/src/commonMain/composeResources/values-or/strings.xml b/login/src/commonMain/composeResources/values-or/strings.xml index d367006546e..1c06fa0a994 100644 --- a/login/src/commonMain/composeResources/values-or/strings.xml +++ b/login/src/commonMain/composeResources/values-or/strings.xml @@ -1,4 +1,4 @@ - + ହଁ \ No newline at end of file diff --git a/login/src/commonMain/composeResources/values-prs/strings.xml b/login/src/commonMain/composeResources/values-prs/strings.xml index 5ade5633f41..9e8b90fdcca 100644 --- a/login/src/commonMain/composeResources/values-prs/strings.xml +++ b/login/src/commonMain/composeResources/values-prs/strings.xml @@ -1,4 +1,4 @@ - + بعدی نام کاربر diff --git a/login/src/commonMain/composeResources/values-ps/strings.xml b/login/src/commonMain/composeResources/values-ps/strings.xml index 90974f871eb..f2bcae60ce4 100644 --- a/login/src/commonMain/composeResources/values-ps/strings.xml +++ b/login/src/commonMain/composeResources/values-ps/strings.xml @@ -1,4 +1,4 @@ - + راتلونکی کارېدونکی نوم diff --git a/login/src/commonMain/composeResources/values-pt-rBR/strings.xml b/login/src/commonMain/composeResources/values-pt-rBR/strings.xml index ca68c9dc9c7..166a5d8ac0a 100644 --- a/login/src/commonMain/composeResources/values-pt-rBR/strings.xml +++ b/login/src/commonMain/composeResources/values-pt-rBR/strings.xml @@ -1,4 +1,4 @@ - + Autenticação de dois fatores Próximo diff --git a/login/src/commonMain/composeResources/values-ro/strings.xml b/login/src/commonMain/composeResources/values-ro/strings.xml index 65017cbfb6b..0b73c7adfd0 100644 --- a/login/src/commonMain/composeResources/values-ro/strings.xml +++ b/login/src/commonMain/composeResources/values-ro/strings.xml @@ -1,4 +1,4 @@ - + Următorul Da diff --git a/login/src/commonMain/composeResources/values-si/strings.xml b/login/src/commonMain/composeResources/values-si/strings.xml index 0b5cc8a3adf..7b6f94ddda7 100644 --- a/login/src/commonMain/composeResources/values-si/strings.xml +++ b/login/src/commonMain/composeResources/values-si/strings.xml @@ -1,4 +1,4 @@ - + රහස්‍ය පදය ඔව් diff --git a/login/src/commonMain/composeResources/values-sv/strings.xml b/login/src/commonMain/composeResources/values-sv/strings.xml index 79e10deb0e0..63cc6c99538 100644 --- a/login/src/commonMain/composeResources/values-sv/strings.xml +++ b/login/src/commonMain/composeResources/values-sv/strings.xml @@ -1,4 +1,4 @@ - + Nästa Användarnamn diff --git a/login/src/commonMain/composeResources/values-tet/strings.xml b/login/src/commonMain/composeResources/values-tet/strings.xml index 6156f69b5c4..722b475abe2 100644 --- a/login/src/commonMain/composeResources/values-tet/strings.xml +++ b/login/src/commonMain/composeResources/values-tet/strings.xml @@ -1,4 +1,4 @@ - + Próximu Utilizador nia Naran diff --git a/login/src/commonMain/composeResources/values-tg/strings.xml b/login/src/commonMain/composeResources/values-tg/strings.xml index cc2ba39fd04..e25c4e713a5 100644 --- a/login/src/commonMain/composeResources/values-tg/strings.xml +++ b/login/src/commonMain/composeResources/values-tg/strings.xml @@ -1,4 +1,4 @@ - + Навбатӣ Номи корбар diff --git a/login/src/commonMain/composeResources/values-ur/strings.xml b/login/src/commonMain/composeResources/values-ur/strings.xml index c6cb378cc79..654509a9567 100644 --- a/login/src/commonMain/composeResources/values-ur/strings.xml +++ b/login/src/commonMain/composeResources/values-ur/strings.xml @@ -1,4 +1,4 @@ - + اگلہ صارف کا نا٠diff --git a/login/src/commonMain/composeResources/values-uz-rUZ/strings.xml b/login/src/commonMain/composeResources/values-uz-rUZ/strings.xml index 30f62d9def1..35a442dcafd 100644 --- a/login/src/commonMain/composeResources/values-uz-rUZ/strings.xml +++ b/login/src/commonMain/composeResources/values-uz-rUZ/strings.xml @@ -1,4 +1,4 @@ - + Кейинги Фойдаланувчи исми diff --git a/login/src/commonMain/composeResources/values-uz/strings.xml b/login/src/commonMain/composeResources/values-uz/strings.xml index 2418950d2c2..3d8d9ab6f7b 100644 --- a/login/src/commonMain/composeResources/values-uz/strings.xml +++ b/login/src/commonMain/composeResources/values-uz/strings.xml @@ -1,4 +1,4 @@ - + Аутентификация коди Кейинги diff --git a/login/src/commonMain/composeResources/values-zh-rCN/strings.xml b/login/src/commonMain/composeResources/values-zh-rCN/strings.xml index 5a8748d3738..5b78cdec196 100644 --- a/login/src/commonMain/composeResources/values-zh-rCN/strings.xml +++ b/login/src/commonMain/composeResources/values-zh-rCN/strings.xml @@ -1,4 +1,4 @@ - + 验证码 下一个 diff --git a/login/src/commonMain/composeResources/values-zh/strings.xml b/login/src/commonMain/composeResources/values-zh/strings.xml index 034612438d4..b1d62951c8f 100644 --- a/login/src/commonMain/composeResources/values-zh/strings.xml +++ b/login/src/commonMain/composeResources/values-zh/strings.xml @@ -1,8 +1,7 @@ - + 添加新账户 双重身份验证 - 无法连接网络 您需要连接互联网才能打开或关闭双因素身份验证。 尝试重新连接 检查状态... @@ -67,4 +66,4 @@ 导入成功 登录被取消 授权结果无效 - \ No newline at end of file + \ No newline at end of file diff --git a/stock-usecase/src/main/res/values-cs/strings.xml b/stock-usecase/src/main/res/values-cs/strings.xml index fb96d36b933..3d44027ed80 100644 --- a/stock-usecase/src/main/res/values-cs/strings.xml +++ b/stock-usecase/src/main/res/values-cs/strings.xml @@ -24,7 +24,7 @@ Pouze pro zaměstnance ICRC Uživatelské jméno Heslo - Zapomenuté heslo? + Zapomenuté heslo\? Načítání nedávných aktivit… Ještě jste nevykonali žádnou činnost @@ -88,23 +88,21 @@ Než budete moci pokračovat, musí být vyplněno pole zařízení - \n Před pokračováním je třeba vyplnit pole \"Distribuováno do\". - - Než budete moci pokračovat, musí být vyplněno pole „Distribuováno do“. - - \n Opravdu se chcete vrátit na předchozí obrazovku?\n Pokud se rozhodnete pokračovat, ztratíte právě zadané údaje.\n + \\n Před pokračováním je třeba vyplnit pole \"Distribuováno do\". + \n Než budete moci pokračovat, musí být vyplněno pole „Distribuováno do“.\n + \n Opravdu se chcete vrátit na předchozí obrazovku\?\n Pokud se rozhodnete pokračovat, ztratíte právě zadané údaje.\n Transakce byla úspěšně dokončena! Transakce byla úspěšně zrušena! - \n Opravdu chcete vynutit synchronizaci?\n - Opravdu se chcete odhlásit? + \n Opravdu chcete vynutit synchronizaci\?\n + Opravdu se chcete odhlásit\? - \n Opravdu chcete trvale odstranit záznam pro opravu \"%1$s\"?\n Tuto akci nelze vzít zpět.\n - \n Opravdu chcete trvale odstranit položku pro distribuci \"%1$s\"?\n Tuto akci nelze vzít zpět.\n - \n Opravdu chcete trvale odstranit položku pro vyřazení \"%1$s\"?\n Tuto akci nelze vrátit zpět.\n + \\n Opravdu chcete trvale odstranit záznam pro opravu \"%1$s\"\?\\n Tuto akci nelze vzít zpět.\\n + \\n Opravdu chcete trvale odstranit položku pro distribuci \"%1$s\"\?\\n Tuto akci nelze vzít zpět.\\n + \\n Opravdu chcete trvale odstranit položku pro vyřazení \"%1$s\"\?\\n Tuto akci nelze vrátit zpět.\\n %d položka @@ -165,7 +163,7 @@ Vyberte požadovaný jazyk Restartovat později - \n Aby se však změny projevily, je třeba aplikaci restartovat,\n všechny neuložené změny budou ztraceny.\n\nChcete pokračovat v restartu?\n + \n Aby se však změny projevily, je třeba aplikaci restartovat,\n všechny neuložené změny budou ztraceny.\n\nChcete pokračovat v restartu\?\n Potvrdit restart Skenování zrušeno! @@ -200,9 +198,7 @@ Nebyl zjištěn žádný hlasový vstup Nastala neznámá chyba. Nenumerický vstup není povolen: \"%s\" - - Zadání záporného čísla není povoleno: \"%s\" - + \n Zadání záporného čísla není povoleno: \"%s\"\n Nelze načíst konfiguraci OpenID diff --git a/stock-usecase/src/main/res/values-es/strings.xml b/stock-usecase/src/main/res/values-es/strings.xml index 2159037a0c9..1667ef2199e 100644 --- a/stock-usecase/src/main/res/values-es/strings.xml +++ b/stock-usecase/src/main/res/values-es/strings.xml @@ -24,7 +24,7 @@ Solo para miembros del personal del CICR Nombre de usuario Contraseña - ¿Has olvidado tu contraseña? + ¿Has olvidado tu contraseña\? Cargando actividades recientes… Aún no has realizado ninguna actividad @@ -88,9 +88,7 @@ Debe seleccionar el establecimiento antes de poder continuar - - Se debe completar el campo \"Distribuido a\" antes de poder continuar - + \n Se debe completar el campo \"Distribuido a\" antes de poder continuar\n ¡La transacción se completó exitosamente! @@ -190,9 +188,7 @@ android.permission.RECORD_AUDIO No se detectó entrada de voz Se ha producido un error desconocido. No se permiten entradas no numéricas: \"%s\" - - No se permite la entrada de números negativos: \"%s\" - + \n No se permite la entrada de números negativos: \"%s\"\n No se puede cargar la configuración de OpenID diff --git a/stock-usecase/src/main/res/values-lo/strings.xml b/stock-usecase/src/main/res/values-lo/strings.xml index 9abac5c86e1..06659f9ef60 100644 --- a/stock-usecase/src/main/res/values-lo/strings.xml +++ b/stock-usecase/src/main/res/values-lo/strings.xml @@ -15,7 +15,7 @@ ເຂົ້າສູ່ລະບົບດ້ວຍບັນຊີ ICRC ຊື່ຜູ້ໃຊ້ ລະຫັດຜ່ານ - ລຶມລະຫັດຜ່ານ? + ລຶມລະຫັດຜ່ານ\? ດຳເນີນ @@ -64,8 +64,7 @@ ບໍ່ຖືກຕ້ອງ ຂໍ້ຜິດພາດທາງເຄື່ອຂ່າຍ ການເຮັດວຽກຂອງອິນເຕີເນັດໝົດເວລາແລ້ວ - -ບໍ່ອະນຸຍາດໃຫ້ປ້ອນຕົວເລກລົບ:\"%s\" + \nບໍ່ອະນຸຍາດໃຫ້ປ້ອນຕົວເລກລົບ:\"%s\" ບໍ່ມີການເຊື່ອມຕໍ່ອິນເຕີເນັດ diff --git a/stock-usecase/src/main/res/values-nl/strings.xml b/stock-usecase/src/main/res/values-nl/strings.xml index 4c2f1bd7345..97e65126ff9 100644 --- a/stock-usecase/src/main/res/values-nl/strings.xml +++ b/stock-usecase/src/main/res/values-nl/strings.xml @@ -24,7 +24,7 @@ Alleen voor ICRC-personeelsleden Gebruikersnaam Wachtwoord - Wachtwoord vergeten? + Wachtwoord vergeten\? Recente activiteiten laden… U moet nog enige activiteit uitvoeren @@ -81,15 +81,15 @@ Er moet een transactietype worden geselecteerd en alle velden moeten zijn ingevuld voordat u verder kunt gaan Het faciliteitsveld moet worden ingevuld voordat u verder kunt gaan Het veld \"Gedistribueerd naar\" moet zijn ingevuld voordat u verder kunt gaan - Weet u zeker dat u terug wilt naar het vorige scherm? U verliest de zojuist ingevoerde gegevens als u besluit door te gaan. + Weet u zeker dat u terug wilt naar het vorige scherm\? U verliest de zojuist ingevoerde gegevens als u besluit door te gaan. De transactie is succesvol afgerond! De transactie is succesvol geannuleerd! - Weet u zeker dat u synchronisatie wilt forceren? - Weet u zeker dat u wilt uitloggen? + Weet u zeker dat u synchronisatie wilt forceren\? + Weet u zeker dat u wilt uitloggen\? - Weet u zeker dat u de invoer voor de correctie van \"%1$s permanent wilt verwijderen\"? Deze actie kan niet ongedaan gemaakt worden. - Weet u zeker dat u het item voor de distributie van \"%1$s permanent wilt verwijderen\"? Deze actie kan niet ongedaan gemaakt worden. - Weet u zeker dat u de invoer voor het weggooien van \"%1$s permanent wilt verwijderen\"? Deze actie kan niet ongedaan gemaakt worden. + Weet u zeker dat u de invoer voor de correctie van \"%1$s permanent wilt verwijderen\"\? Deze actie kan niet ongedaan gemaakt worden. + Weet u zeker dat u het item voor de distributie van \"%1$s permanent wilt verwijderen\"\? Deze actie kan niet ongedaan gemaakt worden. + Weet u zeker dat u de invoer voor het weggooien van \"%1$s permanent wilt verwijderen\"\? Deze actie kan niet ongedaan gemaakt worden. %d item @@ -132,7 +132,7 @@ Selecteer uw gewenste taal Later opnieuw opstarten - De toepassing moet opnieuw worden gestart om de wijzigingen door te voeren, maar alle niet-opgeslagen wijzigingen gaan verloren.\n\nWilt u doorgaan met de herstart? + De toepassing moet opnieuw worden gestart om de wijzigingen door te voeren, maar alle niet-opgeslagen wijzigingen gaan verloren.\n\nWilt u doorgaan met de herstart\? Bevestig opnieuw opstarten Scan geannuleerd! Er is een fout opgetreden tijdens het uitloggen. Probeer het later opnieuw. diff --git a/stock-usecase/src/main/res/values-pt/strings.xml b/stock-usecase/src/main/res/values-pt/strings.xml index e6acc163129..4d68792affe 100644 --- a/stock-usecase/src/main/res/values-pt/strings.xml +++ b/stock-usecase/src/main/res/values-pt/strings.xml @@ -24,7 +24,7 @@ Apenas para membros do ICRC Nome de utilizador Senha - Esqueceu a password? + Esqueceu a password\? Carregar actividades recentes… Ainda não realizou nenhuma atividade @@ -87,9 +87,7 @@ O campo da instalação deve ser preenchido antes de prosseguir - - The ‘Distributed to’ field must be filled in before proceeding - + \n The ‘Distributed to’ field must be filled in before proceeding\n A transação foi concluída com êxito! @@ -186,9 +184,7 @@ Não foi detectada qualquer entrada de voz Ocorreu um erro desconhecido.  Não é permitida a introdução de dados não numéricos: \"%s\" - - A introdução de números negativos não é permitida:\"%s\" - + \n A introdução de números negativos não é permitida:\"%s\"\n Não é possível carregar a configuração do OpenID diff --git a/stock-usecase/src/main/res/values-uz-rUZ/strings.xml b/stock-usecase/src/main/res/values-uz-rUZ/strings.xml index 5fabe313339..774489d1f0f 100644 --- a/stock-usecase/src/main/res/values-uz-rUZ/strings.xml +++ b/stock-usecase/src/main/res/values-uz-rUZ/strings.xml @@ -24,15 +24,15 @@ Faqat ICRC xodimlar uchun Фойдаланувчи исми Parol - Parolni unutdingizmi? + Parolni unutdingizmi\? - Oxirgi harakatlar yuklanmoqda & # 8230; + Oxirgi harakatlar yuklanmoqda… Siz hali hech qanday faoliyatni amalga oshirmayapsiz - Metadata sinxronlanmoqda & # 8230; + Metadata sinxronlanmoqda… Meta-maʼlumotlarni sinxronlash tugallanmadi - Ma\'lumotlarni sinxronlash & # 8230; + Ma\'lumotlarni sinxronlash… Maʼlumotlarni sinxronlash tugallanmadi Metadata sinxronlash tugallandi! Sinxronlash tugallandi! @@ -42,7 +42,7 @@ Ko‘rib chiqish Shtrix-kodni skanerlash - Skanerlash & # 8230; + Skanerlash… Elementni qidirish Излаш... Oʼchirib tashlash @@ -157,8 +157,7 @@ Ovozli matn aniqlanmadi Номаълум хатолик юз берди Raqamsiz kiritishga ruxsat berilmagan: \"%s\" - Raqamni salbiy kiritish mumkin emas: \"%s\" - + Raqamni salbiy kiritish mumkin emas: \"%s\"\n OpenID konfiguratsiyasini yuklab boʻlmadi OpenID bilan autentifikatsiya qilishda kutilmagan xatolik yuz berdi diff --git a/stock-usecase/src/main/res/values-vi/strings.xml b/stock-usecase/src/main/res/values-vi/strings.xml index 1939695e9d3..742d15dc515 100644 --- a/stock-usecase/src/main/res/values-vi/strings.xml +++ b/stock-usecase/src/main/res/values-vi/strings.xml @@ -24,13 +24,13 @@ Chỉ dành cho nhân viên ICRC Tên đăng nhập Mật khẩu - Quên mật khẩu? + Quên mật khẩu\? Đang tải các hoạt động gần đây… Bạn chưa thực hiện bất kỳ hoạt động nào - Đang đồng bộ siêu dữ liệu… + Đang đồng bộ siêu dữ liệu&#8230 Không thể hoàn thành đồng bộ siêu dữ liệu Đang đồng bộ dữ liệuಞ Không thể hoàn thành đồng bộ dữ liệu @@ -88,9 +88,7 @@ Điền đầy đủ các trường dữ liệu cơ sở trước khi bạn có thể tiếp tục - - Trường \"Phân bổ đến\" phải được điền đầy đủ trước khi tiếp tục - + \n Điền đầy đủ Trường \"Phân bổ đến\" trước khi tiếp tục\n Giao dịch vưa được hoàn thành! @@ -187,9 +185,7 @@ Không nhận được đầu vào bằng giọng nói Một lỗi không xác định đã xuất hiện. Không chấp nhận đầu vào không phải là số: \"%s\" - - Không chấp nhận đầu vào là số âm: \"%s\" - + \n Không chấp nhận đầu vào là số âm: \"%s\"\n Không thể tải cấu hình OpenID diff --git a/stock-usecase/src/main/res/values-zh/strings.xml b/stock-usecase/src/main/res/values-zh/strings.xml index a3a4ec3c734..e09555bad0b 100644 --- a/stock-usecase/src/main/res/values-zh/strings.xml +++ b/stock-usecase/src/main/res/values-zh/strings.xml @@ -88,10 +88,8 @@ 必须先填写设施字段,然后才能继续 - \n 必须填写 \"分发至 \"字段后才能继续操作 - - 必须填写“分发给”字段才能继续 - + \\n 必须填写 \"分发至 \"字段后才能继续操作 + \n 必须填写“分发给”字段才能继续\n \n 您确定要返回上一屏幕吗?\n 如果您决定继续,您将丢失刚刚输入的数据。\n 交易成功完成! @@ -102,9 +100,9 @@ \n 您确定要强制同步吗?\n 您确定要退出吗? - \n 您确定要永久删除更正“%1$s”\的条目吗?\n 此操作无法撤消。\n - \n 您确定要永久删除“%1$s”\ 的分发条目吗?\n 此操作无法撤消。\n - \n 您确定要永久删除“%1$s”\的丢弃条目吗?\n 此操作无法撤消。\n + \\n 您确定要永久删除更正“%1$s”\的条目吗?\\n 此操作无法撤消。\\n + \\n 您确定要永久删除“%1$s”\ 的分发条目吗?\\n 此操作无法撤消。\\n + \\n 您确定要永久删除“%1$s”\的丢弃条目吗?\\n 此操作无法撤消。\\n %d 项目 @@ -195,9 +193,7 @@ 未检测到语音输入 出现未知错误。 不允许非数字输入:“%s” - - 不允许输入负数:“%s” - + \n 不允许输入负数:“%s”\n 无法加载 OpenID 配置 diff --git a/tracker/src/commonMain/composeResources/values-ar/strings.xml b/tracker/src/commonMain/composeResources/values-ar/strings.xml index 49ad9b39dd4..16ef803b527 100644 --- a/tracker/src/commonMain/composeResources/values-ar/strings.xml +++ b/tracker/src/commonMain/composeResources/values-ar/strings.xml @@ -1,6 +1,6 @@ - لا توجد علاقات ، انقر فوق "+" لإضافة علاقة جديدة. + لا توجد علاقات ، انقر فوق \"+\" لإضافة علاقة جديدة. العلاقة لا توجد بيانات مزامنة... @@ -10,4 +10,6 @@ إزلة بحث اختياري + نعم + لا \ No newline at end of file diff --git a/tracker/src/commonMain/composeResources/values-ckb/strings.xml b/tracker/src/commonMain/composeResources/values-ckb/strings.xml index 194e179ced2..cc9373697a2 100644 --- a/tracker/src/commonMain/composeResources/values-ckb/strings.xml +++ b/tracker/src/commonMain/composeResources/values-ckb/strings.xml @@ -3,4 +3,6 @@ لابردن لابردن گەڕان + بەڵێ + نەخێر \ No newline at end of file diff --git a/tracker/src/commonMain/composeResources/values-cs/strings.xml b/tracker/src/commonMain/composeResources/values-cs/strings.xml index 23c94f46bf8..d005c9bff96 100644 --- a/tracker/src/commonMain/composeResources/values-cs/strings.xml +++ b/tracker/src/commonMain/composeResources/values-cs/strings.xml @@ -19,5 +19,6 @@ Hledat Volitelný Spustit - - \ No newline at end of file + ano + ne + \ No newline at end of file diff --git a/tracker/src/commonMain/composeResources/values-en-rUS/strings.xml b/tracker/src/commonMain/composeResources/values-en-rUS/strings.xml index b2079e4cc5a..3e959f67e0a 100644 --- a/tracker/src/commonMain/composeResources/values-en-rUS/strings.xml +++ b/tracker/src/commonMain/composeResources/values-en-rUS/strings.xml @@ -1,4 +1,5 @@ + Show less Cancel \ No newline at end of file diff --git a/tracker/src/commonMain/composeResources/values-es-rES/strings.xml b/tracker/src/commonMain/composeResources/values-es-rES/strings.xml index 83326a8a023..70c2bef51df 100644 --- a/tracker/src/commonMain/composeResources/values-es-rES/strings.xml +++ b/tracker/src/commonMain/composeResources/values-es-rES/strings.xml @@ -1,10 +1,12 @@ - No hay relaciones, haga click en "+" para crear una nueva. + No hay relaciones, haga click en \"+\" para crear una nueva. Relación No hay datos Sincronizando... Cancelar Eliminar Buscar + + no \ No newline at end of file diff --git a/tracker/src/commonMain/composeResources/values-es/strings.xml b/tracker/src/commonMain/composeResources/values-es/strings.xml index 5f312bc0403..302f58c87a9 100644 --- a/tracker/src/commonMain/composeResources/values-es/strings.xml +++ b/tracker/src/commonMain/composeResources/values-es/strings.xml @@ -1,6 +1,6 @@ - No hay relaciones, haga click en "+" para crear una nueva. + No hay relaciones, haga click en \"+\" para crear una nueva. Relación creada el ¿Eliminar %1$s? El %1$s se eliminará. Esta acción no puede deshacerse. @@ -17,4 +17,7 @@ Borrar búsqueda Buscar Opcional + Solo coincidencias exactas + + no \ No newline at end of file diff --git a/tracker/src/commonMain/composeResources/values-fr/strings.xml b/tracker/src/commonMain/composeResources/values-fr/strings.xml index d1753b587c8..f4f756a26d1 100644 --- a/tracker/src/commonMain/composeResources/values-fr/strings.xml +++ b/tracker/src/commonMain/composeResources/values-fr/strings.xml @@ -1,6 +1,6 @@ - Il n\'y a pas de relations, cliquez "+" pour en ajouter une nouvelle. + Il n\'y a pas de relations, cliquez \"+\" pour en ajouter une nouvelle. Relation créée le Supprimer %1$s? Le fichier %1$s sera supprimé. Cette action est irréversible. @@ -15,4 +15,7 @@ Supprimer Rechercher Optional + Correspondances exactes uniquement + oui + non \ No newline at end of file diff --git a/tracker/src/commonMain/composeResources/values-hi-rIN/strings.xml b/tracker/src/commonMain/composeResources/values-hi-rIN/strings.xml index 27cb0420f55..6845fc86503 100644 --- a/tracker/src/commonMain/composeResources/values-hi-rIN/strings.xml +++ b/tracker/src/commonMain/composeResources/values-hi-rIN/strings.xml @@ -19,5 +19,4 @@ सर्च करें / खोजें वैकल्पिक लॉन्च - - \ No newline at end of file + \ No newline at end of file diff --git a/tracker/src/commonMain/composeResources/values-id/strings.xml b/tracker/src/commonMain/composeResources/values-id/strings.xml index 181e9438838..cba81ebfdd6 100644 --- a/tracker/src/commonMain/composeResources/values-id/strings.xml +++ b/tracker/src/commonMain/composeResources/values-id/strings.xml @@ -1,6 +1,6 @@ - Tidak ada hubungan, klik "+" untuk menambahkan yang baru. + Tidak ada hubungan, klik \"+\" untuk menambahkan yang baru. Hubungan Tidak ada data Sedang sinkronisasi... @@ -9,4 +9,6 @@ Batal Hapus Pencarian + ya + tidak \ No newline at end of file diff --git a/tracker/src/commonMain/composeResources/values-km/strings.xml b/tracker/src/commonMain/composeResources/values-km/strings.xml index d49b5cb7837..e7b153c7e3d 100644 --- a/tracker/src/commonMain/composeResources/values-km/strings.xml +++ b/tracker/src/commonMain/composeResources/values-km/strings.xml @@ -6,4 +6,6 @@ លុបចេញ ស្វែងរក មិនមានក៏បាន + យល់ព្រម + មិនព្រម \ No newline at end of file diff --git a/tracker/src/commonMain/composeResources/values-lo/strings.xml b/tracker/src/commonMain/composeResources/values-lo/strings.xml index d56ad65951f..fd5c7b8566f 100644 --- a/tracker/src/commonMain/composeResources/values-lo/strings.xml +++ b/tracker/src/commonMain/composeResources/values-lo/strings.xml @@ -1,6 +1,6 @@ - ບໍ່ມີຄວາມສຳພັນ, ຄລິກ "+" ເພື່ອເພີ່ມໃໝ່ + ບໍ່ມີຄວາມສຳພັນ, ຄລິກ \"+\" ເພື່ອເພີ່ມໃໝ່ ຄວາມສໍາພັນ ບໍ່ມີຂໍ້ມູນ ກຳລັງຊິ້ງຂໍ້ມູນ @@ -10,4 +10,6 @@ ລົບອອກ ຄົ້ນຫາ ​ຢ່າງ​ຕ່ຳ ມີ​ ທັງ​ໝົດ 8 ຄຳ ໃນ​ນັ້ນ​ຕ້ອງ​ມີ​ໂຕ​ໃຫ​ຍ່ 1 ໂຕ ແລະ ໂຕ​ເລກ 1 ໂຕ + ແມ່ນ + ບໍ່ແມ່ນ \ No newline at end of file diff --git a/tracker/src/commonMain/composeResources/values-my/strings.xml b/tracker/src/commonMain/composeResources/values-my/strings.xml index 6b9d631e693..68f2b75e23b 100644 --- a/tracker/src/commonMain/composeResources/values-my/strings.xml +++ b/tracker/src/commonMain/composeResources/values-my/strings.xml @@ -4,4 +4,6 @@ ပယ်ဖျက်သည် ဖယ်ရှားခြင်း မဖြစ်မနေလုပ်ရန်မလိုပါ။ + ဟုတ်ပါသည် + မဟုတ်ပါ \ No newline at end of file diff --git a/tracker/src/commonMain/composeResources/values-nb/strings.xml b/tracker/src/commonMain/composeResources/values-nb/strings.xml index 2de83b014cf..be6710e566e 100644 --- a/tracker/src/commonMain/composeResources/values-nb/strings.xml +++ b/tracker/src/commonMain/composeResources/values-nb/strings.xml @@ -1,6 +1,6 @@ - Det er ingen relasjoner, klikk "+" for å legge til en ny. + Det er ingen relasjoner, klikk \"+\" for å legge til en ny. Relasjon Ingen data Synkroniserer... @@ -10,4 +10,6 @@ Fjern Søk Valgfri + ja + nei \ No newline at end of file diff --git a/tracker/src/commonMain/composeResources/values-nl/strings.xml b/tracker/src/commonMain/composeResources/values-nl/strings.xml index d3556058f1f..c9721c270f8 100644 --- a/tracker/src/commonMain/composeResources/values-nl/strings.xml +++ b/tracker/src/commonMain/composeResources/values-nl/strings.xml @@ -1,6 +1,6 @@ - Er zijn geen relaties, klik op "+" om een nieuwe toe te voegen. + Er zijn geen relaties, klik op \"+\" om een nieuwe toe te voegen. Relatie Geen gegevens Synchroniseren... diff --git a/tracker/src/commonMain/composeResources/values-or/strings.xml b/tracker/src/commonMain/composeResources/values-or/strings.xml new file mode 100644 index 00000000000..a3a33ce7773 --- /dev/null +++ b/tracker/src/commonMain/composeResources/values-or/strings.xml @@ -0,0 +1,5 @@ + + + ହଁ + ନାହିଁ + \ No newline at end of file diff --git a/tracker/src/commonMain/composeResources/values-pt-rBR/strings.xml b/tracker/src/commonMain/composeResources/values-pt-rBR/strings.xml index d6c05ff6e29..158f9908b30 100644 --- a/tracker/src/commonMain/composeResources/values-pt-rBR/strings.xml +++ b/tracker/src/commonMain/composeResources/values-pt-rBR/strings.xml @@ -6,4 +6,6 @@ Remover Pesquisar Opcional + sim + não \ No newline at end of file diff --git a/tracker/src/commonMain/composeResources/values-pt/strings.xml b/tracker/src/commonMain/composeResources/values-pt/strings.xml index 18e93aa987d..69ff5bb063e 100644 --- a/tracker/src/commonMain/composeResources/values-pt/strings.xml +++ b/tracker/src/commonMain/composeResources/values-pt/strings.xml @@ -1,6 +1,6 @@ - Não há relacionamentos, clique em "+" para adicionar um novo. + Não há relacionamentos, clique em \"+\" para adicionar um novo. Relação criada em Remover %1$s? O ficheiro %1$s será eliminado. Esta ação não pode ser anulada. @@ -17,4 +17,6 @@ Limpar pesquisa Procurar Opcional + sim + não \ No newline at end of file diff --git a/tracker/src/commonMain/composeResources/values-ru/strings.xml b/tracker/src/commonMain/composeResources/values-ru/strings.xml index 80ee1d781ad..d633f802f9c 100644 --- a/tracker/src/commonMain/composeResources/values-ru/strings.xml +++ b/tracker/src/commonMain/composeResources/values-ru/strings.xml @@ -1,6 +1,6 @@ - Нет никаких связей, нажмите "+", чтобы добавить новую. + Нет никаких связей, нажмите \"+\", чтобы добавить новую. Связь создана Удалить %1$s? %1$s будет удален. Это действие нельзя отменить. @@ -17,4 +17,6 @@ Очистить поиск Поиск Опционно + Да + нет \ No newline at end of file diff --git a/tracker/src/commonMain/composeResources/values-sv/strings.xml b/tracker/src/commonMain/composeResources/values-sv/strings.xml index a8be5c79de8..111a92dc1c3 100644 --- a/tracker/src/commonMain/composeResources/values-sv/strings.xml +++ b/tracker/src/commonMain/composeResources/values-sv/strings.xml @@ -6,4 +6,6 @@ Ta bort Sök Frivillig + ja + nej \ No newline at end of file diff --git a/tracker/src/commonMain/composeResources/values-uk/strings.xml b/tracker/src/commonMain/composeResources/values-uk/strings.xml index 6d354930f7b..00580e190b5 100644 --- a/tracker/src/commonMain/composeResources/values-uk/strings.xml +++ b/tracker/src/commonMain/composeResources/values-uk/strings.xml @@ -1,6 +1,6 @@ - Немає зв’язків, натисніть «+», щоб додати новий. + Немає зв\'язків, натисніть «+», щоб додати новий. Зв\'язок Немає даних Синхронізація... @@ -11,4 +11,7 @@ Очистити пошук Пошук Необов\'язково + Тільки точне збіги + так + ні \ No newline at end of file diff --git a/tracker/src/commonMain/composeResources/values-uz-rUZ/strings.xml b/tracker/src/commonMain/composeResources/values-uz-rUZ/strings.xml index 6c653b2157b..54847a12554 100644 --- a/tracker/src/commonMain/composeResources/values-uz-rUZ/strings.xml +++ b/tracker/src/commonMain/composeResources/values-uz-rUZ/strings.xml @@ -1,6 +1,6 @@ - Oʼzaro aloqalar mavjud emas, yangisini qoʼshish uchun "+" tugmasini bosing. + Oʼzaro aloqalar mavjud emas, yangisini qoʼshish uchun \"+\" tugmasini bosing. Oʼzaro aloqa Maʼlumot yoʼq Sinxronizatsiyalanmoqda... diff --git a/tracker/src/commonMain/composeResources/values-uz/strings.xml b/tracker/src/commonMain/composeResources/values-uz/strings.xml index 1849a1ca653..01af292fd63 100644 --- a/tracker/src/commonMain/composeResources/values-uz/strings.xml +++ b/tracker/src/commonMain/composeResources/values-uz/strings.xml @@ -1,6 +1,6 @@ - Ўзаро алоқалар мавжуд эмас, янгисини қўшиш учун "+" тугмасини босинг. + Ўзаро алоқалар мавжуд эмас, янгисини қўшиш учун \"+\" тугмасини босинг. Муносабат яратилган сана Ўзаро алоқа Маълумот йўқ @@ -11,4 +11,6 @@ Олиб ташлаш Излаш Ихтиёрий + ҳа + йўқ \ No newline at end of file diff --git a/tracker/src/commonMain/composeResources/values-vi/strings.xml b/tracker/src/commonMain/composeResources/values-vi/strings.xml index 55e0c4c892a..fe6852f210a 100644 --- a/tracker/src/commonMain/composeResources/values-vi/strings.xml +++ b/tracker/src/commonMain/composeResources/values-vi/strings.xml @@ -1,6 +1,6 @@ - Không có mối quan hệ, bấm vào "+" để thêm một mối quan hệ. + Không có mối quan hệ, bấm vào \"+\" để thêm một mối quan hệ. Mối quan hệ đã được tạo trên Bỏ %1$s? %1$s sẽ bị xóa. Hành động này không thể hoàn lại. @@ -17,4 +17,6 @@ Bỏ tìm kiếm Tìm kiếm Không bắt buộc + + không \ No newline at end of file diff --git a/tracker/src/commonMain/composeResources/values-zh-rCN/strings.xml b/tracker/src/commonMain/composeResources/values-zh-rCN/strings.xml index 10588f2a543..44faee14fa9 100644 --- a/tracker/src/commonMain/composeResources/values-zh-rCN/strings.xml +++ b/tracker/src/commonMain/composeResources/values-zh-rCN/strings.xml @@ -17,4 +17,6 @@ 清除搜索 搜索 可选项描述 + + \ No newline at end of file diff --git a/tracker/src/commonMain/composeResources/values-zh/strings.xml b/tracker/src/commonMain/composeResources/values-zh/strings.xml index 1809d042178..de3de53e75a 100644 --- a/tracker/src/commonMain/composeResources/values-zh/strings.xml +++ b/tracker/src/commonMain/composeResources/values-zh/strings.xml @@ -19,5 +19,9 @@ 搜索 可选项描述 启动 - - \ No newline at end of file + 仅限完全匹配 + 必须与值的起始部分相匹配 + 必须与数值的末尾一致 + + + \ No newline at end of file From 921680a6ff93261fcc06141cf98c9b6f5d895ba3 Mon Sep 17 00:00:00 2001 From: Copilot <198982749+Copilot@users.noreply.github.com> Date: Tue, 17 Mar 2026 13:12:04 +0100 Subject: [PATCH 103/114] Update rule engine to 3.7.0 (#4740) * Update rule engine version to 3.7.0 Co-authored-by: andresmr <3330344+andresmr@users.noreply.github.com> * Add rule-engine-jvm 3.7.0 checksums to verification-metadata.xml Co-authored-by: andresmr <3330344+andresmr@users.noreply.github.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: andresmr <3330344+andresmr@users.noreply.github.com> --- gradle/libs.versions.toml | 2 +- gradle/verification-metadata.xml | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 93622073e88..892a30bb843 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -12,7 +12,7 @@ dagger = '2.57.2' jacoco = '0.8.14' designSystem = "0.7.0-SNAPSHOT" dhis2sdk = "1.14.0-SNAPSHOT" -ruleEngine = "3.6.1" +ruleEngine = "3.7.0" expressionParser = "1.3.1" appcompat = "1.7.1" annotation = "1.9.1" diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index 3d18c6a6663..d379659e84a 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -13376,6 +13376,14 @@ + + + + + + + + From 26d284734092b5357384e8e41e2c39e9367b918c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Garc=C3=ADa?= Date: Tue, 17 Mar 2026 15:31:20 +0100 Subject: [PATCH 104/114] feat: [ANDROAPP-7456] Legend evaluation for rule actions (#4727) * feat: [ANDROAPP-7456] Legend evaluation for rule actions Implement legend evaluation for Display KeyValue Pair rule actions * fix: [ANDROAPP-7456] Update regex for legend sets + use RuleConstants * Add test class for value parser; identify negative numbers --------- Co-authored-by: Fernando Gomez --- .../indicators/BaseIndicatorRepository.kt | 40 ++++++++++++++++++- .../indicators/BaseIndicatorRepositoryTest.kt | 19 +++++++++ gradle/verification-metadata.xml | 26 ++++++++++++ 3 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 app/src/test/java/org/dhis2/usescases/teiDashboard/dashboardfragments/indicators/BaseIndicatorRepositoryTest.kt diff --git a/app/src/main/java/org/dhis2/usescases/teiDashboard/dashboardfragments/indicators/BaseIndicatorRepository.kt b/app/src/main/java/org/dhis2/usescases/teiDashboard/dashboardfragments/indicators/BaseIndicatorRepository.kt index d3194241c19..3b9159c663e 100644 --- a/app/src/main/java/org/dhis2/usescases/teiDashboard/dashboardfragments/indicators/BaseIndicatorRepository.kt +++ b/app/src/main/java/org/dhis2/usescases/teiDashboard/dashboardfragments/indicators/BaseIndicatorRepository.kt @@ -9,6 +9,7 @@ import dhis2.org.analytics.charts.ui.SectionType import io.reactivex.Flowable import io.reactivex.Observable import org.dhis2.commons.resources.ResourceManager +import org.dhis2.mobileProgramRules.RuleConstants import org.dhis2.mobileProgramRules.RuleEngineHelper import org.hisp.dhis.android.core.D2 import org.hisp.dhis.android.core.arch.helpers.UidGeneratorImpl @@ -111,6 +112,8 @@ abstract class BaseIndicatorRepository( val ruleAction = ruleEffect.ruleAction if (ruleEffect.data?.contains("#{") == false) { if (ruleAction.type == ProgramRuleActionType.DISPLAYKEYVALUEPAIR.name) { + val legendSet = ruleAction.values[RuleConstants.LEGENDSET_LABEL] + val color = getLegendColor(ruleEffect.data, legendSet) val indicator = IndicatorModel( ProgramIndicator @@ -119,7 +122,7 @@ abstract class BaseIndicatorRepository( .displayName((ruleAction).content()) .build(), ruleEffect.data, - null, + color, ruleAction.values["location"] ?: DEFAULT_LOCATION, resourceManager.defaultIndicatorLabel(), ) @@ -147,6 +150,29 @@ abstract class BaseIndicatorRepository( return indicators } + private fun getLegendColor( + data: String?, + legendSet: String?, + ): String? { + if (data.isNullOrEmpty() || legendSet.isNullOrEmpty()) return null + + val legendValue = getNumberValue(data) ?: return null + + val legends = + d2 + .legendSetModule() + .legends() + .byStartValue() + .smallerThan(legendValue) + .byEndValue() + .biggerOrEqualTo(legendValue) + .byLegendSet() + .eq(legendSet) + .blockingGet() + + return legends.firstOrNull()?.color() + } + private fun getLegendColorForIndicator( indicator: ProgramIndicator, value: String?, @@ -240,4 +266,16 @@ abstract class BaseIndicatorRepository( } } } + + companion object { + private val NUMBER_REGEX = """-?\b(\d{1,3}(,\d{3})*(\.\d+)?|\d+(\.\d+)?)\b""".toRegex() + + internal fun getNumberValue(data: String): Double? { + return NUMBER_REGEX + .find(data) + ?.value + ?.replace(",", "") + ?.toDoubleOrNull() + } + } } diff --git a/app/src/test/java/org/dhis2/usescases/teiDashboard/dashboardfragments/indicators/BaseIndicatorRepositoryTest.kt b/app/src/test/java/org/dhis2/usescases/teiDashboard/dashboardfragments/indicators/BaseIndicatorRepositoryTest.kt new file mode 100644 index 00000000000..4fef338aebb --- /dev/null +++ b/app/src/test/java/org/dhis2/usescases/teiDashboard/dashboardfragments/indicators/BaseIndicatorRepositoryTest.kt @@ -0,0 +1,19 @@ +package org.dhis2.usescases.teiDashboard.dashboardfragments.indicators + +import org.dhis2.usescases.teiDashboard.dashboardfragments.indicators.BaseIndicatorRepository.Companion.getNumberValue +import org.junit.Test + +class BaseIndicatorRepositoryTest { + + @Test + fun `Should parse number value`() { + assert(getNumberValue("54") == 54.0) + assert(getNumberValue("54.3") == 54.3) + assert(getNumberValue("-12.2") == -12.2) + assert(getNumberValue("23456.6") == 23456.6) + assert(getNumberValue("23,456.6") == 23456.6) + assert(getNumberValue("54.1%") == 54.1) + assert(getNumberValue("54.1 %") == 54.1) + assert(getNumberValue("<14322>") == 14322.0) + } +} diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index d379659e84a..e3ec308658d 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -14546,6 +14546,16 @@ + + + + + + + + + + @@ -18573,6 +18583,22 @@ + + + + + + + + + + + + + + + + From 2da3def51a629634a3244b11a237779b9853e712 Mon Sep 17 00:00:00 2001 From: "@dhis2-bot" Date: Wed, 18 Mar 2026 08:44:02 +0100 Subject: [PATCH 105/114] Update version to 3.4.0-RC --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 892a30bb843..dc0b49a18f9 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -5,7 +5,7 @@ navigationCompose = "2.9.2" sdk = "36" minSdk = "23" vCode = "151" -vName = "3.4.0-DEV" +vName = "3.4.0-RC" gradle = "9.0.1" kotlin = '2.3.10' dagger = '2.57.2' From 955aab1284d48a6d182505a7f4173532867f5436 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9s=20Miguel=20Rubio?= Date: Tue, 24 Mar 2026 08:56:32 +0100 Subject: [PATCH 106/114] build: update ruleEngine to 3.7.1 and expressionParser to 1.4.0 (#4758) --- gradle/libs.versions.toml | 4 +- gradle/verification-metadata.xml | 426 ++++++------------------------- 2 files changed, 82 insertions(+), 348 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index dc0b49a18f9..b8f10ef4466 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -12,8 +12,8 @@ dagger = '2.57.2' jacoco = '0.8.14' designSystem = "0.7.0-SNAPSHOT" dhis2sdk = "1.14.0-SNAPSHOT" -ruleEngine = "3.7.0" -expressionParser = "1.3.1" +ruleEngine = "3.7.1" +expressionParser = "1.4.0" appcompat = "1.7.1" annotation = "1.9.1" cardview = "1.0.0" diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index e3ec308658d..8885c5a0dc9 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -557,18 +557,16 @@ - - - - - - - - - - + + + + + + + + + + @@ -577,12 +575,11 @@ - - - - - + + + + + @@ -635,24 +632,20 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + + + @@ -671,10 +664,9 @@ - - - + + + @@ -711,18 +703,16 @@ - - - - - - - - - - + + + + + + + + + + @@ -778,24 +768,20 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + + + @@ -857,12 +843,6 @@ - - - - - @@ -955,16 +935,6 @@ - - - - - - - - @@ -973,10 +943,9 @@ - - - + + + @@ -1035,12 +1004,6 @@ - - - - - @@ -1109,17 +1072,6 @@ - - - - - - - - @@ -1681,16 +1633,6 @@ - - - - - - - - @@ -1731,16 +1673,6 @@ - - - - - - - - @@ -13312,6 +13244,11 @@ + + + + + @@ -13336,6 +13273,14 @@ + + + + + + + + @@ -13384,6 +13329,14 @@ + + + + + + + + @@ -13941,16 +13894,6 @@ - - - - - - - - @@ -13995,16 +13938,6 @@ - - - - - - - - @@ -14141,17 +14074,6 @@ - - - - - - - - @@ -14201,17 +14123,6 @@ - - - - - - - - @@ -14300,17 +14211,6 @@ - - - - - - - - @@ -14478,12 +14378,6 @@ - - - - - @@ -14597,16 +14491,6 @@ - - - - - - - - @@ -14683,17 +14567,6 @@ - - - - - - - - @@ -14747,17 +14620,6 @@ - - - - - - - - @@ -14900,12 +14762,6 @@ - - - - - @@ -14934,16 +14790,6 @@ - - - - - - - - @@ -15291,17 +15137,6 @@ - - - - - - - - @@ -15401,16 +15236,6 @@ - - - - - - - - @@ -15471,16 +15296,6 @@ - - - - - - - - @@ -15567,16 +15382,6 @@ - - - - - - - - @@ -15708,16 +15513,6 @@ - - - - - - - - @@ -15771,16 +15566,6 @@ - - - - - - - - @@ -15832,16 +15617,6 @@ - - - - - - - - @@ -15924,17 +15699,6 @@ - - - - - - - - @@ -16070,16 +15834,6 @@ - - - - - - - - @@ -16130,16 +15884,6 @@ - - - - - - - - @@ -16181,16 +15925,6 @@ - - - - - - - - From de2cd0fff34f68bc4817f1bf7f87c33b3bcd8638 Mon Sep 17 00:00:00 2001 From: Xavier Molloy Date: Mon, 6 Apr 2026 09:52:07 +0200 Subject: [PATCH 107/114] fix: [ANDROAPP-7550] Update filters in main thread (#4783) * fix: [ANDROAPP-7495] Update filters in main thread * fix: [ANDROAPP-7495] fix tests * fix: [ANDROAPP-7495] inject dispather --- .../org/dhis2/usescases/main/MainModule.kt | 2 + .../usescases/settings/DeleteUserData.kt | 11 +++-- .../dhis2/usescases/main/MainPresenterTest.kt | 42 +++++++++---------- .../usescases/settings/DeleteUserDataTest.kt | 15 ++++++- 4 files changed, 44 insertions(+), 26 deletions(-) diff --git a/app/src/main/java/org/dhis2/usescases/main/MainModule.kt b/app/src/main/java/org/dhis2/usescases/main/MainModule.kt index 323fe43e729..7de752f9734 100644 --- a/app/src/main/java/org/dhis2/usescases/main/MainModule.kt +++ b/app/src/main/java/org/dhis2/usescases/main/MainModule.kt @@ -152,10 +152,12 @@ class MainModule( workManagerController: WorkManagerController, preferencesProvider: PreferenceProvider, filterManager: FilterManager, + dispatcherProvider: DispatcherProvider ): DeleteUserData = DeleteUserData( workManagerController, filterManager, preferencesProvider, + dispatcherProvider, ) } diff --git a/app/src/main/java/org/dhis2/usescases/settings/DeleteUserData.kt b/app/src/main/java/org/dhis2/usescases/settings/DeleteUserData.kt index 42f9f2f0762..1d8bbcf8856 100644 --- a/app/src/main/java/org/dhis2/usescases/settings/DeleteUserData.kt +++ b/app/src/main/java/org/dhis2/usescases/settings/DeleteUserData.kt @@ -1,17 +1,22 @@ package org.dhis2.usescases.settings +import kotlinx.coroutines.withContext import org.dhis2.commons.filters.FilterManager import org.dhis2.commons.prefs.PreferenceProvider +import org.dhis2.commons.viewmodel.DispatcherProvider import org.dhis2.data.service.workManager.WorkManagerController import java.io.File -class DeleteUserData( +class DeleteUserData( private val workManagerController: WorkManagerController, private val filterManager: FilterManager, private val preferencesProvider: PreferenceProvider, + private val dispatcherProvider: DispatcherProvider, ) { - fun wipeCacheAndPreferences(file: File?) { - filterManager.clearAllFilters() + suspend fun wipeCacheAndPreferences(file: File?) { + withContext(dispatcherProvider.ui()) { + filterManager.clearAllFilters() + } workManagerController.cancelAllWork() workManagerController.pruneWork() if (file != null) { diff --git a/app/src/test/java/org/dhis2/usescases/main/MainPresenterTest.kt b/app/src/test/java/org/dhis2/usescases/main/MainPresenterTest.kt index 2a717b07015..19cf71e08ef 100644 --- a/app/src/test/java/org/dhis2/usescases/main/MainPresenterTest.kt +++ b/app/src/test/java/org/dhis2/usescases/main/MainPresenterTest.kt @@ -33,12 +33,15 @@ import org.dhis2.mobile.sync.domain.SyncStatusController import org.dhis2.usescases.login.SyncIsPerformedInteractor import org.dhis2.usescases.main.domain.LogoutUser import org.dhis2.usescases.settings.DeleteUserData +import org.hisp.dhis.android.core.D2 import org.hisp.dhis.android.core.arch.helpers.DateUtils import org.hisp.dhis.android.core.category.CategoryCombo import org.hisp.dhis.android.core.category.CategoryOptionCombo import org.hisp.dhis.android.core.configuration.internal.DatabaseAccount import org.hisp.dhis.android.core.systeminfo.SystemInfo +import org.hisp.dhis.android.core.user.AccountManager import org.hisp.dhis.android.core.user.User +import org.hisp.dhis.android.core.user.UserModule import org.junit.Assert.assertTrue import org.junit.Before import org.junit.Rule @@ -81,6 +84,9 @@ class MainPresenterTest { private val forceToNotSynced: Boolean = false private val logoutUser: LogoutUser = mock() + private val accountManager: AccountManager = mock() + private val userModule: UserModule = mock() + private val d2: D2 = mock() @Rule @JvmField @@ -182,26 +188,26 @@ class MainPresenterTest { } @Test - fun `Should go to delete account`() { + fun `Should go to delete account`() = runTest { val randomFile = File("random") + whenever(view.obtainFileView()) doReturn randomFile - whenever(userManager.d2) doReturn mock() - whenever(userManager.d2.userModule()) doReturn mock() - whenever(userManager.d2.userModule().accountManager()) doReturn mock() - whenever(view.obtainFileView()) doReturn randomFile + whenever(userManager.d2) doReturn d2 + whenever(d2.userModule()) doReturn userModule + whenever(userModule.accountManager()) doReturn accountManager whenever(repository.accountsCount()) doReturn 1 presenter.onDeleteAccount() verify(view).showProgressDeleteNotification() verify(deleteUserData).wipeCacheAndPreferences(randomFile) - verify(userManager.d2?.userModule()?.accountManager())?.deleteCurrentAccount() + verify(accountManager).deleteCurrentAccount() verify(view).cancelNotifications() verify(view).goToLogin(1, true) } @Test - fun `Should go to manage account`() { + fun `Should go to manage account`() = runTest { val firstRandomUserAccount = DatabaseAccount .builder() @@ -224,25 +230,19 @@ class MainPresenterTest { val randomFile = File("random") whenever(view.obtainFileView()) doReturn randomFile - whenever(userManager.d2) doReturn mock() - whenever(userManager.d2.userModule()) doReturn mock() - whenever(userManager.d2.userModule().accountManager()) doReturn mock() - whenever( - userManager.d2 - .userModule() - .accountManager() - .getAccounts(), - ) doReturn - listOf( - firstRandomUserAccount, - secondRandomUserAccount, - ) + whenever(userManager.d2) doReturn d2 + whenever(d2.userModule()) doReturn userModule + whenever(userModule.accountManager()) doReturn accountManager + whenever(accountManager.getAccounts()) doReturn listOf( + firstRandomUserAccount, + secondRandomUserAccount, + ) whenever(repository.accountsCount()) doReturn 2 presenter.onDeleteAccount() verify(deleteUserData).wipeCacheAndPreferences(randomFile) - verify(userManager.d2?.userModule()?.accountManager())?.deleteCurrentAccount() + verify(accountManager).deleteCurrentAccount() verify(view).showProgressDeleteNotification() verify(view).cancelNotifications() verify(view).goToLogin(2, true) diff --git a/app/src/test/java/org/dhis2/usescases/settings/DeleteUserDataTest.kt b/app/src/test/java/org/dhis2/usescases/settings/DeleteUserDataTest.kt index 76e9340f115..ede8a776864 100644 --- a/app/src/test/java/org/dhis2/usescases/settings/DeleteUserDataTest.kt +++ b/app/src/test/java/org/dhis2/usescases/settings/DeleteUserDataTest.kt @@ -1,28 +1,39 @@ package org.dhis2.usescases.settings +import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.test.UnconfinedTestDispatcher +import kotlinx.coroutines.test.runTest import org.dhis2.commons.filters.FilterManager import org.dhis2.commons.prefs.PreferenceProvider +import org.dhis2.commons.viewmodel.DispatcherProvider import org.dhis2.data.service.workManager.WorkManagerController import org.junit.Before import org.junit.Test +import org.mockito.kotlin.doReturn import org.mockito.kotlin.mock import org.mockito.kotlin.verify +@OptIn(ExperimentalCoroutinesApi::class) class DeleteUserDataTest { private lateinit var deleteUserData: DeleteUserData private val workManagerController: WorkManagerController = mock() private val filterManager: FilterManager = mock() private val preferencesProvider: PreferenceProvider = mock() + private val testingDispatcher = UnconfinedTestDispatcher() + private val dispatcherProvider: DispatcherProvider = mock { + on { io() } doReturn testingDispatcher + on { ui() } doReturn testingDispatcher + } @Before fun setup() { deleteUserData = - DeleteUserData(workManagerController, filterManager, preferencesProvider) + DeleteUserData(workManagerController, filterManager, preferencesProvider, dispatcherProvider) } @Test - fun `Should delete user data`() { + fun `Should delete user data`() = runTest { deleteUserData.wipeCacheAndPreferences(null) verify(workManagerController).cancelAllWork() From e0edafb64db74c79d4afa93d8193f95f36903a26 Mon Sep 17 00:00:00 2001 From: Xavier Molloy Date: Fri, 10 Apr 2026 10:47:18 +0200 Subject: [PATCH 108/114] fix: [ANDROAPP-7550] maintain running status in syncStatusController if sync is still running (#4789) --- .../dhis2/mobile/sync/domain/SyncStatusController.kt | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/domain/SyncStatusController.kt b/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/domain/SyncStatusController.kt index 7f8db975878..273104e5424 100644 --- a/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/domain/SyncStatusController.kt +++ b/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/domain/SyncStatusController.kt @@ -121,7 +121,16 @@ class SyncStatusController { } suspend fun restore() { - downloadStatus.emit(SyncStatusData()) + if (downloadStatus.value.running == true) { + downloadStatus.emit( + SyncStatusData( + isInitialSync = true, + running = true, + ), + ) + } else { + downloadStatus.emit(SyncStatusData()) + } } suspend fun onNetworkUnavailable() { From aa1503442a9c5897fdcb14998181c60b20b85d5c Mon Sep 17 00:00:00 2001 From: Xavier Molloy Date: Fri, 10 Apr 2026 13:52:09 +0200 Subject: [PATCH 109/114] fix: [ANDROAPP-7569] change sync settings job period to one hour, sync metadata settings triggered when job is set to manual initially (#4792) --- .../mobile/sync/data/AndroidSyncBackgroundJobAction.kt | 4 ++-- .../kotlin/org/dhis2/mobile/sync/data/SyncRepository.kt | 2 +- .../kotlin/org/dhis2/mobile/sync/domain/SyncMetadata.kt | 6 +++--- .../kotlin/org/dhis2/mobile/sync/domain/SyncSettings.kt | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/AndroidSyncBackgroundJobAction.kt b/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/AndroidSyncBackgroundJobAction.kt index eb2c8ae402f..872a5f597ed 100644 --- a/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/AndroidSyncBackgroundJobAction.kt +++ b/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/AndroidSyncBackgroundJobAction.kt @@ -12,7 +12,7 @@ import kotlinx.coroutines.flow.map import org.dhis2.mobile.sync.model.SyncJobStatus import org.dhis2.mobile.sync.model.SyncStatus import java.util.concurrent.TimeUnit -import kotlin.time.Duration.Companion.days +import kotlin.time.Duration.Companion.hours const val METADATA_SYNC = "METADATA_SYNC" const val METADATA_SYNC_NOW = "METADATA_SYNC_NOW" @@ -100,7 +100,7 @@ class AndroidSyncBackgroundJobAction( PeriodicWorkRequest .Builder( workerClass = SyncSettingsWorker::class.java, - repeatInterval = 1.days.inWholeSeconds, + repeatInterval = 1.hours.inWholeSeconds, repeatIntervalTimeUnit = TimeUnit.SECONDS, ).setInitialDelay(1, TimeUnit.MINUTES) .addTag( diff --git a/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/data/SyncRepository.kt b/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/data/SyncRepository.kt index a403d6044f7..8bc887dcfd8 100644 --- a/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/data/SyncRepository.kt +++ b/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/data/SyncRepository.kt @@ -6,7 +6,7 @@ import org.dhis2.mobile.sync.model.SyncPeriod interface SyncRepository { suspend fun refreshSyncSettings(): Result - suspend fun currentMetadataSyncPeriod(): SyncPeriod + suspend fun currentMetadataSyncPeriod(): SyncPeriod? suspend fun currentDataSyncPeriod(): SyncPeriod diff --git a/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/domain/SyncMetadata.kt b/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/domain/SyncMetadata.kt index 621243a788d..728667af731 100644 --- a/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/domain/SyncMetadata.kt +++ b/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/domain/SyncMetadata.kt @@ -48,8 +48,8 @@ class SyncMetadata( } private suspend fun handleMetadataPeriodChange( - initialMetadataSyncPeriod: SyncPeriod, - finalMetadataSyncPeriod: SyncPeriod, + initialMetadataSyncPeriod: SyncPeriod?, + finalMetadataSyncPeriod: SyncPeriod?, ) { val metadataSyncPeriodChanged = initialMetadataSyncPeriod != finalMetadataSyncPeriod @@ -63,7 +63,7 @@ class SyncMetadata( } metadataSyncPeriodChanged -> { - syncBackgroundJobAction.launchMetadataSync(finalMetadataSyncPeriod.toSeconds()) + syncBackgroundJobAction.launchMetadataSync(finalMetadataSyncPeriod?.toSeconds() ?: 0L) } } } diff --git a/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/domain/SyncSettings.kt b/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/domain/SyncSettings.kt index dd97e76bb4d..5d2d4da4a76 100644 --- a/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/domain/SyncSettings.kt +++ b/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/domain/SyncSettings.kt @@ -18,11 +18,11 @@ class SyncSettings( val currentMetadataSyncPeriod = repository.currentMetadataSyncPeriod() val metadataPeriodChangedFromManual = - previousMetadataSyncPeriod is SyncPeriod.Manual && + (previousMetadataSyncPeriod is SyncPeriod.Manual || previousMetadataSyncPeriod == null) && currentMetadataSyncPeriod !is SyncPeriod.Manual if (metadataPeriodChangedFromManual) { - syncBackgroundJobAction.launchMetadataSync(currentMetadataSyncPeriod.toSeconds()) + syncBackgroundJobAction.launchMetadataSync(currentMetadataSyncPeriod?.toSeconds() ?: 0L) syncBackgroundJobAction.cancelSyncSettings() } } From d9011769cdc9f86188189e385894542076d60ae0 Mon Sep 17 00:00:00 2001 From: Pablo Date: Tue, 28 Apr 2026 09:26:19 +0200 Subject: [PATCH 110/114] fix: [ANDROAPP-7569] Workers not been properly scheduled (#4807) --- .../usescases/settings/SettingsRepository.kt | 14 ++++ .../usescases/settings/SyncManagerModule.kt | 1 + .../settings/models/DataSettingsViewModel.kt | 1 + .../models/MetadataSettingsViewModel.kt | 2 + .../settings/ui/SyncDataSettingItem.kt | 58 +++++++++++------ .../settings/ui/SyncMetadataSettingItem.kt | 64 ++++++++++++++----- .../settings/SettingsRepositoryTest.kt | 7 ++ .../settings/SyncManagerPresenterTest.kt | 3 + .../data/AndroidSyncBackgroundJobAction.kt | 44 +++++++++++-- .../mobile/sync/data/AndroidSyncRepository.kt | 8 +++ .../dhis2/mobile/sync/data/SyncDataWorker.kt | 18 ++++-- .../mobile/sync/data/SyncMetadataWorker.kt | 18 ++++-- .../mobile/sync/data/SyncSettingsWorker.kt | 18 ------ .../sync/data/SyncBackgroundJobAction.kt | 6 ++ .../dhis2/mobile/sync/data/SyncRepository.kt | 4 +- .../org/dhis2/mobile/sync/domain/SyncData.kt | 6 +- .../dhis2/mobile/sync/domain/SyncMetadata.kt | 6 +- .../dhis2/mobile/sync/domain/SyncSettings.kt | 11 ++++ 18 files changed, 215 insertions(+), 74 deletions(-) diff --git a/app/src/main/java/org/dhis2/usescases/settings/SettingsRepository.kt b/app/src/main/java/org/dhis2/usescases/settings/SettingsRepository.kt index 96f70fc217b..e3206c93de6 100644 --- a/app/src/main/java/org/dhis2/usescases/settings/SettingsRepository.kt +++ b/app/src/main/java/org/dhis2/usescases/settings/SettingsRepository.kt @@ -1,5 +1,6 @@ package org.dhis2.usescases.settings +import android.text.format.DateFormat import io.reactivex.Single import org.dhis2.BuildConfig import org.dhis2.bindings.toSeconds @@ -15,6 +16,7 @@ import org.dhis2.commons.prefs.Preference.Companion.TIME_DAILY import org.dhis2.commons.prefs.Preference.Companion.TIME_WEEKLY import org.dhis2.commons.prefs.PreferenceProvider import org.dhis2.data.service.SyncResult +import org.dhis2.mobile.sync.data.SyncBackgroundJobAction import org.dhis2.usescases.settings.models.DataSettingsViewModel import org.dhis2.usescases.settings.models.MetadataSettingsViewModel import org.dhis2.usescases.settings.models.ReservedValueSettingsViewModel @@ -29,10 +31,13 @@ import org.hisp.dhis.android.core.settings.SynchronizationSettings import org.hisp.dhis.android.core.sms.domain.interactor.ConfigCase import timber.log.Timber +private const val dateTimeFormat = "dd/MM/yyyy HH:mm" + class SettingsRepository( val d2: D2, val prefs: PreferenceProvider, val featureConfigRepository: FeatureConfigRepository, + private val syncBackgroundJobAction: SyncBackgroundJobAction, ) { private val syncSettings: SynchronizationSettings? get() = @@ -63,6 +68,9 @@ class SettingsRepository( DataSettingsViewModel( dataSyncPeriod = dataPeriod(), lastDataSync = prefs.getString(Constants.LAST_DATA_SYNC, "-")!!, + nextDataSync = syncBackgroundJobAction.getNextDataSync()?.let { + DateFormat.format(dateTimeFormat, it).toString() + }, syncHasErrors = !prefs.getBoolean(Constants.LAST_DATA_SYNC_STATUS, true), dataHasErrors = dataHasErrors(), dataHasWarnings = dataHasWarning(), @@ -80,6 +88,12 @@ class SettingsRepository( MetadataSettingsViewModel( metadataSyncPeriod = metadataPeriod(), lastMetadataSync = prefs.getString(Constants.LAST_META_SYNC, "-")!!, + nextMetadataSync = syncBackgroundJobAction.getNextMetadataSync()?.let { + DateFormat.format(dateTimeFormat, it).toString() + }, + nextSettingsSync = syncBackgroundJobAction.getNextSettingsSync()?.let { + DateFormat.format(dateTimeFormat, it).toString() + }, hasErrors = !prefs.getBoolean(Constants.LAST_META_SYNC_STATUS, true), canEdit = syncSettings?.metadataSync() == null, syncInProgress = false, diff --git a/app/src/main/java/org/dhis2/usescases/settings/SyncManagerModule.kt b/app/src/main/java/org/dhis2/usescases/settings/SyncManagerModule.kt index 61678bfba2c..c1819f82b8e 100644 --- a/app/src/main/java/org/dhis2/usescases/settings/SyncManagerModule.kt +++ b/app/src/main/java/org/dhis2/usescases/settings/SyncManagerModule.kt @@ -171,6 +171,7 @@ class SyncManagerModule( d2, preferenceProvider, featureConfigRepository, + syncBackgroundJobAction, ) @Provides diff --git a/app/src/main/java/org/dhis2/usescases/settings/models/DataSettingsViewModel.kt b/app/src/main/java/org/dhis2/usescases/settings/models/DataSettingsViewModel.kt index 2b33dc87b92..b5da929d972 100644 --- a/app/src/main/java/org/dhis2/usescases/settings/models/DataSettingsViewModel.kt +++ b/app/src/main/java/org/dhis2/usescases/settings/models/DataSettingsViewModel.kt @@ -5,6 +5,7 @@ import org.dhis2.data.service.SyncResult data class DataSettingsViewModel( val dataSyncPeriod: Int, val lastDataSync: String, + val nextDataSync: String?, val syncHasErrors: Boolean, val dataHasErrors: Boolean, val dataHasWarnings: Boolean, diff --git a/app/src/main/java/org/dhis2/usescases/settings/models/MetadataSettingsViewModel.kt b/app/src/main/java/org/dhis2/usescases/settings/models/MetadataSettingsViewModel.kt index ab89e43b8ee..ebe42e80c1e 100644 --- a/app/src/main/java/org/dhis2/usescases/settings/models/MetadataSettingsViewModel.kt +++ b/app/src/main/java/org/dhis2/usescases/settings/models/MetadataSettingsViewModel.kt @@ -3,6 +3,8 @@ package org.dhis2.usescases.settings.models data class MetadataSettingsViewModel( val metadataSyncPeriod: Int, val lastMetadataSync: String, + val nextMetadataSync: String?, + val nextSettingsSync: String?, val hasErrors: Boolean, val canEdit: Boolean, val syncInProgress: Boolean, diff --git a/app/src/main/java/org/dhis2/usescases/settings/ui/SyncDataSettingItem.kt b/app/src/main/java/org/dhis2/usescases/settings/ui/SyncDataSettingItem.kt index b1711f42252..b3851633d18 100644 --- a/app/src/main/java/org/dhis2/usescases/settings/ui/SyncDataSettingItem.kt +++ b/app/src/main/java/org/dhis2/usescases/settings/ui/SyncDataSettingItem.kt @@ -23,6 +23,7 @@ import androidx.compose.ui.semantics.semantics import androidx.compose.ui.semantics.testTag import androidx.compose.ui.text.capitalize import androidx.compose.ui.text.intl.Locale +import org.dhis2.BuildConfig import org.dhis2.R import org.dhis2.bindings.EVERY_12_HOUR import org.dhis2.bindings.EVERY_24_HOUR @@ -76,7 +77,12 @@ internal fun SyncDataSettingItem( } else -> { - provideDefaultInfoItems(dataSettings.dataSyncPeriod, dataSettings.lastDataSync, context) + provideDefaultInfoItems( + dataSettings.dataSyncPeriod, + dataSettings.lastDataSync, + dataSettings.nextDataSync, + context + ) } } @@ -95,13 +101,13 @@ internal fun SyncDataSettingItem( ) { if (dataSettings.canEdit) { var selectedItem by - remember { - mutableStateOf( - DropdownItem( - label = syncPeriodLabel(dataSettings.dataSyncPeriod, context), - ), - ) - } + remember { + mutableStateOf( + DropdownItem( + label = syncPeriodLabel(dataSettings.dataSyncPeriod, context), + ), + ) + } val dataSyncPeriods = listOf( stringResource(R.string.thirty_minutes), @@ -173,19 +179,33 @@ internal fun SyncDataSettingItem( private fun provideDefaultInfoItems( dataSyncPeriod: Int, lastDataSync: String, + nextDataSync: String?, context: Context, ): List = - listOf( - AdditionalInfoItem( - key = stringResource(R.string.settings_sync_period_v2), - value = syncPeriodLabel(dataSyncPeriod, context), - ), - AdditionalInfoItem( - key = stringResource(R.string.last_data_sync), - value = lastDataSync, - color = TextColor.OnSurface, - ), - ) + buildList { + add( + AdditionalInfoItem( + key = stringResource(R.string.settings_sync_period_v2), + value = syncPeriodLabel(dataSyncPeriod, context), + ) + ) + add( + AdditionalInfoItem( + key = stringResource(R.string.last_data_sync), + value = lastDataSync, + color = TextColor.OnSurface, + ) + ) + nextDataSync?.takeIf { BuildConfig.DEBUG }?.let { + add( + AdditionalInfoItem( + key = "Next Sync On", + value = nextDataSync, + color = TextColor.OnSurface, + ) + ) + } + } @Composable private fun provideSyncErrorInfo( diff --git a/app/src/main/java/org/dhis2/usescases/settings/ui/SyncMetadataSettingItem.kt b/app/src/main/java/org/dhis2/usescases/settings/ui/SyncMetadataSettingItem.kt index df68e65dbfe..3b983201d0b 100644 --- a/app/src/main/java/org/dhis2/usescases/settings/ui/SyncMetadataSettingItem.kt +++ b/app/src/main/java/org/dhis2/usescases/settings/ui/SyncMetadataSettingItem.kt @@ -21,6 +21,7 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.capitalize import androidx.compose.ui.text.intl.Locale import androidx.compose.ui.unit.dp +import org.dhis2.BuildConfig import org.dhis2.R import org.dhis2.bindings.EVERY_12_HOUR import org.dhis2.bindings.EVERY_24_HOUR @@ -62,6 +63,8 @@ internal fun SyncMetadataSettingItem( provideDefaultInfoItems( metadataSettings.metadataSyncPeriod, metadataSettings.lastMetadataSync, + metadataSettings.nextMetadataSync, + metadataSettings.nextSettingsSync, context, ) } @@ -93,13 +96,16 @@ internal fun SyncMetadataSettingItem( } var selectedItem by - remember { - mutableStateOf( - DropdownItem( - label = syncPeriodLabel(metadataSettings.metadataSyncPeriod, context), + remember { + mutableStateOf( + DropdownItem( + label = syncPeriodLabel( + metadataSettings.metadataSyncPeriod, + context ), - ) - } + ), + ) + } var inputSyncConfigurationState by remember { mutableStateOf(InputShellState.UNFOCUSED) } @@ -151,18 +157,42 @@ internal fun SyncMetadataSettingItem( private fun provideDefaultInfoItems( metadataSyncPeriod: Int, lastMetadataSync: String, + nextMetadataSync: String?, + nextSettingsSync: String?, context: Context, -) = listOf( - AdditionalInfoItem( - key = stringResource(R.string.settings_sync_period_v2), - value = syncPeriodLabel(metadataSyncPeriod, context), - ), - AdditionalInfoItem( - key = stringResource(R.string.last_data_sync), - value = lastMetadataSync, - color = TextColor.OnSurface, - ), -) +) = buildList { + add( + AdditionalInfoItem( + key = stringResource(R.string.settings_sync_period_v2), + value = syncPeriodLabel(metadataSyncPeriod, context), + ) + ) + add( + AdditionalInfoItem( + key = stringResource(R.string.last_data_sync), + value = lastMetadataSync, + color = TextColor.OnSurface, + ) + ) + nextMetadataSync?.takeIf { BuildConfig.DEBUG }?.let { + add( + AdditionalInfoItem( + key = "Next sync on", + value = it, + color = TextColor.OnSurface, + ) + ) + } + nextSettingsSync?.takeIf { BuildConfig.DEBUG }?.let { + add( + AdditionalInfoItem( + key = "Next settings sync on", + value = it, + color = TextColor.OnSurface, + ) + ) + } +} @Composable private fun provideHasErrorItems( diff --git a/app/src/test/java/org/dhis2/usescases/settings/SettingsRepositoryTest.kt b/app/src/test/java/org/dhis2/usescases/settings/SettingsRepositoryTest.kt index 6fc5636760c..fd3c9394c0f 100644 --- a/app/src/test/java/org/dhis2/usescases/settings/SettingsRepositoryTest.kt +++ b/app/src/test/java/org/dhis2/usescases/settings/SettingsRepositoryTest.kt @@ -19,6 +19,7 @@ import org.dhis2.commons.prefs.Preference.Companion.TIME_META import org.dhis2.commons.prefs.Preference.Companion.TIME_WEEKLY import org.dhis2.commons.prefs.PreferenceProvider import org.dhis2.data.server.UserManager +import org.dhis2.mobile.sync.data.SyncBackgroundJobAction import org.hisp.dhis.android.core.D2 import org.hisp.dhis.android.core.common.State import org.hisp.dhis.android.core.settings.DataSyncPeriod @@ -43,6 +44,11 @@ class SettingsRepositoryTest { Mockito.mock(UserManager::class.java, Mockito.RETURNS_DEEP_STUBS) private val preferencesProvider: PreferenceProvider = mock() private val featureConfigRepository: FeatureConfigRepository = mock() + private val syncBackgroundJobAction: SyncBackgroundJobAction = mock { + on { getNextSettingsSync() } doReturn null + on { getNextMetadataSync() } doReturn null + on { getNextDataSync() } doReturn null + } private val smsConfig: ConfigCase.SmsConfig = mock { on { isModuleEnabled } doReturn true @@ -63,6 +69,7 @@ class SettingsRepositoryTest { d2, preferencesProvider, featureConfigRepository, + syncBackgroundJobAction, ) configurePreferences() configureDataCount() diff --git a/app/src/test/java/org/dhis2/usescases/settings/SyncManagerPresenterTest.kt b/app/src/test/java/org/dhis2/usescases/settings/SyncManagerPresenterTest.kt index 21c59026565..7fe223dfad8 100644 --- a/app/src/test/java/org/dhis2/usescases/settings/SyncManagerPresenterTest.kt +++ b/app/src/test/java/org/dhis2/usescases/settings/SyncManagerPresenterTest.kt @@ -129,6 +129,8 @@ class SyncManagerPresenterTest { MetadataSettingsViewModel( metadataSyncPeriod = 100, lastMetadataSync = "test", + nextMetadataSync = null, + nextSettingsSync = null, hasErrors = false, canEdit = false, syncInProgress = false, @@ -138,6 +140,7 @@ class SyncManagerPresenterTest { DataSettingsViewModel( dataSyncPeriod = 100, lastDataSync = "test", + nextDataSync = null, syncHasErrors = false, dataHasErrors = false, dataHasWarnings = false, diff --git a/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/AndroidSyncBackgroundJobAction.kt b/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/AndroidSyncBackgroundJobAction.kt index 872a5f597ed..14f3092d944 100644 --- a/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/AndroidSyncBackgroundJobAction.kt +++ b/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/AndroidSyncBackgroundJobAction.kt @@ -8,12 +8,14 @@ import androidx.work.WorkInfo import androidx.work.WorkManager import androidx.work.WorkQuery import androidx.work.await +import androidx.work.workDataOf import kotlinx.coroutines.flow.map import org.dhis2.mobile.sync.model.SyncJobStatus import org.dhis2.mobile.sync.model.SyncStatus import java.util.concurrent.TimeUnit import kotlin.time.Duration.Companion.hours +const val IS_PERIODIC = "IS_PERIODIC" const val METADATA_SYNC = "METADATA_SYNC" const val METADATA_SYNC_NOW = "METADATA_SYNC_NOW" const val DATA_SYNC = "DATA_SYNC" @@ -49,11 +51,12 @@ class AndroidSyncBackgroundJobAction( ).setInitialDelay( syncingPeriod, TimeUnit.SECONDS, - ).build() + ).setInputData(workDataOf(IS_PERIODIC to true)) + .build() workManager.enqueueUniquePeriodicWork( uniqueWorkName = METADATA_SYNC, - existingPeriodicWorkPolicy = ExistingPeriodicWorkPolicy.CANCEL_AND_REENQUEUE, + existingPeriodicWorkPolicy = ExistingPeriodicWorkPolicy.UPDATE, request = request, ) } @@ -85,11 +88,12 @@ class AndroidSyncBackgroundJobAction( ).setInitialDelay( syncingPeriod, TimeUnit.SECONDS, - ).build() + ).setInputData(workDataOf(IS_PERIODIC to true)) + .build() workManager.enqueueUniquePeriodicWork( uniqueWorkName = DATA_SYNC, - existingPeriodicWorkPolicy = ExistingPeriodicWorkPolicy.CANCEL_AND_REENQUEUE, + existingPeriodicWorkPolicy = ExistingPeriodicWorkPolicy.UPDATE, request = request, ) } @@ -102,14 +106,16 @@ class AndroidSyncBackgroundJobAction( workerClass = SyncSettingsWorker::class.java, repeatInterval = 1.hours.inWholeSeconds, repeatIntervalTimeUnit = TimeUnit.SECONDS, - ).setInitialDelay(1, TimeUnit.MINUTES) - .addTag( + ).setInitialDelay( + 1, + TimeUnit.HOURS, + ).addTag( SYNC_SETTINGS, ).build() workManager.enqueueUniquePeriodicWork( SYNC_SETTINGS, - ExistingPeriodicWorkPolicy.CANCEL_AND_REENQUEUE, + ExistingPeriodicWorkPolicy.UPDATE, request, ) } @@ -139,6 +145,30 @@ class AndroidSyncBackgroundJobAction( } } + override fun getNextMetadataSync() = + workManager + .getWorkInfosForUniqueWork(METADATA_SYNC) + .get() + .firstOrNull() + ?.takeIf { it.state == WorkInfo.State.ENQUEUED } + ?.nextScheduleTimeMillis + + override fun getNextDataSync() = + workManager + .getWorkInfosForUniqueWork(DATA_SYNC) + .get() + .firstOrNull() + ?.takeIf { it.state == WorkInfo.State.ENQUEUED } + ?.nextScheduleTimeMillis + + override fun getNextSettingsSync(): Long? = + workManager + .getWorkInfosForUniqueWork(SYNC_SETTINGS) + .get() + .firstOrNull() + ?.takeIf { it.state == WorkInfo.State.ENQUEUED } + ?.nextScheduleTimeMillis + override fun observeDataJob() = workManager .getWorkInfosFlow( diff --git a/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/AndroidSyncRepository.kt b/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/AndroidSyncRepository.kt index dc77ae328f5..b45c9842a22 100644 --- a/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/AndroidSyncRepository.kt +++ b/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/AndroidSyncRepository.kt @@ -185,6 +185,14 @@ class AndroidSyncRepository( Result.success(uids) } + override suspend fun saveDataSyncError(stackTrace: String) { + d2 + .dataStoreModule() + .localDataStore() + .value("DATASYNCERROR") + .blockingSet(stackTrace) + } + private suspend fun syncResult(): SyncResult { val eventsOk = d2 diff --git a/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/SyncDataWorker.kt b/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/SyncDataWorker.kt index 0d828dc9548..1c45e0d1bbf 100644 --- a/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/SyncDataWorker.kt +++ b/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/SyncDataWorker.kt @@ -20,12 +20,18 @@ class SyncDataWorker( private val syncData: SyncData, private val notificationManager: NotificationManager, ) : CoroutineWorker(context, workerParams) { + private lateinit var notificationTitle: String + private lateinit var notificationText: String + override suspend fun doWork(): Result { - setForegroundAsync(getForegroundInfo()) + val isPeriodic = inputData.getBoolean(IS_PERIODIC, false) - val notificationTitle = getString(Res.string.app_name) - val notificationText = getString(Res.string.syncing_data) + if (!isPeriodic) { + setForeground(getForegroundInfo()) + } + notificationTitle = getString(Res.string.app_name) + notificationText = getString(Res.string.syncing_data) notificationManager.displayDataSyncNotification( smallIcon = R.drawable.ic_sync, contentTitle = notificationTitle, @@ -52,7 +58,11 @@ class SyncDataWorker( progress = progressData.progress?.toInt() ?: -1, ) } - notificationManager.cancelDataSyncNotification() + + if (!isPeriodic) { + notificationManager.cancelDataSyncNotification() + } + return when { result.isSuccess -> Result.success() else -> Result.failure() diff --git a/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/SyncMetadataWorker.kt b/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/SyncMetadataWorker.kt index 07edcda20ae..d6fc7f871e9 100644 --- a/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/SyncMetadataWorker.kt +++ b/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/SyncMetadataWorker.kt @@ -22,11 +22,18 @@ class SyncMetadataWorker( private val syncMetadata: SyncMetadata, private val notificationManager: NotificationManager, ) : CoroutineWorker(context, workerParams) { + private lateinit var notificationTitle: String + private lateinit var notificationText: String + + private val isPeriodic by lazy { inputData.getBoolean(IS_PERIODIC, false) } + override suspend fun doWork(): Result { - setForegroundAsync(getForegroundInfo()) + if (!isPeriodic) { + setForeground(getForegroundInfo()) + } - val notificationTitle = getString(Res.string.app_name) - val notificationText = getString(Res.string.syncing_configuration) + notificationTitle = getString(Res.string.app_name) + notificationText = getString(Res.string.syncing_configuration) notificationManager.displayMetadataSyncNotification( smallIcon = R.drawable.ic_sync, @@ -45,7 +52,10 @@ class SyncMetadataWorker( ) } - notificationManager.cancelMetadataSyncNotification() + if (!isPeriodic) { + notificationManager.cancelMetadataSyncNotification() + } + return when { result.isSuccess -> Result.success() else -> diff --git a/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/SyncSettingsWorker.kt b/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/SyncSettingsWorker.kt index 4f4a897fcea..e7ac7f2f1bd 100644 --- a/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/SyncSettingsWorker.kt +++ b/sync/src/androidMain/kotlin/org/dhis2/mobile/sync/data/SyncSettingsWorker.kt @@ -2,11 +2,9 @@ package org.dhis2.mobile.sync.data import android.content.Context import androidx.work.CoroutineWorker -import androidx.work.ForegroundInfo import androidx.work.WorkerParameters import org.dhis2.mobile.commons.domain.invoke import org.dhis2.mobile.commons.notifications.NotificationManager -import org.dhis2.mobile.commons.notifications.WorkerNotificationInfo import org.dhis2.mobile.sync.R import org.dhis2.mobile.sync.domain.SyncSettings import org.dhis2.mobile.sync.resources.Res @@ -21,7 +19,6 @@ class SyncSettingsWorker( private val notificationManager: NotificationManager, ) : CoroutineWorker(context, workerParams) { override suspend fun doWork(): Result { - setForegroundAsync(getForegroundInfo()) notificationManager.displaySyncSettingsNotification( smallIcon = R.drawable.ic_sync, contentTitle = getString(Res.string.app_name), @@ -34,19 +31,4 @@ class SyncSettingsWorker( else -> Result.failure() } } - - override suspend fun getForegroundInfo(): ForegroundInfo { - val notificationModel = - notificationManager.getSyncSettingsNotificationModel( - smallIcon = R.drawable.ic_sync, - contentTitle = getString(Res.string.app_name), - contentText = getString(Res.string.syncing_settings), - ) - val notificationInfo = - notificationModel as? WorkerNotificationInfo - ?: throw IllegalStateException( - "Expected WorkerNotificationInfo but got ${notificationModel::class.qualifiedName}", - ) - return notificationInfo.foregroundInfo - } } diff --git a/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/data/SyncBackgroundJobAction.kt b/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/data/SyncBackgroundJobAction.kt index 74c15de185a..3e9f8adc8ff 100644 --- a/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/data/SyncBackgroundJobAction.kt +++ b/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/data/SyncBackgroundJobAction.kt @@ -21,4 +21,10 @@ interface SyncBackgroundJobAction { suspend fun cancelDataSync() suspend fun cancelAll() + + fun getNextMetadataSync(): Long? + + fun getNextDataSync(): Long? + + fun getNextSettingsSync(): Long? } diff --git a/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/data/SyncRepository.kt b/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/data/SyncRepository.kt index 8bc887dcfd8..e83819b2c8e 100644 --- a/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/data/SyncRepository.kt +++ b/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/data/SyncRepository.kt @@ -8,7 +8,7 @@ interface SyncRepository { suspend fun currentMetadataSyncPeriod(): SyncPeriod? - suspend fun currentDataSyncPeriod(): SyncPeriod + suspend fun currentDataSyncPeriod(): SyncPeriod? suspend fun syncMetadata(onProgressUpdate: (Int) -> Unit): Result @@ -47,4 +47,6 @@ interface SyncRepository { suspend fun getAllTrackerPrograms(): Result> suspend fun getAllDataSets(): Result> + + suspend fun saveDataSyncError(stackTrace: String) } diff --git a/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/domain/SyncData.kt b/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/domain/SyncData.kt index d01f2af3031..82ada6462a8 100644 --- a/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/domain/SyncData.kt +++ b/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/domain/SyncData.kt @@ -75,12 +75,16 @@ class SyncData( repository.saveDataSyncState(isSuccess) - syncStatusController.finishSync() Result.success(Unit) } catch (domainError: DomainError) { if (domainError is DomainError.NetworkError) { syncStatusController.onNetworkUnavailable() } Result.failure(domainError) + } catch (e: Exception) { + repository.saveDataSyncError(e.stackTraceToString()) + Result.failure(e) + } finally { + syncStatusController.finishSync() } } diff --git a/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/domain/SyncMetadata.kt b/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/domain/SyncMetadata.kt index 728667af731..bd4ccd968f1 100644 --- a/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/domain/SyncMetadata.kt +++ b/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/domain/SyncMetadata.kt @@ -69,8 +69,8 @@ class SyncMetadata( } private suspend fun handleDataPeriodChange( - initialDataSyncPeriod: SyncPeriod, - finalDataSyncPeriod: SyncPeriod, + initialDataSyncPeriod: SyncPeriod?, + finalDataSyncPeriod: SyncPeriod?, ) { val dataSyncPeriodChanged = initialDataSyncPeriod != finalDataSyncPeriod val dataSyncPeriodChangedToManual = @@ -82,7 +82,7 @@ class SyncMetadata( } dataSyncPeriodChanged -> { - syncBackgroundJobAction.launchDataSync(finalDataSyncPeriod.toSeconds()) + syncBackgroundJobAction.launchDataSync(finalDataSyncPeriod?.toSeconds() ?: 0) } } } diff --git a/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/domain/SyncSettings.kt b/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/domain/SyncSettings.kt index 5d2d4da4a76..7ddf2666f1f 100644 --- a/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/domain/SyncSettings.kt +++ b/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/domain/SyncSettings.kt @@ -13,9 +13,20 @@ class SyncSettings( override suspend fun invoke(input: Unit): Result = try { val previousMetadataSyncPeriod = repository.currentMetadataSyncPeriod() + val previousDataSyncPeriod = repository.currentDataSyncPeriod() + val result = repository.refreshSyncSettings() if (result.isSuccess) { val currentMetadataSyncPeriod = repository.currentMetadataSyncPeriod() + val currentDataSyncPeriod = repository.currentDataSyncPeriod() + + val dataPeriodChangedFromManual = + (previousDataSyncPeriod is SyncPeriod.Manual || previousDataSyncPeriod == null) && + currentDataSyncPeriod !is SyncPeriod.Manual + + if (dataPeriodChangedFromManual) { + syncBackgroundJobAction.launchDataSync(currentDataSyncPeriod?.toSeconds() ?: 0L) + } val metadataPeriodChangedFromManual = (previousMetadataSyncPeriod is SyncPeriod.Manual || previousMetadataSyncPeriod == null) && From 20ebb7f210cfd540834f0524b94dba071cf82d74 Mon Sep 17 00:00:00 2001 From: "@dhis2-bot" Date: Tue, 28 Apr 2026 12:37:33 +0200 Subject: [PATCH 111/114] fix(translations): sync translations from transifex (main) (#4833) --- sync/src/commonMain/composeResources/values-cnr/strings.xml | 5 +++++ sync/src/commonMain/composeResources/values-de/strings.xml | 5 +++++ sync/src/commonMain/composeResources/values-el/strings.xml | 5 +++++ sync/src/commonMain/composeResources/values-ga/strings.xml | 5 +++++ sync/src/commonMain/composeResources/values-hr/strings.xml | 5 +++++ sync/src/commonMain/composeResources/values-lb/strings.xml | 5 +++++ sync/src/commonMain/composeResources/values-mt/strings.xml | 5 +++++ 7 files changed, 35 insertions(+) create mode 100644 sync/src/commonMain/composeResources/values-cnr/strings.xml create mode 100644 sync/src/commonMain/composeResources/values-de/strings.xml create mode 100644 sync/src/commonMain/composeResources/values-el/strings.xml create mode 100644 sync/src/commonMain/composeResources/values-ga/strings.xml create mode 100644 sync/src/commonMain/composeResources/values-hr/strings.xml create mode 100644 sync/src/commonMain/composeResources/values-lb/strings.xml create mode 100644 sync/src/commonMain/composeResources/values-mt/strings.xml diff --git a/sync/src/commonMain/composeResources/values-cnr/strings.xml b/sync/src/commonMain/composeResources/values-cnr/strings.xml new file mode 100644 index 00000000000..4c1c46011bd --- /dev/null +++ b/sync/src/commonMain/composeResources/values-cnr/strings.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/sync/src/commonMain/composeResources/values-de/strings.xml b/sync/src/commonMain/composeResources/values-de/strings.xml new file mode 100644 index 00000000000..4c1c46011bd --- /dev/null +++ b/sync/src/commonMain/composeResources/values-de/strings.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/sync/src/commonMain/composeResources/values-el/strings.xml b/sync/src/commonMain/composeResources/values-el/strings.xml new file mode 100644 index 00000000000..4c1c46011bd --- /dev/null +++ b/sync/src/commonMain/composeResources/values-el/strings.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/sync/src/commonMain/composeResources/values-ga/strings.xml b/sync/src/commonMain/composeResources/values-ga/strings.xml new file mode 100644 index 00000000000..4c1c46011bd --- /dev/null +++ b/sync/src/commonMain/composeResources/values-ga/strings.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/sync/src/commonMain/composeResources/values-hr/strings.xml b/sync/src/commonMain/composeResources/values-hr/strings.xml new file mode 100644 index 00000000000..4c1c46011bd --- /dev/null +++ b/sync/src/commonMain/composeResources/values-hr/strings.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/sync/src/commonMain/composeResources/values-lb/strings.xml b/sync/src/commonMain/composeResources/values-lb/strings.xml new file mode 100644 index 00000000000..4c1c46011bd --- /dev/null +++ b/sync/src/commonMain/composeResources/values-lb/strings.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/sync/src/commonMain/composeResources/values-mt/strings.xml b/sync/src/commonMain/composeResources/values-mt/strings.xml new file mode 100644 index 00000000000..4c1c46011bd --- /dev/null +++ b/sync/src/commonMain/composeResources/values-mt/strings.xml @@ -0,0 +1,5 @@ + + + + + From 94f889d420316fbd1a8b3ded0f871af53261bc6c Mon Sep 17 00:00:00 2001 From: Pablo Date: Tue, 28 Apr 2026 15:02:43 +0200 Subject: [PATCH 112/114] fix: [ANDROAPP-7569] Set default sync periods if ASWA is not configured (#4835) * fix: [ANDROAPP-7569] Set default sync periods if ASWA is not configured * fix: [ANDROAPP-7569] Set default sync periods if ASWA is not configured --- .../dhis2/mobile/sync/domain/SyncMetadata.kt | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/domain/SyncMetadata.kt b/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/domain/SyncMetadata.kt index bd4ccd968f1..8fa0645a988 100644 --- a/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/domain/SyncMetadata.kt +++ b/sync/src/commonMain/kotlin/org/dhis2/mobile/sync/domain/SyncMetadata.kt @@ -56,14 +56,19 @@ class SyncMetadata( val metadataSyncPeriodChangedToManual = initialMetadataSyncPeriod !is SyncPeriod.Manual && finalMetadataSyncPeriod is SyncPeriod.Manual + val notScheduled = + syncBackgroundJobAction.getNextMetadataSync() == null && finalMetadataSyncPeriod !is SyncPeriod.Manual + when { metadataSyncPeriodChangedToManual -> { syncBackgroundJobAction.cancelMetadataSync() syncBackgroundJobAction.launchSyncSettings() } - metadataSyncPeriodChanged -> { - syncBackgroundJobAction.launchMetadataSync(finalMetadataSyncPeriod?.toSeconds() ?: 0L) + metadataSyncPeriodChanged || notScheduled -> { + syncBackgroundJobAction.launchMetadataSync( + finalMetadataSyncPeriod?.toSeconds() ?: SyncPeriod.Every7Days.toSeconds(), + ) } } } @@ -76,13 +81,18 @@ class SyncMetadata( val dataSyncPeriodChangedToManual = initialDataSyncPeriod !is SyncPeriod.Manual && finalDataSyncPeriod is SyncPeriod.Manual + val notScheduled = + syncBackgroundJobAction.getNextDataSync() == null && finalDataSyncPeriod !is SyncPeriod.Manual + when { dataSyncPeriodChangedToManual -> { syncBackgroundJobAction.cancelDataSync() } - dataSyncPeriodChanged -> { - syncBackgroundJobAction.launchDataSync(finalDataSyncPeriod?.toSeconds() ?: 0) + dataSyncPeriodChanged || notScheduled -> { + syncBackgroundJobAction.launchDataSync( + finalDataSyncPeriod?.toSeconds() ?: SyncPeriod.Every24Hour.toSeconds(), + ) } } } From ac5fd7d422ebedc939b8e0360ee42f0d320d9fc5 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Fri, 1 May 2026 09:45:57 +0200 Subject: [PATCH 113/114] Update Sdk, Design System, and Version Code (#4845) * Update version code, sdk, and design system release version * build: 3.4.0 release --------- Co-authored-by: @dhis2-bot Co-authored-by: andresmr --- RELEASE.md | 79 +++++++++++++------------------- gradle/libs.versions.toml | 6 +-- gradle/verification-metadata.xml | 27 +++++++++++ whatsnew/whatsnew-en-US | 17 ++++--- 4 files changed, 71 insertions(+), 58 deletions(-) diff --git a/RELEASE.md b/RELEASE.md index ed20a609629..b566936cbc9 100644 --- a/RELEASE.md +++ b/RELEASE.md @@ -1,75 +1,58 @@ -# Release notes - Android App for DHIS2 - 3.3.1 +# Release notes - Android App for DHIS2 - 3.4.0 -### Bug +### NEW FUNCTIONALITY AND WEB PARITY -[ANDROAPP-6870](https://dhis2.atlassian.net/browse/ANDROAPP-6870) Let the rule-engine apply the logic for useCodeForOptionSet in RuleVariable +#### Tracked Entity Search Performance Configuration: +This feature enables the configuration of the search operators for the different Tracked Entity Attributes to improve search performance. -[ANDROAPP-6975](https://dhis2.atlassian.net/browse/ANDROAPP-6975) Crash when rotating the device with the save dialog open +Tracked entity attributes can now define a preferred default search operator. This configuration is set in the Maintenance app and interpreted by the Capture Web and Android applications, third party clients can also use the recommended operator when performing searches. Specific operators can also be restricted to protect system performance. -[ANDROAPP-7211](https://dhis2.atlassian.net/browse/ANDROAPP-7211) NoSuchElementException: Collection contains no element matching the predicate. +Sensible defaults are automatically applied to guide efficient queries. The LIKE operator—commonly associated with slow performance—is no longer selected by default; instead, EQUALS or other more efficient operators are pre-selected -[ANDROAPP-7235](https://dhis2.atlassian.net/browse/ANDROAPP-7235) Program rules not triggered when moving between fields manually +To further optimize tracked entity instance (TEI) searches, this feature adds support for specifying a minimum number of characters required for searching and for enabling trigram indexing. -[ANDROAPP-7260](https://dhis2.atlassian.net/browse/ANDROAPP-7260) Incorrect behavior when creating a new event in timeline view +[Jira](https://dhis2.atlassian.net/browse/ROADMAP-128) | [Feature card](https://s3.eu-west-1.amazonaws.com/content.dhis2.org/releases/screenshots/43/feature-cards/43-search-performance-operators-combo.png) -[ANDROAPP-7261](https://dhis2.atlassian.net/browse/ANDROAPP-7261) Keyboard blocks the last field when entering data \(screen doesn’t scroll\) -[ANDROAPP-7269](https://dhis2.atlassian.net/browse/ANDROAPP-7269) Crash on search +#### DHIS2 Custom Theme: +DHIS2 version 43 now supports changing the theme color of your DHIS2 instance. This is done via the theme color setting under the Appearance tab in the Settings app. The color picker has a curated set of preset colors to choose from, or the user can enter a specific RGB value. The selected color is applied consistently across the headerbar on the entire instance, as well as on the Android app. A contrast algorithm automatically adjusts the text and icon color to maintain legibility against the selected background. Removing the color reverts the instance to the default blue color. The android style setting is restricted to v42 and below. -[ANDROAPP-7293](https://dhis2.atlassian.net/browse/ANDROAPP-7293) Bottom sheet landscape behavior +[Jira](https://dhis2.atlassian.net/browse/ROADMAP-622) | [Feature card](https://s3.eu-west-1.amazonaws.com/content.dhis2.org/releases/screenshots/43/feature-cards/43-custom-color-combo-new.png) -[ANDROAPP-7345](https://dhis2.atlassian.net/browse/ANDROAPP-7345) Changes to enrollment date not respected by program rules \(version 3.2.1.2\) +#### Markdown and legend support in Android Feedback Widget: +Feedback messages generated through display text and key-value pair actions can now include formatted text using Markdown, enabling the display of structured content such as titles, lists, and emphasized text. -[ANDROAPP-7368](https://dhis2.atlassian.net/browse/ANDROAPP-7368) crash: when trying to update fields in Tracker +In addition, support for legend-based styling has been introduced, allowing feedback values to be visually highlighted based on predefined legend sets. This enables dynamic color-coding of key values, helping users quickly interpret results and identify important conditions. -[ANDROAPP-7394](https://dhis2.atlassian.net/browse/ANDROAPP-7394) Login blocked after logout “The user is already logged in” error +[Jira]() | [Feature card]() -[ANDROAPP-7400](https://dhis2.atlassian.net/browse/ANDROAPP-7400) Crash - changing org unit and dates +#### Program rule priority for Actions: +Each program rule action can define an optional priority value. During rule evaluation, actions are first grouped based on their parent program rule, and then ordered by the611ir assigned priority. Actions with lower priority values are processed first, while actions without a defined priority are placed at the end. -[ANDROAPP-7402](https://dhis2.atlassian.net/browse/ANDROAPP-7402) Bottom sheet org unit not displaying buttons +This allows multiple related actions to be managed within a single program rule while still maintaining a clear and predictable execution order. -[ANDROAPP-7403](https://dhis2.atlassian.net/browse/ANDROAPP-7403) Home cards lose proper layout +[Jira](https://dhis2.atlassian.net/browse/ROADMAP-625) | [Feature card](https://s3.eu-west-1.amazonaws.com/content.dhis2.org/releases/screenshots/43/feature-cards/43-action-priority.png) -[ANDROAPP-7411](https://dhis2.atlassian.net/browse/ANDROAPP-7411) Android sync by working lists: After updating predefined list views settings, changes aren't reflected in android app after syncing -[ANDROAPP-7415](https://dhis2.atlassian.net/browse/ANDROAPP-7415) Android: WORKING LIST incorrect result in app +### USER EXPERIENCE -[ANDROAPP-7419](https://dhis2.atlassian.net/browse/ANDROAPP-7419) Server selection title is missing +#### Android Log In process improvements: +The new PIN design provides a more modern and consistent user experience during setup. This change is part of the broader work to improve authentication related screens and prepare the foundation for future enhancements -[ANDROAPP-7421](https://dhis2.atlassian.net/browse/ANDROAPP-7421) Data set table not opening after clicking next for default category combo +[Jira](https://dhis2.atlassian.net/browse/ROADMAP-618) | [Feature card](https://s3.eu-west-1.amazonaws.com/content.dhis2.org/releases/screenshots/43/feature-cards/Android-3-4-PIN-redesign-new.png) -[ANDROAPP-7425](https://dhis2.atlassian.net/browse/ANDROAPP-7425) NullPointerException: ProgramFragment +### PERFORMANCE & MAINTENANCE -[ANDROAPP-7428](https://dhis2.atlassian.net/browse/ANDROAPP-7428) LMIS program is using completed enrollment +#### Android Metadata Sync Improvements +Metadata synchronization has been enhanced with more frequency options. In addition to existing intervals, automatic metadata sync can now run every 6 or 12 hours, allowing for more timely updates and better alignment with data sync behavior. -[ANDROAPP-7442](https://dhis2.atlassian.net/browse/ANDROAPP-7442) Program rules not triggering for completed enrollments +As part of the improvements, the app also performs a daily background check to detect any changes in the configuration when the sync is set to "Manual". If a change is detected from manual to an automatic sync frequency, an immediate metadata sync is triggered and the corresponding schedule is applied. -### Task +[Jira](https://dhis2.atlassian.net/browse/ROADMAP-617) | [Feature card](https://s3.eu-west-1.amazonaws.com/content.dhis2.org/releases/screenshots/43/feature-cards/Android-3-4-new-sync-periods-new.png) -[ANDROAPP-7286](https://dhis2.atlassian.net/browse/ANDROAPP-7286) Replace deprecated categoryComboUid usages with categoryCombo in Program and DataElement +#### Improved Event ordering for consistent sync and calculations: +With this update, event ordering has been aligned across Web, Android, and API sources, allowing events to be processed in the correct sequence during synchronization and improving overall data consistency and reliability. -[ANDROAPP-7288](https://dhis2.atlassian.net/browse/ANDROAPP-7288) Implement UseCase interface +[Jira](https://dhis2.atlassian.net/browse/ROADMAP-619) | [Feature card](https://s3.eu-west-1.amazonaws.com/content.dhis2.org/releases/screenshots/43/feature-cards/43-stock-management-lmis.png) -[ANDROAPP-7318](https://dhis2.atlassian.net/browse/ANDROAPP-7318) Create AGENTS.md file -[ANDROAPP-7349](https://dhis2.atlassian.net/browse/ANDROAPP-7349) Sonarcloud - Use full commit SHA hash for this dependency. - -[ANDROAPP-7373](https://dhis2.atlassian.net/browse/ANDROAPP-7373) LogoutUser use case improvements - -[ANDROAPP-7384](https://dhis2.atlassian.net/browse/ANDROAPP-7384) Update transifex tracker configuration - -[ANDROAPP-7386](https://dhis2.atlassian.net/browse/ANDROAPP-7386) QA: Remove duplicated UI modules - -[ANDROAPP-7388](https://dhis2.atlassian.net/browse/ANDROAPP-7388) Create sync module - -[ANDROAPP-7395](https://dhis2.atlassian.net/browse/ANDROAPP-7395) Review settings repository data loading for log out request - -[ANDROAPP-7396](https://dhis2.atlassian.net/browse/ANDROAPP-7396) Remove and update usage to design systems' deprecated methods - -[ANDROAPP-7424](https://dhis2.atlassian.net/browse/ANDROAPP-7424) Gradle warnings: Remove RX binding dependency and zxing dependency - -[ANDROAPP-7426](https://dhis2.atlassian.net/browse/ANDROAPP-7426) Upload proguard mapping on Sentry - -[ANDROAPP-7440](https://dhis2.atlassian.net/browse/ANDROAPP-7440) Update Expression parser to 1.2.2 - -[ANDROAPP-7441](https://dhis2.atlassian.net/browse/ANDROAPP-7441) Remove username from Sentry reports \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index b8f10ef4466..7d0c322f3a7 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -4,14 +4,14 @@ lifecycleRuntimeCompose = "2.9.6" navigationCompose = "2.9.2" sdk = "36" minSdk = "23" -vCode = "151" +vCode = "152" vName = "3.4.0-RC" gradle = "9.0.1" kotlin = '2.3.10' dagger = '2.57.2' jacoco = '0.8.14' -designSystem = "0.7.0-SNAPSHOT" -dhis2sdk = "1.14.0-SNAPSHOT" +designSystem = "0.7.0" +dhis2sdk = "1.14.0" ruleEngine = "3.7.1" expressionParser = "1.4.0" appcompat = "1.7.1" diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index 8885c5a0dc9..8c706fd18e5 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -792,6 +792,11 @@ + + + + + @@ -1240,6 +1245,9 @@ + + + @@ -1279,6 +1287,9 @@ + + + @@ -13281,6 +13292,22 @@ + + + + + + + + + + + + + + + + diff --git a/whatsnew/whatsnew-en-US b/whatsnew/whatsnew-en-US index 9e29dc675af..0be924354d9 100644 --- a/whatsnew/whatsnew-en-US +++ b/whatsnew/whatsnew-en-US @@ -1,7 +1,10 @@ -This is a patch version that fixes: -- ANDROAPP-7269 Crash on search -- ANDROAPP-7293 Bottom sheet landscape behavior -- ANDROAPP-7345 Changes to enrollment date not respected by program rules -- ANDROAPP-7368 Crash when trying to update fields in Tracker -.... -You can find all the details on Jira and Github. \ No newline at end of file +Version 3.4.0 includes: +- Search performance: configure operators and min characters for TEI searches +- Custom theme: DHIS2 instance color reflected in the Android app +- Feedback widget: Markdown formatting and legend-based color coding +- Program rule action priority ordering +- Redesigned PIN login screen +- Metadata sync: new 6h and 12h intervals with daily config detection +- Improved event ordering for consistent sync and calculations + +Details: github.com/dhis2/dhis2-android-capture-app \ No newline at end of file From 315eb8d4f80ca8df5d56bb7fcb44b84f02d2204f Mon Sep 17 00:00:00 2001 From: andresmr Date: Fri, 1 May 2026 10:01:44 +0200 Subject: [PATCH 114/114] build: update release 3.4.0 with main --- .../values-hi-rIN/strings.xml | 6 -- .../src/main/res/values-en-rUS/strings.xml | 19 +----- gradle/verification-metadata.xml | 64 +++++++++++++++++++ 3 files changed, 65 insertions(+), 24 deletions(-) diff --git a/commonskmm/src/commonMain/composeResources/values-hi-rIN/strings.xml b/commonskmm/src/commonMain/composeResources/values-hi-rIN/strings.xml index 4d2094cda8d..ce60d43e806 100644 --- a/commonskmm/src/commonMain/composeResources/values-hi-rIN/strings.xml +++ b/commonskmm/src/commonMain/composeResources/values-hi-rIN/strings.xml @@ -17,12 +17,6 @@ यह फ़ील्ड आवश्यक है आपके पास कुछ चेतावनी संदेश हैं आपके पास कुछ चेतावनी संदेश हैं\nक्या आप इस फ़ॉर्म को कम्प्लीट मार्क करना चाहते हैं\? - मान अद्वितीय होना चाहिए। समान मान मिला है। इसे सहेजा नहीं गया। कृपया जाँच करें - समय चुनें - दिन चुनें - यह फ़ील्ड आवश्यक है - आपके पास कुछ चेतावनी संदेश हैं - आपके पास कुछ चेतावनी संदेश हैं\nक्या आप इस फ़ॉर्म को कम्प्लीट मार्क करना चाहते हैं\? आवश्यकता है तारीख वर्ष diff --git a/dhis_android_analytics/src/main/res/values-en-rUS/strings.xml b/dhis_android_analytics/src/main/res/values-en-rUS/strings.xml index c05e9dbeb70..a508bacacfb 100644 --- a/dhis_android_analytics/src/main/res/values-en-rUS/strings.xml +++ b/dhis_android_analytics/src/main/res/values-en-rUS/strings.xml @@ -1,21 +1,4 @@ -<<<<<<<< HEAD:dhis_android_analytics/src/main/res/values-en-rUS/strings.xml Accept -======== - Завершити - Відхилити внесені зміни - Не зараз - Продовжити редагування - Перегляд - Скасувати - Зберегти - Очистити - Намалюй тут. - Обрати - Скасувати - Закрити - Пошук - Очистити все ->>>>>>>> main:ui-components/src/main/res/values-uk/strings.xml - \ No newline at end of file + diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml index 8c706fd18e5..db26ac8ac9b 100644 --- a/gradle/verification-metadata.xml +++ b/gradle/verification-metadata.xml @@ -6738,6 +6738,14 @@ + + + + + + + + @@ -7490,6 +7498,14 @@ + + + + + + + + @@ -7506,6 +7522,14 @@ + + + + + + + + @@ -7522,6 +7546,14 @@ + + + + + + + + @@ -7570,6 +7602,14 @@ + + + + + + + + @@ -7586,6 +7626,14 @@ + + + + + + + + @@ -7602,6 +7650,14 @@ + + + + + + + + @@ -7618,6 +7674,14 @@ + + + + + + + +

  • yi6%RWC{f=V3hI>cfG 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