From e050c22c882723083790d1e8bc0de1a11561f4f0 Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Thu, 10 Nov 2022 21:22:37 +0000 Subject: [PATCH 01/23] Remove test dependency from `implementation` configuration, fixes #411 --- app/build.gradle.kts | 1 - 1 file changed, 1 deletion(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index b67a3f965..3bf4fae6d 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -91,7 +91,6 @@ dependencies { implementation(project(":core:model")) implementation(project(":sync:work")) - implementation(project(":sync:sync-test")) androidTestImplementation(project(":core:testing")) androidTestImplementation(project(":core:datastore-test")) From 90dc3007839073e333889e05d743af8014c346c9 Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Fri, 11 Nov 2022 16:15:33 +0100 Subject: [PATCH 02/23] Migrate from JUnit assertions to Kotlin's test framework Fixes #419 --- app/build.gradle.kts | 1 + .../apps/nowinandroid/ui/NiaAppStateTest.kt | 6 +++--- .../kotlin/AndroidFeatureConventionPlugin.kt | 3 +++ .../kotlin/AndroidLibraryConventionPlugin.kt | 5 +++++ .../nowinandroid/core/result/ResultKtTest.kt | 2 +- .../core/data/model/NetworkEntityKtTest.kt | 2 +- .../OfflineFirstAuthorsRepositoryTest.kt | 16 +++++++------- .../OfflineFirstNewsRepositoryTest.kt | 6 +++--- .../OfflineFirstTopicsRepositoryTest.kt | 16 +++++++------- .../OfflineFirstUserDataRepositoryTest.kt | 8 ++++--- .../model/PopulatedNewsResourceKtTest.kt | 2 +- .../util/NewsResourceTypeConverterTest.kt | 2 +- .../core/database/dao/NewsResourceDaoTest.kt | 2 +- .../datastore/IntToStringIdsMigrationTest.kt | 4 ++-- .../core/datastore/ListToMapMigrationTest.kt | 21 ++++++++++--------- .../datastore/NiaPreferencesDataSourceTest.kt | 19 +++++++++-------- .../UserPreferencesSerializerTest.kt | 2 +- .../core/designsystem/ThemeTest.kt | 2 +- .../GetFollowableTopicsStreamUseCaseTest.kt | 2 +- ...tSaveableNewsResourcesStreamUseCaseTest.kt | 2 +- ...ortedFollowableAuthorsStreamUseCaseTest.kt | 2 +- .../fake/FakeNiaNetworkDataSourceTest.kt | 2 +- .../util/NewsResourceTypeSerializerTest.kt | 2 +- .../feature/author/AuthorViewModelTest.kt | 20 +++++++++--------- .../feature/bookmarks/BookmarksScreenTest.kt | 4 ++-- .../bookmarks/BookmarksViewModelTest.kt | 12 +++++------ .../feature/foryou/ForYouViewModelTest.kt | 2 +- .../interests/InterestsViewModelTest.kt | 2 +- .../feature/settings/SettingsViewModelTest.kt | 2 +- .../feature/topic/TopicViewModelTest.kt | 17 +++++++-------- .../sync/workers/SyncWorkerTest.kt | 2 +- 31 files changed, 101 insertions(+), 89 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index c4d60e202..6dbe922b2 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -98,6 +98,7 @@ dependencies { androidTestImplementation(project(":core:data-test")) androidTestImplementation(project(":core:network")) androidTestImplementation(libs.androidx.navigation.testing) + androidTestImplementation(kotlin("test")) debugImplementation(libs.androidx.compose.ui.testManifest) implementation(libs.accompanist.systemuicontroller) diff --git a/app/src/androidTest/java/com/google/samples/apps/nowinandroid/ui/NiaAppStateTest.kt b/app/src/androidTest/java/com/google/samples/apps/nowinandroid/ui/NiaAppStateTest.kt index cfda9c0d9..8e0d65636 100644 --- a/app/src/androidTest/java/com/google/samples/apps/nowinandroid/ui/NiaAppStateTest.kt +++ b/app/src/androidTest/java/com/google/samples/apps/nowinandroid/ui/NiaAppStateTest.kt @@ -31,13 +31,13 @@ import androidx.navigation.compose.composable import androidx.navigation.createGraph import androidx.navigation.testing.TestNavHostController import com.google.samples.apps.nowinandroid.core.testing.util.TestNetworkMonitor +import kotlin.test.assertEquals +import kotlin.test.assertFalse +import kotlin.test.assertTrue import kotlinx.coroutines.flow.collect import kotlinx.coroutines.launch import kotlinx.coroutines.test.UnconfinedTestDispatcher import kotlinx.coroutines.test.runTest -import org.junit.Assert.assertEquals -import org.junit.Assert.assertFalse -import org.junit.Assert.assertTrue import org.junit.Rule import org.junit.Test diff --git a/build-logic/convention/src/main/kotlin/AndroidFeatureConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidFeatureConventionPlugin.kt index 110c5ade0..a637b78c0 100644 --- a/build-logic/convention/src/main/kotlin/AndroidFeatureConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidFeatureConventionPlugin.kt @@ -21,6 +21,7 @@ import org.gradle.api.artifacts.VersionCatalogsExtension import org.gradle.kotlin.dsl.configure import org.gradle.kotlin.dsl.dependencies import org.gradle.kotlin.dsl.getByType +import org.gradle.kotlin.dsl.kotlin class AndroidFeatureConventionPlugin : Plugin { override fun apply(target: Project) { @@ -46,7 +47,9 @@ class AndroidFeatureConventionPlugin : Plugin { add("implementation", project(":core:common")) add("implementation", project(":core:domain")) + add("testImplementation", kotlin("test")) add("testImplementation", project(":core:testing")) + add("androidTestImplementation", kotlin("test")) add("androidTestImplementation", project(":core:testing")) add("implementation", libs.findLibrary("coil.kt").get()) diff --git a/build-logic/convention/src/main/kotlin/AndroidLibraryConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidLibraryConventionPlugin.kt index 4bcd039f3..f7d6d184a 100644 --- a/build-logic/convention/src/main/kotlin/AndroidLibraryConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidLibraryConventionPlugin.kt @@ -26,6 +26,7 @@ import org.gradle.api.artifacts.VersionCatalogsExtension import org.gradle.kotlin.dsl.configure import org.gradle.kotlin.dsl.dependencies import org.gradle.kotlin.dsl.getByType +import org.gradle.kotlin.dsl.kotlin class AndroidLibraryConventionPlugin : Plugin { override fun apply(target: Project) { @@ -51,6 +52,10 @@ class AndroidLibraryConventionPlugin : Plugin { force("org.objenesis:objenesis:2.6") } } + dependencies { + add("androidTestImplementation", kotlin("test")) + add("testImplementation", kotlin("test")) + } } } } \ No newline at end of file diff --git a/core/common/src/test/java/com/google/samples/apps/nowinandroid/core/result/ResultKtTest.kt b/core/common/src/test/java/com/google/samples/apps/nowinandroid/core/result/ResultKtTest.kt index 964ac2ab5..90852c7c5 100644 --- a/core/common/src/test/java/com/google/samples/apps/nowinandroid/core/result/ResultKtTest.kt +++ b/core/common/src/test/java/com/google/samples/apps/nowinandroid/core/result/ResultKtTest.kt @@ -17,9 +17,9 @@ package com.google.samples.apps.nowinandroid.core.result import app.cash.turbine.test +import kotlin.test.assertEquals import kotlinx.coroutines.flow.flow import kotlinx.coroutines.test.runTest -import org.junit.Assert.assertEquals import org.junit.Test class ResultKtTest { diff --git a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/model/NetworkEntityKtTest.kt b/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/model/NetworkEntityKtTest.kt index c910d2c79..035d72801 100644 --- a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/model/NetworkEntityKtTest.kt +++ b/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/model/NetworkEntityKtTest.kt @@ -21,8 +21,8 @@ import com.google.samples.apps.nowinandroid.core.network.model.NetworkAuthor import com.google.samples.apps.nowinandroid.core.network.model.NetworkNewsResource import com.google.samples.apps.nowinandroid.core.network.model.NetworkNewsResourceExpanded import com.google.samples.apps.nowinandroid.core.network.model.NetworkTopic +import kotlin.test.assertEquals import kotlinx.datetime.Instant -import org.junit.Assert.assertEquals import org.junit.Test class NetworkEntityKtTest { diff --git a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstAuthorsRepositoryTest.kt b/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstAuthorsRepositoryTest.kt index 61c5fb809..ea7e9c4ba 100644 --- a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstAuthorsRepositoryTest.kt +++ b/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstAuthorsRepositoryTest.kt @@ -29,9 +29,9 @@ import com.google.samples.apps.nowinandroid.core.datastore.test.testUserPreferen import com.google.samples.apps.nowinandroid.core.model.data.Author import com.google.samples.apps.nowinandroid.core.network.model.NetworkAuthor import com.google.samples.apps.nowinandroid.core.network.model.NetworkChangeList +import kotlin.test.assertEquals import kotlinx.coroutines.flow.first import kotlinx.coroutines.test.runTest -import org.junit.Assert import org.junit.Before import org.junit.Rule import org.junit.Test @@ -68,7 +68,7 @@ class OfflineFirstAuthorsRepositoryTest { @Test fun offlineFirstAuthorsRepository_Authors_stream_is_backed_by_Authors_dao() = runTest { - Assert.assertEquals( + assertEquals( authorDao.getAuthorEntitiesStream() .first() .map(AuthorEntity::asExternalModel), @@ -88,13 +88,13 @@ class OfflineFirstAuthorsRepositoryTest { val dbAuthors = authorDao.getAuthorEntitiesStream() .first() - Assert.assertEquals( + assertEquals( networkAuthors.map(AuthorEntity::id), dbAuthors.map(AuthorEntity::id) ) // After sync version should be updated - Assert.assertEquals( + assertEquals( network.latestChangeListVersion(CollectionType.Authors), synchronizer.getChangeListVersions().authorVersion ) @@ -125,13 +125,13 @@ class OfflineFirstAuthorsRepositoryTest { val db = authorDao.getAuthorEntitiesStream() .first() - Assert.assertEquals( + assertEquals( network.map(AuthorEntity::id), db.map(AuthorEntity::id) ) // After sync version should be updated - Assert.assertEquals( + assertEquals( changeList.last().changeListVersion, synchronizer.getChangeListVersions().authorVersion ) @@ -166,13 +166,13 @@ class OfflineFirstAuthorsRepositoryTest { .map(AuthorEntity::asExternalModel) // Assert that items marked deleted on the network have been deleted locally - Assert.assertEquals( + assertEquals( networkAuthors.map(Author::id) - deletedItems, dbAuthors.map(Author::id) ) // After sync version should be updated - Assert.assertEquals( + assertEquals( network.latestChangeListVersion(CollectionType.Authors), synchronizer.getChangeListVersions().authorVersion ) diff --git a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepositoryTest.kt b/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepositoryTest.kt index 4429f1021..78fcac0f2 100644 --- a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepositoryTest.kt +++ b/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepositoryTest.kt @@ -39,9 +39,9 @@ import com.google.samples.apps.nowinandroid.core.datastore.test.testUserPreferen import com.google.samples.apps.nowinandroid.core.model.data.NewsResource import com.google.samples.apps.nowinandroid.core.network.model.NetworkChangeList import com.google.samples.apps.nowinandroid.core.network.model.NetworkNewsResource +import kotlin.test.assertEquals import kotlinx.coroutines.flow.first import kotlinx.coroutines.test.runTest -import org.junit.Assert.assertEquals import org.junit.Before import org.junit.Rule import org.junit.Test @@ -112,7 +112,7 @@ class OfflineFirstNewsRepositoryTest { ) assertEquals( - emptyList(), + emptyList(), subject.getNewsResourcesStream( filterTopicIds = nonPresentInterestsIds, ) @@ -136,7 +136,7 @@ class OfflineFirstNewsRepositoryTest { ) assertEquals( - emptyList(), + emptyList(), subject.getNewsResourcesStream( filterAuthorIds = nonPresentInterestsIds ) diff --git a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepositoryTest.kt b/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepositoryTest.kt index 48570d5f0..2514b07cb 100644 --- a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepositoryTest.kt +++ b/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepositoryTest.kt @@ -28,9 +28,9 @@ import com.google.samples.apps.nowinandroid.core.datastore.NiaPreferencesDataSou import com.google.samples.apps.nowinandroid.core.datastore.test.testUserPreferencesDataStore import com.google.samples.apps.nowinandroid.core.model.data.Topic import com.google.samples.apps.nowinandroid.core.network.model.NetworkTopic +import kotlin.test.assertEquals import kotlinx.coroutines.flow.first import kotlinx.coroutines.test.runTest -import org.junit.Assert import org.junit.Before import org.junit.Rule import org.junit.Test @@ -69,7 +69,7 @@ class OfflineFirstTopicsRepositoryTest { @Test fun offlineFirstTopicsRepository_topics_stream_is_backed_by_topics_dao() = runTest { - Assert.assertEquals( + assertEquals( topicDao.getTopicEntitiesStream() .first() .map(TopicEntity::asExternalModel), @@ -89,13 +89,13 @@ class OfflineFirstTopicsRepositoryTest { val dbTopics = topicDao.getTopicEntitiesStream() .first() - Assert.assertEquals( + assertEquals( networkTopics.map(TopicEntity::id), dbTopics.map(TopicEntity::id) ) // After sync version should be updated - Assert.assertEquals( + assertEquals( network.latestChangeListVersion(CollectionType.Topics), synchronizer.getChangeListVersions().topicVersion ) @@ -119,13 +119,13 @@ class OfflineFirstTopicsRepositoryTest { val dbTopics = topicDao.getTopicEntitiesStream() .first() - Assert.assertEquals( + assertEquals( networkTopics.map(TopicEntity::id), dbTopics.map(TopicEntity::id) ) // After sync version should be updated - Assert.assertEquals( + assertEquals( network.latestChangeListVersion(CollectionType.Topics), synchronizer.getChangeListVersions().topicVersion ) @@ -160,13 +160,13 @@ class OfflineFirstTopicsRepositoryTest { .map(TopicEntity::asExternalModel) // Assert that items marked deleted on the network have been deleted locally - Assert.assertEquals( + assertEquals( networkTopics.map(Topic::id) - deletedItems, dbTopics.map(Topic::id) ) // After sync version should be updated - Assert.assertEquals( + assertEquals( network.latestChangeListVersion(CollectionType.Topics), synchronizer.getChangeListVersions().topicVersion ) diff --git a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepositoryTest.kt b/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepositoryTest.kt index c1d740602..63aadc7bf 100644 --- a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepositoryTest.kt +++ b/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepositoryTest.kt @@ -21,10 +21,12 @@ import com.google.samples.apps.nowinandroid.core.datastore.test.testUserPreferen import com.google.samples.apps.nowinandroid.core.model.data.DarkThemeConfig import com.google.samples.apps.nowinandroid.core.model.data.ThemeBrand import com.google.samples.apps.nowinandroid.core.model.data.UserData +import kotlin.test.assertEquals +import kotlin.test.assertFalse +import kotlin.test.assertTrue import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.map import kotlinx.coroutines.test.runTest -import org.junit.Assert.assertEquals import org.junit.Before import org.junit.Rule import org.junit.Test @@ -194,9 +196,9 @@ class OfflineFirstUserDataRepositoryTest { runTest { subject.setFollowedTopicIds(setOf("1")) subject.setShouldHideOnboarding(true) - assertEquals(true, subject.userDataStream.first().shouldHideOnboarding) + assertTrue(subject.userDataStream.first().shouldHideOnboarding) subject.setFollowedTopicIds(emptySet()) - assertEquals(false, subject.userDataStream.first().shouldHideOnboarding) + assertFalse(subject.userDataStream.first().shouldHideOnboarding) } } diff --git a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/database/model/PopulatedNewsResourceKtTest.kt b/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/database/model/PopulatedNewsResourceKtTest.kt index 1bc89d1f4..504277e23 100644 --- a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/database/model/PopulatedNewsResourceKtTest.kt +++ b/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/database/model/PopulatedNewsResourceKtTest.kt @@ -20,8 +20,8 @@ import com.google.samples.apps.nowinandroid.core.model.data.Author import com.google.samples.apps.nowinandroid.core.model.data.NewsResource import com.google.samples.apps.nowinandroid.core.model.data.NewsResourceType.Video import com.google.samples.apps.nowinandroid.core.model.data.Topic +import kotlin.test.assertEquals import kotlinx.datetime.Instant -import org.junit.Assert.assertEquals import org.junit.Test class PopulatedNewsResourceKtTest { diff --git a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/database/util/NewsResourceTypeConverterTest.kt b/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/database/util/NewsResourceTypeConverterTest.kt index 4a52bd5b7..37a25dc7e 100644 --- a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/database/util/NewsResourceTypeConverterTest.kt +++ b/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/database/util/NewsResourceTypeConverterTest.kt @@ -17,7 +17,7 @@ package com.google.samples.apps.nowinandroid.core.database.util import com.google.samples.apps.nowinandroid.core.model.data.NewsResourceType -import org.junit.Assert.assertEquals +import kotlin.test.assertEquals import org.junit.Test class NewsResourceTypeConverterTest { diff --git a/core/database/src/androidTest/java/com/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDaoTest.kt b/core/database/src/androidTest/java/com/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDaoTest.kt index 3c6557a2b..017704381 100644 --- a/core/database/src/androidTest/java/com/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDaoTest.kt +++ b/core/database/src/androidTest/java/com/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDaoTest.kt @@ -27,10 +27,10 @@ import com.google.samples.apps.nowinandroid.core.database.model.NewsResourceTopi import com.google.samples.apps.nowinandroid.core.database.model.TopicEntity import com.google.samples.apps.nowinandroid.core.database.model.asExternalModel import com.google.samples.apps.nowinandroid.core.model.data.NewsResourceType +import kotlin.test.assertEquals import kotlinx.coroutines.flow.first import kotlinx.coroutines.test.runTest import kotlinx.datetime.Instant -import org.junit.Assert.assertEquals import org.junit.Before import org.junit.Test diff --git a/core/datastore/src/test/java/com/google/samples/apps/nowinandroid/core/datastore/IntToStringIdsMigrationTest.kt b/core/datastore/src/test/java/com/google/samples/apps/nowinandroid/core/datastore/IntToStringIdsMigrationTest.kt index 89035dc91..e82f74b52 100644 --- a/core/datastore/src/test/java/com/google/samples/apps/nowinandroid/core/datastore/IntToStringIdsMigrationTest.kt +++ b/core/datastore/src/test/java/com/google/samples/apps/nowinandroid/core/datastore/IntToStringIdsMigrationTest.kt @@ -16,9 +16,9 @@ package com.google.samples.apps.nowinandroid.core.datastore +import kotlin.test.assertEquals +import kotlin.test.assertTrue import kotlinx.coroutines.test.runTest -import org.junit.Assert.assertEquals -import org.junit.Assert.assertTrue import org.junit.Test /** diff --git a/core/datastore/src/test/java/com/google/samples/apps/nowinandroid/core/datastore/ListToMapMigrationTest.kt b/core/datastore/src/test/java/com/google/samples/apps/nowinandroid/core/datastore/ListToMapMigrationTest.kt index 6fc06f585..c2fdf4f55 100644 --- a/core/datastore/src/test/java/com/google/samples/apps/nowinandroid/core/datastore/ListToMapMigrationTest.kt +++ b/core/datastore/src/test/java/com/google/samples/apps/nowinandroid/core/datastore/ListToMapMigrationTest.kt @@ -16,8 +16,9 @@ package com.google.samples.apps.nowinandroid.core.datastore +import kotlin.test.assertEquals +import kotlin.test.assertTrue import kotlinx.coroutines.test.runTest -import org.junit.Assert import org.junit.Test class ListToMapMigrationTest { @@ -29,7 +30,7 @@ class ListToMapMigrationTest { deprecatedFollowedTopicIds.addAll(listOf("1", "2", "3")) } // Assert that there are no topic ids in the map yet - Assert.assertEquals( + assertEquals( emptyMap(), preMigrationUserPreferences.followedTopicIdsMap ) @@ -39,13 +40,13 @@ class ListToMapMigrationTest { ListToMapMigration.migrate(preMigrationUserPreferences) // Assert the deprecated topic ids have been migrated to the topic ids map - Assert.assertEquals( + assertEquals( mapOf("1" to true, "2" to true, "3" to true), postMigrationUserPreferences.followedTopicIdsMap ) // Assert that the migration has been marked complete - Assert.assertTrue(postMigrationUserPreferences.hasDoneListToMapMigration) + assertTrue(postMigrationUserPreferences.hasDoneListToMapMigration) } @Test @@ -55,7 +56,7 @@ class ListToMapMigrationTest { deprecatedFollowedAuthorIds.addAll(listOf("4", "5", "6")) } // Assert that there are no author ids in the map yet - Assert.assertEquals( + assertEquals( emptyMap(), preMigrationUserPreferences.followedAuthorIdsMap ) @@ -65,13 +66,13 @@ class ListToMapMigrationTest { ListToMapMigration.migrate(preMigrationUserPreferences) // Assert the deprecated author ids have been migrated to the author ids map - Assert.assertEquals( + assertEquals( mapOf("4" to true, "5" to true, "6" to true), postMigrationUserPreferences.followedAuthorIdsMap ) // Assert that the migration has been marked complete - Assert.assertTrue(postMigrationUserPreferences.hasDoneListToMapMigration) + assertTrue(postMigrationUserPreferences.hasDoneListToMapMigration) } @Test @@ -81,7 +82,7 @@ class ListToMapMigrationTest { deprecatedBookmarkedNewsResourceIds.addAll(listOf("7", "8", "9")) } // Assert that there are no bookmarks in the map yet - Assert.assertEquals( + assertEquals( emptyMap(), preMigrationUserPreferences.bookmarkedNewsResourceIdsMap ) @@ -91,12 +92,12 @@ class ListToMapMigrationTest { ListToMapMigration.migrate(preMigrationUserPreferences) // Assert the deprecated bookmarks have been migrated to the bookmarks map - Assert.assertEquals( + assertEquals( mapOf("7" to true, "8" to true, "9" to true), postMigrationUserPreferences.bookmarkedNewsResourceIdsMap ) // Assert that the migration has been marked complete - Assert.assertTrue(postMigrationUserPreferences.hasDoneListToMapMigration) + assertTrue(postMigrationUserPreferences.hasDoneListToMapMigration) } } diff --git a/core/datastore/src/test/java/com/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSourceTest.kt b/core/datastore/src/test/java/com/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSourceTest.kt index d5e4be841..78759d0ce 100644 --- a/core/datastore/src/test/java/com/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSourceTest.kt +++ b/core/datastore/src/test/java/com/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSourceTest.kt @@ -17,9 +17,10 @@ package com.google.samples.apps.nowinandroid.core.datastore import com.google.samples.apps.nowinandroid.core.datastore.test.testUserPreferencesDataStore +import kotlin.test.assertFalse +import kotlin.test.assertTrue import kotlinx.coroutines.flow.first import kotlinx.coroutines.test.runTest -import org.junit.Assert.assertEquals import org.junit.Before import org.junit.Rule import org.junit.Test @@ -40,13 +41,13 @@ class NiaPreferencesDataSourceTest { @Test fun shouldHideOnboardingIsFalseByDefault() = runTest { - assertEquals(false, subject.userDataStream.first().shouldHideOnboarding) + assertFalse(subject.userDataStream.first().shouldHideOnboarding) } @Test fun userShouldHideOnboardingIsTrueWhenSet() = runTest { subject.setShouldHideOnboarding(true) - assertEquals(true, subject.userDataStream.first().shouldHideOnboarding) + assertTrue(subject.userDataStream.first().shouldHideOnboarding) } @Test @@ -60,7 +61,7 @@ class NiaPreferencesDataSourceTest { subject.toggleFollowedAuthorId("1", false) // Then: onboarding should be shown again - assertEquals(false, subject.userDataStream.first().shouldHideOnboarding) + assertFalse(subject.userDataStream.first().shouldHideOnboarding) } @Test @@ -74,7 +75,7 @@ class NiaPreferencesDataSourceTest { subject.toggleFollowedTopicId("1", false) // Then: onboarding should be shown again - assertEquals(false, subject.userDataStream.first().shouldHideOnboarding) + assertFalse(subject.userDataStream.first().shouldHideOnboarding) } @Test @@ -88,7 +89,7 @@ class NiaPreferencesDataSourceTest { subject.setFollowedAuthorIds(emptySet()) // Then: onboarding should be shown again - assertEquals(false, subject.userDataStream.first().shouldHideOnboarding) + assertFalse(subject.userDataStream.first().shouldHideOnboarding) } @Test @@ -102,7 +103,7 @@ class NiaPreferencesDataSourceTest { subject.setFollowedTopicIds(emptySet()) // Then: onboarding should be shown again - assertEquals(false, subject.userDataStream.first().shouldHideOnboarding) + assertFalse(subject.userDataStream.first().shouldHideOnboarding) } @Test @@ -117,7 +118,7 @@ class NiaPreferencesDataSourceTest { subject.setFollowedTopicIds(emptySet()) // Then: onboarding should still be dismissed - assertEquals(true, subject.userDataStream.first().shouldHideOnboarding) + assertTrue(subject.userDataStream.first().shouldHideOnboarding) } @Test @@ -132,6 +133,6 @@ class NiaPreferencesDataSourceTest { subject.setFollowedAuthorIds(emptySet()) // Then: onboarding should still be dismissed - assertEquals(true, subject.userDataStream.first().shouldHideOnboarding) + assertTrue(subject.userDataStream.first().shouldHideOnboarding) } } diff --git a/core/datastore/src/test/java/com/google/samples/apps/nowinandroid/core/datastore/UserPreferencesSerializerTest.kt b/core/datastore/src/test/java/com/google/samples/apps/nowinandroid/core/datastore/UserPreferencesSerializerTest.kt index cf3fcf338..1b10c5672 100644 --- a/core/datastore/src/test/java/com/google/samples/apps/nowinandroid/core/datastore/UserPreferencesSerializerTest.kt +++ b/core/datastore/src/test/java/com/google/samples/apps/nowinandroid/core/datastore/UserPreferencesSerializerTest.kt @@ -19,8 +19,8 @@ package com.google.samples.apps.nowinandroid.core.datastore import androidx.datastore.core.CorruptionException import java.io.ByteArrayInputStream import java.io.ByteArrayOutputStream +import kotlin.test.assertEquals import kotlinx.coroutines.test.runTest -import org.junit.Assert.assertEquals import org.junit.Test class UserPreferencesSerializerTest { diff --git a/core/designsystem/src/androidTest/java/com/google/samples/apps/nowinandroid/core/designsystem/ThemeTest.kt b/core/designsystem/src/androidTest/java/com/google/samples/apps/nowinandroid/core/designsystem/ThemeTest.kt index 8710ba265..4bc69712d 100644 --- a/core/designsystem/src/androidTest/java/com/google/samples/apps/nowinandroid/core/designsystem/ThemeTest.kt +++ b/core/designsystem/src/androidTest/java/com/google/samples/apps/nowinandroid/core/designsystem/ThemeTest.kt @@ -36,7 +36,7 @@ import com.google.samples.apps.nowinandroid.core.designsystem.theme.LightDefault import com.google.samples.apps.nowinandroid.core.designsystem.theme.LocalBackgroundTheme import com.google.samples.apps.nowinandroid.core.designsystem.theme.LocalGradientColors import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme -import org.junit.Assert.assertEquals +import kotlin.test.assertEquals import org.junit.Rule import org.junit.Test diff --git a/core/domain/src/test/java/com/google/samples/apps/nowinandroid/core/domain/GetFollowableTopicsStreamUseCaseTest.kt b/core/domain/src/test/java/com/google/samples/apps/nowinandroid/core/domain/GetFollowableTopicsStreamUseCaseTest.kt index 101590605..a3fff0d20 100644 --- a/core/domain/src/test/java/com/google/samples/apps/nowinandroid/core/domain/GetFollowableTopicsStreamUseCaseTest.kt +++ b/core/domain/src/test/java/com/google/samples/apps/nowinandroid/core/domain/GetFollowableTopicsStreamUseCaseTest.kt @@ -22,9 +22,9 @@ import com.google.samples.apps.nowinandroid.core.model.data.Topic import com.google.samples.apps.nowinandroid.core.testing.repository.TestTopicsRepository import com.google.samples.apps.nowinandroid.core.testing.repository.TestUserDataRepository import com.google.samples.apps.nowinandroid.core.testing.util.MainDispatcherRule +import kotlin.test.assertEquals import kotlinx.coroutines.flow.first import kotlinx.coroutines.test.runTest -import org.junit.Assert.assertEquals import org.junit.Rule import org.junit.Test diff --git a/core/domain/src/test/java/com/google/samples/apps/nowinandroid/core/domain/GetSaveableNewsResourcesStreamUseCaseTest.kt b/core/domain/src/test/java/com/google/samples/apps/nowinandroid/core/domain/GetSaveableNewsResourcesStreamUseCaseTest.kt index c8fa5b949..062fb4dc2 100644 --- a/core/domain/src/test/java/com/google/samples/apps/nowinandroid/core/domain/GetSaveableNewsResourcesStreamUseCaseTest.kt +++ b/core/domain/src/test/java/com/google/samples/apps/nowinandroid/core/domain/GetSaveableNewsResourcesStreamUseCaseTest.kt @@ -24,10 +24,10 @@ import com.google.samples.apps.nowinandroid.core.model.data.Topic import com.google.samples.apps.nowinandroid.core.testing.repository.TestNewsRepository import com.google.samples.apps.nowinandroid.core.testing.repository.TestUserDataRepository import com.google.samples.apps.nowinandroid.core.testing.util.MainDispatcherRule +import kotlin.test.assertEquals import kotlinx.coroutines.flow.first import kotlinx.coroutines.test.runTest import kotlinx.datetime.Instant -import org.junit.Assert.assertEquals import org.junit.Rule import org.junit.Test diff --git a/core/domain/src/test/java/com/google/samples/apps/nowinandroid/core/domain/GetSortedFollowableAuthorsStreamUseCaseTest.kt b/core/domain/src/test/java/com/google/samples/apps/nowinandroid/core/domain/GetSortedFollowableAuthorsStreamUseCaseTest.kt index a08ca1b3a..24b88a88b 100644 --- a/core/domain/src/test/java/com/google/samples/apps/nowinandroid/core/domain/GetSortedFollowableAuthorsStreamUseCaseTest.kt +++ b/core/domain/src/test/java/com/google/samples/apps/nowinandroid/core/domain/GetSortedFollowableAuthorsStreamUseCaseTest.kt @@ -21,9 +21,9 @@ import com.google.samples.apps.nowinandroid.core.model.data.Author import com.google.samples.apps.nowinandroid.core.testing.repository.TestAuthorsRepository import com.google.samples.apps.nowinandroid.core.testing.repository.TestUserDataRepository import com.google.samples.apps.nowinandroid.core.testing.util.MainDispatcherRule +import kotlin.test.assertEquals import kotlinx.coroutines.flow.first import kotlinx.coroutines.test.runTest -import org.junit.Assert.assertEquals import org.junit.Rule import org.junit.Test diff --git a/core/network/src/test/java/com/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSourceTest.kt b/core/network/src/test/java/com/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSourceTest.kt index 78d28d98b..bb497a694 100644 --- a/core/network/src/test/java/com/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSourceTest.kt +++ b/core/network/src/test/java/com/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSourceTest.kt @@ -16,10 +16,10 @@ package com.google.samples.apps.nowinandroid.core.network.fake +import kotlin.test.assertEquals import kotlinx.coroutines.test.StandardTestDispatcher import kotlinx.coroutines.test.runTest import kotlinx.serialization.json.Json -import org.junit.Assert.assertEquals import org.junit.Before import org.junit.Test diff --git a/core/network/src/test/java/com/google/samples/apps/nowinandroid/core/network/model/util/NewsResourceTypeSerializerTest.kt b/core/network/src/test/java/com/google/samples/apps/nowinandroid/core/network/model/util/NewsResourceTypeSerializerTest.kt index c446c7ec3..191501a3d 100644 --- a/core/network/src/test/java/com/google/samples/apps/nowinandroid/core/network/model/util/NewsResourceTypeSerializerTest.kt +++ b/core/network/src/test/java/com/google/samples/apps/nowinandroid/core/network/model/util/NewsResourceTypeSerializerTest.kt @@ -17,8 +17,8 @@ package com.google.samples.apps.nowinandroid.core.network.model.util import com.google.samples.apps.nowinandroid.core.model.data.NewsResourceType +import kotlin.test.assertEquals import kotlinx.serialization.json.Json -import org.junit.Assert.assertEquals import org.junit.Test class NewsResourceTypeSerializerTest { diff --git a/feature/author/src/test/java/com/google/samples/apps/nowinandroid/feature/author/AuthorViewModelTest.kt b/feature/author/src/test/java/com/google/samples/apps/nowinandroid/feature/author/AuthorViewModelTest.kt index aac9617a4..8bca5b5ee 100644 --- a/feature/author/src/test/java/com/google/samples/apps/nowinandroid/feature/author/AuthorViewModelTest.kt +++ b/feature/author/src/test/java/com/google/samples/apps/nowinandroid/feature/author/AuthorViewModelTest.kt @@ -35,11 +35,12 @@ import kotlinx.coroutines.launch import kotlinx.coroutines.test.UnconfinedTestDispatcher import kotlinx.coroutines.test.runTest import kotlinx.datetime.Instant -import org.junit.Assert.assertEquals -import org.junit.Assert.assertTrue import org.junit.Before import org.junit.Rule import org.junit.Test +import kotlin.test.assertEquals +import kotlin.test.assertIs +import kotlin.test.assertTrue /** * To learn more about how this test handles Flows created with stateIn, see @@ -83,15 +84,14 @@ class AuthorViewModelTest { userDataRepository.setFollowedAuthorIds(setOf(testInputAuthors[1].author.id)) val item = viewModel.authorUiState.value - assertTrue(item is AuthorUiState.Success) + assertIs(item) - val successAuthorUiState = item as AuthorUiState.Success val authorFromRepository = authorsRepository.getAuthorStream( id = testInputAuthors[0].author.id ).first() - successAuthorUiState.followableAuthor.author - assertEquals(authorFromRepository, successAuthorUiState.followableAuthor.author) + item.followableAuthor.author + assertEquals(authorFromRepository, item.followableAuthor.author) collectJob.cancel() } @@ -132,8 +132,8 @@ class AuthorViewModelTest { val authorState = viewModel.authorUiState.value val newsUiState = viewModel.newsUiState.value - assertTrue(authorState is AuthorUiState.Success) - assertTrue(newsUiState is NewsUiState.Loading) + assertIs(authorState) + assertIs(newsUiState) collectJob.cancel() } @@ -155,8 +155,8 @@ class AuthorViewModelTest { val authorState = viewModel.authorUiState.value val newsUiState = viewModel.newsUiState.value - assertTrue(authorState is AuthorUiState.Success) - assertTrue(newsUiState is NewsUiState.Success) + assertIs(authorState) + assertIs(newsUiState) collectJob.cancel() } diff --git a/feature/bookmarks/src/androidTest/java/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksScreenTest.kt b/feature/bookmarks/src/androidTest/java/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksScreenTest.kt index f018be8c0..1dafc5c98 100644 --- a/feature/bookmarks/src/androidTest/java/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksScreenTest.kt +++ b/feature/bookmarks/src/androidTest/java/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksScreenTest.kt @@ -34,8 +34,8 @@ import androidx.compose.ui.test.performScrollToNode import com.google.samples.apps.nowinandroid.core.domain.model.SaveableNewsResource import com.google.samples.apps.nowinandroid.core.model.data.previewNewsResources import com.google.samples.apps.nowinandroid.core.ui.NewsFeedUiState -import org.junit.Assert.assertEquals -import org.junit.Assert.assertTrue +import kotlin.test.assertEquals +import kotlin.test.assertTrue import org.junit.Rule import org.junit.Test diff --git a/feature/bookmarks/src/test/java/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModelTest.kt b/feature/bookmarks/src/test/java/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModelTest.kt index 78d9801b1..ee7513420 100644 --- a/feature/bookmarks/src/test/java/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModelTest.kt +++ b/feature/bookmarks/src/test/java/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModelTest.kt @@ -27,11 +27,11 @@ import kotlinx.coroutines.flow.collect import kotlinx.coroutines.launch import kotlinx.coroutines.test.UnconfinedTestDispatcher import kotlinx.coroutines.test.runTest -import org.junit.Assert.assertEquals -import org.junit.Assert.assertTrue import org.junit.Before import org.junit.Rule import org.junit.Test +import kotlin.test.assertEquals +import kotlin.test.assertIs /** * To learn more about how this test handles Flows created with stateIn, see @@ -69,8 +69,8 @@ class BookmarksViewModelTest { newsRepository.sendNewsResources(previewNewsResources) userDataRepository.updateNewsResourceBookmark(previewNewsResources[0].id, true) val item = viewModel.feedUiState.value - assertTrue(item is Success) - assertEquals((item as Success).feed.size, 1) + assertIs(item) + assertEquals(item.feed.size, 1) collectJob.cancel() } @@ -86,8 +86,8 @@ class BookmarksViewModelTest { viewModel.removeFromSavedResources(previewNewsResources[0].id) // Verify list of saved resources is now empty val item = viewModel.feedUiState.value - assertTrue(item is Success) - assertEquals((item as Success).feed.size, 0) + assertIs(item) + assertEquals(item.feed.size, 0) collectJob.cancel() } diff --git a/feature/foryou/src/test/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModelTest.kt b/feature/foryou/src/test/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModelTest.kt index 5f21f9d06..603a42bed 100644 --- a/feature/foryou/src/test/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModelTest.kt +++ b/feature/foryou/src/test/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModelTest.kt @@ -40,10 +40,10 @@ import kotlinx.coroutines.test.UnconfinedTestDispatcher import kotlinx.coroutines.test.advanceUntilIdle import kotlinx.coroutines.test.runTest import kotlinx.datetime.Instant -import org.junit.Assert.assertEquals import org.junit.Before import org.junit.Rule import org.junit.Test +import kotlin.test.assertEquals /** * To learn more about how this test handles Flows created with stateIn, see diff --git a/feature/interests/src/test/java/com/google/samples/apps/nowinandroid/interests/InterestsViewModelTest.kt b/feature/interests/src/test/java/com/google/samples/apps/nowinandroid/interests/InterestsViewModelTest.kt index 6ecf3930a..aaac504d3 100644 --- a/feature/interests/src/test/java/com/google/samples/apps/nowinandroid/interests/InterestsViewModelTest.kt +++ b/feature/interests/src/test/java/com/google/samples/apps/nowinandroid/interests/InterestsViewModelTest.kt @@ -28,11 +28,11 @@ import com.google.samples.apps.nowinandroid.core.testing.repository.TestUserData import com.google.samples.apps.nowinandroid.core.testing.util.MainDispatcherRule import com.google.samples.apps.nowinandroid.feature.interests.InterestsUiState import com.google.samples.apps.nowinandroid.feature.interests.InterestsViewModel +import kotlin.test.assertEquals import kotlinx.coroutines.flow.collect import kotlinx.coroutines.launch import kotlinx.coroutines.test.UnconfinedTestDispatcher import kotlinx.coroutines.test.runTest -import org.junit.Assert.assertEquals import org.junit.Before import org.junit.Rule import org.junit.Test diff --git a/feature/settings/src/test/java/com/google/samples/apps/nowinandroid/feature/settings/SettingsViewModelTest.kt b/feature/settings/src/test/java/com/google/samples/apps/nowinandroid/feature/settings/SettingsViewModelTest.kt index b9df2fafd..6d8cf8b13 100644 --- a/feature/settings/src/test/java/com/google/samples/apps/nowinandroid/feature/settings/SettingsViewModelTest.kt +++ b/feature/settings/src/test/java/com/google/samples/apps/nowinandroid/feature/settings/SettingsViewModelTest.kt @@ -22,7 +22,7 @@ import com.google.samples.apps.nowinandroid.core.testing.repository.TestUserData import com.google.samples.apps.nowinandroid.core.testing.util.MainDispatcherRule import com.google.samples.apps.nowinandroid.feature.settings.SettingsUiState.Loading import com.google.samples.apps.nowinandroid.feature.settings.SettingsUiState.Success -import junit.framework.Assert.assertEquals +import kotlin.test.assertEquals import kotlinx.coroutines.flow.collect import kotlinx.coroutines.launch import kotlinx.coroutines.test.UnconfinedTestDispatcher diff --git a/feature/topic/src/test/java/com/google/samples/apps/nowinandroid/feature/topic/TopicViewModelTest.kt b/feature/topic/src/test/java/com/google/samples/apps/nowinandroid/feature/topic/TopicViewModelTest.kt index b914856be..b00e05cae 100644 --- a/feature/topic/src/test/java/com/google/samples/apps/nowinandroid/feature/topic/TopicViewModelTest.kt +++ b/feature/topic/src/test/java/com/google/samples/apps/nowinandroid/feature/topic/TopicViewModelTest.kt @@ -35,11 +35,11 @@ import kotlinx.coroutines.launch import kotlinx.coroutines.test.UnconfinedTestDispatcher import kotlinx.coroutines.test.runTest import kotlinx.datetime.Instant -import org.junit.Assert.assertEquals -import org.junit.Assert.assertTrue import org.junit.Before import org.junit.Rule import org.junit.Test +import kotlin.test.assertEquals +import kotlin.test.assertIs /** * To learn more about how this test handles Flows created with stateIn, see @@ -77,14 +77,13 @@ class TopicViewModelTest { topicsRepository.sendTopics(testInputTopics.map(FollowableTopic::topic)) userDataRepository.setFollowedTopicIds(setOf(testInputTopics[1].topic.id)) val item = viewModel.topicUiState.value - assertTrue(item is TopicUiState.Success) + assertIs(item) - val successTopicState = item as TopicUiState.Success val topicFromRepository = topicsRepository.getTopic( testInputTopics[0].topic.id ).first() - assertEquals(topicFromRepository, successTopicState.followableTopic.topic) + assertEquals(topicFromRepository, item.followableTopic.topic) collectJob.cancel() } @@ -119,8 +118,8 @@ class TopicViewModelTest { val topicUiState = viewModel.topicUiState.value val newsUiState = viewModel.newUiState.value - assertTrue(topicUiState is TopicUiState.Success) - assertTrue(newsUiState is NewsUiState.Loading) + assertIs(topicUiState) + assertIs(newsUiState) collectJob.cancel() } @@ -141,8 +140,8 @@ class TopicViewModelTest { val topicUiState = viewModel.topicUiState.value val newsUiState = viewModel.newUiState.value - assertTrue(topicUiState is TopicUiState.Success) - assertTrue(newsUiState is NewsUiState.Success) + assertIs(topicUiState) + assertIs(newsUiState) collectJob.cancel() } diff --git a/sync/work/src/androidTest/java/com/google/samples/apps/nowinandroid/sync/workers/SyncWorkerTest.kt b/sync/work/src/androidTest/java/com/google/samples/apps/nowinandroid/sync/workers/SyncWorkerTest.kt index 3f3fa9d8e..4bcc19be8 100644 --- a/sync/work/src/androidTest/java/com/google/samples/apps/nowinandroid/sync/workers/SyncWorkerTest.kt +++ b/sync/work/src/androidTest/java/com/google/samples/apps/nowinandroid/sync/workers/SyncWorkerTest.kt @@ -25,7 +25,7 @@ import androidx.work.testing.SynchronousExecutor import androidx.work.testing.WorkManagerTestInitHelper import dagger.hilt.android.testing.HiltAndroidRule import dagger.hilt.android.testing.HiltAndroidTest -import org.junit.Assert.assertEquals +import kotlin.test.assertEquals import org.junit.Before import org.junit.Rule import org.junit.Test From 671a048e7c4cf5e3e635b35008dbe4ff453c6a08 Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Fri, 11 Nov 2022 16:19:33 +0100 Subject: [PATCH 03/23] Fix spotless issues --- .../apps/nowinandroid/feature/author/AuthorViewModelTest.kt | 6 +++--- .../feature/bookmarks/BookmarksViewModelTest.kt | 4 ++-- .../apps/nowinandroid/feature/foryou/ForYouViewModelTest.kt | 2 +- .../apps/nowinandroid/feature/topic/TopicViewModelTest.kt | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/feature/author/src/test/java/com/google/samples/apps/nowinandroid/feature/author/AuthorViewModelTest.kt b/feature/author/src/test/java/com/google/samples/apps/nowinandroid/feature/author/AuthorViewModelTest.kt index 8bca5b5ee..92164ae54 100644 --- a/feature/author/src/test/java/com/google/samples/apps/nowinandroid/feature/author/AuthorViewModelTest.kt +++ b/feature/author/src/test/java/com/google/samples/apps/nowinandroid/feature/author/AuthorViewModelTest.kt @@ -28,6 +28,9 @@ import com.google.samples.apps.nowinandroid.core.testing.repository.TestNewsRepo import com.google.samples.apps.nowinandroid.core.testing.repository.TestUserDataRepository import com.google.samples.apps.nowinandroid.core.testing.util.MainDispatcherRule import com.google.samples.apps.nowinandroid.feature.author.navigation.authorIdArg +import kotlin.test.assertEquals +import kotlin.test.assertIs +import kotlin.test.assertTrue import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.first @@ -38,9 +41,6 @@ import kotlinx.datetime.Instant import org.junit.Before import org.junit.Rule import org.junit.Test -import kotlin.test.assertEquals -import kotlin.test.assertIs -import kotlin.test.assertTrue /** * To learn more about how this test handles Flows created with stateIn, see diff --git a/feature/bookmarks/src/test/java/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModelTest.kt b/feature/bookmarks/src/test/java/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModelTest.kt index ee7513420..03d04af75 100644 --- a/feature/bookmarks/src/test/java/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModelTest.kt +++ b/feature/bookmarks/src/test/java/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModelTest.kt @@ -23,6 +23,8 @@ import com.google.samples.apps.nowinandroid.core.testing.repository.TestUserData import com.google.samples.apps.nowinandroid.core.testing.util.MainDispatcherRule import com.google.samples.apps.nowinandroid.core.ui.NewsFeedUiState.Loading import com.google.samples.apps.nowinandroid.core.ui.NewsFeedUiState.Success +import kotlin.test.assertEquals +import kotlin.test.assertIs import kotlinx.coroutines.flow.collect import kotlinx.coroutines.launch import kotlinx.coroutines.test.UnconfinedTestDispatcher @@ -30,8 +32,6 @@ import kotlinx.coroutines.test.runTest import org.junit.Before import org.junit.Rule import org.junit.Test -import kotlin.test.assertEquals -import kotlin.test.assertIs /** * To learn more about how this test handles Flows created with stateIn, see diff --git a/feature/foryou/src/test/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModelTest.kt b/feature/foryou/src/test/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModelTest.kt index 603a42bed..daeeb46c2 100644 --- a/feature/foryou/src/test/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModelTest.kt +++ b/feature/foryou/src/test/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModelTest.kt @@ -34,6 +34,7 @@ import com.google.samples.apps.nowinandroid.core.testing.util.MainDispatcherRule import com.google.samples.apps.nowinandroid.core.testing.util.TestNetworkMonitor import com.google.samples.apps.nowinandroid.core.testing.util.TestSyncStatusMonitor import com.google.samples.apps.nowinandroid.core.ui.NewsFeedUiState +import kotlin.test.assertEquals import kotlinx.coroutines.flow.collect import kotlinx.coroutines.launch import kotlinx.coroutines.test.UnconfinedTestDispatcher @@ -43,7 +44,6 @@ import kotlinx.datetime.Instant import org.junit.Before import org.junit.Rule import org.junit.Test -import kotlin.test.assertEquals /** * To learn more about how this test handles Flows created with stateIn, see diff --git a/feature/topic/src/test/java/com/google/samples/apps/nowinandroid/feature/topic/TopicViewModelTest.kt b/feature/topic/src/test/java/com/google/samples/apps/nowinandroid/feature/topic/TopicViewModelTest.kt index b00e05cae..17d7b45ee 100644 --- a/feature/topic/src/test/java/com/google/samples/apps/nowinandroid/feature/topic/TopicViewModelTest.kt +++ b/feature/topic/src/test/java/com/google/samples/apps/nowinandroid/feature/topic/TopicViewModelTest.kt @@ -28,6 +28,8 @@ import com.google.samples.apps.nowinandroid.core.testing.repository.TestTopicsRe import com.google.samples.apps.nowinandroid.core.testing.repository.TestUserDataRepository import com.google.samples.apps.nowinandroid.core.testing.util.MainDispatcherRule import com.google.samples.apps.nowinandroid.feature.topic.navigation.topicIdArg +import kotlin.test.assertEquals +import kotlin.test.assertIs import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.first @@ -38,8 +40,6 @@ import kotlinx.datetime.Instant import org.junit.Before import org.junit.Rule import org.junit.Test -import kotlin.test.assertEquals -import kotlin.test.assertIs /** * To learn more about how this test handles Flows created with stateIn, see From fbaa8eaff58293edc08aed4a542bd6257a1fb54e Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Fri, 11 Nov 2022 14:37:23 +0100 Subject: [PATCH 04/23] Migrate hard-coded JSON data into JSON assets files JSON minification is no longer necessary since assets files are already gzipped during APK/AAB packaging. Fixes #391 --- core/data/build.gradle.kts | 5 + .../nowinandroid/core/data/di/DataModule.kt | 13 + .../repository/fake/FakeAuthorsRepository.kt | 29 +- .../repository/fake/FakeNewsRepository.kt | 28 +- .../repository/fake/FakeTopicsRepository.kt | 31 +- .../testdoubles/TestNiaNetworkDataSource.kt | 16 +- core/network/build.gradle.kts | 5 + core/network/src/main/assets/authors.json | 794 +++ core/network/src/main/assets/data.json | 4581 +++++++++++++++++ core/network/src/main/assets/topics.json | 154 + .../main/java/JvmUnitTestFakeAssetManager.kt | 43 + .../core/network/fake/FakeAssetManager.kt} | 22 +- .../core/network/fake/FakeDataSource.kt | 58 +- .../network/fake/FakeNiaNetworkDataSource.kt | 12 +- .../fake/FakeNiaNetworkDataSourceTest.kt | 41 +- 15 files changed, 5705 insertions(+), 127 deletions(-) create mode 100644 core/network/src/main/assets/authors.json create mode 100644 core/network/src/main/assets/data.json create mode 100644 core/network/src/main/assets/topics.json create mode 100644 core/network/src/main/java/JvmUnitTestFakeAssetManager.kt rename core/{data/src/test/java/com/google/samples/apps/nowinandroid/core/data/repository/FakeNewsRepositoryTest.kt => network/src/main/java/com/google/samples/apps/nowinandroid/core/network/fake/FakeAssetManager.kt} (50%) diff --git a/core/data/build.gradle.kts b/core/data/build.gradle.kts index 44a186647..717082bfe 100644 --- a/core/data/build.gradle.kts +++ b/core/data/build.gradle.kts @@ -22,6 +22,11 @@ plugins { android { namespace = "com.google.samples.apps.nowinandroid.core.data" + testOptions { + unitTests { + isIncludeAndroidResources = true + } + } } dependencies { diff --git a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/di/DataModule.kt b/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/di/DataModule.kt index 8f66787f3..a0cc51001 100644 --- a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/di/DataModule.kt +++ b/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/di/DataModule.kt @@ -16,6 +16,7 @@ package com.google.samples.apps.nowinandroid.core.data.di +import android.content.Context import com.google.samples.apps.nowinandroid.core.data.repository.AuthorsRepository import com.google.samples.apps.nowinandroid.core.data.repository.NewsRepository import com.google.samples.apps.nowinandroid.core.data.repository.OfflineFirstAuthorsRepository @@ -26,15 +27,27 @@ import com.google.samples.apps.nowinandroid.core.data.repository.TopicsRepositor import com.google.samples.apps.nowinandroid.core.data.repository.UserDataRepository import com.google.samples.apps.nowinandroid.core.data.util.ConnectivityManagerNetworkMonitor import com.google.samples.apps.nowinandroid.core.data.util.NetworkMonitor +import com.google.samples.apps.nowinandroid.core.network.fake.FakeAssetManager import dagger.Binds import dagger.Module +import dagger.Provides import dagger.hilt.InstallIn +import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.components.SingletonComponent +import javax.inject.Singleton @Module @InstallIn(SingletonComponent::class) interface DataModule { + companion object { + @Provides + @Singleton + fun providesFakeAssetManager( + @ApplicationContext context: Context + ): FakeAssetManager = FakeAssetManager(context.assets::open) + } + @Binds fun bindsTopicRepository( topicsRepository: OfflineFirstTopicsRepository diff --git a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/fake/FakeAuthorsRepository.kt b/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/fake/FakeAuthorsRepository.kt index a6e2f69d8..21edb4ffe 100644 --- a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/fake/FakeAuthorsRepository.kt +++ b/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/fake/FakeAuthorsRepository.kt @@ -21,16 +21,18 @@ import com.google.samples.apps.nowinandroid.core.data.repository.AuthorsReposito import com.google.samples.apps.nowinandroid.core.model.data.Author import com.google.samples.apps.nowinandroid.core.network.Dispatcher import com.google.samples.apps.nowinandroid.core.network.NiaDispatchers.IO +import com.google.samples.apps.nowinandroid.core.network.fake.FakeAssetManager import com.google.samples.apps.nowinandroid.core.network.fake.FakeDataSource import com.google.samples.apps.nowinandroid.core.network.model.NetworkAuthor -import javax.inject.Inject import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.flowOn import kotlinx.coroutines.flow.map -import kotlinx.serialization.decodeFromString import kotlinx.serialization.json.Json +import kotlinx.serialization.json.decodeFromStream +import java.io.InputStream +import javax.inject.Inject /** * Fake implementation of the [AuthorsRepository] that returns hardcoded authors. @@ -41,20 +43,23 @@ import kotlinx.serialization.json.Json class FakeAuthorsRepository @Inject constructor( @Dispatcher(IO) private val ioDispatcher: CoroutineDispatcher, private val networkJson: Json, + private val assets: FakeAssetManager, ) : AuthorsRepository { override fun getAuthorsStream(): Flow> = flow { emit( - networkJson.decodeFromString>(FakeDataSource.authors).map { - Author( - id = it.id, - name = it.name, - imageUrl = it.imageUrl, - twitter = it.twitter, - mediumPage = it.mediumPage, - bio = it.bio, - ) - } + assets.open(FakeDataSource.AUTHORS) + .use>(networkJson::decodeFromStream) + .map { + Author( + id = it.id, + name = it.name, + imageUrl = it.imageUrl, + twitter = it.twitter, + mediumPage = it.mediumPage, + bio = it.bio, + ) + } ) } .flowOn(ioDispatcher) diff --git a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/fake/FakeNewsRepository.kt b/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/fake/FakeNewsRepository.kt index cfbd3cb98..78b64d124 100644 --- a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/fake/FakeNewsRepository.kt +++ b/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/fake/FakeNewsRepository.kt @@ -24,15 +24,17 @@ import com.google.samples.apps.nowinandroid.core.database.model.asExternalModel import com.google.samples.apps.nowinandroid.core.model.data.NewsResource import com.google.samples.apps.nowinandroid.core.network.Dispatcher import com.google.samples.apps.nowinandroid.core.network.NiaDispatchers.IO +import com.google.samples.apps.nowinandroid.core.network.fake.FakeAssetManager import com.google.samples.apps.nowinandroid.core.network.fake.FakeDataSource import com.google.samples.apps.nowinandroid.core.network.model.NetworkNewsResource -import javax.inject.Inject import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.flowOn -import kotlinx.serialization.decodeFromString import kotlinx.serialization.json.Json +import kotlinx.serialization.json.decodeFromStream +import java.io.InputStream +import javax.inject.Inject /** * Fake implementation of the [NewsRepository] that retrieves the news resources from a JSON String. @@ -42,13 +44,15 @@ import kotlinx.serialization.json.Json */ class FakeNewsRepository @Inject constructor( @Dispatcher(IO) private val ioDispatcher: CoroutineDispatcher, - private val networkJson: Json + private val networkJson: Json, + private val assets: FakeAssetManager, ) : NewsRepository { override fun getNewsResourcesStream(): Flow> = flow { emit( - networkJson.decodeFromString>(FakeDataSource.data) + assets.open(FakeDataSource.DATA) + .use>(networkJson::decodeFromStream) .map(NetworkNewsResource::asEntity) .map(NewsResourceEntity::asExternalModel) ) @@ -61,13 +65,15 @@ class FakeNewsRepository @Inject constructor( ): Flow> = flow { emit( - networkJson.decodeFromString>(FakeDataSource.data) - .filter { - it.authors.intersect(filterAuthorIds).isNotEmpty() || - it.topics.intersect(filterTopicIds).isNotEmpty() - } - .map(NetworkNewsResource::asEntity) - .map(NewsResourceEntity::asExternalModel) + assets.open(FakeDataSource.DATA).use { stream -> + networkJson.decodeFromStream>(stream) + .filter { + it.authors.intersect(filterAuthorIds).isNotEmpty() || + it.topics.intersect(filterTopicIds).isNotEmpty() + } + .map(NetworkNewsResource::asEntity) + .map(NewsResourceEntity::asExternalModel) + } ) } .flowOn(ioDispatcher) diff --git a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/fake/FakeTopicsRepository.kt b/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/fake/FakeTopicsRepository.kt index 7ee46fed6..bfb09439a 100644 --- a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/fake/FakeTopicsRepository.kt +++ b/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/fake/FakeTopicsRepository.kt @@ -21,16 +21,18 @@ import com.google.samples.apps.nowinandroid.core.data.repository.TopicsRepositor import com.google.samples.apps.nowinandroid.core.model.data.Topic import com.google.samples.apps.nowinandroid.core.network.Dispatcher import com.google.samples.apps.nowinandroid.core.network.NiaDispatchers.IO +import com.google.samples.apps.nowinandroid.core.network.fake.FakeAssetManager import com.google.samples.apps.nowinandroid.core.network.fake.FakeDataSource import com.google.samples.apps.nowinandroid.core.network.model.NetworkTopic -import javax.inject.Inject import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.flowOn import kotlinx.coroutines.flow.map -import kotlinx.serialization.decodeFromString import kotlinx.serialization.json.Json +import kotlinx.serialization.json.decodeFromStream +import java.io.InputStream +import javax.inject.Inject /** * Fake implementation of the [TopicsRepository] that retrieves the topics from a JSON String, and @@ -42,19 +44,22 @@ import kotlinx.serialization.json.Json class FakeTopicsRepository @Inject constructor( @Dispatcher(IO) private val ioDispatcher: CoroutineDispatcher, private val networkJson: Json, + private val assets: FakeAssetManager, ) : TopicsRepository { - override fun getTopicsStream(): Flow> = flow> { + override fun getTopicsStream(): Flow> = flow { emit( - networkJson.decodeFromString>(FakeDataSource.topicsData).map { - Topic( - id = it.id, - name = it.name, - shortDescription = it.shortDescription, - longDescription = it.longDescription, - url = it.url, - imageUrl = it.imageUrl - ) - } + assets.open(FakeDataSource.TOPICS) + .use>(networkJson::decodeFromStream) + .map { + Topic( + id = it.id, + name = it.name, + shortDescription = it.shortDescription, + longDescription = it.longDescription, + url = it.url, + imageUrl = it.imageUrl + ) + } ) } .flowOn(ioDispatcher) diff --git a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/testdoubles/TestNiaNetworkDataSource.kt b/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/testdoubles/TestNiaNetworkDataSource.kt index 82a6755a4..bafabe0eb 100644 --- a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/testdoubles/TestNiaNetworkDataSource.kt +++ b/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/testdoubles/TestNiaNetworkDataSource.kt @@ -17,12 +17,13 @@ package com.google.samples.apps.nowinandroid.core.data.testdoubles import com.google.samples.apps.nowinandroid.core.network.NiaNetworkDataSource -import com.google.samples.apps.nowinandroid.core.network.fake.FakeDataSource +import com.google.samples.apps.nowinandroid.core.network.fake.FakeNiaNetworkDataSource import com.google.samples.apps.nowinandroid.core.network.model.NetworkAuthor import com.google.samples.apps.nowinandroid.core.network.model.NetworkChangeList import com.google.samples.apps.nowinandroid.core.network.model.NetworkNewsResource import com.google.samples.apps.nowinandroid.core.network.model.NetworkTopic -import kotlinx.serialization.decodeFromString +import kotlinx.coroutines.runBlocking +import kotlinx.coroutines.test.UnconfinedTestDispatcher import kotlinx.serialization.json.Json enum class CollectionType { @@ -36,16 +37,13 @@ enum class CollectionType { */ class TestNiaNetworkDataSource : NiaNetworkDataSource { - private val networkJson = Json + private val source = FakeNiaNetworkDataSource(UnconfinedTestDispatcher(), Json) - private val allTopics = - networkJson.decodeFromString>(FakeDataSource.topicsData) + private val allTopics = runBlocking { source.getTopics() } - private val allAuthors = - networkJson.decodeFromString>(FakeDataSource.authors) + private val allAuthors = runBlocking { source.getAuthors() } - private val allNewsResources = - networkJson.decodeFromString>(FakeDataSource.data) + private val allNewsResources = runBlocking { source.getNewsResources() } private val changeLists: MutableMap> = mutableMapOf( CollectionType.Topics to allTopics diff --git a/core/network/build.gradle.kts b/core/network/build.gradle.kts index 7ac3a7b8b..57a75a8bf 100644 --- a/core/network/build.gradle.kts +++ b/core/network/build.gradle.kts @@ -27,6 +27,11 @@ android { buildConfig = true } namespace = "com.google.samples.apps.nowinandroid.core.network" + testOptions { + unitTests { + isIncludeAndroidResources = true + } + } } secrets { diff --git a/core/network/src/main/assets/authors.json b/core/network/src/main/assets/authors.json new file mode 100644 index 000000000..ee074ddf3 --- /dev/null +++ b/core/network/src/main/assets/authors.json @@ -0,0 +1,794 @@ +[ + { + "id": "1", + "name": "Márton Braun", + "mediumPage": "https://medium.com/@zsmb13", + "twitter": "https://twitter.com/zsmb13", + "imageUrl": "https://pbs.twimg.com/profile_images/1047591879431397377/nNjQUt0F_400x400.jpg", + "bio": "Márton is an Android Developer Relations Engineer at Google, working on anything and everything Kotlin." + }, + { + "id": "2", + "name": "Greg Hartrell", + "mediumPage": "https://medium.com/@greghart/about", + "twitter": "https://twitter.com/ghartrell", + "imageUrl": "https://pbs.twimg.com/profile_images/971602488984940547/plY3bBRz_400x400.jpg", + "bio": "Greg Hartrell is a product leader with a 15+ year history helping large teams build high performing software products and businesses. At Google, he’s a Product Management Director at Google Play / Android, covering product lines from games, to digital content and platform expansion. He’s previously been VP of Product Development at Capcom/Beeline, and a product leader for 8 years at Microsoft for Xbox Live/360 and the Windows platform. When he’s not speaking, he enjoys looting random objects out of boxes, jumping from platform to platform, and grinding while afk." + }, + { + "id": "3", + "name": "Simona Stojanovic", + "mediumPage": "https://medium.com/@anomisSi", + "twitter": "https://twitter.com/anomisSi", + "imageUrl": "https://pbs.twimg.com/profile_images/1437506849016778756/pG0NZALw_400x400.jpg", + "bio": "Android Developer Relations Engineer @Google, working on the Compose team and taking care of Layouts & Navigation." + }, + { + "id": "4", + "name": "Andrew Flynn", + "mediumPage": "", + "twitter": "", + "imageUrl": "https://lh3.googleusercontent.com/xfI5PujnEqdQ4GlsRZAvVOGiC_v3VTz6wYM8kxaPyOtXIZY4-BDYOr-d-cjN8kxAkr4yAthuWu2gTZ7t-do=s1016-rw-no", + "bio": "Andrew joined Google in 2007 after graduating from Dartmouth College. He has worked on a wide range of team from Ads to Android devices to Google Fi, and currently works on the Play Store." + }, + { + "id": "5", + "name": "Jon Boekenoogen", + "mediumPage": "", + "twitter": "", + "imageUrl": "", + "bio": "" + }, + { + "id": "6", + "name": "Florina Muntenescu", + "mediumPage": "https://medium.com/@florina.muntenescu", + "twitter": "https://twitter.com/FMuntenescu", + "imageUrl": "https://pbs.twimg.com/profile_images/726323972686503937/nZkTQVQJ_400x400.jpg", + "bio": "Florina is working as an Android Developer Relations Engineer at Google, helping developers build beautiful apps with Jetpack Compose. She has been working with Android for more than 10 years, previous work covering news at upday, payment solutions at payleven and navigation services at Garmin." + }, + { + "id": "7", + "name": "Lidia Gaymond", + "mediumPage": "", + "twitter": "", + "imageUrl": "", + "bio": "" + }, + { + "id": "8", + "name": "Vicki Amin", + "mediumPage": "", + "twitter": "", + "imageUrl": "", + "bio": "" + }, + { + "id": "9", + "name": "Marcel Pintó", + "mediumPage": "https://medium.com/@marxallski", + "twitter": "https://twitter.com/marxallski", + "imageUrl": "https://pbs.twimg.com/profile_images/1196804242310234112/6pq8qguX_400x400.jpg", + "bio": "" + }, + { + "id": "10", + "name": "Krish Vitaldevara", + "mediumPage": "", + "twitter": "https://twitter.com/vitaldevara", + "imageUrl": "https://pbs.twimg.com/profile_images/1326982232100122626/GDN-QoX-_400x400.png", + "bio": "" + }, + { + "id": "11", + "name": "Gerry Fan", + "mediumPage": "", + "twitter": "", + "imageUrl": "", + "bio": "" + }, + { + "id": "12", + "name": "Pietro Maggi", + "mediumPage": "https://medium.com/@pmaggi", + "twitter": "https://twitter.com/pfmaggi", + "imageUrl": "https://pbs.twimg.com/profile_images/1149328128868794370/T59BFarK_400x400.png", + "bio": "Pietro joined Android DevRel in 2018, and has worked supporting Jetpack WorkManager, large screen devices and lately, Android Enterprise." + }, + { + "id": "13", + "name": "Rohan Shah", + "mediumPage": "", + "twitter": "twitter.com/rohanscloud", + "imageUrl": "https://pbs.twimg.com/profile_images/828723313396502530/dfVBFeZP_400x400.jpg", + "bio": "Product Manager on the System UI team, experienced Android developer in a past life. Focused on customization, gesture navigation, and smooth motion." + }, + { + "id": "14", + "name": "Dave Burke", + "mediumPage": "", + "twitter": "https://twitter.com/davey_burke", + "imageUrl": "https://pbs.twimg.com/profile_images/1035017742825357312/f0IHVAG1_400x400.jpg", + "bio": "" + }, + { + "id": "15", + "name": "Meghan Mehta", + "mediumPage": "https://medium.com/@magicalmeghan", + "twitter": "https://twitter.com/adressyengineer", + "imageUrl": "https://pbs.twimg.com/profile_images/1121847353214824449/wIB-dD0__400x400.jpg", + "bio": "Meghan has been in Google DevRel since 2018 and loves every minute of it. She mostly works on training and is passionate about making learning Android accessible to all. Outside of work you can find her singing, dancing, or petting dogs." + }, + { + "id": "16", + "name": "Anna Bernbaum", + "mediumPage": "", + "twitter": "", + "imageUrl": "", + "bio": "Anna Bernbaum is a Product Manager for Wear OS, she specifically focusses on Watch Faces, Complications and Tiles." + }, + { + "id": "17", + "name": "Adarsh Fernando", + "mediumPage": "", + "twitter": "https://twitter.com/AdarshFernando", + "imageUrl": "https://pbs.twimg.com/profile_images/1291755351298121728/SFGD_KCm_400x400.jpg", + "bio": "" + }, + { + "id": "18", + "name": "Madan Ankapura", + "mediumPage": "", + "twitter": "https://twitter.com/madan_ankapura", + "imageUrl": "https://pbs.twimg.com/profile_images/195140822/IMG_0612_400x400.JPG", + "bio": "" + }, + { + "id": "19", + "name": "Kateryna Semenova", + "mediumPage": "https://medium.com/@katerynasemenova", + "twitter": "https://twitter.com/SKateryna", + "imageUrl": "https://miro.medium.com/fit/c/176/176/2*MWidJNpRKpwnPhMYw1hBTA.png", + "bio": "Kate joined Google Android DevRel team in 2020 with the focus on Android performance. She worked on Android12 features, such as Splash screens and App links as well as App startup improvements. Right now she is working on new Deep links tools for develoeprs.\n\nBefore Google, Kate worked as an Android engineer at Lyft. She built LyftPink membership, ride passes, subscriptions and users onboarding flow." + }, + { + "id": "20", + "name": "Rahul Ravikumar", + "mediumPage": "https://medium.com/@rahulrav", + "twitter": "https://twitter.com/tikurahul", + "imageUrl": "https://pbs.twimg.com/profile_images/839866273160822785/sLb2Ld53_400x400.jpg", + "bio": "Software Engineer on the Toolkit team. Recent projects include Jetpack Macrobenchmarks, Baseline Profiles and WorkManager." + }, + { + "id": "21", + "name": "Chris Craik", + "mediumPage": "https://medium.com/@chriscraik", + "twitter": "https://twitter.com/chris_craik", + "imageUrl": "https://pbs.twimg.com/profile_images/865356883971919872/EkFpz3r1_400x400.jpg", + "bio": "" + }, + { + "id": "22", + "name": "Alex Vanyo", + "mediumPage": "https://medium.com/@alexvanyo", + "twitter": "https://twitter.com/alex_vanyo", + "imageUrl": "https://pbs.twimg.com/profile_images/1431339735931305989/nOE2mmi2_400x400.jpg", + "bio": "Alex joined Android DevRel in 2021, and has worked supporting form factors from small watches to large foldables and tablets. His special interests include insets, Compose, testing and state." + }, + { + "id": "23", + "name": "Manuel Vivo", + "mediumPage": "https://medium.com/@manuelvicnt", + "twitter": "https://twitter.com/manuelvicnt", + "imageUrl": "https://pbs.twimg.com/profile_images/1126564755202760705/x3qLaiBB_400x400.jpg", + "bio": "Manuel is an Android Developer Relations Engineer at Google. With previous experience at Capital One, he currently focuses on App Architecture, Kotlin & Coroutines, Dependency Injection and Jetpack Compose." + }, + { + "id": "24", + "name": "Arjun Dayal", + "mediumPage": "", + "twitter": "", + "imageUrl": "", + "bio": "" + }, + { + "id": "25", + "name": "Murat Yener", + "mediumPage": "https://medium.com/@yenerm", + "twitter": "https://twitter.com/yenerm", + "imageUrl": "https://pbs.twimg.com/profile_images/1201558524385316866/7lBmCYmD_400x400.jpg", + "bio": "" + }, + { + "id": "26", + "name": "Alex Saveau", + "mediumPage": "https://medium.com/@SUPERCILEX", + "twitter": "https://twitter.com/SUPERCILEX", + "imageUrl": "https://pbs.twimg.com/profile_images/1093296033759604736/kO9WSDy4_400x400.jpg", + "bio": "" + }, + { + "id": "27", + "name": "Paul Lammertsma", + "mediumPage": "https://medium.com/@officesunshine", + "twitter": "https://twitter.com/officesunshine", + "imageUrl": "https://pbs.twimg.com/profile_images/1281278859506331651/2XBTbfIK_400x400.jpg", + "bio": "Paul is an Android Developer Relations Engineer at Google, supporting developers for TVs, watches and large screens. He has passionate about building amazing Android experiences since Froyo." + }, + { + "id": "28", + "name": "Caren Chang", + "mediumPage": "https://medium.com/@calren24", + "twitter": "https://twitter.com/calren24", + "imageUrl": "https://pbs.twimg.com/profile_images/1521260707521519617/cW-G-T2R_400x400.jpg", + "bio": "Developer Relations Engineer on the Android team, with a focus on Accessibiliity. " + }, + { + "id": "29", + "name": "Mayuri Khinvasara Khabya", + "mediumPage": "https://medium.com/@mayuri.k18", + "twitter": "https://twitter.com/mayuri_k", + "imageUrl": "https://pbs.twimg.com/profile_images/769886964170436608/6tsEB7zi_400x400.jpg", + "bio": "Mayuri is an Android Developer Relations Engineer and has worked across Android TV, App performance and device backup" + }, + { + "id": "30", + "name": "Romain Guy", + "mediumPage": "https://medium.com/@romainguy", + "twitter": "https://twitter.com/romainguy", + "imageUrl": "https://pbs.twimg.com/profile_images/459175652105527298/6qGNL0QI_400x400.jpeg", + "bio": "Romain joined the Android team in 2007, working on the UI Toolkit and the Graphics pipeline for many years. He now leads the Toolkit and Jetpack teams." + }, + { + "id": "31", + "name": "Chet Haase", + "mediumPage": "https://chethaase.medium.com/", + "twitter": "https://twitter.com/chethaase", + "imageUrl": "https://miro.medium.com/max/3150/1*5pR0GFT8Cosn_zGIdRfc0Q.jpeg", + "bio": "Chet joined the Android team in 2010, where he has worked as an engineer and lead for the UI Toolkit team, as Chief Android Advocate on the Developer Relations team, and now as an engineer on the Graphics team." + }, + { + "id": "32", + "name": "Tor Norbye", + "mediumPage": "", + "twitter": "https://twitter.com/tornorbye", + "imageUrl": "https://pbs.twimg.com/profile_images/1411058065839845376/SeUHA-sR_400x400.jpg", + "bio": "Tor joined the Android team in 2010, and leads engineering for Android Studio." + }, + { + "id": "33", + "name": "Nicole Laure", + "mediumPage": "", + "twitter": "https://twitter.com/nicolelaure", + "imageUrl": "https://pbs.twimg.com/profile_images/442979550285557760/0nq7QOTn_400x400.jpeg", + "bio": "" + }, + { + "id": "34", + "name": "Yigit Boyar", + "mediumPage": "https://medium.com/@yigit", + "twitter": "https://twitter.com/yigitboyar", + "imageUrl": "https://pbs.twimg.com/profile_images/530840695347482624/me4HgEMU_400x400.jpeg", + "bio": "Yigit joined the Android team in 2014 and worked on various projects from RecyclerView to Architecture Components with the dream of making Android development better. Still trying :)" + }, + { + "id": "35", + "name": "Sean McQuillan", + "mediumPage": "https://medium.com/@objcode", + "twitter": "https://twitter.com/objcode", + "imageUrl": "https://pbs.twimg.com/profile_images/913524063175286784/nhyO1wkU_400x400.jpg", + "bio": "Software Engineer on the Toolkit team. Working on making text 📜 sparkle ✨. Also helping melting face 🫠 render on your phone." + }, + { + "id": "36", + "name": "Ben Weiss", + "mediumPage": "https://medium.com/@keyboardsurfer", + "twitter": "https://twitter.com/keyboardsurfer", + "imageUrl": "https://pbs.twimg.com/profile_images/1455956781830709255/GqeqbgEY_400x400.jpg", + "bio": "Ben works as an Engineer on the Android Developer Relations team. Over the years he contributed to many areas of Android. To get the latest info on what's up with Ben, read one of his articles or follow him on Twitter." + }, + { + "id": "37", + "name": "Carmen Jackson", + "mediumPage": "", + "twitter": "", + "imageUrl": "https://media-exp1.licdn.com/dms/image/C5603AQE8wPl4iNUPeA/profile-displayphoto-shrink_200_200/0/1553574292680?e=1655337600&v=beta&t=6zsc9QaC95DM19uXbG3FJQwUIpObp4XeO-WsLzlNGIo", + "bio": "Carmen has been an engineer on the Android Platform Performance team since 2016 and has worked with Android for over 10 years. She currently leads a team focused on improving application performance." + }, + { + "id": "38", + "name": "TJ Dahunsi", + "mediumPage": "https://tunjid.medium.com/", + "twitter": "", + "imageUrl": "https://pbs.twimg.com/profile_images/1504815529848152074/iA9Q_QME_400x400.jpg", + "bio": "Tj is an engineer on the Android Developer Relations Team working on app architecture. He's also a connoiseur of fine memes." + }, + { + "id": "39", + "name": "Shailen Tuli", + "mediumPage": "", + "twitter": "https://twitter.com/shailentuli", + "imageUrl": "https://pbs.twimg.com/profile_images/1521593961/shailen_400x400.jpg", + "bio": "" + }, + { + "id": "40", + "name": "Kailiang Chen", + "mediumPage": "https://medium.com/@bbfee", + "twitter": "https://twitter.com/KailiangChen3", + "imageUrl": "https://avatars.githubusercontent.com/u/1756481?v=4", + "bio": "Kailiang is a software engineer on Android Camera Platform team. He works on Jetpack CameraX. In the past, he worked at Youtube and Uber." + }, + { + "id": "41", + "name": "Jeremy Walker", + "mediumPage": "https://medium.com/@codingjeremy", + "twitter": "https://twitter.com/codingjeremy", + "imageUrl": "https://pbs.twimg.com/profile_images/1124334569887428610/etnNE5hz_400x400.png", + "bio": "" + }, + { + "id": "42", + "name": "Don Turner", + "mediumPage": "https://medium.com/@donturner", + "twitter": "https://twitter.com/donturner", + "imageUrl": "https://pbs.twimg.com/profile_images/1282701855555018753/xcnlScis_400x400.jpg", + "bio": "Don is an engineer on the Android Developer Relations team. He has founded and led several businesses in the software development, digital marketing and events industries. He joined Google in 2014 and focuses on improving Android app architecture. " + }, + { + "id": "43", + "name": "Lilian Young", + "mediumPage": "", + "twitter": "https://twitter.com/memnus", + "imageUrl": "https://developer.android.com/events/dev-summit/images/speakers/lilian_young_720.jpg", + "bio": "Lilian has been part of the Android Vulnerability Rewards Program nearly from the beginning, since joining Android Security Assurance in 2016. As a member of both the vulnerability assessment team and the design review team for upcoming Android versions, they review bugs and features to determine which is which. " + }, + { + "id": "44", + "name": "Wenhung Teng", + "mediumPage": "", + "twitter": "", + "imageUrl": "https://lh3.googleusercontent.com/a-/AOh14Ghsnwfup3BUugAxNwQsAD8Ph_CWNrH8SL6Wb8OZ", + "bio": "" + }, + { + "id": "45", + "name": "Charcoal Chen", + "mediumPage": "https://medium.com/@charcoalchen", + "twitter": "", + "imageUrl": "https://miro.medium.com/fit/c/262/262/0*XgfVFjuchPekBYfh", + "bio": "Charcoal Chen is a software engineer on Jetpack CameraX team." + }, + { + "id": "46", + "name": "Mike Yerou", + "mediumPage": "", + "twitter": "", + "imageUrl": "", + "bio": "" + }, + { + "id": "47", + "name": "Peter Visontay", + "mediumPage": "", + "twitter": "", + "imageUrl": "", + "bio": "" + }, + { + "id": "48", + "name": "Marcelo Hernandez", + "mediumPage": "", + "twitter": "", + "imageUrl": "", + "bio": "" + }, + { + "id": "49", + "name": "Daniel Santiago", + "mediumPage": "https://medium.com/@danysantiago", + "twitter": "", + "imageUrl": "https://miro.medium.com/fit/c/262/262/2*fe7m2z-tRofWYjaiXihi9g.jpeg", + "bio": "" + }, + { + "id": "50", + "name": "Brad Corso", + "mediumPage": "https://medium.com/@bcorso1", + "twitter": "", + "imageUrl": "", + "bio": "" + }, + { + "id": "51", + "name": "Jonathan Koren", + "mediumPage": "https://medium.com/@jdkoren", + "twitter": "", + "imageUrl": "", + "bio": "Jonathan is an Android Developer Relations Engineer at Google, with particular interest in UI and app architecture. In the past, he developed Android applications and libraries at Yahoo and Personal Capital. In the future, he will have fixed the bugs he is writing in the present (hopefully)." + }, + { + "id": "52", + "name": "Anna-Chiara Bellini", + "mediumPage": "", + "twitter": "https://twitter.com/dr0nequeen", + "imageUrl": "https://pbs.twimg.com/profile_images/852490449961066496/AxcrR7xX_400x400.jpg", + "bio": "Anna-Chiara joined Google in 2019 after a long career as a Computer Engineer and Startup founder. Now she focuses on making Android developers' lives easier. " + }, + { + "id": "53", + "name": "Amanda Alexander", + "mediumPage": "", + "twitter": "", + "imageUrl": "https://developer.android.com/events/dev-summit/images/speakers/amanda_alexander_720.jpg", + "bio": "" + }, + { + "id": "54", + "name": "Android Developers Backstage", + "mediumPage": "", + "twitter": "", + "imageUrl": "https://ssl-static.libsyn.com/p/assets/d/b/3/6/db362cf09b34bd4ce5bbc093207a2619/height_250_width_250_Android_Devs_Backstage_Thumb_v2.png", + "bio": "Android Developers Backstage is a podcast by and for Android developers. Hosted by developers from the Android platform team, this show covers topics of interest to Android programmers, with in-depth discussions and interviews with engineers on the Android team at Google." + }, + { + "id": "55", + "name": "Nicole Borrelli", + "mediumPage": "https://medium.com/@borrelli", + "twitter": "", + "imageUrl": "", + "bio": "" + }, + { + "id": "56", + "name": "Dan Saadati", + "mediumPage": "", + "twitter": "", + "imageUrl": "", + "bio": "" + }, + { + "id": "57", + "name": "Nick Butcher", + "mediumPage": "https://medium.com/@crafty", + "twitter": "https://twitter.com/crafty", + "imageUrl": "https://pbs.twimg.com/profile_images/964457443517444097/AiMNiPtx_400x400.jpg", + "bio": "" + }, + { + "id": "58", + "name": "Ian Lake", + "mediumPage": "https://medium.com/@ianhlake", + "twitter": "https://twitter.com/ianhlake", + "imageUrl": "https://pbs.twimg.com/profile_images/438932314504978434/uj3Sgwy9_400x400.jpeg", + "bio": "Ian is a software engineer on the Android Toolkit team at Google. He leads the teams working on the Navigation Component, Fragments, and the integration of fundamental building blocks such as Lifecycle, Saved State, and Activity APIs across Jetpack." + }, + { + "id": "59", + "name": "Diana Wong", + "mediumPage": "", + "twitter": "https://twitter.com/droidiana1000", + "imageUrl": "https://pbs.twimg.com/profile_images/1268358805537951744/zCYvvpvV_400x400.jpg", + "bio": "Diana is a Product Manager on the Android Developer team, owning the Large Screen app ecosystem and loves Android foldables and tablets. Previously she's worked on Android Jetpack, the NDK, and the Android runtime (ART), among other things." + }, + { + "id": "60", + "name": "Patricia Correa", + "mediumPage": "", + "twitter": "", + "imageUrl": "https://pbs.twimg.com/profile_images/940666196050944000/w12h2qOz_400x400.jpg", + "bio": "" + }, + { + "id": "61", + "name": "The Modern Android Development Team", + "mediumPage": "", + "twitter": "", + "imageUrl": "", + "bio": "Development tools, APIs, language, and distribution technologies recommended by the Android team to help developers be productive and create better apps that run across billions of devices." + }, + { + "id": "62", + "name": "Maru Ahues Bouza", + "mediumPage": "https://medium.com/@mahues", + "twitter": "https://twitter.com/mabouza", + "imageUrl": "https://pbs.twimg.com/profile_images/1496362581253967872/4S4SBVYC_400x400.jpg", + "bio": "Director of Android Developer Relations @ Google. Venezolana 🇻🇪." + }, + { + "id": "63", + "name": "Purnima Kochikar", + "mediumPage": "", + "twitter": "https://twitter.com/purnimakochikar", + "imageUrl": "https://media-exp1.licdn.com/dms/image/C4D03AQHUHmUGiioagQ/profile-displayphoto-shrink_800_800/0/1639519434507?e=2147483647&v=beta&t=OIt4yJkbJ7Suewlgyc7OrsLweMLBULRBvVHb9h4ZX5o", + "bio": "VP, Google Play, Apps & Games at Google" + }, + { + "id": "64", + "name": "Yasmine Evjen", + "mediumPage": "https://yasmineevjen.medium.com/", + "twitter": "https://twitter.com/yasmineevjen", + "imageUrl": "https://miro.medium.com/fit/c/96/96/1*xK0hkXcG3TYOXDkdxorXOA.jpeg", + "bio": "Community Lead, Android Developer Relations" + }, + { + "id": "65", + "name": "Jolanda Verhoef", + "mediumPage": "https://medium.com/@lojanda", + "twitter": "https://twitter.com/Lojanda", + "imageUrl": "https://pbs.twimg.com/profile_images/1396863889996980225/qBgkY5rY_400x400.jpg", + "bio": "Android Developer Relations Engineer @Google, focusing on Jetpack Compose 🚀" + }, + { + "id": "66", + "name": "Rakesh Iyer", + "mediumPage": "", + "twitter": "", + "imageUrl": "", + "bio": "Staff Software Engineer" + }, + { + "id": "67", + "name": "Leland Rechis", + "mediumPage": "", + "twitter": "", + "imageUrl": "", + "bio": "Group Product Manager" + }, + { + "id": "68", + "name": "Chris Arriola", + "mediumPage": "https://medium.com/@arriolachris", + "twitter": "https://twitter.com/arriolachris", + "imageUrl": "https://pbs.twimg.com/profile_images/1392882006074093568/zITOTjRR_400x400.jpg", + "bio": "Android Developer Relations Engineer at Google" + }, + { + "id": "69", + "name": "Ryan O’Leary", + "mediumPage": "", + "twitter": "", + "imageUrl": "", + "bio": "" + }, + { + "id": "70", + "name": "Wojtek Kaliciński", + "mediumPage": "https://medium.com/@wkalicinski", + "twitter": "https://twitter.com/wkalic", + "imageUrl": "https://pbs.twimg.com/profile_images/906094366388875264/RzDjkVh7_400x400.jpg", + "bio": "Android Developer Relations Engineer" + }, + { + "id": "71", + "name": "Boris Farber", + "mediumPage": "", + "twitter": "https://twitter.com/BorisFarber", + "imageUrl": "", + "bio": "" + }, + { + "id": "72", + "name": "Xavier Ducrohet", + "mediumPage": "", + "twitter": "https://twitter.com/droidxav", + "imageUrl": "", + "bio": "" + }, + { + "id": "73", + "name": "Niharika Arora", + "mediumPage": "", + "twitter": "https://twitter.com/theDroidLady", + "imageUrl": "", + "bio": "" + }, + { + "id": "74", + "name": "Marcus Leal", + "mediumPage": "", + "twitter": "", + "imageUrl": "", + "bio": "" + }, + { + "id": "75", + "name": "Kseniia Shumelchyk", + "mediumPage": "", + "twitter": "https://twitter.com/kseniiaS", + "imageUrl": "https://media-exp1.licdn.com/dms/image/C4D03AQGdVWXQeoKI3g/profile-displayphoto-shrink_800_800/0/1635165725069?e=2147483647&v=beta&t=lyf4j6SsqBidEZQZem5Ewi62QkqERPxZWVNByKeRMks", + "bio": "Developer Relations Engineer @Google focused on ⌚️and 📱. Former Android @GoogleDevExpert, #GDG and @WomenTechmakers 🇺🇦." + }, + { + "id": "76", + "name": "Tom Grinsted", + "mediumPage": "", + "twitter": "", + "imageUrl": "", + "bio": "Group Product Manager, Google Play" + }, + { + "id": "77", + "name": "Fred Chung", + "mediumPage": "", + "twitter": "https://twitter.com/fredchung", + "imageUrl": "https://pbs.twimg.com/profile_images/2670736355/1a3614dbe62d9ba31933626e273a3f77_400x400.jpeg", + "bio": "Android Developer Relations Engineer at Google" + }, + { + "id": "78", + "name": "Kat Kuan", + "mediumPage": "", + "twitter": "https://twitter.com/katherine_kuan", + "imageUrl": "https://pbs.twimg.com/profile_images/1062503708964020224/gXpwDkOM_400x400.jpg", + "bio": "Android Developer Relations Engineer at Google" + }, + { + "id": "79", + "name": "Summers Pitman", + "mediumPage": "https://medium.com/@mrsummers", + "twitter": "", + "imageUrl": "https://miro.medium.com/fit/c/176/176/0*8wWgPmCgxariqpFo", + "bio": "" + }, + { + "id": "80", + "name": "Ben Trengrove", + "mediumPage": "https://medium.com/androiddevelopers/jetpack-compose-composition-tracing-9ec2b3aea535", + "twitter": "https://twitter.com/bentrengrove", + "imageUrl": "https://pbs.twimg.com/profile_images/1536488024661700609/zxdNBhWT_400x400.jpg", + "bio": "Android Developer Relations Engineer at Google" + }, + { + "id": "81", + "name": "Takeshi Hagikura", + "mediumPage": "https://medium.com/@thagikura", + "twitter": "", + "imageUrl": "https://miro.medium.com/fit/c/176/176/1*esL5OPETU5LMXNO-8os7dw.jpeg", + "bio": "Android Developer Relations Engineer at Google" + }, + { + "id": "82", + "name": "Miłosz Moczkowski", + "mediumPage": "https://medium.com/@m_moczkowski", + "twitter": "https://twitter.com/m_moczkowski?lang=en", + "imageUrl": "https://pbs.twimg.com/profile_images/1571116773612654592/sAJD-u-T_400x400.jpg", + "bio": "Android Developer Relations Engineer at Google" + }, + { + "id": "83", + "name": "Sabs", + "mediumPage": "https://medium.com/@iamsabs", + "twitter": "", + "imageUrl": "", + "bio": "Developer Relations Engineer at Google" + }, + { + "id": "84", + "name": "Alex Rocha", + "mediumPage": "", + "twitter": "", + "imageUrl": "", + "bio": "Developer Relations Engineer at Google" + }, + { + "id": "85", + "name": "Donovan McMurray", + "mediumPage": "", + "twitter": "", + "imageUrl": "", + "bio": "CameraX Developer Relations Engineer" + }, + { + "id": "86", + "name": "Ataul Munim", + "mediumPage": "https://medium.com/@ataulm", + "twitter": "https://twitter.com/ataulm", + "imageUrl": "https://pbs.twimg.com/profile_images/1586614206803083266/BrGIIU23_400x400.jpg", + "bio": "Android Developer Relations Engineer at Google" + }, + { + "id": "87", + "name": "Yafit Becher", + "mediumPage": "", + "twitter": "", + "imageUrl": "", + "bio": "Google Play Product Manager at Google" + }, + { + "id": "88", + "name": "Luis Dorelli", + "mediumPage": "", + "twitter": "", + "imageUrl": "", + "bio": "Google Play Software Engineer at Google" + }, + { + "id": "89", + "name": "Terence Zhang", + "mediumPage": "https://medium.com/@tzterencezhang", + "twitter": "", + "imageUrl": "", + "bio": "Developer Relations Engineer at Google" + }, + { + "id": "90", + "name": "Roberto Orgiu", + "mediumPage": "https://tiwiz.medium.com/", + "twitter": "https://twitter.com/_tiwiz", + "imageUrl": "https://pbs.twimg.com/profile_images/1504459589877698562/CncWER1I_400x400.jpg", + "bio": "@AndroidDev Relations Engineer @Google | Former @nytimes | 🚴🚵📷 👨‍👩‍👧‍👦" + }, + { + "id": "91", + "name": "Alejandra Stamato", + "mediumPage": "https://medium.com/@astamato", + "twitter": "https://twitter.com/astamatok", + "imageUrl": "https://developer.android.com/events/dev-summit/images/speakers/alejandra-stamato.jpg", + "bio": "Android Developer Relations Engineer 🥑 @Google #JetpackCompose | 🇦🇷 @ 🏴󠁧󠁢󠁥󠁮󠁧󠁿👑 | Ex 🇮🇪🍀" + }, + { + "id": "92", + "name": "Jason Tang", + "mediumPage": "", + "twitter": "", + "imageUrl": "", + "bio": "Product Manager at Google" + }, + { + "id": "93", + "name": "Diego Zuluaga", + "mediumPage": "", + "twitter": "", + "imageUrl": "", + "bio": "Developer Relations Engineer at Google" + }, + { + "id": "94", + "name": "Michael Mauzy", + "mediumPage": "", + "twitter": "", + "imageUrl": "", + "bio": "Developer Documentation at Google" + }, + { + "id": "95", + "name": "Dan Galpin", + "mediumPage": "https://medium.com/@dagalpin", + "twitter": "https://twitter.com/dagalpin", + "imageUrl": "https://developer.android.com/events/dev-summit/images/speakers/daniel-galpin_720.jpg", + "bio": "Android Developer Relations Engineer at Google" + }, + { + "id": "96", + "name": "Rebecca Franks", + "mediumPage": "https://medium.com/@riggaroo ", + "twitter": "https://twitter.com/riggaroo", + "imageUrl": "https://developer.android.com/events/dev-summit/images/speakers/rebecca-franks_720.jpg", + "bio": "Rebecca is a Developer Relations Engineer on the Android team. Having joined the team in 2022, she is focused on Jetpack Compose: all things animation and graphics. Prior to joining Google she worked on a couple of interesting projects such as a Image/Video editor and TV Streaming app. " + }, + { + "id": "97", + "name": "Rebecca Gutteridge", + "mediumPage": "", + "twitter": "https://twitter.com/BexSG_", + "imageUrl": "https://twitter.com/BexSG_/photo", + "bio": "Senior Android Developer Relations Engineer at Google" + }, + { + "id": "98", + "name": "Sachiyo Sugimoto", + "mediumPage": "", + "twitter": "", + "imageUrl": "", + "bio": "Android Partner Engineering" + }, + { + "id": "99", + "name": "Todd Burner", + "mediumPage": "https://medium.com/@tburner", + "twitter": "", + "imageUrl": "", + "bio": "Developer Relations Engineer" + } +] \ No newline at end of file diff --git a/core/network/src/main/assets/data.json b/core/network/src/main/assets/data.json new file mode 100644 index 000000000..35df98de3 --- /dev/null +++ b/core/network/src/main/assets/data.json @@ -0,0 +1,4581 @@ +[ + { + "id": "1", + "title": "Android Dev Summit ’22: Coming to you, online and around the world! ⛰️", + "content": "Android Dev Summit is back, so join us online or in person — for the first time since 2019 — at locations around the world. We’ll be sharing the sessions live on YouTube in three tracks spread across three weeks.", + "url": "https://android-developers.googleblog.com/2022/10/android-dev-summit.html", + "headerImageUrl": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1VWQmqQu6wDswls9f_5NpEQnq4eR57g2NwzWvhKItcKtV6rb_Cyo75XSyL6vvmCIo4tzQn-8taNagEp7QG0KU1L4yMqwbYozNMzBMEFxEN2XintAhy5nLI4RQDaOXr8dgiIFdGOBMdl577Ndelzc0tDBzjI6mz7e4MF8_Tn09KWguZi6I-bS5NbJn/w1200-h630-p-k-no-nu/unnamed%20%2816%29.png", + "publishDate": "2022-10-04T23:00:00.000Z", + "type": "Event 📆", + "topics": [ + "1" + ], + "authors": [ + "64" + ] + }, + { + "id": "2", + "title": "The new Google Pixel Watch is here — start building for Wear OS! ⌚", + "content": "We launched the Google Pixel Watch, powered by Wear OS 3.5, at the Made by Google event — the perfect device to showcase apps built with Compose for Wear OS. With Compose for Wear OS, the Tiles Material library, and the tools in Android Studio Dolphin, it’s now simpler and more efficient than ever to make apps for WearOS.", + "url": "https://android-developers.googleblog.com/2022/10/the-new-google-pixel-watch-is-here.html", + "headerImageUrl": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhH63icac2kmydOI8Fs2I09KiuRA3GUo2pfZ1Wpf0M5JIEoVQ8dj9LYSl8jpxSQlmlsUVXoeXbwN4UbHMCf5p0M7FHh_EXzMeFRAJ-6feI9-7eIyhBmtGZSD5o-MItwFLH_ESi15Cxd01AlznWaGy9WDqhK0NWtMQwiWELg3xE1I7hba-_7eVqs747V/w1200-h630-p-k-no-nu/WhasNewinPixelDevices_Social.png", + "publishDate": "2022-10-06T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "1", + "3", + "19" + ], + "authors": [] + }, + { + "id": "3", + "title": "Listen to our major Text to Speech upgrades for 64 bit devices 💬", + "content": "An upgrade to Speech Services by Google is rolling out to 64-bit Android devices via Google Play over the next few weeks, providing clearer, more natural voices. All 421 voices in 67 languages are being upgraded with a new voice model and synthesizer. The post includes more on this update, including demonstrations of some voice upgrades, along with guidance on how to use text to speech in your projects.", + "url": "https://android-developers.googleblog.com/2022/09/listen-to-our-major-text-to-speech-upgrades-for-64-bit-devices.html", + "headerImageUrl": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrHro6d3BTw7ZZ4IXgfb6_8aESB7-SsWfelDSSInZVamiMSnYpBZzGBaZBBrWxWwYgLqOHuOtroGvGjxrwzdUkhjwuIvM1u6chIblGKS1gQ6JVkjXr-Vztyk2zoYb1ylvhNgLgC5q6M-7LaiXT1xnAT96DvkPx89APNb8JEaz-1mnMRcfaOYYBHzQL/w1200-h630-p-k-no-nu/Text%20to%20Speech%20-%20Social%20-%201024x512.png", + "publishDate": "2022-09-27T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "14" + ], + "authors": [ + "66", + "67" + ] + }, + { + "id": "4", + "title": "MAD Skills Compose: Powerful Toolkit", + "content": "Learn about the powerful toolkit of UI components that ship with Compose enabling you to build rich UIs and interactions.", + "url": "https://medium.com/androiddevelopers/compose-toolkit-8d3651228764", + "headerImageUrl": "https://miro.medium.com/max/1200/1*3FZeNmAPZDYUCmgL0cBXoA.png", + "publishDate": "2022-09-29T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "3" + ], + "authors": [ + "68" + ] + }, + { + "id": "5", + "title": "MAD Skills Compose: Accelerate development with tooling", + "content": "Learn how to accelerate your Compose development process with a dive into Android Studio tooling support, including live templates, gutter icons for drawables and colors, composable preview functions, multipreview, preview on device, live edits of literals, and the Layout Inspector.", + "url": "https://medium.com/androiddevelopers/compose-tooling-42621bd8719b", + "headerImageUrl": "https://miro.medium.com/max/1200/1*WVUBQsNgePqQxmrHjaID4g.png", + "publishDate": "2022-10-06T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "3" + ], + "authors": [ + "68" + ] + }, + { + "id": "6", + "title": "Deep Links Crash Course: Part 3 - Troubleshooting", + "content": "In part 3 of the Deep Links Crash Course you'll learn how to diagnose and debug common issues with deep links using command line tools and the Android Debug Bridge (ADB).", + "url": "https://www.youtube.com/watch?v=OAxJ2kWG4ZI", + "headerImageUrl": "https://i.ytimg.com/vi/OAxJ2kWG4ZI/maxresdefault.jpg", + "publishDate": "2022-09-29T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "2", + "5" + ], + "authors": [] + }, + { + "id": "7", + "title": "Deep Links Crash Course: Part 4 - Deep links for your business", + "content": "Part 4 of the Deep Links Crash Course explores Deep links for your business, covering the importance and benefits of implementing deep links for your app, your users, and your business, including success stories and how App Links provide an optimal experience for users.", + "url": "https://www.youtube.com/watch?v=UvMIswgsJF8", + "headerImageUrl": "https://i.ytimg.com/vi/UvMIswgsJF8/maxresdefault.jpg", + "publishDate": "2022-10-05T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "2", + "5" + ], + "authors": [] + }, + { + "id": "8", + "title": "Migrating the AOSP QuickSearchBox App to Kotlin", + "content": "This article includes the methodology used in the migration to Kotlin, how manual changes were addressed, and what the impact to APK size and build speed was.", + "url": "https://medium.com/androiddevelopers/migrating-the-aosp-quicksearchbox-app-to-kotlin-1264346619ec", + "headerImageUrl": "https://miro.medium.com/max/720/1*cWnPe-kD4hAVuH3IIcNUcA.png", + "publishDate": "2022-09-22T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "10" + ], + "authors": [ + "69" + ] + }, + { + "id": "9", + "title": "Prepare your Android Project for Android Gradle plugin 8.0 API changes", + "content": "How to prepare your Android Project for Android Gradle plugin 8.0 API changes; this article specifically addresses migrating from the Transform APIs — which slow down builds and will be removed in 8.0 — to the Artifacts API and Instrumentation API.", + "url": "https://android-developers.googleblog.com/2022/10/prepare-your-android-project-for-agp8-changes.html", + "headerImageUrl": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgy74acii7wq-Z2pW8TUSga1YGpRKjLZjroOlZlUillRJuTFIlGpUi93PPletKlkcAaz9u6NgF8_LejO9686VYEWNtO2ypawLgpY2QW7JMtrMSVTlPsRGgEDUiQJKUfzEXw2Q_Y7qX1CSUlH9lma8Jjdm3AqMogbEI6PScD3AK1XsWgHmVeqJlVqUiK/w1200-h630-p-k-no-nu/Header-PrepareyourAndroidProjectforAGP8.0Changes%20.png", + "publishDate": "2022-10-05T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "5", + "5" + ], + "authors": [ + "70", + "71", + "72" + ] + }, + { + "id": "10", + "title": "Optimize for Android (Go edition) : Lessons from Google apps Part 2", + "content": "Part two of the Optimize for Android Go : Lessons from Google apps blog series, covering strategies Google apps used to improve startup latency and optimize app size — things that will improve the user experience for any app.", + "url": "https://android-developers.googleblog.com/2022/09/optimize-for-android-go-lessons-from-google-apps-part-2.html", + "headerImageUrl": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD7uoBIqlA_WYXwuhyDxKy1Nt2ibaa_GYd9l8ewfQcC7f-f11t0WRCTTS6XhwnkJMqWUxSX-nxAq9DD8oBbk_Om2ik0yNMOV8lHw0sGmRAixLY2T0dxpKtQe0DnsVrzmexNSX1-BYdz9p0cvCtdXoxgDi1Mx6OLixzC5JAnxEEAf1TkHrTQON0fURg/w1200-h630-p-k-no-nu/MAD%20App%20Architecture%20launch%20-%20Mobile%20%281%29%20%281%29.png", + "publishDate": "2022-09-27T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "7" + ], + "authors": [ + "73" + ] + }, + { + "id": "11", + "title": "Helping users discover apps for all their devices from their phone", + "content": "Changes in Google Play are helping users discover apps for all their devices from their phone, including homepages for non-phone devices, a device search filter, and the ability to remotely install an app to another device.", + "url": "https://android-developers.googleblog.com/2022/09/helping-users-discover-apps-for-all-their-devices-from-their-phone.html", + "headerImageUrl": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyGaErzRykqFDWOwEmkHWos7vU7OhdETz5GNEjObA7FOhCudnf5DiQ1hAfpxuq102pwxuBf_ZCeifURihNeAwNnLj46pkdoBdbl_JYn8A9plqwaqS8D_0XML6B7Bupt0GhPZuABbfTXB_nkWsVVW6faVQXqpetHIV6QlNQyl1WD6zuojFf-U7wDSHO/w1200-h630-p-k-no-nu/image3.gif", + "publishDate": "2022-09-26T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "12" + ], + "authors": [ + "74" + ] + }, + { + "id": "12", + "title": "Deep Links Crash Course : Part 3 Troubleshooting Your Deep Links", + "content": "The Deep Links Crash Course continues with Summers writing an article on troubleshooting deep links. He goes over common issues that can occur with deep links and how to solve them.", + "url": "https://medium.com/androiddevelopers/deep-links-crash-course-part-3-troubleshooting-your-deep-links-61329fecb93", + "headerImageUrl": "https://miro.medium.com/max/1200/1*IsRqP0Fe9I6YLxrJybIG6Q.png", + "publishDate": "2022-09-15T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "6" + ], + "authors": [ + "79" + ] + }, + { + "id": "13", + "title": "Jetpack Compose Composition Tracing", + "content": "Ben covered Compose Composition Tracing, a new feature that allows showing Jetpack Compose composable functions in the Android Studio Flamingo system trace profiler. This feature gives you the low intrusiveness from system tracing, with method tracing levels of detail in composition. This is great for checking your Compose app’s performance and working out why your app may not be performing as you expect. Learn more about this feature in the post!", + "url": "https://medium.com/androiddevelopers/jetpack-compose-composition-tracing-9ec2b3aea535", + "headerImageUrl": "https://miro.medium.com/max/700/1*jPVPY4GjPRK3prnJ2o09cQ.png", + "publishDate": "2022-09-19T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "3", + "7" + ], + "authors": [ + "80" + ] + }, + { + "id": "14", + "title": "Android Studio: Dolphin is available", + "content": "Android Studio Dolphin is here! In this post, Takeshi goes over the three key themes: Jetpack Compose, Wear OS, and development productivity. Exciting features include the Compose Animation Inspector, the Wear OS Emulator Pairing Assistant, and Gradle managed virtual devices. Learn about all the new features in the blog post or the video!", + "url": "https://www.youtube.com/watch?v=EQ_btxhpRzU&t=1s", + "headerImageUrl": "https://i.ytimg.com/vi/EQ_btxhpRzU/maxresdefault.jpg", + "publishDate": "2022-09-14T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "5", + "5" + ], + "authors": [ + "81" + ] + }, + { + "id": "15", + "title": "Mad Skills: Compose", + "content": "Chris started a brand new MAD Skills series on Compose. This series is a great place to start to learn how to think and start building apps with Compose.", + "url": "https://www.youtube.com/watch?v=4UXJTeb9Khg&t=1s", + "headerImageUrl": "https://i.ytimg.com/vi/4UXJTeb9Khg/maxresdefault.jpg", + "publishDate": "2022-09-12T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "3" + ], + "authors": [ + "68" + ] + }, + { + "id": "16", + "title": "Introducing Compose Camp", + "content": "We launched Compose Camp, a series of in-person and virtual sessions where you can learn how to build Android apps with Jetpack Compose alongside your peers. Compose Camp has two tracks: the beginner track caters to complete Android beginners including people that have no coding experience, and the experienced track is for Android developers who want to learn how to migrate to Compose and stop using XML.", + "url": "https://android-developers.googleblog.com/2022/09/learn-jetpack-compose-at-compose-camp-near-you.html", + "headerImageUrl": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjn6__UOZ_lipXjY09TrHeXW4HjKodPUdFzmovYRn1tLwdYr8GVKjCN6wfgKpcby5rrJ6JFrUmZozT7aeDkp8x7v46QdH6wtz9ysQFTZAQPwswFfGWQkWcPmKHbeELq_BUUhazt4ppYm9ErYEo7HbFzPCfBid4IQ9qL-hydSgRpJx7w2lNZKh5ylNcb/w1200-h630-p-k-no-nu/Compose%20Camp%203.png", + "publishDate": "2022-09-12T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "1", + "3" + ], + "authors": [ + "78" + ] + }, + { + "id": "17", + "title": "Privacy Sandbox developer preview 5 🔐", + "content": "The Privacy Sandbox aims to develop new technologies that improve user privacy and enable effective, personalized advertising experiences for mobile apps. Developer Preview 5 was released, this version is a major milestone that will become the foundation for upcoming Privacy Sandbox Beta releases. Please keep giving us your feedback! See what’s changed in the blog post.", + "url": "https://android-developers.googleblog.com/2022/09/privacy-sandbox-developer-preview-5-is-here.html", + "headerImageUrl": "https://services.google.com/fb/forms/privacysandbox/fb/forms/getlogo/5679849861677056/", + "publishDate": "2022-09-06T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "11" + ], + "authors": [ + "77" + ] + }, + { + "id": "18", + "title": "Guide to app modularization 🧩", + "content": "The team just released new guidance on modularization. Guidance on this topic has been one of the top community requests and here it is! The guide is split into two parts. The overview page gives you a high level, theoretical overview of the matter and its benefits. The common modularization patterns page dives deep into practical examples in the context of modern Android architecture. Take a look at the guide announcement blog post to learn more about this.", + "url": "https://android-developers.googleblog.com/2022/09/announcing-new-guide-to-android-app-modularization.html", + "headerImageUrl": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0ZsQN4PZ_SQ975Hfbc-LDFXMTgOr6RVf42kSUBqNxfv9OcDvc6dTYRZPynsYx0JIlXT7k5TMz_Kjq7bJstYb4dUy2ZX6ilugMH20JudIZISLWEsa19f8sN0hDxA7JWXgS570gDxkXNp3ioHxxH42tvquQ0wUK-qPS6Qv2OeGK06HhumP2vvC0V07V/s1600/Android-AppModularization_4209x1253.png", + "publishDate": "2022-09-05T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "4" + ], + "authors": [ + "82" + ] + }, + { + "id": "19", + "title": "Build an offline-first app", + "content": "If you need to make your app work offline, we got you covered. The new Build an offline-first app guide helps you design your app to properly handle reads and writes, and deal with synchronization and conflict resolution in a device with no Internet connectivity.", + "url": "https://developer.android.com/topic/architecture/data-layer/offline-first", + "headerImageUrl": "https://developer.android.com/static/images/topic/architecture/data-layer/data-layer.png", + "publishDate": "2022-09-13T23:00:00.000Z", + "type": "Docs 📑", + "topics": [ + "4" + ], + "authors": [] + }, + { + "id": "20", + "title": "State holders and UI state page ", + "content": "Another new guide is the State holders and UI state page in the UI layer docs. Not everything needs to be present in ViewModel classes. This page goes through the different types of state holders you can find in the UI layer and what their responsibilities are.", + "url": "https://developer.android.com/topic/architecture/ui-layer/stateholders", + "headerImageUrl": "https://developer.android.com/static/images/topic/architecture/ui-layer/udf.png", + "publishDate": "2022-09-13T23:00:00.000Z", + "type": "Docs 📑", + "topics": [ + "4", + "3" + ], + "authors": [] + }, + { + "id": "21", + "title": "Architecture pathway", + "content": "If you want to learn all about Architecture and be up-to-date with our current best practices, check out the Architecture pathway, that got updated with all the videos of the Architecture MAD Skills series we produced early this year and the new docs.", + "url": "https://developer.android.com/courses/pathways/android-architecture", + "headerImageUrl": "https://developer.android.com/static/topic/libraries/architecture/images/mad-arch-overview.png", + "publishDate": "2022-09-13T23:00:00.000Z", + "type": "Codelab", + "topics": [ + "4" + ], + "authors": [] + }, + { + "id": "22", + "title": "Mad Skills: Performance ⚡️", + "content": "Ben wrote this blog post that contains a summary of all the videos on MAD Skills: Performance! Don't miss it out!", + "url": "https://medium.com/androiddevelopers/mad-skills-performance-wrap-up-33688abfc51f", + "headerImageUrl": "https://miro.medium.com/max/720/0*qdkZp112bKTGtQIN", + "publishDate": "2022-09-13T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "7" + ], + "authors": [ + "36" + ] + }, + { + "id": "23", + "title": "AndroidX releases 🚀", + "content": "Since the previous episode, there are some AndroidX releases worth highlighting.Core and core-ktx made it to 1.9.0 stable. This version improves compatibility with Android 13 adding parity between the accessibility framework and compat APIs, and some other additions. Other releases include new in beta Car app 1.3, and new in alpha Navigation 2.6 and Test Ui Automator 2.3.", + "url": "https://developer.android.com/jetpack/androidx/versions/all-channel", + "headerImageUrl": "https://developer.android.com/images/social/android-developers.png", + "publishDate": "2022-09-13T23:00:00.000Z", + "type": "Jetpack release 🚀", + "topics": [ + "8" + ], + "authors": [] + }, + { + "id": "24", + "title": "Precise Improvements: How TikTok Enhanced its Video Social Experience on Android", + "content": "The Developer Relations team wrote about how TikTok Enhanced its Video Social Experience on Android. They were able to significantly improve their overall performance by following Android’s performance guidance, and employing their deep understanding of development tools such as Android Gradle Plugin and Jetpack libraries. Read more here!", + "url": "https://android-developers.googleblog.com/2022/08/precise-improvements-how-tiktok-enhanced-its-social-experience-on-android.html", + "headerImageUrl": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvwJsvRHyECCaiD1FaBBCLGrUr-PoZoDaqm9aUKoswBFPOlWyKNvcC94FhX6M6Ugdo0wVTdZyI48BUmKaiA1xSgOcEE_xOFt9EGmoHd9PDHyJ4mAiKrfjnFHBIEKgjL1JhFeTQWbjWec4DJX-q9lnYAw5b9l0vC7nM09QBKtItv7JmBNxjYosCroQI/s1600/241588700__38488906__148018.png", + "publishDate": "2022-09-13T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "7" + ], + "authors": [] + }, + { + "id": "25", + "title": "The deep links crash course, Part 1: Introduction to deep links", + "content": "Sabs started a crash course series about deep links. The first part is an introduction to deep links with a blog post and a video. Get to know what a deep link is, go from URIs to app links, and more!", + "url": "https://medium.com/androiddevelopers/the-deep-links-crash-course-part-1-introduction-to-deep-links-2189e509e269", + "headerImageUrl": "https://miro.medium.com/max/720/1*m44rS8zc3W23lmDy1_Vu8g.png", + "publishDate": "2022-09-01T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "7" + ], + "authors": [ + "83" + ] + }, + { + "id": "26", + "title": "Experimenting with Jetpack Glance", + "content": "Marcel wrote about experimenting with Jetpack Glance that covers a standalone experimental repository to supplement Jetpack Glance with tools that are commonly required for development but not yet available. At the moment, it includes a composable to display RemoteViews inside your app (enabling Live Edit), a debug tool to view and interact with AppWidget snapshots embedded inside the app, and a Material3 Scaffold for AppWidgets.", + "url": "https://medium.com/androiddevelopers/experimenting-with-jetpack-glance-35fbffe520f4", + "headerImageUrl": "https://miro.medium.com/max/720/0*gfm9zG95iVoEX5Gu", + "publishDate": "2022-08-31T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "3", + "2" + ], + "authors": [ + "9" + ] + }, + { + "id": "27", + "title": "Jetpack Compose: Debugging Recomposition", + "content": "Ben Trengove wrote about Debugging recomposition in Compose. Check it out because it also contains a screencast of Ben fixing a performance issue in Jetsnack, a Compose sample. For this, Ben also uses the layout inspector in Android Studio where you can see the recomposition and skip counts of composable functions.", + "url": "https://medium.com/androiddevelopers/jetpack-compose-debugging-recomposition-bfcf4a6f8d37", + "headerImageUrl": "https://miro.medium.com/max/720/1*gwdtRcu1bo_PoH8rwh5E4A.png", + "publishDate": "2022-09-06T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "7", + "3", + "5", + "5" + ], + "authors": [ + "80" + ] + }, + { + "id": "28", + "title": "Optimize for Android (Go edition): Lessons from Google apps - Part 1", + "content": "Nikariha started another blog post series about optimizing for Android Go edition. The first part introduces Android Go edition, why you’d want to build for it, and some best practices based on experience building the Gboard and Camera from Google apps.", + "url": "https://android-developers.googleblog.com/2022/09/optimize-for-android-go-lessons-from-google-apps-part-1.html", + "headerImageUrl": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjT34hXV07gVlKKi5X9mjpDGRlawITJfAKr7BpE7E02gtIYVqxYW8RoyjX_SPWJo0KS4PcBNy9rqITsAx0UnXeZp0V6zEoldaBCy9FJ9wyyebLEpPoxJgT6BENWxJqpIrihbpcwUsXO45qhcDAJJ3zTldnKkT8Dw_5VGxl2xYTA2trIVGsczYZLJgKj/s1600/MAD%20App%20Architecture%20launch%20-%20header%20%282%29.png", + "publishDate": "2022-09-07T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "7" + ], + "authors": [ + "73" + ] + }, + { + "id": "29", + "title": "ADB Podcast Episodes🎙: Episode 188 - Android 13", + "content": "In Episode 188: Android 13, Chet, Romain, and Tor talk about some of their favorite new features and changes of the new version of Android, both for users and developers.", + "url": "https://adbackstage.libsyn.com/episode-188-android-13", + "headerImageUrl": "https://ssl-static.libsyn.com/p/assets/4/6/e/5/46e518b4880184c288c4a68c3ddbc4f2/ADB_188_Android_13.jpg", + "publishDate": "2022-08-31T23:00:00.000Z", + "type": "Podcast 🎙", + "topics": [ + "13" + ], + "authors": [ + "31" + ] + }, + { + "id": "30", + "title": "Cross device SDK Developer Preview 📱↔️📱", + "content": "We launched the Cross device SDK for Android developer preview, which allows you to build rich multi-device experiences, abstracting away the intricacies involved with working with device discovery, authentication, and connection protocols.", + "url": "https://android-developers.googleblog.com/2022/07/announcing-cross-device-SDK-Developer-Preview-for-Android.html", + "headerImageUrl": "https://miro.medium.com/max/1280/0*1CDepdsU40_03H5K.png", + "publishDate": "2022-08-25T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "8", + "6" + ], + "authors": [ + "84" + ] + }, + { + "id": "31", + "title": "CameraX 1.2 is now in Beta", + "content": "CameraX version 1.2 is now in Beta. It introduces a zero shutter lag capture mode along with MlKitAnalyzer, an implementation of ImageAnalysis.Analyzer that handles much of the ML Kit setup for you. MlKitAnalyzer works with both cameraController and cameraProvider workflows and can even handle coordinate transformations between ML Kit output and your PreviewView. Zero shutter lag greatly reduces image capture lag on supported devices by using a circular buffer of captures to get the frame closest to the actual press of the shutter button.", + "url": "https://android-developers.googleblog.com/2022/08/camerax-12-is-now-in-beta.html", + "headerImageUrl": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiS_SSchtaoz90hvgXHZQzwD61bSnd06zOvd7L2sLG-isR8ykrzy7Afk1snnZjCBVkNtMXrmCJIMJfp-gP3X3NMXSbPdVvEgmpqSfTIph-vc_QkBVPDgH8ZQonnMu-XY5Aasi4tp1nmI5jetU2eF4TK_AMOWqA0gLxadk-0dPt2wjpruoDOhxP4PhE_/w681-h202/Android_NewCameraXInBeta_4209x1253.png", + "publishDate": "2022-08-23T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "18" + ], + "authors": [ + "85" + ] + }, + { + "id": "32", + "title": "Build Tiles fast with the WearOS Material Tiles Library ⌚", + "content": "Tiles are one of the most used surfaces on Wear OS, providing users glanceable access to the information and actions they need to get things done quickly. We launched the Tiles Material library allowing you to use pre-built Material components such as Button, Chip, CompactChip, TitleChip, CircularProgressIndicator, and Text along with layouts such as PrimaryLayout, EdgeContentLayout, MultiButtonLayout, and MultiSlotLayout to create tiles that embrace the latest Material design for Wear OS. Together with the Tiles Design Kit, they help you to easily follow the Tiles Design Guidelines.", + "url": "https://android-developers.googleblog.com/2022/08/wear-os-tiles-material-library-build-tiles-fast.html", + "headerImageUrl": "https://miro.medium.com/max/1278/0*tgTI6u6xZZFHhvSc.png", + "publishDate": "2022-08-23T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "19", + "2" + ], + "authors": [ + "16", + "86" + ] + }, + { + "id": "33", + "title": "New deep links monitor in Play Console 🔗", + "content": "Deep links allow you to get your users directly to in-app content by accepting traffic from external sources, including the web. Since answering basic questions like “is this URL deep-linked?” or “why is this deep link not working?” can be difficult to answer, many apps have partial, broken, or no deep links configured. To make it easier for you to keep your deep links in good shape, we’ve introduced a new, dedicated Play Console page that gives you a quick but comprehensive snapshot of your current setup along with tooling to help you identify and troubleshoot issues at a glance.", + "url": "https://android-developers.googleblog.com/2022/08/monitor-your-deep-links-in-one-place.html", + "headerImageUrl": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj42yJ079EEgbm1oAfoXwCKB_LxBw_0iEPsixWd572w6BThCaA5P-O6Ahp7P6SCcCgLZ59rKPtQFkfbpGeVn-f7dk2ef81nSMMqHz3IEw1FL9fAfhiFGgPJZNu5wny2AoWWZ0Ma1PAqGkSGS60eGB59abQHdQ_Hb-_9VdEnS7yg4JLmUIUuW3dNxg0l/w640-h190/Android-DeepLinksWithGooglePlayConsole_4209x1253%20.png", + "publishDate": "2022-08-21T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "12", + "2", + "5" + ], + "authors": [ + "87", + "88" + ] + }, + { + "id": "34", + "title": "Celebrating 5 years of Kotlin on Android 🎉", + "content": "Five years ago Android announced official support for the interoperable, mature, production-ready, and open source Kotlin programming language. Since then, JetBrains and Google have been collaborating around the development of Kotlin, and the Kotlin Foundation was co-founded by the two companies; JetBrains developing both the language and tooling has given Kotlin outstanding IDE support. We put together some posts and videos to celebrate the journey and elaborate the milestones of Kotlin on Android with many of the people that helped to make it happen.", + "url": "https://android-developers.googleblog.com/2022/08/celebrating-5-years-of-kotlin-on-android.html", + "headerImageUrl": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRKysS-6n5YNTJAtLz2PkRNV5XsFnSlod6hwTvKRHbUb0W5pE8RszvmTfFK6GNbh2TKa3dbTP1AjB4pI0NB3agCRb1F4MbP5LQb6Q-8oveLb-mDjqFteWaZnIaztK4W1yONSJ5M6ffWAt-qu9CAu04v0PBIg6OIm9kFHMX6kolmf3zkagX2MIDDOtn/w640-h192/Kotlin%20Header.png", + "publishDate": "2022-08-16T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "10" + ], + "authors": [ + "1" + ] + }, + { + "id": "35", + "title": "Mad Skills: Performance 🏎️💨", + "content": "The MAD Skills series on Performance continued with a blog post from \nBen and a video from Tomáš that covers how to use the Macrobenchmark library along with UIAutomator to help generate Baseline Profiles for you. Baseline Profiles help your app to start and run faster by optimizing critical code paths ahead of time, allowing for a smoother user experience.", + "url": "https://medium.com/androiddevelopers/improving-performance-with-baseline-profiles-fdd0db0d8cc6", + "headerImageUrl": "https://miro.medium.com/max/1400/0*Tztd-PrhMpbWTXGC", + "publishDate": "2022-08-22T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "7" + ], + "authors": [ + "36" + ] + }, + { + "id": "36", + "title": "AndroidX releases 🚀", + "content": "In AndroidX, the Wear Compose Version 1.0.1 release fixed a logic bug in ScalingLazyColumn. As mentioned before, we released Wear Tiles Version 1.1. Webkit Version 1.5 added setAlgorithmicDarkeningAllowed, and added support for setting an allow-list of URLs for the configured proxy.", + "url": "https://developer.android.com/jetpack/androidx/versions", + "headerImageUrl": "https://developer.android.com/images/social/android-developers.png", + "publishDate": "2022-10-25T23:00:00.000Z", + "type": "DAC - Android version features", + "topics": [ + "8", + "19" + ], + "authors": [] + }, + { + "id": "37", + "title": "A story of App Excellence, featuring Tik Tok", + "content": "Over in video, we covered how TikTok used Android tools to improve app startup and make the user experience more seamless, and how it impacted app usage and Play Store ratings.", + "url": "https://youtu.be/k9Pdgiugleg", + "headerImageUrl": "https://i.ytimg.com/vi/k9Pdgiugleg/maxresdefault.jpg", + "publishDate": "2022-08-31T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "5", + "7", + "2" + ], + "authors": [ + "61" + ] + }, + { + "id": "38", + "title": "Design high-quality apps for kids", + "content": "We introduced the Google Play Academy course around designing kids’ apps, ensuring that they’re fun, usable, and appropriate for their target age group. The course covers the framework for rating kids apps on Google Play that teachers across the US use, so you can understand what they’re looking for to help your app stand out.", + "url": "https://youtu.be/-FUmVUPThX8", + "headerImageUrl": "https://i.ytimg.com/vi/-FUmVUPThX8/hqdefault.jpg", + "publishDate": "2022-08-31T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "12", + "2" + ], + "authors": [ + "61" + ] + }, + { + "id": "39", + "title": "MAD about Media", + "content": "Avish, our summer Android DevRel Engineer intern, discussed modern approaches to creating Android media apps leveraging experience in converting the Universal Android Media Player (UAMP) media playback sample app to Compose, updating it to use modern libraries such as Media3.", + "url": "https://medium.com/androiddevelopers/mad-about-media-f536f7d601c", + "headerImageUrl": "https://miro.medium.com/max/1400/1*BKAchEMpYdP3dEyaIAP5xA.png", + "publishDate": "2022-08-25T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "18" + ], + "authors": [ + "61" + ] + }, + { + "id": "40", + "title": "Top Tips for Adopting Android’s Notification Permission", + "content": "Terence covered tips to improve your app’s user experience with notifications before targeting Android 13, as well as how to test your app’s integration with the permission without flashing different OS versions onto your device.", + "url": "https://medium.com/androiddevelopers/top-tips-for-adopting-androids-notification-permission-bf69afd677b8", + "headerImageUrl": "https://miro.medium.com/max/1400/1*XQmi35H84FdYhY_ONP6ntQ.png", + "publishDate": "2022-08-23T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "13", + "6" + ], + "authors": [ + "89" + ] + }, + { + "id": "41", + "title": "Jetpack Compose Accompanist — An FAQ.", + "content": "Ben wrote a FAQ on the Jetpack Compose Accompanist, a labs-like environment for new Compose APIs. Accompanist is used to help fill known gaps in the Compose toolkit, experiment with new APIs and to gather insight into the development experience of building a Compose library. The goal of Accompanist is to eventually upstream libraries into the official toolkit. (at which point they will be deprecated and removed from Accompanist) Current libraries in Accompanist include support for Flow Layouts, Pager, Navigation Transitions, and Swipe Refresh.", + "url": "https://medium.com/androiddevelopers/jetpack-compose-accompanist-an-faq-b55117b02712", + "headerImageUrl": "https://miro.medium.com/max/1400/1*w_MA7M6H9HpwdWb_fx-2IA.png", + "publishDate": "2022-08-18T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "3" + ], + "authors": [ + "80" + ] + }, + { + "id": "42", + "title": "Introducing the MAD Skills series on Performance", + "content": "It’s time for another series of MAD Skills on Performance! Performance spans every aspect of Android development, and as part of Modern Android Development we’re aiming to make it more approachable and user-friendly. We have also found direct correlations between improved app performance, user satisfaction and business metrics.", + "url": "https://medium.com/androiddevelopers/introducing-the-mad-skills-series-on-performance-7dbb26e8b17f", + "headerImageUrl": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkWBi6t47sZvF2EqduUT_a38uamN_jLbjDIoada1oN9PSbkyyduU1f_x6t4H8gX1ghq11Wyt09dBjw-l3efO5EO62AvdrVELnk4qc6Xft96Fk_ViJ8xipsPXirDnvVoYw44tl-gJqUHqOXxrdbPbZjjGwXGmoLL992o_5AMdkpnWyoL0oz8HrAJagH/w1200-h630-p-k-no-nu/unnamed_%281%29.png.jpeg", + "publishDate": "2022-08-09T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "7", + "5" + ], + "authors": [ + "36" + ] + }, + { + "id": "43", + "title": "MAD Skills: Important Performance Metrics", + "content": "Before you begin to work with performance effectively, we recommend you make yourself familiar with key performance metrics. By understanding what metrics you should look at, you will make inspecting, improving and monitoring performance easier.", + "url": "https://medium.com/androiddevelopers/important-performance-metrics-c7dacf018eb3", + "headerImageUrl": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYdlNQTXP5pTpqN3fQwfF__WHtEmflMVuLS6ErWorUPYM9MwThUmwuBfFhDMVtw5X1jVmchC9z20Bl_yD7M_thVbCmhRJLyZqh3sHZBm6Sryz_xyu4cvusk_xx1kJCh5ANM-TtsvG1WwqMUPllTZegJlstUj3KDesGJ2Xrh6AsLU9HvaFCLT4RLZd7/w1200-h630-p-k-no-nu/resize%20play_10-android_dev.png", + "publishDate": "2022-08-10T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "7" + ], + "authors": [ + "36" + ] + }, + { + "id": "44", + "title": "MAD Skills: Inspecting Performance\n", + "content": "This MAD Skills article on inspecting performance introduces you to tools and methods that help when your code’s performance. When you inspect performance you make sure that what’s happening in your app aligns with what you expect to happen.", + "url": "https://medium.com/androiddevelopers/inspecting-performance-95b76477a3d7", + "headerImageUrl": "https://1.bp.blogspot.com/-9MiK78CFMLM/YQFurOq9AII/AAAAAAAAQ1A/lKj5GiDnO_MkPLb72XqgnvD5uxOsHO-eACLcBGAsYHQ/w1200-h630-p-k-no-nu/Android-Compose-1.0-header-v2.png", + "publishDate": "2022-08-14T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "7", + "5" + ], + "authors": [ + "36" + ] + }, + { + "id": "45", + "title": "Consuming flows safely in Jetpack Compose", + "content": "Collecting flows in a lifecycle-aware manner is the recommended way to collect flows on Android. If you’re building an Android app with Jetpack Compose, use the collectAsStateWithLifecycle API to collect flows in a lifecycle-aware manner from your UI.", + "url": "https://medium.com/androiddevelopers/consuming-flows-safely-in-jetpack-compose-cde014d0d5a3", + "headerImageUrl": "https://miro.medium.com/max/720/1*LL7FLWzjT4c6bQdGlvdz7w.png", + "publishDate": "2022-08-09T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "3", + "8", + "4" + ], + "authors": [ + "23" + ] + }, + { + "id": "46", + "title": "Brushing up on Compose Text coloring", + "content": "Alejandra Stamato’s last article covered compose brush text coloring, and this week she taught us how to take it a step further and add animation to brush text coloring. She covers using the animation APIs in conjunction with the Brush APIs, demonstrating these with a candy cane shimmer effect and a back-and-forth shimmer effect.", + "url": "https://medium.com/androiddevelopers/brushing-up-on-compose-text-coloring-84d7d70dd8fa", + "headerImageUrl": "https://miro.medium.com/max/720/1*PZK1BRIYM22iLQhexPGT1Q.png", + "publishDate": "2022-07-24T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "3" + ], + "authors": [ + "91" + ] + }, + { + "id": "47", + "title": "Final Android 13 Beta update, official release is next!", + "content": "We’re just a few weeks away from the official release of Android 13! Meanwhile, we published the last Beta for your testing and development. We reached Platform Stability at Beta 3, so all app-facing surfaces are final, including SDK and NDK APIs, app-facing system behaviors, and restrictions on non-SDK interfaces. With these and the latest fixes and optimizations, Beta 4 gives you everything you need to complete your testing.", + "url": "https://android-developers.googleblog.com/2022/07/Final-Android-13-Beta-update-official-release-is-next.html", + "headerImageUrl": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKBGMJx7yKi1RuRF9Q1X-1GOgfCvJ7XVIhNZlsmYgeabTPyljHhEOr2F0iGkF2BM7jeE1HYnL75GXllESyWgpEZEQWm9xfKU5a8kDgrvS5-ZZN0eTq0QaTsCBOAFkJzGX9kBTZxfo_4p6O3DYkXVqsBMRynTq1Mw3EDq3hwEL5OcoCrSQ8rOvFrraK/w1200-h630-p-k-no-nu/Compose%20Blog%20social.jpg", + "publishDate": "2022-07-12T23:00:00.000Z", + "type": "DAC - Android version features", + "topics": [ + "13" + ], + "authors": [ + "62" + ] + }, + { + "id": "48", + "title": "10 years of Google Play", + "content": "In 2012, the team opened the (digital) doors of Google Play. A decade later, more than 2.5 billion people in over 190 countries use Google Play every month to discover apps, games and digital content. And more than 2 million developers work with us to build their businesses and reach people around the globe! Congratulations to the Google Play team for this huge milestone.", + "url": "https://android-developers.googleblog.com/2022/03/celebrating-10-years-of-google-play.html", + "headerImageUrl": "https://developer.android.com/images/social/android-developers.png", + "publishDate": "2022-07-24T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "12" + ], + "authors": [ + "63" + ] + }, + { + "id": "49", + "title": "Android Basics with Compose Unit 3 available", + "content": "The Unit 3 of Android Basics with Compose course is available already! Unit 3 covers how to build apps that display a list of data and how to make your apps more beautiful with Material Design.", + "url": "https://developer.android.com/courses/android-basics-compose/course", + "headerImageUrl": "https://www.gstatic.com/devrel-devsite/prod/vab7ee6e3641f10848d404faa598f256587df1a361a1e70cd114230c2961b73d9/android/images/lockup.svg", + "publishDate": "2022-08-02T23:00:00.000Z", + "type": "Codelab", + "topics": [ + "2", + "3", + "10" + ], + "authors": [] + }, + { + "id": "50", + "title": "Jetpack Compose 1.2 is now stable", + "content": "This release contains new features like downloadable fonts, lazy grids, and improvements for tablets and Chrome OS with better focus, mouse, and input handling.", + "url": "https://android-developers.googleblog.com/2022/07/jetpack-compose-1-2-is-now-stable.html", + "headerImageUrl": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1vg5QdkR-Hj7oQ3yueza1VGYFrNOBbuAxRQycRYGO6HLR-Hf2LR9DHT__OxVFecRYFZbVq6cYg6ca15h7kkKO99zzheFMB_x6MdTO74DaJpTR933pmrkJ-pWVq_7fEmN38nYHQv2u1l7-Ukk8RtNPrtGnn-ChdYwcbbx8Q-MnbJ3z3BjSj3U0Q-YX/w1200-h630-p-k-no-nu/header-image-predictive-back-blog%20%281%29.png", + "publishDate": "2022-07-26T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "3" + ], + "authors": [ + "65" + ] + }, + { + "id": "51", + "title": "Compose for Wear OS is now 1.0", + "content": "Compose for Wear OS makes building apps for Wear OS easier, faster, and more intuitive by following the declarative approach and offering powerful Kotlin syntax. Moving forward, Compose for Wear OS is our recommended approach for building user interfaces for Wear OS apps.", + "url": "https://android-developers.googleblog.com/2022/07/compose-for-wear-os-10-stable.html", + "headerImageUrl": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsdruRjulgaFFtqwrnp6Z0mzIAhmMzJZIOUjVqugCB3i5noivoLOVecpMNBQGVIsG_kjkzthRTpibL-CEmlsn5nZJUhnSkkdhEe0V2yaNPQt2l-FGh0sQz1JnOZVRHRDZIr72twcPZQL7Q0kdgb-JzxgKJlZSsESJkMLuAkvqCfyXoE7d-XxFQYVoJ/w1200-h630-p-k-no-nu/Google_Android_DeveloperPoweredCTS_4209x1253.jpg", + "publishDate": "2022-07-26T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "3", + "19" + ], + "authors": [ + "75" + ] + }, + { + "id": "52", + "title": "AndroidX releases 🚀", + "content": "Jetpack Compose 1.2, Compose for Wear OS 1.0, Core splashscreen v1.0, and Profile Installer v1.2 went stable. In RC, you can find AppCompat v1.5, Compose Compiler v1.3 (that brings support to Kotlin version 1.7.10), Emoji2 v1.2, and ShareTarget v1.2. Lastly, Wear Tiles v1.1 reached its first beta version!", + "url": "https://developer.android.com/jetpack/androidx/versions/all-channel", + "headerImageUrl": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirdkVqgyYoZDm0ktFFXjyIATaFKJUCVU0lIzQpTw4dlJjvqruWxLJn5mJ5xHoZijqVQ-poghVIGWGCpZM0Nb_bzx274kr1Lo_nn0PvEzMXcU_DgNEFrKzw5HtuE_vA9zfRVy8RDuiAIgC_aDVhHmGdqSLhzsPK5Pj2m3QNB4lzsf4E0VkbctqiowND/w1200-h630-p-k-no-nu/Android-discountinuing-kotlin-synthetics-for-views-social%20%281%29.png", + "publishDate": "2022-08-02T23:00:00.000Z", + "type": "Jetpack release 🚀", + "topics": [ + "8" + ], + "authors": [] + }, + { + "id": "53", + "title": "Make your app large screen ready", + "content": "Learn how to get started with large screen support and why it is so important. Accurately handling orientation changes, aspect ratios, and adaptive layouts may seem challenging, but with new large screen experiences in mind, multiple form factors bring new possibilities to your users.", + "url": "https://medium.com/androiddevelopers/make-your-app-large-screen-ready-baf8fe505ae7", + "headerImageUrl": "https://miro.medium.com/max/1200/0*1hkxEoydoX8GzK9N", + "publishDate": "2022-07-19T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "2" + ], + "authors": [ + "90" + ] + }, + { + "id": "54", + "title": "Get familiar with Wear OS 3 (without a physical device)", + "content": "You don’t need a physical device to test your Wear apps. Read this article to take a brief look at unique UI surfaces on Wear OS, create a Wear emulator and explore it from a user perspective.", + "url": "https://medium.com/androiddevelopers/get-familiar-with-wear-os-3-without-a-physical-device-e7962c97f02b", + "headerImageUrl": "https://miro.medium.com/max/1200/1*3M48bGiXnBX8y83eYLgFtw.png", + "publishDate": "2022-07-20T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "19", + "2" + ], + "authors": [ + "86" + ] + }, + { + "id": "55", + "title": "Jetpack Compose Interop: Using Compose in a RecyclerView", + "content": "What versions of Compose and RecyclerView do you need to use to get the best performance? In addition, you’ll understand how the interop works under the hood.", + "url": "https://medium.com/androiddevelopers/jetpack-compose-interop-using-compose-in-a-recyclerview-569c7ec7a583", + "headerImageUrl": "https://miro.medium.com/max/1200/1*aBNjsK7y35V05OKNQ2oIZg.png", + "publishDate": "2022-07-21T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "3", + "2" + ], + "authors": [ + "68" + ] + }, + { + "id": "56", + "title": "Brushing up on Compose Text coloring", + "content": "A very colorful blog post about how to work with Brush API together with TextStyle to achieve complex text coloring like giving a gradient to your text in a simple way.", + "url": "https://medium.com/androiddevelopers/brushing-up-on-compose-text-coloring-84d7d70dd8fa", + "headerImageUrl": "https://miro.medium.com/max/1200/1*PZK1BRIYM22iLQhexPGT1Q.png", + "publishDate": "2022-07-24T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "3", + "2" + ], + "authors": [ + "91" + ] + }, + { + "id": "57", + "title": "Animating brush Text coloring in Compose 🖌️", + "content": "Learn how to animate gradients in your text using the Brush API and Compose animations. Go check them out, I can’t stop looking at those animations now!", + "url": "https://medium.com/androiddevelopers/animating-brush-text-coloring-in-compose-%EF%B8%8F-26ae99d9b402", + "headerImageUrl": "https://miro.medium.com/max/1200/1*9fEDrtJES1CQEVlyI7WjgQ.png", + "publishDate": "2022-07-31T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "3", + "2" + ], + "authors": [ + "91" + ] + }, + { + "id": "58", + "title": "Prepare your app to support predictive back gestures", + "content": "Predictive back gestures is a feature that will be available in future versions of Android. However, to give you more time to adopt it, we made it available in the developer options of Android 13 Beta 4. Read the blog post for details on how to try out the new gesture and support it in your apps. Spoiler alert: it’s straightforward for most apps!", + "url": "https://android-developers.googleblog.com/2022/07/prepare-your-app-to-support-predictive-back-gestures.html", + "headerImageUrl": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9NXOkaUCvb2KLyrnCp4DWpr2dyryXzHsqvX94Dcrw3r_5znwMZFy6PwmaHJj25D0DKYcZlF8Jac5C0KhM1s2j_mEc0VULf-eiCpT3JGbYgI_jg105SyUEwNG7w2dvF-60npxBgZidqgXqx7A1iWRftv9lOZrM9OAfc4f105met0ZauGQ5hRQC0_wE/w1200-h630-p-k-no-nu/image3.jpg", + "publishDate": "2022-07-28T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "13" + ], + "authors": [ + "92", + "93", + "94" + ] + }, + { + "id": "59", + "title": "ADB Podcast Episodes🎙187: System UI: A Retrospective", + "content": "In this episode Tor and Chet meet Dan Sandler and Adam Cohen from the SystemUI team. They dip into a bit of history, talking about where things were at when they joined the team, and how things have developed in the many years since. They also talk about how to expose (or not) gestures and features in a UI system.", + "url": "https://adbackstage.libsyn.com/episode-187-system-ui-a-retrospective", + "headerImageUrl": "https://ssl-static.libsyn.com/p/assets/9/4/d/b/94dbe077f2f14ee640be95ea3302a6a1/ADB184_Skia_and_AGSL.png", + "publishDate": "2022-07-24T23:00:00.000Z", + "type": "Podcast 🎙", + "topics": [ + "2" + ], + "authors": [ + "32", + "31" + ] + }, + { + "id": "60", + "title": "Developer-Powered CTS (CTS-D) 🧪", + "content": "The Compatibility Test Suite (CTS) is a key part of the Android Compatibility Program that helps to ensure that devices provide a stable, consistent environment for your apps. To enhance CTS, we are adding a new test suite called CTS-D that is built and run by developers like you. You can build and contribute test cases to CTS-D to help catch pain points that you are seeing in the field — places where device behavior doesn’t match the Android public APIs and the Android Compatibility Definition Document (CDD).", + "url": "https://android-developers.googleblog.com/2022/06/developer-powered-cts-cts-d.html", + "headerImageUrl": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsdruRjulgaFFtqwrnp6Z0mzIAhmMzJZIOUjVqugCB3i5noivoLOVecpMNBQGVIsG_kjkzthRTpibL-CEmlsn5nZJUhnSkkdhEe0V2yaNPQt2l-FGh0sQz1JnOZVRHRDZIr72twcPZQL7Q0kdgb-JzxgKJlZSsESJkMLuAkvqCfyXoE7d-XxFQYVoJ/w1200-h630-p-k-no-nu/Google_Android_DeveloperPoweredCTS_4209x1253.jpg", + "publishDate": "2022-06-22T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "6", + "13" + ], + "authors": [ + "98" + ] + }, + { + "id": "61", + "title": "Independent versioning of Jetpack Compose libraries ✒️", + "content": "We announced that the various Jetpack Compose libraries will move to independent versioning schemes, making it easier to incrementally upgrade your application and stay up-to-date with the latest Compose features.", + "url": "https://android-developers.googleblog.com/2022/06/independent-versioning-of-Jetpack-Compose-libraries.html", + "headerImageUrl": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjolHnYXFnb81t2qu38Z8BPxU0QNitCVulwRwgZlijGDwCbcSSPETvSVr9apTSV_eDknzPDs1BwccZU_lYr15czYU_ddiXete76bVxWWIhNE29-PfOCxMzvashjOwvGWrzZ4rynym-k4aNQ4c-tmN7v4O5vh0iaRpFZTMuYTFqjFLrNpHNlOwSyZyf6/w1200-h630-p-k-no-nu/unnamed_%281%29.png.jpeg", + "publishDate": "2022-06-28T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "3" + ], + "authors": [ + "65" + ] + }, + { + "id": "62", + "title": "Notes from Google Play: making Play work for everyone ▶️", + "content": "In the latest edition of Notes from Google Play, we touched on the Play Integrity API, the Data Safety section, the Privacy Sandbox on Android, and the newly-launched Google Play SDK Index, which provides data and insights about over 100 of the most widely used commercial SDKs. We covered new subscription capabilities that allow you to create multiple base plans and offers for each subscription, as well as the option to lower prices starting at the equivalent of 5 US cents to adapt to local purchasing power.", + "url": "https://android-developers.googleblog.com/2022/06/notes-from-google-play-making-play-work.html", + "headerImageUrl": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicboZEaxs6kOlhHSoRE__yCFdTkFvVW7z9ksAfVlkdCVgNQzkG1B1z4RVCV6l3g-Up3ZPGchGjq5idAKV5prrVVy9T2o6MtJh-iXZtUKcKyNY1Cqt39bi5VzwZ2CLy7N3FANcklla-mHIGboZzvNRl3eN5ZMvjl29tjtGGLGubVKIYwIUCh6q2-FhT/w1200-h630-p-k-no-nu/AD%20Blog%20Social.png", + "publishDate": "2022-06-21T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "12" + ], + "authors": [] + }, + { + "id": "63", + "title": "Dark theme testing in Pre-Launch Report 🕶️", + "content": "After you upload and publish a test Android App Bundle to Google Play, we install it on a set of Android devices, launch and crawl your app for several minutes, and compile your results into the pre-launch report. We’ve introduced a new test in the Pre-Launch Report that runs accessibility checks on a device switched to dark theme; this can detect color contrast issues that make it difficult to differentiate text and icons from a background. ", + "url": "https://support.google.com/googleplay/thread/170731936/dark-theme-test-now-included-in-pre-launch-report", + "headerImageUrl": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJtTKEaaohJa7b5H5mkmCNu1LbQ3FPrPv0hSVWdEacemvtEHRWhk-DCi5aEartYwL0OMg6NOHJ1Vnn1fqeJ5cMc7Bl08SY7JcEBpKp5Vde-y_VDIPoVNlhb5VZbyv4PlauW_xpvnf6iS8yszMOnuo5w0Rw5NmYZ45reEvulY2KgGoPaG9NZ6H8hO2b/w1200-h630-p-k-no-nu/Android_SandboxPreview_V2_1024x512.jpg", + "publishDate": "2022-07-10T23:00:00.000Z", + "type": "Docs 📑", + "topics": [ + "12", + "6" + ], + "authors": [] + }, + { + "id": "64", + "title": "Performance tips to achieve App Excellence", + "content": "The Performance tips to achieve App Excellence video covered five app performance issues along with the tools that Android Studio and Google Play Console provide to help you diagnose and troubleshoot them.", + "url": "https://www.youtube.com/watch?v=VJItLXb7_V8", + "headerImageUrl": "https://i.ytimg.com/vi/VJItLXb7_V8/maxresdefault.jpg", + "publishDate": "2022-07-05T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "7", + "2" + ], + "authors": [] + }, + { + "id": "65", + "title": "Making Sense of Intent Filters in Android 13", + "content": "Before Android 13, when an app registered an exported component in its manifest and added an , the component could be started by any explicit intent — even those that do not match the intent filter. In some circumstances this can allow other apps to trigger internal-only functionality.\n\nThis behavior has been updated in Android 13. Now intents that specify actions and originate from external apps are delivered to an exported component if and only if the intent matches its declared elements.", + "url": "https://medium.com/androiddevelopers/making-sense-of-intent-filters-in-android-13-8f6656903dde", + "headerImageUrl": "https://miro.medium.com/max/1200/1*PX8VuYcLzaC-AvOtSPgMRw.png", + "publishDate": "2022-07-05T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "13", + "2" + ], + "authors": [ + "99" + ] + }, + { + "id": "66", + "title": "Customizing AnimatedContent in Jetpack Compose 🌟", + "content": "Rebecca covers using AnimatedContent to transition between different composables with a smoother and more custom transition effect. Even the default behavior of AnimatedContent can make a big difference to the look and feel of your app, without much effort.", + "url": "https://medium.com/androiddevelopers/customizing-animatedcontent-in-jetpack-compose-629c67b45894", + "headerImageUrl": "https://miro.medium.com/max/1200/1*Yu-W3qMxx1YyPm_AJMcXGg.png", + "publishDate": "2022-06-30T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "3" + ], + "authors": [ + "96" + ] + }, + { + "id": "67", + "title": "Jetpack Compose Stability Explained", + "content": "Ben does a detailed exploration of how Compose determines the stability of each parameter of your composables to see what can be skipped during recomposition, including using compiler reports to determine what stability is being inferred about your classes. ", + "url": "https://medium.com/androiddevelopers/jetpack-compose-stability-explained-79c10db270c8", + "headerImageUrl": "https://miro.medium.com/max/1200/1*iLEtRB3BpIkD6CgjWFP2RQ.png", + "publishDate": "2022-06-29T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "3" + ], + "authors": [ + "80" + ] + }, + { + "id": "68", + "title": "Migrating to the new coroutines 1.6 test APIs", + "content": "kotlinx.coroutines 1.6 introduces a set of new testing APIs, and the previous testing APIs are now deprecated.\n \nMarton talked about how we’ve migrated some of our own samples to the new APIs, covering a bunch of the necessary work for most Android projects.", + "url": "https://medium.com/androiddevelopers/migrating-to-the-new-coroutines-1-6-test-apis-b99f7fc47774", + "headerImageUrl": "https://miro.medium.com/max/1200/1*XQmi35H84FdYhY_ONP6ntQ.png", + "publishDate": "2022-06-28T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "10", + "6" + ], + "authors": [ + "1" + ] + }, + { + "id": "69", + "title": "Android 13 beta 3", + "content": "We released the third beta of Android 13! Android 13 has been built on our core themes of privacy and security, developer productivity, and large screen support. ​​Beta 3 takes Android 13 to Platform Stability, which means that the developer APIs and all app-facing behaviors are now final; you can confidently develop and release your updates. Read all about it in the post!\n", + "url": "https://android-developers.googleblog.com/2022/06/android-13-beta-3-platform-stability.html", + "headerImageUrl": "https://developer.android.com/images/social/android-developers.png", + "publishDate": "2022-06-07T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "1", + "13" + ], + "authors": [ + "14" + ] + }, + { + "id": "70", + "title": "Google Play @ Google I/O - 3 updates you need to know", + "content": "In this video and blog post, Phalene tells us about the top three things to know about Google Play from Google I/O. These include updates on custom store listings, introducing more developers to the LiveOps beta, and new subscription capabilities. Learn more about these three topics in the video or blog post!\n", + "url": "https://android-developers.googleblog.com/2022/06/google-play-google-io-3-updates-you-need-to-know_01537187872.html", + "headerImageUrl": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg40pvJlLB9LP1shkyFOq4pIexSrdI-kSH9uPxMEdhjynUPm2Zdfy4W1sHb6v0d5hZqycnWP9qTVjxHu0DADwL2BrtBwkPrOOIFXA8-H2RC6W70ehcnYUTgKXy8eRvwvWDeu2J-0iVmMgkd4c1lyYUBnZi39mPVTJV5Ke83DvWMBioeLOWPivE0Tpvv/w1200-h630-p-k-no-nu/Android-io-spotlight-modern-android-development-social.png", + "publishDate": "2022-06-12T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "1", + "12" + ], + "authors": [ + "76" + ] + }, + { + "id": "71", + "title": "Privacy Sandbox Developer Preview 3", + "content": "The Privacy Sandbox on Android aims to develop new solutions that preserve user privacy while enabling effective, personalized advertising experiences for apps. Now it is in Developer Preview 3, which adds APIs and resources for conversion measurement and remarketing use cases; this allows you to begin testing and evaluating impact on all key APIs for Privacy Sandbox on Android.", + "url": "https://android-developers.googleblog.com/2022/06/privacy-sandbox-developer-preview-3.html", + "headerImageUrl": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjg5R2hd0VZp__xKUUgs6-tfKHEoabMPqo2aY6uoGvzre-9E4gUlz6RbGsrE-Txszbrc3OaNL9r2TshsZmzGhEiM3M-_eO8M39K6ljm9NrX2BMHRLHM3HeF04YgJf8l4Z1-kNaP9YV8BCRe3n2zTUTSx3FOvA5IRc4PCjVPiJ7CEw7M7Y7uAJLVd7WQ/w1200-h630-p-k-no-nu/Android-GoogleIO3thingstoknowaboutFormFactors_4209x1253.png", + "publishDate": "2022-06-15T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "11" + ], + "authors": [ + "77" + ] + }, + { + "id": "72", + "title": "ADB Podcast Episodes🎙186: Live Edit", + "content": "In this episode, we talk with Alan and Esteban from Android Studio about the new \"Live Edit\" feature recently launched at Google I/O in the Electric Eel canary build. We dive into the technology -- how it works, what the technical challenges are, and its current state.", + "url": "https://adbackstage.libsyn.com/episode-186-live-edit", + "headerImageUrl": "http://assets.libsyn.com/show/332855?height=250&width=250&overlay=true", + "publishDate": "2022-06-07T23:00:00.000Z", + "type": "Podcast 🎙", + "topics": [ + "5", + "5" + ], + "authors": [ + "31", + "30", + "32" + ] + }, + { + "id": "73", + "title": "AndroidX releases", + "content": "Let’s take a look at what’s been up with AndroidX releases since the last episode of Now in Android. We have a few new features that are stable including Wear Watchface, Games-Activity, Benchmark, and Annotation", + "url": "https://developer.android.com/jetpack/androidx/versions/all-channel", + "headerImageUrl": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizEliXuy2sTNnhRQtwNAvL46sKpcBLbHiuROrEiOtPDTJ1D0eQlWDDUjspVECqlDw3_sLhFzJO8SCrGJuFaT2QQ7Iezi0xrkhD7yWqpbacVLRC8aX-1bx0aZ-RM1k_S-S0LFTE0PrvX-BlNsmmilGCGMdvRk0v6zhHs8nKwdFv-AluPQIRjAtFx938/w1200-h630-p-k-no-nu/Android-GoogleIOSpotlightPrivacyAndSecurity_1024x512.png", + "publishDate": "2022-06-22T23:00:00.000Z", + "type": "Jetpack release 🚀", + "topics": [ + "8" + ], + "authors": [] + }, + { + "id": "74", + "title": "Google I/O recaps ⏱ - Modern Android Development!\n", + "content": "Our goal is to make developing beautiful and engaging Android apps as fast and easy as possible. We want to take on the complex parts of building apps so that you can focus on your app’s features and deliver high quality experiences to your users.\n\nWe call this approach Modern Android Development (or MAD for short!) and deliver it through a suite of tools, libraries and guidance. At Google I/O we announced a number of updates and additions to our MAD offerings; here’s a recap of the three largest announcements.", + "url": "https://android-developers.googleblog.com/2022/05/io22-spotlights-mad.html", + "headerImageUrl": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpSQB-YhRGzOJ4X1hoh1DlnMx9cOxfUKdoriSncXDPuaXZXpiXGYBXpxJUsMVKPhGTbTKkT-Gn3g52Tqcy7Alyv6gkMQEKd7twzAj1JbR2DwdFUZYbIcnMgXD2PeRrkTq9jZw8XId5t0D9im6i3XkVCK-YIk10g3E7ut_pLnVdA9tVnGJU5T7XFLi8/w1200-h630-p-k-no-nu/unnamed.png", + "publishDate": "2022-05-22T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "3", + "5" + ], + "authors": [ + "57" + ] + }, + { + "id": "75", + "title": "Google I/O recaps ⏱ - Form factors!", + "content": "With close to half a billion cars, TVs, watches and laptops running on Android, it is more important than ever for apps to work seamlessly across every device. This year at I/O, we renewed our focus on form factors and announced major updates for Wear OS and Large Screens. To help you get to the bottom of what’s new, here are the three things you need to know about Form Factors at Google I/O", + "url": "https://android-developers.googleblog.com/2022/05/form-factors-google-io-22.html", + "headerImageUrl": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7lx3OtPkMXTr0cwNlItkSUwDQYcTAO1cP-fE8n_NLtnZQ5uBnoP-y0MfENfmuB_2HGRUbmrx_ADz4FmDW8VkBmp_WcdISO0uQiO4Dw2yi9XjBUPqwjX2o24j8lUEhvYWJidFi6ra9WrjHxO1sTCjwBZrLyXHhIjgbRZzFQX-oUOKeqvf1dXg4XQ-A/w1200-h630-p-k-no-nu/Android_ImplementingColor_1024x512.jpg", + "publishDate": "2022-05-30T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "19", + "2", + "16", + "15" + ], + "authors": [] + }, + { + "id": "76", + "title": "Google I/O recaps ⏱ - Android Privacy, Platform & Security!", + "content": "Amidst the whirlwind of content at Google I/O, we shared huge announcements involving privacy, security, and the Android platform. Read on for the details, and don’t forget to watch the topic playlist on YouTube.", + "url": "https://android-developers.googleblog.com/2022/06/privacy-security-google-io-22.html", + "headerImageUrl": "https://developer.android.com/images/social/android-developers.png", + "publishDate": "2022-06-05T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "11", + "13" + ], + "authors": [ + "95" + ] + }, + { + "id": "77", + "title": "Spot your UI jank using CPU profiler in Android Studio", + "content": "Takeshi wrote about spotting your UI jank using the CPU profiler in Android Studio. The article goes through a step by step walkthrough about how to use the new jank detection UI in Android Studio Chipmunk including how to record a trace, and how to inspect janky frames.", + "url": "https://medium.com/androiddevelopers/spot-your-ui-jank-using-cpu-profiler-in-android-studio-9a4c41a54dab", + "headerImageUrl": "https://miro.medium.com/max/1200/1*FkkN0FugRiSDxhfp1TQz-Q.png", + "publishDate": "2022-05-15T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "5" + ], + "authors": [ + "81" + ] + }, + { + "id": "78", + "title": "Custom Canvas Animations in Jetpack Compose ✨", + "content": "Rebecca Franks wrote about custom Canvas animations in Jetpack Compose. Using the Animatable states and some side-effects, you’ll be able to achieve custom animations as you were able to do with ValueAnimator in the View system.", + "url": "https://medium.com/androiddevelopers/custom-canvas-animations-in-jetpack-compose-e7767e349339", + "headerImageUrl": "https://miro.medium.com/max/1200/1*16bn5V--jLMAJLCWspst2Q.png", + "publishDate": "2022-05-16T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "3" + ], + "authors": [ + "96" + ] + }, + { + "id": "79", + "title": "Implementing Dynamic Color: Lessons from the Chrome team", + "content": "If you’re interested in Material You dynamic color, Rebecca Gutteridge talks about how the Chrome team implemented it and the things they kept in mind such as accessibility, custom colors, incognito, and more. It also comes with a really helpful list of recommendations from the designers and developers of the team.", + "url": "https://android-developers.googleblog.com/2022/05/implementing-dynamic-color-lessons-from.html", + "headerImageUrl": "https://developer.android.com/images/social/android-developers.png", + "publishDate": "2022-05-26T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "2", + "3" + ], + "authors": [ + "97" + ] + }, + { + "id": "80", + "title": "ViewModel: One-off event antipatterns", + "content": "We’re very opinionated about what to do with ViewModel events in our UI events Architecture guidance, and this blog post explains why the alternatives to our recommendation might bring higher engineering costs to developers and a worse user experience.", + "url": "https://medium.com/androiddevelopers/viewmodel-one-off-event-antipatterns-16a1da869b95", + "headerImageUrl": "https://miro.medium.com/max/1200/0*ROW1i16idpH-rHO-.png", + "publishDate": "2022-05-31T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "2" + ], + "authors": [ + "23" + ] + }, + { + "id": "81", + "title": "Diving Into Compose — Lessons Learned While Building Maps Compose", + "content": "If you’re interested in Compose and Google Maps, Chris Arriola wrote about the lessons learned while building Maps Compose. You’ll see how they took advantage of Kotlin features, how to aim for binary compatibility, subcomposition, and more!", + "url": "https://medium.com/androiddevelopers/diving-into-compose-lessons-learned-while-building-maps-compose-d20ef5dfe1bb", + "headerImageUrl": "https://miro.medium.com/max/1200/1*6rFVWLu8FXGXfmASVP3zYQ.jpeg", + "publishDate": "2022-06-02T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "3" + ], + "authors": [ + "68" + ] + }, + { + "id": "82", + "title": "I/O 22: What's New in Android", + "content": "For a survey of what I/O 22 offers to Android developers in video form check out the What’s New in Android talk.", + "url": "https://youtu.be/Z6iFhczA3NY", + "headerImageUrl": "https://i.ytimg.com/vi/Z6iFhczA3NY/maxresdefault.jpg", + "publishDate": "2022-05-10T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "1" + ], + "authors": [] + }, + { + "id": "83", + "title": "I/O 22: What's New for Android Devs", + "content": "Move quickly through some of the top material for Android Devs at IO/22", + "url": "https://www.youtube.com/watch?v=l0iBPh7k_HQ", + "headerImageUrl": "https://i.ytimg.com/vi/l0iBPh7k_HQ/hqdefault.jpg?sqp=-oaymwEmCOADEOgC8quKqQMa8AEB-AH-CYAC0AWKAgwIABABGGUgUShhMA8=&rs=AOn4CLCNz_S_i8TyDdvX_y1-SZGyAfoK3A", + "publishDate": "2022-05-10T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "1", + "5", + "3", + "8" + ], + "authors": [] + }, + { + "id": "84", + "title": "I/O 22: Android Fireside Chat", + "content": "Android Fireside Chat is back! Android leaders answered your questions from the stage.", + "url": "https://www.youtube.com/watch?v=wq3Et-D9P5Y", + "headerImageUrl": "https://i.ytimg.com/vi/wq3Et-D9P5Y/maxresdefault.jpg", + "publishDate": "2022-05-17T23:00:00.000Z", + "type": "", + "topics": [ + "1" + ], + "authors": [] + }, + { + "id": "85", + "title": "13 Things to know for Android developers at Google I/O!", + "content": "There aren’t many platforms where you can build something and instantly reach billions of people around the world, not only on their phones—but their TVs, cars, tablets, watches, and more. Today, at Google I/O, we covered a number of ways Android helps you make the most of this opportunity, and how Modern Android Development brings as much commonality as possible, to make it faster and easier for you to create experiences that tailor to all the different screens we use in our daily lives.", + "url": "https://android-developers.googleblog.com/2022/05/13-things-to-know-for-android-developers-at-google-io.html", + "headerImageUrl": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiC2X0sIY_AGvgi6jD8Eh_u8rOdZXKA6PP18tnJdA6jQxR-n4bF6vsIVI2D4FTOnHAlqSY5hJShEjHcRQr7P8QM-YyP3sM3Su_KxFRdBXhg8WUIoXr74luWfFvtgYGJHWdDe_gPnwpCsLR4YhE0U88QcSqrYs3LLjp7dGqQul_pRoerJr__-mD8lUPA/w1200-h630-p-k-no-nu/Android-IO22AndroidDevRecap_Social.png", + "publishDate": "2022-05-10T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "1", + "3", + "2", + "5", + "19" + ], + "authors": [ + "62" + ] + }, + { + "id": "86", + "title": "I/O 22: Now in Android, the App ⏱️", + "content": "After being available on this blog, our YouTube series, and a podcast, starting today, you can check out the alpha version of the Now in Android app on GitHub that was featured in the Google I/O 2022 Developer Keynote 🎉\n\nThe app showcases best practices, opinionated designs, and solutions to complex real-world problems. ", + "url": "https://android-developers.googleblog.com/2022/05/now-in-android-sample-app-alpha.html", + "headerImageUrl": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCfJQnd9fqg_J5d_j4lWDbJQ-u-sHd_Z_z8srVPoEuO3_CWY3eVZBulaRTPxqQV3VNkA_1qqkleLVYBI7tRtSIZsOsIDzOKKstOLehI8a1RAUwFgHpXY-3kEmoEPujjQZU1VUk08DesedqDdiA1ZOxUxR-XJIMb66G3gruUq3cxqHwokSQSWycIRPl/w1200-h630-p-k-no-nu/Now-in-Android%28Splash%29.jpg", + "publishDate": "2022-05-11T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "3", + "2" + ], + "authors": [ + "42" + ] + }, + { + "id": "87", + "title": "I/O 22: Jetpack, Compose, and Tooling 🚀", + "content": "What’s new in Jetpack covered additions and updates to the over 120 libraries we’ve created to address common pain points and make development easier.", + "url": "https://android-developers.googleblog.com/2022/05/whats-new-in-jetpack-compose.html", + "headerImageUrl": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQyCrAWdIb8-moiYuP7EdpznRLOLaKoZWJ04MLzMi1wkJrMfLKQshwXhB_ODNz3T6_aoOwQ0YccVpSbLO2K9qkpx-HTklvNm3ZR_spOINLr861_PgDXDnh6LgpptIyzR5Nv-UjlQ-5FyeLpHwOCb4NjZ8darLIomTVjHM2VvDv7YZdzO-FS6zMKEhlCQ/w1200-h630-p-k-no-nu/Android-JetpackCompose1.2-Social.png", + "publishDate": "2022-05-10T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "3", + "8" + ], + "authors": [ + "65", + "52" + ] + }, + { + "id": "88", + "title": "I/O 22: Lazy layouts in Compose", + "content": "Compose brings a simple and performant way of creating scrolling lists, with fewer lines of code than RecyclerView. Learn how lazy layouts enable adding content on demand, how to use Lazy composables, how these work under the hood, and optimization tips for better performance.", + "url": "https://youtu.be/1ANt65eoNhQ", + "headerImageUrl": "https://i.ytimg.com/vi/1ANt65eoNhQ/maxresdefault.jpg", + "publishDate": "2022-05-10T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "3", + "5" + ], + "authors": [] + }, + { + "id": "89", + "title": "I/O 22: Fragments: The good (non-deprecated) parts", + "content": "Fragments have been in constant motion over the past couple of years as we move towards a world where all the behavior is defined. Some of these moves have resulted in new APIs designed to do a specific function and replace old, unreliable ones. Learn about the changes in menus, fragment communication, the new strict mode, single lifecycle, and more.", + "url": "https://www.youtube.com/watch?v=OE-tDh3d1F4", + "headerImageUrl": "https://i.ytimg.com/vi/OE-tDh3d1F4/maxresdefault.jpg", + "publishDate": "2022-05-10T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "3", + "5" + ], + "authors": [] + }, + { + "id": "90", + "title": "I/O 22: Performance best practices for Jetpack Compose", + "content": "Jetpack Compose can feel like magic, but what do you do when the magic isn't as performant as you want? Discover best practices in Jetpack Compose with regards to performance, common mistakes, and how to avoid them.", + "url": "https://www.youtube.com/watch?v=EOQB8PTLkpY", + "headerImageUrl": "https://i.ytimg.com/vi/EOQB8PTLkpY/maxresdefault.jpg", + "publishDate": "2022-05-10T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "3", + "7" + ], + "authors": [] + }, + { + "id": "91", + "title": "I/O 22: Workshop: Basic layouts in Compose", + "content": "Learn how to implement a realistic and complex UI using Compose Layouts.", + "url": "https://www.youtube.com/watch?v=kyH01Lg4G1E", + "headerImageUrl": "https://i.ytimg.com/vi/kyH01Lg4G1E/maxresdefault.jpg", + "publishDate": "2022-05-10T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "3", + "2" + ], + "authors": [] + }, + { + "id": "92", + "title": "I/O 22: Workshop: State in Jetpack Compose", + "content": "Discover the core concepts of using state in Jetpack Compose by building a wellness app. Learn how the app's state determines what is displayed in the UI, how Compose keeps the UI updated when state changes, how to optimize the structure of your composable functions, and work with ViewModels in a Compose app.", + "url": "https://www.youtube.com/watch?v=PMMY23F0CFg", + "headerImageUrl": "https://i.ytimg.com/vi/PMMY23F0CFg/maxresdefault.jpg", + "publishDate": "2022-05-10T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "3", + "2" + ], + "authors": [] + }, + { + "id": "93", + "title": "I/O 22: Airbnb uses Jetpack Compose to empower devs to do their best work", + "content": "Jetpack Compose, Android’s modern UI-building toolkit, directly supports both of Airbnb’s development principles. Compose provided a solid foundation for adaptable, quality engineering and reduced boilerplate code, so developers could focus on delivering a great user experience — and advance their two-fold pursuit of engineering excellence.", + "url": "https://android-developers.googleblog.com/2022/05/airbnb-uses-jetpack-compose.html", + "headerImageUrl": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1-9FyHvhui7rTgRvUNvyQE8Mmrx5vQ1ZHnuYs0DMdkwFeBK7DuGIP2VL1sgxiQgBtrGvKF4j0QcKInGgSWXCx4bszhPM4VwmuUHm1VIBjmkJqBSWPYk4D9fPmDVhK3asVTNqmkxRjTidzZpzaUzQYn0JmQzjwblhp3el20qowfr00yTpPdKyhefcT/w1200-h630-p-k-no-nu/image1.gif", + "publishDate": "2022-05-11T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "3" + ], + "authors": [] + }, + { + "id": "94", + "title": "I/O 22: What’s new in Android development tools ", + "content": "Get an overview of what's new in Android Studio for Android app developers, including demos and a presentation of relevant features that can accelerate developers' workflow on the latest Android APIs.", + "url": "https://www.youtube.com/watch?v=RFv8GkLd5OY", + "headerImageUrl": "https://i.ytimg.com/vi/RFv8GkLd5OY/maxresdefault.jpg", + "publishDate": "2022-05-10T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "5", + "2" + ], + "authors": [] + }, + { + "id": "95", + "title": "I/O 22: Designing apps for large screens", + "content": "Explore key concepts and strategies for adapting mobile apps to large screen devices, such as tablets and foldables. Dig into the challenges of optimizing design and finding ways to meet the changing expectations of your users, in order to offer the highest quality large screen app experience.", + "url": "https://www.youtube.com/watch?v=pvdqeIM6mh0&t", + "headerImageUrl": "https://i.ytimg.com/vi/pvdqeIM6mh0/maxresdefault.jpg", + "publishDate": "2022-05-10T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "2" + ], + "authors": [] + }, + { + "id": "96", + "title": "I/O 22: Learn how to update your app for the larger screen", + "content": "You already have an app you’ve been working on for years, with a set, and hard to change, architecture. Discover the many options to bring your existing app forward, and build optimized large screen experiences without starting from scratch.", + "url": "https://www.youtube.com/watch?v=1ZOQ_-XPSv8", + "headerImageUrl": "https://i.ytimg.com/vi/1ZOQ_-XPSv8/maxresdefault.jpg", + "publishDate": "2022-05-10T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "2" + ], + "authors": [] + }, + { + "id": "97", + "title": "I/O 22: Implementing Android apps for all screen sizes ", + "content": "Get a better understanding of how to build your app to fill all screen formats. Explore development best practices to optimize applications for all devices with an emphasis on Jetpack Compose, navigation, managing state, and testing.", + "url": "https://www.youtube.com/watch?v=MPwf5DklKp0&t", + "headerImageUrl": "https://i.ytimg.com/vi/MPwf5DklKp0/maxresdefault.jpg", + "publishDate": "2022-05-10T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "2" + ], + "authors": [] + }, + { + "id": "98", + "title": "I/O 22: Input for all screens", + "content": "Learn about some straight-forward best practices to support input methods like keyboard, mouse, and stylus. These simple changes can elevate your app experience and grow user engagement.", + "url": "https://www.youtube.com/watch?v=XtImpP23uhE", + "headerImageUrl": "https://i.ytimg.com/vi/XtImpP23uhE/maxresdefault.jpg", + "publishDate": "2022-05-10T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "2" + ], + "authors": [] + }, + { + "id": "99", + "title": "I/O 22: Building an adaptive layout with SlidingPaneLayout", + "content": "Learn how to add a list and detail layout to a View-based app with SlidingPaneLayout. Explore how to reconfigure your fragments, open and close the detail pane, handle custom back navigation, and disable gesture navigation.", + "url": "https://www.youtube.com/watch?v=2rtLdF9UFqg", + "headerImageUrl": "https://i.ytimg.com/vi/2rtLdF9UFqg/maxresdefault.jpg", + "publishDate": "2022-05-10T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "2" + ], + "authors": [] + }, + { + "id": "100", + "title": "I/O 22: Android Developer Story: eBay gets a 4.7 Google Play rating", + "content": "Matthew Mossman, Android engineer for eBay, shares how he and his team optimized the eBay app for large screens and discusses the impact they saw in their customer’s engagement and experience on the tablets.", + "url": "https://www.youtube.com/watch?v=8gGXwOxHQjk", + "headerImageUrl": "https://i.ytimg.com/vi/8gGXwOxHQjk/maxresdefault.jpg", + "publishDate": "2022-05-10T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "2" + ], + "authors": [] + }, + { + "id": "101", + "title": "I/O 22: Tablet moments, built by you!", + "content": "Android developers around the world are building some amazing experiences for tablets and large screen devices. You can see how Facebook, TikTok, HBO Max, Zoom and Google Slides are all enhancing their applications.", + "url": "https://www.youtube.com/watch?v=IRiEcVfJJko", + "headerImageUrl": "https://i.ytimg.com/vi/IRiEcVfJJko/maxresdefault.jpg", + "publishDate": "2022-05-10T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "2" + ], + "authors": [] + }, + { + "id": "102", + "title": "I/O 22: Second Beta of Android 13", + "content": "The Android 13 Beta is available to test on a range of devices from Asus, Lenovo, Nokia, OnePlus, Oppo, Realme, Sharp, TECNO, Vivo, Xiaomi, and ZTE.", + "url": "https://android-developers.googleblog.com/2022/05/second-beta-of-android-13.html", + "headerImageUrl": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjV9RykVMNPi7wNhkdMXSTn14sT_GE3-0m7iHPi6zfEIMlLjUr9I8icC7vKh7u0bTKqpU6PKnMKGufNHfE7QJJjvwU6PcTygM0Umd0sEh3C1lYKkAxyeJfOCJblem10kjPCZWlwpUT6E-ITy1F3AglIvqQAoA6mxcHCUAmjNzXfNXw2lCOLUQvjTHj/w1200-h630-p-k-no-nu/Android13_dpp.png", + "publishDate": "2022-05-10T23:00:00.000Z", + "type": "DAC - Android version features", + "topics": [ + "13" + ], + "authors": [ + "14" + ] + }, + { + "id": "103", + "title": "I/O 22: Developing privacy user-centric apps", + "content": "Keeping users in control of their privacy and safeguarding everything they do online is more important than ever, particularly when it comes to the mobile operating system.", + "url": "https://www.youtube.com/watch?v=opGkUl8C-HM&t", + "headerImageUrl": "https://i.ytimg.com/vi/opGkUl8C-HM/maxresdefault.jpg", + "publishDate": "2022-05-10T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "13", + "11" + ], + "authors": [] + }, + { + "id": "104", + "title": "I/O 22: Building the Privacy Sandbox", + "content": "The Privacy Sandbox initiative is an industry-wide effort to make Android and the web private. It introduces a set of privacy-preserving APIs that give both developers and entrepreneurs the tools they need to build thriving digital businesses and protect people's privacy online. Hear from a panel of Privacy Sandbox team members to hear answers to popular questions.", + "url": "https://www.youtube.com/watch?v=NKz5oT6kXI4&t", + "headerImageUrl": "https://i.ytimg.com/vi/NKz5oT6kXI4/maxresdefault.jpg", + "publishDate": "2022-05-10T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "13", + "11" + ], + "authors": [] + }, + { + "id": "105", + "title": "I/O 22: Overview of the Privacy Sandbox on Android", + "content": "The Privacy Sandbox on Android is intended to fundamentally advance privacy for the ecosystem, without sacrificing key ads functionality and without putting access to free ad-supported apps at risk. Listen to an overview of the key changes and technical considerations for developers.", + "url": "https://www.youtube.com/watch?v=pQdzFbmlvOo", + "headerImageUrl": "https://i.ytimg.com/vi/pQdzFbmlvOo/maxresdefault.jpg", + "publishDate": "2022-05-10T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "13", + "11" + ], + "authors": [] + }, + { + "id": "106", + "title": "I/O 22: Best practices for running background work on Android", + "content": "Learn about several changes to how and when apps can run tasks in the background. Discover why the changes were made and some best practices for developers to run work in the background.", + "url": "https://www.youtube.com/watch?v=t1_8WSEguDY", + "headerImageUrl": "https://i.ytimg.com/vi/t1_8WSEguDY/maxresdefault.jpg", + "publishDate": "2022-05-10T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "13", + "7" + ], + "authors": [] + }, + { + "id": "107", + "title": "I/O 22: What’s new in Android machine learning", + "content": "Learn about the latest APIs and early access programs for machine learning (ML) on Android.", + "url": "https://www.youtube.com/watch?v=tG6hiQNMLmE", + "headerImageUrl": "https://i.ytimg.com/vi/tG6hiQNMLmE/maxresdefault.jpg", + "publishDate": "2022-05-10T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "13" + ], + "authors": [] + }, + { + "id": "108", + "title": "I/O 22: What’s new in Android Camera", + "content": "A camera is one of the top reasons consumers purchase phones and devices. Explore the latest in Android Camera and upcoming launches. Learn best practices when using Android Camera and how to bring delightful experiences to users.", + "url": "https://www.youtube.com/watch?v=n8mubjwEVxQ", + "headerImageUrl": "https://i.ytimg.com/vi/n8mubjwEVxQ/maxresdefault.jpg", + "publishDate": "2022-05-10T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "18" + ], + "authors": [] + }, + { + "id": "109", + "title": "I/O 22: What’s new in Android media", + "content": "Get a high level overview of everything that's new in Android media, including media features and changes in Android 12+, as well as new features in ExoPlayer and the Jetpack media libraries. Hear about key announcements in Spatial audio, HDR video, video transcoding, editing APIs, AV1 decode, and Performance Class 13.", + "url": "https://www.youtube.com/watch?v=Ba70zmFZgk0", + "headerImageUrl": "https://i.ytimg.com/vi/Ba70zmFZgk0/maxresdefault.jpg", + "publishDate": "2022-05-10T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "18" + ], + "authors": [] + }, + { + "id": "110", + "title": "I/O 22: Workshop: How to optimize media streaming with ExoPlayer\n", + "content": "This workshop guides you through using the new Jetpack Media3 APIs to build a simple media app using ExoPlayer for progressive and adaptive streaming playback. Learn about the advantages of using ExoPlayer and the features it offers.", + "url": "https://www.youtube.com/watch?v=Hw0Jeq42FNU", + "headerImageUrl": "https://i.ytimg.com/vi/Hw0Jeq42FNU/maxresdefault.jpg", + "publishDate": "2022-05-10T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "18" + ], + "authors": [] + }, + { + "id": "111", + "title": "I/O 22: What’s new in Accessibility for developers\n", + "content": "Making applications accessible ensures equal access to roughly one billion people in the world with disabilities, and it can also benefit people without disabilities by providing a better user experience in general. Learn about new developments in Android Studio, a new API that improves the video consuming experience, and advancements in Jetpack Compose that can help you build more accessible apps.", + "url": "https://www.youtube.com/watch?v=6LsaP6oKxMY", + "headerImageUrl": "https://i.ytimg.com/vi/6LsaP6oKxMY/maxresdefault.jpg", + "publishDate": "2022-05-10T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "14" + ], + "authors": [] + }, + { + "id": "112", + "title": "I/O 22: What's new in app performance", + "content": "Users expect apps to launch quickly and scroll smoothly, even on low-end devices. That's why performance enhancements should be available on devices with older versions of Android. Learn how to write, maintain, and monitor apps that perform to users' high standards.", + "url": "https://www.youtube.com/watch?v=DYdHLqLVspY", + "headerImageUrl": "https://i.ytimg.com/vi/DYdHLqLVspY/maxresdefault.jpg", + "publishDate": "2022-05-10T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "7" + ], + "authors": [] + }, + { + "id": "113", + "title": "I/O 22: Introducing Google Wallet and developer API features", + "content": "Learn more about how to use the Google Wallet APIs to digitize tickets, loyalty cards, and much more. Discover the new Android SDK and additional developer tools to simplify your integration.", + "url": "https://www.youtube.com/watch?v=2gTCghy-dU4", + "headerImageUrl": "https://i.ytimg.com/vi/2gTCghy-dU4/maxresdefault.jpg", + "publishDate": "2022-05-10T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "8" + ], + "authors": [] + }, + { + "id": "114", + "title": "I/O 22: Android solutions for seamless sign-in across devices", + "content": "Discover Android solutions that enable seamless and secure login experiences so users can enjoy your app across devices.", + "url": "https://www.youtube.com/watch?v=xghjqgj4peA", + "headerImageUrl": "https://i.ytimg.com/vi/xghjqgj4peA/maxresdefault.jpg", + "publishDate": "2022-05-10T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "13" + ], + "authors": [] + }, + { + "id": "115", + "title": "I/O 22: Build power, multi-device experiences\n", + "content": "Developers play a critical role in Google's multi-device ecosystem. Hear about new tools available to you so that you can build your own powerful, multi-device experiences that span platforms and form factors. Learn about Cast, BlockStore, and the new abstraction layer D2DI.", + "url": "https://www.youtube.com/watch?v=H6UxTnghkMw", + "headerImageUrl": "https://i.ytimg.com/vi/H6UxTnghkMw/maxresdefault.jpg", + "publishDate": "2022-05-10T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "13" + ], + "authors": [] + }, + { + "id": "116", + "title": "I/O 22: Announcing Compose for Wear OS Beta!", + "content": "Today we’re launching the Beta release of Compose for Wear OS, our modern declarative UI toolkit designed to help developers create beautiful user experiences for Wear OS.", + "url": "https://android-developers.googleblog.com/2022/05/announcing-compose-for-wear-os-beta.html", + "headerImageUrl": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrfM5DyOkb4yfuiuJEOelmS5x4sTioxYCRPdnoSI1h64j-xWkWq9Wk0mZ61ljUw_tkO7NXxKsDUb5TbYMHLxLxhcY24rzNnnDhjzFOOClkM_WH--2bTLJFq93HODS7PHebGl00oluu0Sg5p0MTeNAfusLgHvorSxTDS26YwnQXkTJsDq2HJC36m7Jl/w1200-h630-p-k-no-nu/image4.png", + "publishDate": "2022-05-10T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "19", + "3", + "8", + "13" + ], + "authors": [ + "75" + ] + }, + { + "id": "117", + "title": "I/O 22: Introducing Health Connect", + "content": "Introducint Health Connect, a new API for Android app developers to securely access user health dataAs Android developers, connecting and sharing health and fitness data between apps can help you provide more meaningful experiences and insights for your users", + "url": "https://android-developers.googleblog.com/2022/05/introducing-health-connect.html", + "headerImageUrl": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioB9TK2fLuYAv8nIzhQMGsmSQJFhcWTsEl4ZUkR1XXbEkmR4JR3ZBP2N3YLYU143Lo02Qsx3iXE2VBobBBDJ0fr9V_2_epxOtnDLRA9S2XpkUdAWO-OyBejhkrf53wv4sIqnaqmjRB8iu8XzeFhCgM00gxgln1M-ipVeww9WG5bduNTBcpxRpASMha/w1200-h630-p-k-no-nu/231491533__37260715__148018.png", + "publishDate": "2022-05-11T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "8" + ], + "authors": [] + }, + { + "id": "118", + "title": "I/O 22: What’s new with Google TV & Android TV OS", + "content": "Since last year’s I/O, we’ve continued our commitment to enable you to build better and more engaging experiences on Android TV OS. In addition to platform updates, new features, like expanded integrations with the Live tab, offer opportunities for users to better engage with your content.", + "url": "https://android-developers.googleblog.com/2022/05/whats-new-with-google-tv-android-tv-os.html", + "headerImageUrl": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkqwL9j8jLb9ItKoISX9Yo0d3r_IdPdNMje6cca3obZpFDuNmmfKsL6Qj-E3agkDK7E312kuVjVLw3Ez2dF-vVj9UeRSUUPuOuc2T3T9d-HqEaZ6g76NQXEvqwIik0rAqFRZPiE6NH2PfgFmaDDQh6hb81HRgQrzmWGT6WJyuyK-yxnrrCfV4YHYnh/w1200-h630-p-k-no-nu/Android_WhatsNewInAndroidTVGoogleTV_1024x512.png", + "publishDate": "2022-05-11T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "16", + "13" + ], + "authors": [ + "27" + ] + }, + { + "id": "119", + "title": "I/O 22: What’s new with Android for Cars", + "content": "We’re excited to share some of our combined accomplishments from this past year, and introduce new updates that will make it easier for you to provide users with an even better experience in the car.", + "url": "https://android-developers.googleblog.com/2022/05/whats-new-with-android-for-cars.html", + "headerImageUrl": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNnogZQP4IGFjoSw7QWt1vr7MphwOi1OtRAAfCAVaNDTdnD5_CAaKhsf11nzxS_XrQ3ERet5yhpK7bs0e5YXdarv6o8iuzNYRqJ25fZrRL8TPfyBGpADg3oOrGM364foSvEdNhSTqDOF_2_TTBkRq-rElETpNAC6pOIHioH7ug3s8z8iJ_f3vWL5pTuQ/w1200-h630-p-k-no-nu/Android-whats-new-with-android-for-cars-io22-social%20%281%29.png", + "publishDate": "2022-05-11T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "15" + ], + "authors": [] + }, + { + "id": "120", + "title": "I/O 22: What's new in Google Play", + "content": "At this year’s Google I/O, we focused on three major ways we can help you continue growing your business on Google Play: Privacy and security initiatives ; Tools to help you improve your app quality; New ways to help you acquire users and engage with existing ones", + "url": "https://android-developers.googleblog.com/2022/05/whats-new-in-google-play.html", + "headerImageUrl": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiugYmi_1-WFvfxVe8BJ5GCiZjAp1R_B42dvrxu-fHkL1WkswlvjZpAVImVJIJdgzEERdFyzF9QzNZYPmoAJDEe2lfwdOnpSr2zHiQy0od18YP2ozVpC_fR7WQUpeB9kJyqTLx7udivLZn1w3trWfVeT4ejl8e9bZqVJfUyH05k0SgODQpYsUb4Junn/w1200-h630-p-k-no-nu/Play-new-google-play-io-01.png", + "publishDate": "2022-05-10T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "12", + "8", + "11" + ], + "authors": [] + }, + { + "id": "121", + "title": "I/O 22: New Google Play SDK Index", + "content": "New Google Play SDK Index helps you choose the right SDKs for your app. Helping developers, like you, make informed decisions about SDKs is part of keeping Google Play a safe, trusted space for billions of people.", + "url": "https://android-developers.googleblog.com/2022/05/new-google-play-sdk-index.html", + "headerImageUrl": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEBzXvqydpodashPiKchgLE9NA6WXVUYbTFBuooFn8_XwK6E4cMEbM7hyiTRPZ-H3pwTvyHY8143pGB5zgUt_zgUuzsjAIkRSQsngYBd4_dusLSXF94j6KZ0r1UiZC3vQFrabOw9vXdA0Wzcm3SDm_LvlCFdxW67-FplcMJLpZYLQ02I2EUrvORXHl/w1200-h630-p-k-no-nu/Play-new-google-play-sdk-index-social-V2.png", + "publishDate": "2022-05-10T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "12" + ], + "authors": [ + "87" + ] + }, + { + "id": "122", + "title": "I/O 22: How to integrate Android widgets with Google Assistant", + "content": "Explore intermediate-level concepts for integrating Android widgets with Google Assistant. Provide quick answers and interactive app experiences on Assistant enabled surfaces like Android and Android Auto to their users.", + "url": "https://www.youtube.com/watch?v=6vXZcg9g_Mo", + "headerImageUrl": "https://i.ytimg.com/vi/6vXZcg9g_Mo/maxresdefault.jpg", + "publishDate": "2022-05-10T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "2" + ], + "authors": [] + }, + { + "id": "123", + "title": "I/O 22: Integrate Google Assistant into Android for cars", + "content": "Learn how to integrate voice into apps built for Android Auto. Learn to add voice to Widgets for Auto, and explore some of the other voice-first features coming to the platform.", + "url": "https://www.youtube.com/watch?v=hhdVMLG5Y10", + "headerImageUrl": "https://i.ytimg.com/vi/hhdVMLG5Y10/maxresdefault.jpg", + "publishDate": "2022-05-10T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "2", + "15" + ], + "authors": [] + }, + { + "id": "124", + "title": "I/O 22: ADB Podcast Episode 185 : Play Store🎙", + "content": "In this episode Tor, Chet, and Romain chat with Jon and Andrew from the Play team about the Play Store app, which recently went through a major refactoring.", + "url": "https://adbackstage.libsyn.com/episode-185-play-store", + "headerImageUrl": "http://assets.libsyn.com/show/332855?height=250&width=250&overlay=true", + "publishDate": "2022-05-17T23:00:00.000Z", + "type": "Podcast 🎙", + "topics": [ + "12" + ], + "authors": [] + }, + { + "id": "125", + "title": "Android Basics with Compose", + "content": "We released the first two units of Android Basics with Compose, our first free course that teaches Android Development with Jetpack Compose to anyone; you do not need any prior programming experience other than basic computer literacy to get started. ", + "url": "https://android-developers.googleblog.com/2022/05/new-android-basics-with-compose-course.html", + "headerImageUrl": "https://developer.android.com/images/hero-assets/android-basics-compose.svg", + "publishDate": "2022-05-04T23:00:00.000Z", + "type": "Codelab", + "topics": [ + "2", + "3", + "10" + ], + "authors": [ + "25" + ] + }, + { + "id": "126", + "title": "Android 13 Beta 1", + "content": "Beta 1 includes the latest updates to photo picker, themed app icons, improved localization and language support, and the new notification permission which requires apps targeting Android 13 to request the notification permission from the user before posting notifications. Check out the beta by visiting the Android 13 developer site.", + "url": "https://android-developers.googleblog.com/2022/04/android-13-beta-1-blog.html", + "headerImageUrl": "https://developer.android.com/about/versions/13/images/android-13-hero_1440.png", + "publishDate": "2022-05-04T23:00:00.000Z", + "type": "DAC - Android version features", + "topics": [ + "13" + ], + "authors": [ + "14" + ] + }, + { + "id": "127", + "title": "Architecture: Entities - MAD Skills", + "content": "In this episode, Garima from GoDaddy Studio talks about entities and more specifically how creating separate entities per layer per project leads to clean and scalable model architecture.", + "url": "https://www.youtube.com/watch?v=cfak1jDKM_4", + "headerImageUrl": "https://i3.ytimg.com/vi/cfak1jDKM_4/maxresdefault.jpg", + "publishDate": "2022-05-04T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "4" + ], + "authors": [] + }, + { + "id": "128", + "title": "Architecture: Live Q&A - MAD Skills", + "content": "Manuel , Yigit , TJ , and Milosz hosted a very special Architecture Q&A and answered questions from the community. Find out the answers to: “Is LiveData deprecated?”, “MVVM or MVI for Compose”, “Should we use flow in DataSources” and more.", + "url": "https://www.youtube.com/watch?v=_2BtE1P6MPE", + "headerImageUrl": "https://i3.ytimg.com/vi/_2BtE1P6MPE/maxresdefault.jpg", + "publishDate": "2022-05-04T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "4" + ], + "authors": [ + "23", + "34", + "38" + ] + }, + { + "id": "129", + "title": "MAD Skills: Architecture", + "content": "To wrap up the Architecture Android MAD skills series, \nManuel wrote a blog post summarizing each episode of the series! Check it out to get caught up on all things Android Architecture.", + "url": "https://android-developers.googleblog.com/2022/04/architecture-mad-skills-series-wrap-up.html", + "headerImageUrl": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwpLUhIDR7IVIgPnCayAMbm0cYAC0ktSWLT9_vWJ1au0oZK_0un_IlXfu4HixEtc4G_AOi4BkWATw6BsyFCTPtCiu2wSvnfL3OVqWVNdblp6neIuFh9N3KH02SYDBgr6hIpAU7A9KjX9mT3oFJI6uuasaYqqMg_GZgptg0aooIqLywmeTp_PrpTAOj/s1600/1_J2NKRQ4qedvMVWoxL_4ZLA.jpeg", + "publishDate": "2022-05-04T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "4" + ], + "authors": [ + "23" + ] + }, + { + "id": "130", + "title": "The first developer preview of Privacy Sandbox on Android", + "content": "Privacy Sandbox is a program to help you conduct initial testing of the proposed APIs and evaluate how you might adopt them for your solutions. The Developer Preview provides additional platform APIs and services on top of the Android 13 Developer Beta release, SDK, system images, Preview APIs, API reference, and support references. See the release notes for more details on what’s included in the release.", + "url": "https://android-developers.googleblog.com/2022/04/first-preview-privacy-sandbox-android.html", + "headerImageUrl": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimeEtKqNjaaRY2oxecefVbcytzULjln30fNMxfJQfWOu6Tqy9XYQKAVkwLTeGRiPh50RBIxyA6HD86_Qm_Vpiit7eEO1ZmeZttgdsH187-cL8YE-w6NOvqYDwcn-MzIPmk0yiJy-4_kbsZ4_k3CngfP36F-U5g-PQmunzFpPAHuWtBNCsHcbP80flJ/s1600/Android_PrivacySandboxonAndroidDeveloper_4209x1253.png", + "publishDate": "2022-05-04T23:00:00.000Z", + "type": "DAC - Android version features", + "topics": [ + "11", + "13" + ], + "authors": [ + "77" + ] + }, + { + "id": "131", + "title": "Expanding Play’s Target Level API Requirements 🎯", + "content": "Starting on November 1, 2022, apps that don’t target an API level within two years of the latest major Android release version will not be available on Google Play to new users with devices running Android OS versions newer than your app’s target API level. For example, as of this November, existing apps need to target at least API level 30, Android 11, to be available to new users on Android 12 and 13 devices.", + "url": "https://android-developers.googleblog.com/2022/04/expanding-plays-target-level-api-requirements-to-strengthen-user-security.html", + "headerImageUrl": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifh6osWctzfS76FGmd91DArGexlVFw7BNh0ZCqgSuU5aO1AU2pt2T554nkpGy8AzeY_oIOY-TWc0YsS_DwMR9yp3aV_TSrgh7-XPNAg8jSDe_8ySG4ae6D6OqVUMzPmwEoPDXvEhA09um5qahSO1cfSjWIk03bq7vUVDvDHnvt-EubXLKw_Dz2uoUI/s1600/Android-New-policy-update-to-strengthen-Google-Play-social.png", + "publishDate": "2022-04-13T23:00:00.000Z", + "type": "DAC - Android version features", + "topics": [ + "12" + ], + "authors": [ + "10" + ] + }, + { + "id": "132", + "title": "Google Play PolicyBytes - April 2022 policy updates", + "content": "Users who have previously installed your app from Google Play will continue to be able to discover, re-install, and use your app, even if they move to a new Android device. App updates still also need to target an API level within a year of the latest major Android release version. Expanding our target level API requirements will protect users from installing older apps that may not have the privacy and security protections in place that newer Android releases offer.", + "url": "https://www.youtube.com/watch?v=O0UwUF2DgQc", + "headerImageUrl": "https://i3.ytimg.com/vi/O0UwUF2DgQc/maxresdefault.jpg", + "publishDate": "2022-04-13T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "12" + ], + "authors": [] + }, + { + "id": "133", + "title": "Upgrading Android Attestation: Remote Provisioning 🔐", + "content": "Attestation for device integrity has been mandated since Android 8.0, and is used in a variety of services such as SafetyNet. Android 12 added the option of Remote Key Provisioning for device manufacturers, and it will be mandated in Android 13. If you’re leveraging attestation in your app, watch out for a longer certificate chain structure, a new root of trust, the deprecation of RSA attestation, and short-lived certificates/attestation keys.", + "url": "https://android-developers.googleblog.com/2022/03/upgrading-android-attestation-remote.html", + "headerImageUrl": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXGH6tNkY1UkXgIQluciMoaSR9hZNKAoKcRyv_UxyHbEuPRvTVfWT4A_3BQEb_HCMUALR5bScXZsIEzHiRJwrFgm9fhouknFkP5H5ngCUtdf7uiGpTuCOm5dF5rtDrjR5Vm0r9NNU4J7lzN3k0sdMQumgan-NPp2nPSgXypTqj-yqn6BBS9URGrh1F/s1600/Android-KeyAttestation-Header.png", + "publishDate": "2022-04-13T23:00:00.000Z", + "type": "DAC - Android version features", + "topics": [ + "13" + ], + "authors": [] + }, + { + "id": "134", + "title": "Architecture: Handling UI events - MAD Skills", + "content": "With this episode of MAD skills we continue with our architecture series of videos. In this video you'll learn about UI events. Developer Relations Engineer Manuel Vivo covers the different types of UI events, the best practices for handling them, and more!", + "url": "https://www.youtube.com/watch?v=lwGtp0Yr0PE", + "headerImageUrl": "https://i3.ytimg.com/vi/lwGtp0Yr0PE/maxresdefault.jpg", + "publishDate": "2022-04-13T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "4" + ], + "authors": [ + "23" + ] + }, + { + "id": "135", + "title": "Architecture: The Domain Layer - MAD Skills", + "content": "In this episode of MAD skills you'll learn about the Domain Layer - an optional layer which sits between the UI and Data layers. Developer Relations Engineer Don Turner will explain how the domain layer can simplify your app architecture, making it easier to understand and test.", + "url": "https://www.youtube.com/watch?v=gIhjCh3U88I", + "headerImageUrl": "https://i3.ytimg.com/vi/gIhjCh3U88I/maxresdefault.jpg", + "publishDate": "2022-04-13T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "4" + ], + "authors": [ + "42" + ] + }, + { + "id": "136", + "title": "Architecture: Organizing modules - MAD Skills", + "content": "In this episode of Architecture for Modern Android Development Skills, Emily Kager shares a tip around organizing modules in Android apps.", + "url": "https://www.youtube.com/watch?v=HB_r9wn49Gc", + "headerImageUrl": "https://i3.ytimg.com/vi/HB_r9wn49Gc/maxresdefault.jpg", + "publishDate": "2022-04-13T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "4" + ], + "authors": [] + }, + { + "id": "137", + "title": "App Excellence: Android Architecture", + "content": "How do you build a successful app? Our advice: think like a building architect. If you need help getting started, we have the perfect blueprint for success when building on Android. Check out our updated guide to Android App Architecture, and build something that your users will love.", + "url": "https://www.youtube.com/watch?v=fodD6UHjLmw", + "headerImageUrl": "https://i3.ytimg.com/vi/fodD6UHjLmw/maxresdefault.jpg", + "publishDate": "2022-04-13T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "4" + ], + "authors": [] + }, + { + "id": "138", + "title": "Accessibility on TV - Integrate with Android TV & Google TV", + "content": "Thinking about accessibility is critical when developing a quality app on Android TV OS. Ian will be covering the most common issues, the solution to these issues, and some more complex scenarios. ", + "url": "https://www.youtube.com/watch?v=GyglHvJ6LMY", + "headerImageUrl": "https://i3.ytimg.com/vi/GyglHvJ6LMY/maxresdefault.jpg", + "publishDate": "2022-04-13T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "16", + "14" + ], + "authors": [] + }, + { + "id": "139", + "title": "Google Play Billing - Integrate with Android TV & Google TV", + "content": "In this episode of Integrate with Android TV & Google TV, Thomas will discuss how you can monetize your Android TV app using Google Play Billing. ", + "url": "https://www.youtube.com/watch?v=gb55CjH7NHY", + "headerImageUrl": "https://i3.ytimg.com/vi/gb55CjH7NHY/maxresdefault.jpg", + "publishDate": "2022-04-13T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "16" + ], + "authors": [] + }, + { + "id": "140", + "title": "Android for Cars 🚗", + "content": "Android for cars has introduced media recommendations powered by Google Assistant, a progress bar for long form content, and per-item content styles to allow browsable/playable items to be individually assigned to a list or grid. Head on over to the developer documentation to learn about all of these changes.", + "url": "https://developer.android.com/cars", + "headerImageUrl": "https://developers.google.com/cars/design/images/designforcars_1920.png", + "publishDate": "2022-04-13T23:00:00.000Z", + "type": "Docs 📑", + "topics": [ + "16" + ], + "authors": [] + }, + { + "id": "141", + "title": "Google Play Academy🎓 - Go Global: Japan\n", + "content": "With over 2 billion active Android devices globally, more and more developers are looking for new markets to expand. If you’re looking to succeed in Japan, one of the largest mobile app and gaming markets, these courses will cover strategies to make your content relevant across development, marketing and growth, and monetization.", + "url": "https://www.youtube.com/watch?v=hY1HH-9efkg", + "headerImageUrl": "https://i3.ytimg.com/vi/hY1HH-9efkg/maxresdefault.jpg", + "publishDate": "2022-04-13T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "12" + ], + "authors": [] + }, + { + "id": "142", + "title": "Google Play Academy🎓 - Go Global: Southeast Asia", + "content": "With over 2 billion active Android devices globally, more and more developers are looking for new markets to expand. If you’re looking to succeed in Southeast Asia, a fast-growing market that spends as much as 1.5x more time on the mobile internet than any other region, these courses will cover strategies to make your content relevant across development, marketing and growth, and monetization.", + "url": "https://www.youtube.com/watch?v=j9VRzvDhTO0", + "headerImageUrl": "https://i3.ytimg.com/vi/j9VRzvDhTO0/maxresdefault.jpg", + "publishDate": "2022-04-13T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "12" + ], + "authors": [] + }, + { + "id": "143", + "title": "Google Play Academy🎓 - Design for All Users", + "content": "Learn how to optimize for onboarding, build accessible apps, and reduce app size to reach more users.", + "url": "https://www.youtube.com/watch?v=07NUULjEJ5A", + "headerImageUrl": "https://i3.ytimg.com/vi/07NUULjEJ5A/maxresdefault.jpg", + "publishDate": "2022-04-13T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "12" + ], + "authors": [] + }, + { + "id": "144", + "title": "Game development 🎮", + "content": "We covered how to help you monitor your game’s stability using Android vitals on Google Play Console, how to best optimize your game to improve your customer engagement during the month of Ramadan, and announced that the Indie Games Accelerator & Indie Games Festival 2022 from Google Play is coming soon, offering a way to get notified when submissions open.", + "url": "https://www.youtube.com/watch?v=m2gTnT2kCRQ", + "headerImageUrl": "https://i3.ytimg.com/vi/m2gTnT2kCRQ/maxresdefault.jpg", + "publishDate": "2022-04-13T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "17" + ], + "authors": [] + }, + { + "id": "145", + "title": "Migrating Architecture Blueprints to Jetpack Compose", + "content": "Manuel wrote about how and why we’ve Migrated our Architecture Blueprints to Jetpack Compose, and some issues we faced in doing so.", + "url": "https://medium.com/androiddevelopers/migrating-architecture-blueprints-to-jetpack-compose-8ffa6615ede3", + "headerImageUrl": "https://miro.medium.com/max/1400/1*J2NKRQ4qedvMVWoxL_4ZLA.jpeg", + "publishDate": "2022-04-13T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "4", + "3" + ], + "authors": [ + "23" + ] + }, + { + "id": "146", + "title": "The curious case of FLAG_ACTIVITY_LAUNCH_ADJACENT", + "content": "Pietro wrote about how to enable split screen use cases using the Android 7.0 FLAG_ACTIVITY_LAUNCH_ADJACENT flag to open your Activity in a new adjacent window on Android 12L. (and some supported Android 11+ devices)", + "url": "https://medium.com/androiddevelopers/the-curious-case-of-flag-activity-launch-adjacent-f1212f37a8e0", + "headerImageUrl": "https://miro.medium.com/max/1400/1*YWg6uZkqSakAb5vW6uc-gg.png", + "publishDate": "2022-04-13T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "2" + ], + "authors": [ + "12" + ] + }, + { + "id": "147", + "title": "AndroidX releases 🚀", + "content": "AppCompat AppCompat-Resources Version 1.5.0-alpha01 contains a bunch of bugfixes, as well as updated nullability to match Android 13 DP2 and a few small compatibility features involving TextView, AppCompatDialog, SearchView, and SwitchCompat.\n\nNavigation Version 2.4.2 has been released with all the new bugfixes backported from the 2.5 alpha releases.", + "url": "https://developer.android.com/jetpack/androidx/versions/all-channel", + "headerImageUrl": "https://blogger.googleusercontent.com/img/a/AVvXsEhxtjouMCgk8sv8wkvC5Aip4muxMo4TLnfSVtZ3Hw7ZpuqXQmk-EkV9qk9PKim0yVFVFlpjEJG-vqh6gCLFkQPuf2dQk6qEdQZM_9brvuxBA0dtOUlvUh7tMIQsF11RnSnSPWOPKDIzeiixfapL2ax4YgMahJppgG_a5rjs_4QBjzzgzqsDs9Wc-Ldx=w1200-h630-p-k-no-nu", + "publishDate": "2022-04-13T23:00:00.000Z", + "type": "Jetpack release 🚀", + "topics": [ + "8" + ], + "authors": [] + }, + { + "id": "148", + "title": "ADB Podcast Episodes🎙184: Skia and AGSL - Shaders of Things to Come", + "content": "In this episode Tor, Chet, and Romain chat with Derek and Brian from the Skia team about Skia (the graphics layer that backs the Android Canvas APIs), pixel shaders, and the new “AGSL” API that lets you provide pixel shaders for advanced graphics effects, which was recently added as part of the Android T preview release. If you’re interested in graphics technology, this is the episode for you.", + "url": "https://adbackstage.libsyn.com/episode-184-skia-and-agsl-shaders-of-things-to-come", + "headerImageUrl": "https://ssl-static.libsyn.com/p/assets/9/4/d/b/94dbe077f2f14ee640be95ea3302a6a1/ADB184_Skia_and_AGSL.png", + "publishDate": "2022-04-13T23:00:00.000Z", + "type": "Podcast 🎙", + "topics": [ + "2", + "8" + ], + "authors": [ + "32", + "30", + "31" + ] + }, + { + "id": "149", + "title": "Android 13 DP 2 😍", + "content": "Recently we shared Android 13 Developer Preview 2 with more new features and changes for you to try in your apps! Some notable features include Developer downgradable permissions which allows your app to protect user privacy by downgrading previously granted runtime permissions, and Bluetooth LE Audio which helps users receive high fidelity audio without sacrificing battery life; it can also seamlessly switch between different use cases that were not possible with Bluetooth Classic. Check out all the new features in the post!", + "url": "https://android-developers.googleblog.com/2022/03/second-preview-android-13.html", + "headerImageUrl": "https://blogger.googleusercontent.com/img/a/AVvXsEjnrShXcFkBmErmhgdmx82vJbaKBIxU6p2Yz2Vr1V7AlFkD2tGwRmx_a7tWcInPmiUh8VpPmEEqXut-EjP23lFYG9wiMO4sKBDEwbZ3MNppZOy_HW54OXO4SkdQVH08cWdi7QnTMMwGELFoPq_r7_cyaGU8fx2InJG2R-NfkqF1IRt7rKOfA8M1GhUy", + "publishDate": "2022-03-29T23:00:00.000Z", + "type": "DAC - Android version features", + "topics": [ + "13" + ], + "authors": [ + "14" + ] + }, + { + "id": "150", + "title": "Architecture: The data layer - MAD Skills", + "content": "Jose goes over the data layer and its two components: repositories and data sources. You will dive deeper into what the roles of these two are and understand their differences. You will also learn about data immutability, error handling, threading testing and more!", + "url": "https://www.youtube.com/watch?v=r5AseKQh2ZE", + "headerImageUrl": "https://i3.ytimg.com/vi/r5AseKQh2ZE/maxresdefault.jpg", + "publishDate": "2022-03-29T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "4" + ], + "authors": [] + }, + { + "id": "151", + "title": "Architecture: The UI layer - MAD Skills", + "content": "TJ covers the UI layer in this episode of MAD skills using the JetNews sample app as a case study You will learn UI Layer pipeline, UI state exposure, UI state consumption and more!", + "url": "https://www.youtube.com/watch?v=p9VR8KbmzEE", + "headerImageUrl": "https://i3.ytimg.com/vi/p9VR8KbmzEE/maxresdefault.jpg", + "publishDate": "2022-03-29T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "4" + ], + "authors": [ + "38" + ] + }, + { + "id": "152", + "title": "Account Linking - Integrate with Android TV & Google TV", + "content": "Miguel and Adekunle discuss account linking. ​​Google Account Linking lets you safely link a user’s Google Account with their account on your platform, granting Google applications and devices access to your services and is needed for many integrations on Android TV & Google TV. They discuss the basics of OAuth like implementing your authorization, token exchange, and revocation endpoints. You will also learn the difference between the Web OAuth, Streamlined, and App Flip linking flows.", + "url": "https://www.youtube.com/watch?v=-Fa99hpUsdk", + "headerImageUrl": "https://i3.ytimg.com/vi/-Fa99hpUsdk/maxresdefault.jpg", + "publishDate": "2022-03-29T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "16" + ], + "authors": [] + }, + { + "id": "153", + "title": "Modern media playback on Android - Integrate with Android TV & Google TV", + "content": "Paul explores best practices for integrating and validating media sessions, the unified way for Android apps to interact with media content. MediaSessions allows different devices like smart speakers, watches, peripherals and accessories to surface and interact with playback and content metadata.", + "url": "https://www.youtube.com/watch?v=OYy41ceW59s", + "headerImageUrl": "https://i3.ytimg.com/vi/OYy41ceW59s/maxresdefault.jpg", + "publishDate": "2022-03-29T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "16" + ], + "authors": [ + "27" + ] + }, + { + "id": "154", + "title": "FHIR SDK for Android Developers 🏥", + "content": "Community health workers in low-and-middle-income countries use mobile devices as critical tools for doing community outreach and providing crucial health services. Unfortunately, the lack of data interoperability means that patient records are fragmented and caregivers may only receive incomplete information. Last year, Google introduced a collaboration with the World Health Organization to build an open source software developer kit designed to help developers build mobile solutions using the Fast Healthcare Interoperability Resources (FHIR) global standard for healthcare data. Read the article to learn more about how this SDK can help you create apps to aid community health workers in low-and-middle-income countries.", + "url": "https://medium.com/androiddevelopers/our-fhir-sdk-for-android-developers-9f8455e0b42f", + "headerImageUrl": "https://miro.medium.com/max/1400/1*azSHuKma0fz1RxcPcqiusg.png", + "publishDate": "2022-03-29T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "1" + ], + "authors": [] + }, + { + "id": "155", + "title": "Helping Users Discover Quality Apps on Large Screens 🔎", + "content": "Adoption of large screens is growing rapidly and now there are over 250M active Android tablets, foldables, and ChromeOS devices. To help people get the most from their devices, we’re making three big changes in Google Play to enable users to discover and engage with high quality apps and games: ranking and promotability changes, alerts for low quality apps, and device-specific ratings and reviews. Read all about it in the post!", + "url": "https://android-developers.googleblog.com/2022/03/helping-users-discover-quality-apps-on.html", + "headerImageUrl": "https://blogger.googleusercontent.com/img/a/AVvXsEiWXMaly6_CP_gSHmxE92yVBXUQ1X5EcTA6pdKwo_NsAtO1Ouv_RhHxG1HqtbStufdnylV51VbHI0FmmPV8lvmLAOqNzhcD2znU3vWVajQXfOlFw_kP-01jxSvrzVIXZG7SCQMiw58yUaWgmqzO-dsaso5DOeYVKnwQm3Vdu9lFmogfCkQT5u7H0sVt", + "publishDate": "2022-03-29T23:00:00.000Z", + "type": "Docs 📑", + "topics": [ + "2" + ], + "authors": [ + "61" + ] + }, + { + "id": "156", + "title": "Access Android vitals data through the new Play Developer Reporting API", + "content": "In this article Lauren talks about Android vitals which are a great way to track how your app is performing in Google Play Console. Now there are new use cases for Android vitals which include building internal dashboards, joining with other datasets for deeper analysis and automation troubleshooting and releases. Learn more about the API and how to use it in this post!", + "url": "https://android-developers.googleblog.com/2022/03/play-developer-reporting-API.html", + "headerImageUrl": "https://blogger.googleusercontent.com/img/a/AVvXsEhnvMF36lJv9wDDHWLQb7AfVBajueyEuocw_9ne1jgKJAO5dgXWcAyrKa92f4miTcFoSH5usz_Jha2C1gJwJNSr6et8sZGSCnkZTgtdaKPemEfwaHJDjiurWaPtqFF3qI0aX7aRB7B9WUW1VXT_Wgkyyq8nYK7RrOy9zW4a7gROkzd3H5m9T36Bc7Ww", + "publishDate": "2022-03-29T23:00:00.000Z", + "type": "Docs 📑", + "topics": [ + "12" + ], + "authors": [] + }, + { + "id": "157", + "title": "Using performance class to optimize your user experience", + "content": "The Jetpack Core Performance library in alpha has launched! This library enables you to easily identify what a device is capable of, and tailor your user experience accordingly. As developer, this means you can reliably group devices with the same level of performance and tailor your app’s behavior to those different groups. This enables you to deliver an optimal experience to users with both more and less capable devices.", + "url": "https://android-developers.googleblog.com/2022/03/using-performance-class-to-optimize.html", + "headerImageUrl": "https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYa28aPEBLCSzLkir02bVSWusH5BBIiAcq_CzCx5DD3iQu5WyDLC1sZe1y5OInomon5KHJKemMCa5q6XAtfkMhljMoePuebLGDz6yRDU3cjkwMo7sV5WKe20KNzWhP1ktdOn7OxOxeiXqzeDrPwLcpoVaStm8840phqHOqDptiQ0twMsGTD2u3o0Xf/s1600/Android-using-performance-class-to-optimize-user-experience-header%20%281%29.png", + "publishDate": "2022-03-29T23:00:00.000Z", + "type": "Docs 📑", + "topics": [ + "7" + ], + "authors": [ + "42" + ] + }, + { + "id": "158", + "title": "AndroidX releases 🚀", + "content": "We have a few libraries in alpha-01 including Activity Version 1.6.0-alpha01, CustomView-Poolingcontainer Version 1.0.0-alpha01, and Junit-Gtest Version 1.0.0-alpha01.\n\nCar App Version 1.2.0-rc01 and Mediarouter Version 1.3.0-rc01 are also in rc-01.", + "url": "https://developer.android.com/jetpack/androidx/versions/all-channel", + "headerImageUrl": "https://blogger.googleusercontent.com/img/a/AVvXsEi6y_NUo9gnpHYdRc7lwnbVnraBtUSIZTnIoAcHXkbq8Z0AFHBUHDI_s7HwwP2h2nTwo571RnRuXN-sUWdgJ7qkNb2MSslYiXWP3tteXooTdwAS_YzbZMTux25eLZk0kgdLtXmWTRLdolft-ZcsgGjCyJnH-CjzHsZXGy8vNVxB5oFZkBExOpBwvoDL=w1200-h630-p-k-no-nu", + "publishDate": "2022-03-29T23:00:00.000Z", + "type": "Jetpack release 🚀", + "topics": [ + "8" + ], + "authors": [] + }, + { + "id": "159", + "title": "Discontinuing Kotlin synthetics for views", + "content": "Synthetic properties to access views were created as a way to eliminate the common boilerplate of findViewById calls. These synthetics are provided by JetBrains in the Kotlin Android Extensions Gradle plugin (not to be confused with Android KTX).", + "url": "https://android-developers.googleblog.com/2022/02/discontinuing-kotlin-synthetics-for-views.html", + "headerImageUrl": "https://blogger.googleusercontent.com/img/a/AVvXsEhAba1fyHq6ddgUfT09YxU3XkAhnolKyLnXE2GmcJABVT-y8PWLKUiC7LmesY7Txak65fc6nW8T7yar9_4Uz4ezcBA_MDZ-yqBR2cj4ipSN-5l_E57exa3m9qt2MHFo_RdLWc_YDX7J7AOMkyzs43ylbGtwl6Z8GSf1zgs71Te36cQ-9Z_qgMgFroLq=w1200-h630-p-k-no-nu", + "publishDate": "2022-02-18T00:00:00.000Z", + "type": "Article 📚", + "topics": [ + "2", + "10" + ], + "authors": [ + "1" + ] + }, + { + "id": "160", + "title": "Things to know from the 2022 Google for Games Developer Summit", + "content": "This week marked the 2022 Google for Games Developer Summit, Google’s biggest event of the year centered around game development. The Android team shared information around the next generation of services, tools and features to help you develop and deliver high quality games. ", + "url": "https://android-developers.googleblog.com/2022/03/GGDS-recap-blog.html", + "headerImageUrl": "https://blogger.googleusercontent.com/img/a/AVvXsEhW4RL-UKUurgM2bVJRepqjKehVETjf9bqdXllyspPaWTTt8s86MGvfxlxLkDyJAnnkGr7vDpDTPx6bQbgkThYXMSaW1GQvXw9V57xybA8Y89vIE45JDElGxSNFHwOAndATPYrGmc200fkyBTRSNi7w53hTbS1ao-TSoEBFs8jvTgz6ud5Tcb1qitkt", + "publishDate": "2022-03-15T00:00:00.000Z", + "type": "Article 📚", + "topics": [ + "17" + ], + "authors": [ + "2" + ] + }, + { + "id": "161", + "title": "MAD Skills: DataStore and Introduction to Architecture💡", + "content": "Now that our MAD Skills series on Jetpack DataStore is complete, let’s do a quick wrap up of all the things we’ve covered in each episode.", + "url": "https://android-developers.googleblog.com/2022/03/jetpack-datastore-wrap-up.html", + "headerImageUrl": "https://blogger.googleusercontent.com/img/a/AVvXsEgo2-I1LhMjWd1zzpIQXzjMCPoZeUZc35n43UosKDuLMyP7rIDe8cGfs23tmkSAed6Wxw9EoNTIpvvWCljermK_lCu0etlrCnONx3WeXMCGe-s8I45hYhuVo6w_Q2UTNATMTA70t2o9MS5p2pBdPFz5Ye4b2ajOJjNlW9rELtqWcEW4O1Rkzy4lfqRO", + "publishDate": "2022-03-14T00:00:00.000Z", + "type": "Article 📚", + "topics": [ + "9" + ], + "authors": [ + "3" + ] + }, + { + "id": "162", + "title": "Play Time with Jetpack Compose", + "content": "Learn about Google Play Store’s strategy for adopting Jetpack Compose, how they overcame specific performance challenges, and improved developer productivity and happiness.", + "url": "https://android-developers.googleblog.com/2022/03/play-time-with-jetpack-compose.html", + "headerImageUrl": "https://developer.android.com/images/social/android-developers.png", + "publishDate": "2022-03-10T00:00:00.000Z", + "type": "Article 📚", + "topics": [ + "3", + "12" + ], + "authors": [ + "4", + "5" + ] + }, + { + "id": "163", + "title": "App Excellence Summit 2022 ⭐", + "content": "Did you know that 54% of users who left a 1-star review in the Play Store mentioned app stability and bugs? *\n\nTo help product managers and business decision makers understand how high quality app experiences drive business growth and what tools they can use to make sound business and technical decisions, we are hosting our first Android App Excellence Summit in just a few weeks!", + "url": "https://android-developers.googleblog.com/2022/03/app-excellence-summit-2022.html", + "headerImageUrl": "https://blogger.googleusercontent.com/img/a/AVvXsEh4Vck7mqle-tLweEgrIc1WT0ycY6O6zBxv9mC1Dt1xCnJN5COTGFxDSQlIM1rbbMKIMZHPtjzXgENMGk80oxb5Mn8kTn6qO7kgUXC_N5YSB0dWxcXvQOIPHEEgNJze9g8eZrY1xgA9_oBls71NLItDJKTYeoJGEXxIBiAE_c6SkXv2jSELZEoFfqVq", + "publishDate": "2022-03-10T00:00:00.000Z", + "type": "Event 📆", + "topics": [ + "1" + ], + "authors": [] + }, + { + "id": "164", + "title": "#TheAndroidShow: Tablets, Jetpack Compose, and Android 13 📹", + "content": "Last week, Florina and Huyen hosted #TheAndroidShow, where we went Behind the scenes with animations & Jetpack Compose, asked whether now is the moment to think tablet first, and covered Android 13 along with other key themes for Android this year.", + "url": "https://www.youtube.com/watch?v=WL9h46CymlU", + "headerImageUrl": "https://i.ytimg.com/vi/WL9h46CymlU/maxresdefault.jpg", + "publishDate": "2022-03-09T00:00:00.000Z", + "type": "Video 📺", + "topics": [ + "3", + "2", + "13", + "1" + ], + "authors": [ + "6" + ] + }, + { + "id": "165", + "title": "Freeing up 60% of storage for apps 💾", + "content": "App archiving will allow users to reclaim ~60% of app storage temporarily by removing parts of the app rather than uninstalling the app completely.", + "url": "https://android-developers.googleblog.com/2022/03/freeing-up-60-of-storage-for-apps.html", + "headerImageUrl": "https://developer.android.com/images/social/android-developers.png", + "publishDate": "2022-03-08T00:00:00.000Z", + "type": "Article 📚", + "topics": [ + "9" + ], + "authors": [ + "7", + "8" + ] + }, + { + "id": "166", + "title": "Demystifying Jetpack Glance for app widgets", + "content": "We recently announced the first Alpha version of Glance, initially with support for AppWidgets and now for Tiles for Wear OS. This new framework is built on top of the Jetpack Compose runtime and designed to make it faster and easier to build “glanceables” such as app widgets without having to handle a lot of boilerplate code or lifecycle events to connect different components.", + "url": "https://medium.com/androiddevelopers/demystifying-jetpack-glance-for-app-widgets-8fbc7041955c", + "headerImageUrl": "https://miro.medium.com/max/1400/1*mlswR3fyxaIG-C1OUifYVw.jpeg", + "publishDate": "2022-03-07T00:00:00.000Z", + "type": "Article 📚", + "topics": [ + "2", + "19" + ], + "authors": [ + "9" + ] + }, + { + "id": "167", + "title": "Keeping Google Play safe with our key 2022 initiatives 🔒", + "content": "We shared information about what’s ahead in 2022 for Google Play’s privacy and safety initiatives to give you time to prepare.", + "url": "https://android-developers.googleblog.com/2022/03/privacy-and-security-direction.html", + "headerImageUrl": "https://blogger.googleusercontent.com/img/a/AVvXsEhh3FMLL-etD7iDzhSI6CoYbuwgB9ZADjXa6A9C4aM3W-eRqj1FGfP8dyMY4i5RlMtQJD8Sx1y1NHFuaCae10iZkAs_cETaCAllzCDU075awpkAc1pkhld7uxwjTmwNdihGhB-FtySiSsf9aknd1ZULz0zkRtybX4gRUp8JCbPh2n3pPEhjK0mTjNWS", + "publishDate": "2022-03-03T00:00:00.000Z", + "type": "Article 📚", + "topics": [ + "11" + ], + "authors": [ + "10" + ] + }, + { + "id": "168", + "title": "Games-Activity Version 1.1.0", + "content": "adds WindowInsets listening/querying for notch and IME response along with key and motion event filters.", + "url": "https://developer.android.com/jetpack/androidx/releases/games#1.1.0", + "headerImageUrl": "https://developer.android.com/images/social/android-developers.png", + "publishDate": "2022-02-23T00:00:00.000Z", + "type": "Jetpack release 🚀", + "topics": [ + "17" + ], + "authors": [] + }, + { + "id": "169", + "title": "Room Version 2.5.0-alpha01", + "content": "Converted room-common, room-migration, and paging related files in room-runtime from Java to Kotlin along with a new API for multi-process lock to protect multi-process 1st time database creation and migrations", + "url": "https://developer.android.com/jetpack/androidx/releases/room#2.5.0-alpha01", + "headerImageUrl": "https://developer.android.com/images/social/android-developers.png", + "publishDate": "2022-02-23T00:00:00.000Z", + "type": "Jetpack release 🚀", + "topics": [ + "9" + ], + "authors": [] + }, + { + "id": "170", + "title": "Media Version 1.6.0-alpha 01", + "content": "Adds the extras necessary to setup a signin/settings page using CarAppLibrary.", + "url": "https://developer.android.com/jetpack/androidx/releases/media#media-1.6.0-alpha01", + "headerImageUrl": "https://blogger.googleusercontent.com/img/a/AVvXsEjo_CL5arSn2zb_YKP8hKjaMG3nqXXPQ_zn05X9FQ0XLdE2Ii6WeGG0eD_miObCRv2iz3hJ2T0lIIn3iDFyT3yN8B7NFET_fE5nhcw6MHQmOKK4G4R5XgXTkEIyqY4kjz2F5hpPscvQgsz0aRkVqSLynp-6x9HqkoldNYwDSp7kbttmh2JCW1cwUXhG=w1200-h630-p-k-no-nu", + "publishDate": "2022-02-23T00:00:00.000Z", + "type": "Jetpack release 🚀", + "topics": [ + "18" + ], + "authors": [] + }, + { + "id": "171", + "title": "AppCompat-Resources Version 1.6.0-alpha01", + "content": "Adds support for customizing locales, providing backwards compatibility for the Android 13 per-language preferences API", + "url": "https://developer.android.com/jetpack/androidx/releases/appcompat#1.6.0-alpha01", + "headerImageUrl": "https://blogger.googleusercontent.com/img/a/AVvXsEhxsx2mynFgTjtKCAxJiWvIYuJF1sNFfRCPnEbBWSmQLATP_Z6Bmz81sr9WmS2CWVUqIzW4uYyRyW2wQSLR73i9WXLUzGc-LbMS-QEcQQZI5qoymfRf3pyrMnOeGuFAKsfLaAEtquvNyqA2KaO28BnF3plt0jr6kVYIyl0tkpWhxHa47CPuNvhEehQ1=w1200-h630-p-k-no-nu", + "publishDate": "2022-02-23T00:00:00.000Z", + "type": "Jetpack release 🚀", + "topics": [ + "2" + ], + "authors": [] + }, + { + "id": "172", + "title": "Recording Video with CameraX VideoCapture API", + "content": "A picture is worth a thousand words, and CameraX ImageCapture has already made it much easier to tell your story through still images on Android. Now with the new VideoCapture API, CameraX can help you create thousands of continuous pictures to tell an even better and more engaging story!", + "url": "https://medium.com/androiddevelopers/recording-video-with-camerax-videocapture-api-a36cfd8a48c8", + "headerImageUrl": "https://miro.medium.com/max/1400/1*GZmhCFMCrG4L_mOtwSb0zA.png", + "publishDate": "2022-02-23T00:00:00.000Z", + "type": "Article 📚", + "topics": [ + "18" + ], + "authors": [ + "11" + ] + }, + { + "id": "173", + "title": "Unbundling the stable WindowManager", + "content": "The 1.0.0 stable release of Jetpack WindowManager, the foundation for great experiences on all types of large screen devices.", + "url": "https://medium.com/androiddevelopers/unbundling-the-stable-windowmanager-a5471ff2907", + "headerImageUrl": "https://miro.medium.com/max/1400/0*dIXjHF8_-47CvYTb.png", + "publishDate": "2022-02-17T00:00:00.000Z", + "type": "Article 📚", + "topics": [ + "2" + ], + "authors": [ + "12" + ] + }, + { + "id": "174", + "title": "Jetpack Compose 1.1 is now stable!", + "content": "Last week we released version 1.1 of Jetpack Compose and Florina Muntenescu wrote an article giving us all the information! This release contains new features like improved focus handling, touch target sizing, ImageVector caching and support for Android 12 stretch overscroll. This also means that previously experimental APIs are now stable. Check out our recently updated samples, codelabs, and the Accompanist library!", + "url": "https://android-developers.googleblog.com/2022/02/jetpack-compose-11-now-stable.html", + "headerImageUrl": "https://blogger.googleusercontent.com/img/a/AVvXsEiEIiQOoFF-f-sDcbYOMINZw5-2R9aQjrREfiXFMGsRYODVfaz1sgdCS2C3UjgeJjCII5oyE4y97kbvQIUsl9wIx8RqTSZPSdIoCywW89lvmAJ5a15bkFOwoR9UacCEUb4CjOMy0omVMfC0CQhUfz9VMTZR4iyjDGagEZfNuMid8BT0lvarns9Tp6PC", + "publishDate": "2022-02-09T00:00:00.000Z", + "type": "Jetpack release 🚀", + "topics": [ + "2" + ], + "authors": [ + "6" + ] + }, + { + "id": "175", + "title": "MAD Skills: DataStore", + "content": "The DataStore MAD Skills series rolls on! In the sixth episode, Simona Stojanovic covered DataStore: Best Practices part 2 covering DataStore-to-DataStore migration. This is used when you make significant changes to your dataset like renaming your data model values or changing their type. ", + "url": "https://medium.com/androiddevelopers/datastore-and-data-migration-fdca806eb1aa", + "headerImageUrl": "https://miro.medium.com/max/1400/0*8wsdb7Z7QxT1d4lM", + "publishDate": "2022-02-15T00:00:00.000Z", + "type": "Article 📚", + "topics": [ + "9" + ], + "authors": [ + "3" + ] + }, + { + "id": "176", + "title": "DataStore and Testing", + "content": "For the final part of the DataStore series, Simona covered DataStore and testing and teaches you how to fully test your DataStore.", + "url": "https://medium.com/androiddevelopers/datastore-and-testing-edf7ae8df3d8", + "headerImageUrl": "https://miro.medium.com/max/1400/1*5_yt1M6_QEMN0OgGU8VaZw.png", + "publishDate": "2022-02-16T00:00:00.000Z", + "type": "Article 📚", + "topics": [ + "9" + ], + "authors": [ + "3" + ] + }, + { + "id": "177", + "title": "Material You: Coming to more Android Devices near you", + "content": "Material You will soon be available on more Android 12 phones globally including devices by Samsung, Oppo, OnePlus and more! Material You has made the Android experience more fluid and personal than ever. Our OEM partners continue to work with us to ensure that key design APIs work consistently across the Android ecosystem so developers can benefit from a cohesive experience.", + "url": "https://android-developers.googleblog.com/2022/02/material-you-coming-to-more-android.html", + "headerImageUrl": "https://blogger.googleusercontent.com/img/a/AVvXsEhDOIPFoqZ8uvg7VmH5EuY3ocfxvKZXawUQ9NczUCEtOdpw3v42vSTrpUSvHjbph5KmTlDH-XtnmGeXmCFTMaHDnRS9ibzLUHBip_XnVHUL7xv-3UrVL6plimErj_oK_KyW5ULpmj6orVTaTq9r56K0V3npQFdIrBPE7_caRWb_QA5E9FljpREWVB7Y", + "publishDate": "2022-02-10T00:00:00.000Z", + "type": "Article 📚", + "topics": [ + "2", + "13" + ], + "authors": [ + "13" + ] + }, + { + "id": "178", + "title": "The first developer preview of Android 13", + "content": "We’re sharing a first look at the next release of Android, with the Android 13 Developer Preview 1. With Android 13 we’re continuing some important themes: privacy and security, as well as developer productivity. We’ll also build on some of the newer updates we made in 12L to help you take advantage of the 250+ million large screen Android devices currently running.", + "url": "https://android-developers.googleblog.com/2022/02/first-preview-android-13.html", + "headerImageUrl": "https://blogger.googleusercontent.com/img/a/AVvXsEjnrShXcFkBmErmhgdmx82vJbaKBIxU6p2Yz2Vr1V7AlFkD2tGwRmx_a7tWcInPmiUh8VpPmEEqXut-EjP23lFYG9wiMO4sKBDEwbZ3MNppZOy_HW54OXO4SkdQVH08cWdi7QnTMMwGELFoPq_r7_cyaGU8fx2InJG2R-NfkqF1IRt7rKOfA8M1GhUy", + "publishDate": "2022-02-10T00:00:00.000Z", + "type": "Article 📚", + "topics": [ + "13" + ], + "authors": [ + "14" + ] + }, + { + "id": "179", + "title": "AndroidX releases 🚀", + "content": "Since Compose just went stable, the Animation, Compiler, Foundation, Material, Runtime and UI Versions also went stable! Games-Text-Input and ProfileInstaller also went stable! \n\nThere are a bunch of new APIs in alpha including new Testing APIs (Test Runner, Test Monitor, Test Services and Test Orchestrator), Metrics Version and Startup Version.", + "url": "https://developer.android.com/jetpack/androidx/versions/all-channel#february_9_2022", + "headerImageUrl": "https://miro.medium.com/max/1400/0*bux1xKYcB3A9pBFx", + "publishDate": "2022-02-09T00:00:00.000Z", + "type": "Docs 📑", + "topics": [ + "3", + "8" + ], + "authors": [ + "15" + ] + }, + { + "id": "180", + "title": "DataStore best practices part 1", + "content": "learn about performing synchronous work and how to make it work with Kotlin data class serialization and Hilt.", + "url": "https://www.youtube.com/watch?v=S10ci36lBJ4", + "headerImageUrl": "https://i.ytimg.com/vi/S10ci36lBJ4/maxresdefault.jpg", + "publishDate": "2022-02-07T00:00:00.000Z", + "type": "Video 📺", + "topics": [ + "9" + ], + "authors": [ + "3" + ] + }, + { + "id": "181", + "title": "All about Proto DataStore", + "content": "In this post, we will learn about Proto DataStore, one of two DataStore implementations. We will discuss how to create it, read and write data and how to handle exceptions, to better understand the scenarios that make Proto a great choice.", + "url": "https://medium.com/androiddevelopers/all-about-proto-datastore-1b1af6cd2879", + "headerImageUrl": "https://miro.medium.com/max/1400/1*UtNu7pmbt3WEA213SW9p9Q.png", + "publishDate": "2022-01-31T00:00:00.000Z", + "type": "Article 📚", + "topics": [ + "9" + ], + "authors": [ + "3" + ] + }, + { + "id": "182", + "title": "Glance: Tiles for Wear OS made simple ⌚️", + "content": "Last year we announced the Wear Tiles API. To complement that Java API, we are excited to announce that support for Wear OS Tiles has been added to Glance, a new framework built on top of Jetpack Compose designed to make it easier to build for surfaces outside your Android app. As this library is in alpha, we’d love to get your feedback.", + "url": "https://android-developers.googleblog.com/2022/01/announcing-glance-tiles-for-wear-os.html", + "headerImageUrl": "https://developer.android.com/images/social/android-developers.png", + "publishDate": "2022-01-26T00:00:00.000Z", + "type": "Article 📚", + "topics": [ + "19" + ], + "authors": [ + "16" + ] + }, + { + "id": "183", + "title": "Android Studio Bumblebee 🐝 stable", + "content": "Android Studio Bumblebee (2021.1.1) is now stable. We’ve since patched it to address some launch issues — so make sure to upgrade! It improves functionality across the typical developer workflow: Build and Deploy, Profiling and Inspection, and Design.", + "url": "https://android-developers.googleblog.com/2022/01/android-studio-bumblebee-202111-stable.html", + "headerImageUrl": "https://blogger.googleusercontent.com/img/a/AVvXsEhQ7R2ySipHb8y5jNJeiIj3pE8dZfWAV7EF0wQZ4rQ65lB4MsZroAT4R_7rSfznMZ30xBMLx9_dwnt05V6I0Du0EfI7mvLicK6LwdkuZsF_Gc3sPqrZGxkojTJpHCXFI3Kvr3bLyoSjElldtt1NUpGSBzHgG3O1pvS9BR02L9R2_FYTUgPLfUoNLWYQ", + "publishDate": "2022-01-25T00:00:00.000Z", + "type": "Article 📚", + "topics": [ + "5" + ], + "authors": [ + "17" + ] + }, + { + "id": "184", + "title": "All about Preferences DataStore", + "content": "In this post, we will take a look at Preferences DataStore, one of two DataStore implementations. We will go over how to create it, read and write data, and how to handle exceptions, all of which should, hopefully, provide you with enough information to decide if it’s the right choice for your app.", + "url": "https://medium.com/androiddevelopers/all-about-preferences-datastore-cc7995679334", + "headerImageUrl": "https://miro.medium.com/max/1400/1*UtNu7pmbt3WEA213SW9p9Q.png", + "publishDate": "2022-01-24T00:00:00.000Z", + "type": "Article 📚", + "topics": [ + "9" + ], + "authors": [ + "3" + ] + }, + { + "id": "185", + "title": "Building apps for Android Automotive OS 🚘", + "content": "The Car App Library version 1.2 is already in beta, enabling app developers to start building their navigation, parking, and charging apps for Android Automotive OS. Now, developers can begin building and testing apps for these categories using the Automotive OS emulator across both Android Automotive OS and Android Auto.", + "url": "https://android-developers.googleblog.com/2022/01/building-apps-for-android-automotive-os.html", + "headerImageUrl": "https://blogger.googleusercontent.com/img/a/AVvXsEicCVDoRaflBAdKr9_Zh2cAGUB8pphAj9m0w1iN7VLizNZ6L2iNGNSnt7tvD6MP72BW8eqobZpU751t32aF47bpNDv2walZ6zzsXxyuAjCyhBl0b4o06X1j3bPi0AAU0EedqYjp5FSXMQHHzvxBedjsST3MIIFvalX3tZpgiFZgEdqbB2f_H741Irrb=w1200-h630-p-k-no-nu", + "publishDate": "2022-01-27T00:00:00.000Z", + "type": "Article 📚", + "topics": [ + "15" + ], + "authors": [ + "18" + ] + }, + { + "id": "186", + "title": "Navigation 2.4 is stable ", + "content": "It’s been rewritten in Kotlin, with two pane integration, Navigation routes + Kotlin DSL improvements, Navigation Compose’s first stable release, and multiple back stack support.", + "url": "https://developer.android.com/jetpack/androidx/releases/navigation#2.4.0", + "headerImageUrl": "https://blogger.googleusercontent.com/img/a/AVvXsEhsJgTKhUlIb-1X_G1rWQLCxpd0KMmGTUgqUfSNr4__CsxxjiOdJgJHCtgO9dG8mZdwzAHat9HyIcMsvA-fS0o6T0-_ut_Ej74hKfn09AJUPNc3YscwfGG6hqFS-W_oTczgtd1aGNzpCdDDo4b4lrUM3n8OsFKjvslqE6pHRY3w0aZSTHsaYytSnQSA=w1200-h630-p-k-no-nu", + "publishDate": "2022-01-26T00:00:00.000Z", + "type": "Jetpack release 🚀", + "topics": [ + "2" + ], + "authors": [] + }, + { + "id": "187", + "title": "Google Maps with Jetpack Compose", + "content": "A project which contains Jetpack Compose components for the Google Maps SDK for Android.\n\n", + "url": "https://github.com/googlemaps/android-maps-compose", + "headerImageUrl": "https://opengraph.githubassets.com/0952eadfbb07f5ce9f631fd0312d87e8f0e2557df01bac3b587311ca864cf836/googlemaps/android-maps-compose", + "publishDate": "2022-02-11T00:00:00.000Z", + "type": "Jetpack release 🚀", + "topics": [ + "3" + ], + "authors": [] + }, + { + "id": "188", + "title": "Improving App Performance with Baseline Profiles", + "content": "In this blog post we’ll discuss Baseline Profiles and how they improve app and library performance, including startup time by up to 40%. While this blogpost focuses on startup, baseline profiles also significantly improve jank as well.", + "url": "https://android-developers.googleblog.com/2022/01/improving-app-performance-with-baseline.html", + "headerImageUrl": "https://developer.android.com/images/social/android-developers.png", + "publishDate": "2022-01-28T00:00:00.000Z", + "type": "Article 📚", + "topics": [ + "7" + ], + "authors": [ + "19", + "20", + "21" + ] + }, + { + "id": "189", + "title": "Smule Adopts Google’s Oboe to Improve Recording Quality & Completion Rates", + "content": "As the most downloaded singing app of all time, Smule Inc. has been investing on Android to improve the overall audio quality and, more specifically, to reduce latency, i.e. allowing singers to hear their voices in the headset as they perform. The teams specialized in Audio and Video allocated a significant part of 2021 into making the necessary changes to convert the Smule application used by over ten million Android users from using the OpenSL audio API to the Oboe audio library, enabling roughly a 10%+ increase in recording completion rate.", + "url": "https://android-developers.googleblog.com/2022/02/smule-adopts-googles-oboe-to-improve.html", + "headerImageUrl": "https://developer.android.com/images/social/android-developers.png", + "publishDate": "2022-02-02T00:00:00.000Z", + "type": "Article 📚", + "topics": [ + "18" + ], + "authors": [] + }, + { + "id": "190", + "title": "Guide to background work", + "content": "Do you use coroutines or WorkManager for background work? The team updated the guide to background work to help you choose which library is best for your use case. It depends on whether or not the work is persistent, and if it needs to run immediately, it’s long running, or deferrable.", + "url": "https://developer.android.com/guide/background", + "headerImageUrl": "https://developer.android.com/images/social/android-developers.png", + "publishDate": "2022-02-11T00:00:00.000Z", + "type": "Docs 📑", + "topics": [ + "4" + ], + "authors": [] + }, + { + "id": "191", + "title": "Accessibility best practices", + "content": "If you work on Android TV, you should be aware of the accessibility best practices that the team created. It provides recommendations for both native and non-native apps. Get to know why accessibility is important for your TV app, how to evaluate your apps when TalkBack is used, how to adopt system caption settings, and more!", + "url": "https://developer.android.com/training/tv/accessibility", + "headerImageUrl": "https://developer.android.com/images/social/android-developers.png", + "publishDate": "2022-02-11T00:00:00.000Z", + "type": "Docs 📑", + "topics": [ + "16", + "14" + ], + "authors": [] + }, + { + "id": "192", + "title": "TalkBack - the Google screen reader", + "content": "Next up in the Accessibility series is TalkBack, the Google screen reader! In this video, learn what TalkBack is, how to set it up, how to navigate through your app with it, and how you can use it to improve the Accessibility of your app.", + "url": "https://www.youtube.com/watch?v=_1yRVwhEv5I", + "headerImageUrl": "https://i.ytimg.com/vi/_1yRVwhEv5I/maxresdefault.jpg", + "publishDate": "2022-01-21T00:00:00.000Z", + "type": "Video 📺", + "topics": [ + "14" + ], + "authors": [] + }, + { + "id": "193", + "title": "ADB Podcast 182: Large screens are a big deal", + "content": "Clara, Florina and Daniel join your usual hosts to talk about large screens, what they are and what they mean for app developers. You will also learn about the resources at your disposal to build high quality experiences on large screen devices: from samples and guidance to canonical layouts and new APIs such as window size classes. Disclaimer: Florina is very excited about this, don’t miss the epic Large screens! Large screens! Large screens! intro!", + "url": "https://adbackstage.libsyn.com/episode-182-large-screens-are-a-big-deal", + "headerImageUrl": "http://assets.libsyn.com/show/332855?height=250&width=250&overlay=true", + "publishDate": "2022-02-01T00:00:00.000Z", + "type": "Podcast 🎙", + "topics": [ + "2" + ], + "authors": [] + }, + { + "id": "194", + "title": "Jetpack Alpha for Glance Widgets 🔍", + "content": "We made the first release of Jetpack Glance available, a new framework designed to make it faster and easier to build app widgets for the home screen and other surfaces. Glance offers similar modern, declarative Kotlin APIs that you are used to with Jetpack Compose, helping you build beautiful, responsive app widgets with way less code. Glance provides a base-set of its own Composables to help build “glanceable” experiences — starting today with app widget components but with more coming. Using the Jetpack Compose runtime, Glance translates these Composables into RemoteViews that can be displayed in an app widget", + "url": "https://android-developers.googleblog.com/2021/12/announcing-jetpack-glance-alpha-for-app.html", + "headerImageUrl": "https://blogger.googleusercontent.com/img/a/AVvXsEgol-A5cMCZY79MH5v0axcekWIVJ--ymPUe0U5Q4BLsC0BA1LTbWIlZ76XWi2cHjxHVu-kbpv0o2QJWBjNAda_93Ah7AW_PcAgz9o082cd6zyTJZAM8HjQnrZ69A6CaKQaCFuf2LLi4p6xRvS_WUn9tVA2K2wmV3_qB6JDKnFNhO3Guvn5tPc_SuoaY", + "publishDate": "2021-12-15T00:00:00.000Z", + "type": "Article 📚", + "topics": [ + "8" + ], + "authors": [ + "9" + ] + }, + { + "id": "195", + "title": "Jetpack Watch Face Library ⌚", + "content": "We launched the Jetpack Watch Face library written from the ground up in Kotlin, including all functionality from the Wearable Support Library along with many new features such as: Watch face styling which persists across both the watch and phone (with no need for your own database or companion app); Support for a WYSIWYG watch face configuration UI on the phone; Smaller, separate libraries (that only include what you need); Battery improvements through promoting good battery usage patterns out of the box, such as automatically reducing the interactive frame rate when the battery is low; New screenshot APIs so users can see previews of their watch face changes in real time on both the watch and phone.\n\nIf you are still using the Wearable Support Library, we strongly encourage migrating to the new Jetpack libraries to take advantage of the new APIs and upcoming features and bug fixes.", + "url": "https://android-developers.googleblog.com/2021/12/develop-watch-faces-with-stable-jetpack.html", + "headerImageUrl": "https://1.bp.blogspot.com/-P4S1eEhqouE/YaaFy_bGD1I/AAAAAAAARNA/-w5O05Mppo8pe0hoeMC1yDNRWiX_mnTOgCLcBGAsYHQ/s0/image1.png", + "publishDate": "2021-12-01T00:00:00.000Z", + "type": "Article 📚", + "topics": [ + "19", + "3", + "8" + ], + "authors": [ + "22" + ] + }, + { + "id": "196", + "title": "Rebuilding our Guide to App Architecture 📐", + "content": "We launched a revamped guide to app architecture which includes best practices. As Android apps grow in size, it’s important to design the code with an architecture in place that allows the app to scale, improves quality and robustness, and makes testing easier. The guide contains pages for UI, domain, and data layers including deep dives into more complex topics, such as how to handle UI events. We also have a learning pathway to walk you through it.", + "url": "https://android-developers.googleblog.com/2021/12/rebuilding-our-guide-to-app-architecture.html", + "headerImageUrl": "https://blogger.googleusercontent.com/img/a/AVvXsEgnJ0CCtKClhEOE_BDOoWiXGr2eA6LWjn-RPvFjFx8Va97f_1_xCmpF3uI_bUILoQPqJUDlXUbIRVPjvi3oCiFtRVZlcAAkHBa1cJlufG5OvmeovQeiHgH9bLhxREufi-fw7FnxIcmxGmzWuW0DmYUZolsM6rywTSZIm3KtI6yx9jSIeRpuYzRZubke", + "publishDate": "2021-12-14T00:00:00.000Z", + "type": "Article 📚", + "topics": [ + "4" + ], + "authors": [ + "23" + ] + }, + { + "id": "197", + "title": "Google Play Games on PC Beta 🎮", + "content": "We announced that we’re opening sign-ups for Google Play Games on PC as a beta in Korea, Taiwan, and Hong Kong, allowing users participating in the beta to play a catalog of Google Play games on their PC via a standalone application built by Google. The developer site has a form to express interest, along with information about bringing your Android game to PCs. It involves many of the same updates that you do to optimize your game for Chrome OS devices, such as support for Mouse and Keyboard controls.", + "url": "https://developers.googleblog.com/2022/01/googleplaygames.html", + "headerImageUrl": "https://blogger.googleusercontent.com/img/a/AVvXsEgsNv-PVLNLlX2SYd2p5DwTN2Jxwb54Rc7Ekbm0LgcFuwHBrF_5Y-DiUblL9oTjmeJ1Y44nPRMMkH5K-xlC0OApgUGxqBpUcfuV1LYPVvKsI67BKTpc_gNhaHsNda6Q1Uk1UvTznmMydqNHtXSqTgSJbjpQCoTGZM_ZLXlkGwMoBFfnMQkAIdl2zjsC", + "publishDate": "2022-01-19T00:00:00.000Z", + "type": "Article 📚", + "topics": [ + "17" + ], + "authors": [ + "24" + ] + }, + { + "id": "198", + "title": "MAD Skills: Gradle 🐘", + "content": "Murat covered building custom plugins in more depth, including the Artifact API in addition to the Variant API covered previously. It demonstrates building a plugin which automatically updates the version code specified in the app manifest with the git version. With the AGP 7.0 release, you can use these APIs to control build inputs, read, modify, or even replace intermediate and final artifacts.", + "url": "https://medium.com/androiddevelopers/gradle-and-agp-build-apis-taking-your-plugin-to-the-next-step-95e7bd1cd4c9", + "headerImageUrl": "https://miro.medium.com/max/1400/0*WkRft2aAKv19MoIm.jpeg", + "publishDate": "2021-12-01T00:00:00.000Z", + "type": "Article 📚", + "topics": [ + "5" + ], + "authors": [ + "25" + ] + }, + { + "id": "199", + "title": "Gradle and AGP Build APIs: Community tip - MAD Skills", + "content": "On this episode of Gradle and AGP Build APIs for MAD Skills, Alex Saveau walks you through manipulating Android build artifacts with the Android Gradle Plugin (AGP) and Gradle APIs.", + "url": "https://www.youtube.com/watch?v=8SFfffaB0CU", + "headerImageUrl": "https://i3.ytimg.com/vi/8SFfffaB0CU/maxresdefault.jpg", + "publishDate": "2021-12-15T00:00:00.000Z", + "type": "Video 📺", + "topics": [ + "5" + ], + "authors": [ + "26" + ] + }, + { + "id": "200", + "title": "Gradle and AGP Build APIs: Taking your plugin to the next step - MAD Skills", + "content": "On this episode of Gradle and AGP Build APIs for MAD Skills, Murat will discuss Gradle tasks, providers, properties, and basics of task inputs and outputs. Next, you will be able to take your plugin a step further and learn how to get access to various build artifacts using the new Artifact API. ", + "url": "https://www.youtube.com/watch?v=SB4QlngQQW0", + "headerImageUrl": "https://i3.ytimg.com/vi/SB4QlngQQW0/maxresdefault.jpg", + "publishDate": "2021-11-29T00:00:00.000Z", + "type": "Video 📺", + "topics": [ + "5" + ], + "authors": [ + "25" + ] + }, + { + "id": "201", + "title": "MAD Skills Gradle and AGP build APIs Wrap Up!", + "content": "This wrap-up post summarizes the whole MAD Skills Gradle series", + "url": "https://android-developers.googleblog.com/2021/12/mad-skills-gradle-and-agp-build-apis.html", + "headerImageUrl": "https://blogger.googleusercontent.com/img/a/AVvXsEgo1Fw61B9qtQESKdVJzcNXOG0RzhA2k85zkDMDNidBiQY7B6uguHXQ9t9IPB9BiHS0WTB1b4fwIgeN5zEIJrmznF9pt5lu9186wvXxJ3IKfLi8Fci8LyMDbQKGYc7nnijJ9_lhrNHtRQamaF2GTSXyJq5_lQk7we3cSfSviOxhgKN9TscMJaGgdMZJ", + "publishDate": "2021-12-16T00:00:00.000Z", + "type": "Article 📚", + "topics": [ + "5" + ], + "authors": [ + "25" + ] + }, + { + "id": "202", + "title": "MAD Skills: DataStore 🗄️", + "content": "Simona began MAD Skills: DataStore. DataStore is a thread-safe, non-blocking library in Android Jetpack that provides a safe and consistent way to store small amounts of data, such as preferences or application state, replacing SharedPreferences. It provides an implementation that stores typed objects backed by protocol buffers (Proto DataStore) and an implementation that stores key-value pairs (Preferences DataStore).", + "url": "https://www.youtube.com/watch?v=9ws-cJzlJkU", + "headerImageUrl": "https://i3.ytimg.com/vi/9ws-cJzlJkU/maxresdefault.jpg", + "publishDate": "2022-01-18T00:00:00.000Z", + "type": "Video 📺", + "topics": [ + "9" + ], + "authors": [ + "3" + ] + }, + { + "id": "203", + "title": "AndroidX releases 🚀", + "content": "Since the last Now in Android episode, a lot of libraries were promoted to stable! Compose ConstraintLayout brings support for ConstraintLayout syntax to Compose. We also released CoordinatorLayout 1.2, Car App 1.1.0, Room 2.4.0, Sqlite 2.2.0, Collection 1.2.0, and Wear Watchface 1.0.0.\n\nOur first alpha of Jetpack Compose 1.2 was released, along with alphas for Glance 1.0.0, Core-Ktx 1.8.0, WorkManager 2.8.0, Mediarouter 1.3.0, Emoji2 1.1.0, Annotation 1.4.0, Core-RemoteViews, Core-Peformance, and more.", + "url": "https://developer.android.com/jetpack/androidx/versions/all-channel#december_1_2021", + "headerImageUrl": "https://developer.android.com/images/social/android-developers.png", + "publishDate": "2021-12-01T00:00:00.000Z", + "type": "Docs 📑", + "topics": [ + "8" + ], + "authors": [] + }, + { + "id": "204", + "title": "Jetnews for every screen", + "content": "Alex wrote about the recent updates to Jetnews that improves its behavior across big and small mobile devices. It describes our design and development process so that you can learn our philosophy and associated implementation steps for building an application optimized for all screens with Jetpack Compose, including how to build a list/detail layout.", + "url": "https://medium.com/androiddevelopers/jetnews-for-every-screen-4d8e7927752", + "headerImageUrl": "https://miro.medium.com/max/1400/1*678DlYtu4G7wFrq30FQ7Mw.png", + "publishDate": "2022-01-18T00:00:00.000Z", + "type": "Article 📚", + "topics": [ + "2" + ], + "authors": [ + "22" + ] + }, + { + "id": "205", + "title": "Simplifying drag and drop", + "content": "Paul wrote about drag & drop, and how the Android Jetpack DragAndDrop library alpha makes it easier to handle data dropped into your app.", + "url": "https://medium.com/androiddevelopers/simplifying-drag-and-drop-3713d6ef526e", + "headerImageUrl": "https://miro.medium.com/max/1400/1*pUe4RBLe7FVlISDtAqeQ4Q.png", + "publishDate": "2021-12-15T00:00:00.000Z", + "type": "Article 📚", + "topics": [ + "8" + ], + "authors": [ + "27" + ] + }, + { + "id": "206", + "title": "Accessibility series 🌐: Handling content that times out - Accessibility on Android", + "content": "The accessibility series continues on, beginning with an episode on how to properly implement UI elements that disappear after a set amount of time.", + "url": "https://www.youtube.com/watch?v=X97P6Y8WHl0", + "headerImageUrl": "https://i3.ytimg.com/vi/X97P6Y8WHl0/maxresdefault.jpg", + "publishDate": "2021-12-03T00:00:00.000Z", + "type": "Video 📺", + "topics": [ + "14" + ], + "authors": [ + "28" + ] + }, + { + "id": "207", + "title": "Accessibility series 🌐: Acessibility Scanner", + "content": "We also cover how Accessibility Scanner can help you improve your app for all users by suggesting improvements in areas of accessibility.", + "url": "https://www.youtube.com/watch?v=i1gMzQv0hWU", + "headerImageUrl": "https://i3.ytimg.com/vi/i1gMzQv0hWU/maxresdefault.jpg", + "publishDate": "2021-12-10T00:00:00.000Z", + "type": "Video 📺", + "topics": [ + "14" + ], + "authors": [ + "28" + ] + }, + { + "id": "208", + "title": "Accessibility series 🌐: Accessibility test framework and Espresso - Accessibility on Android", + "content": "We investigate how Espresso and the Accessibility Test Framework can help you create automated accessibility tests.", + "url": "https://www.youtube.com/watch?v=DLN2s16HwcE", + "headerImageUrl": "https://i3.ytimg.com/vi/DLN2s16HwcE/maxresdefault.jpg", + "publishDate": "2021-12-22T00:00:00.000Z", + "type": "Video 📺", + "topics": [ + "14" + ], + "authors": [ + "28" + ] + }, + { + "id": "209", + "title": "Android TV & Google TV 📺", + "content": "Mayuri covered best practices for the Watch Next API on Android TV & Google TV, which increases engagement with your app by allowing your content to show up in the Watch Next row.", + "url": "https://www.youtube.com/watch?v=QFMIP5GOo70", + "headerImageUrl": "https://i3.ytimg.com/vi/QFMIP5GOo70/maxresdefault.jpg", + "publishDate": "2022-01-14T00:00:00.000Z", + "type": "Video 📺", + "topics": [ + "16" + ], + "authors": [ + "29" + ] + }, + { + "id": "210", + "title": "ADB Podcast 179: Flibberty Widget", + "content": "In this episode, Chet and Romain talked with Nicole McWilliams and Petr Čermák from the London engineering office about their work on App Widgets and Digital Wellbeing.", + "url": "https://adbackstage.libsyn.com/flibberty-widget", + "headerImageUrl": "https://ssl-static.libsyn.com/p/assets/4/0/e/c/40ec1fb11096bffed959afa2a1bf1c87/adb-180-flibberty-widget.png", + "publishDate": "2021-11-30T00:00:00.000Z", + "type": "Podcast 🎙", + "topics": [ + "13" + ], + "authors": [ + "30", + "31", + "32", + "33" + ] + }, + { + "id": "211", + "title": "ADB Podcast 180: Kotlin Magic Platform", + "content": "In this episode, we chat with Yigit Boyar from the Android Toolkit Team about Kotlin multi platform, while Romain provides light background music on his piano.", + "url": "https://adbackstage.libsyn.com/episode-180-kotlin-magic-platform", + "headerImageUrl": "https://ssl-static.libsyn.com/p/assets/2/6/2/5/262599d4ce76d20fa04421dee9605cbd/adb-181-kmp.png", + "publishDate": "2021-12-16T00:00:00.000Z", + "type": "Podcast 🎙", + "topics": [ + "10" + ], + "authors": [ + "30", + "31", + "32", + "34" + ] + }, + { + "id": "212", + "title": "ADB Podcast 181: Architecture → Fewer bugs at the end", + "content": "In this episode, we chat with Yigit Boyar (again!) from the Android Toolkit Team and Manuel Vivo from the Developer Relations team about application architecture. The team has released new architecture guidance, and we talk about that guidance here, as well as how our architecture recommendations apply in the new Jetpack Compose world.", + "url": "https://adbackstage.libsyn.com/episode-181-architecture-fewer-bugs-at-the-end", + "headerImageUrl": "https://ssl-static.libsyn.com/p/assets/8/d/1/3/8d137b65f392a68c27a2322813b393ee/ADB_181_Architecture.png", + "publishDate": "2022-01-11T00:00:00.000Z", + "type": "Podcast 🎙", + "topics": [ + "4" + ], + "authors": [ + "31", + "31", + "32", + "23" + ] + }, + { + "id": "213", + "title": "Android 12", + "content": "We released Android 12 and pushed it to the Android Open Source Project (AOSP). We introduced a new design language called Material You. We reduced the CPU time used by core system services, added performance class device capabilities, and added new features to improve performance. Users have more control of their privacy with the Privacy Dashboard and other new security and privacy features. We improved the user experience with a unified API for rich content insertion, compatible media transcoding, easier blurs and effects, AVIF image support, enhanced haptics, new camera effects/capabilities, improved native crash debugging, support for rounded screen corners, Play as you download, and Game Mode APIs.", + "url": "https://android-developers.googleblog.com/2021/10/android-12-is-live-in-aosp.html", + "headerImageUrl": "https://1.bp.blogspot.com/-mGlzRmn42Rs/YVstltyrboI/AAAAAAAAK3A/44QpoNJDeuoHhlgrRJSbk0L_ZopgFDLFACLcBGAsYHQ/s0/Android%2B12%2Blogo.png", + "publishDate": "2021-10-03T23:00:00.000Z", + "type": "DAC - Android version features", + "topics": [ + "13" + ], + "authors": [ + "14" + ] + }, + { + "id": "214", + "title": "Compose", + "content": "Jetpack Compose, Android’s modern, native UI toolkit became stable and ready for you to adopt in production. It interoperates with your existing app, integrates with existing Jetpack libraries, implements Material Design with straightforward theming, supports lists with Lazy components using minimal boilerplate, and has a powerful, extensible animation system. You can learn more about working with Compose in the Compose learning path and see where we’re going in future Compose releases in the Compose roadmap.", + "url": "https://developer.android.com/jetpack/compose", + "headerImageUrl": "https://www.gstatic.com/devrel-devsite/prod/vab7ee6e3641f10848d404faa598f256587df1a361a1e70cd114230c2961b73d9/android/images/lockup.svg", + "publishDate": "2021-12-07T00:00:00.000Z", + "type": "Jetpack release 🚀", + "topics": [ + "3" + ], + "authors": [] + }, + { + "id": "215", + "title": "Training", + "content": "This year, the Android Training Team released the final four new units of Android Basics in Kotlin.", + "url": "https://developer.android.com/courses/android-basics-kotlin/course", + "headerImageUrl": "https://developer.android.com/images/hero-assets/android-basics-kotlin.svg", + "publishDate": "2021-12-07T00:00:00.000Z", + "type": "Codelab", + "topics": [ + "10" + ], + "authors": [] + }, + { + "id": "216", + "title": "Introduction to Kotlin and Jetpack ", + "content": "Learn the basics of Jetpack KTX libraries, how to simplify callbacks with coroutines and Flow, and how to use and test Room/WorkManager APIs.", + "url": "https://youtu.be/nw7nnlHDkHw?list=PLWz5rJ2EKKc98e0f5ZbsgB63MdjZTFgsy", + "headerImageUrl": "https://i3.ytimg.com/vi/nw7nnlHDkHw/maxresdefault.jpg", + "publishDate": "2021-12-14T00:00:00.000Z", + "type": "Video 📺", + "topics": [ + "10", + "8" + ], + "authors": [ + "6" + ] + }, + { + "id": "217", + "title": "Introduction to Motion Layout", + "content": "Learn how to use MotionLayout and its design tool to create rich, animated experiences.", + "url": "https://www.youtube.com/watch?v=M1jE3W3_NTQ&list=PLWz5rJ2EKKc_PEOEHNBEyy6tPX1EgtUw2", + "headerImageUrl": "https://i3.ytimg.com/vi/M1jE3W3_NTQ/maxresdefault.jpg", + "publishDate": "2022-01-19T00:00:00.000Z", + "type": "Video 📺", + "topics": [ + "10", + "2", + "8" + ], + "authors": [ + "35" + ] + }, + { + "id": "218", + "title": "Introduction to WorkManager", + "content": "Learn how to schedule critical background work with WorkManager: from basic usage, threading, custom configuration and more.", + "url": "https://www.youtube.com/watch?v=NtpgWjiXEfg&list=PLWz5rJ2EKKc_J88-h0PhCO_aV0HIAs9Qk", + "headerImageUrl": "https://i3.ytimg.com/vi/NtpgWjiXEfg/maxresdefault.jpg", + "publishDate": "2022-03-01T00:00:00.000Z", + "type": "Video 📺", + "topics": [ + "8" + ], + "authors": [ + "36" + ] + }, + { + "id": "219", + "title": "Introduction to Navigation", + "content": "Learn the basics of the Navigation component, specific features of the tool and the APIs to create and navigate to destinations.", + "url": "https://www.youtube.com/watch?list=PLWz5rJ2EKKc9VpBMZUS9geQtc5RJ2RsUd&v=fiQiMy0HzsY&feature=emb_title", + "headerImageUrl": "https://i3.ytimg.com/vi/fiQiMy0HzsY/maxresdefault.jpg", + "publishDate": "2022-03-25T00:00:00.000Z", + "type": "Video 📺", + "topics": [ + "8" + ], + "authors": [ + "31" + ] + }, + { + "id": "220", + "title": "Introduction to Performance", + "content": "Learn about using system tracing and sampling profiling to debug performance issues in apps.", + "url": "https://www.youtube.com/watch?v=_5LgIrd4O5g&list=PLWz5rJ2EKKc-xjSI-rWn9SViXivBhQUnp", + "headerImageUrl": "https://i3.ytimg.com/vi/_5LgIrd4O5g/maxresdefault.jpg", + "publishDate": "2021-07-18T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "7" + ], + "authors": [ + "37" + ] + }, + { + "id": "221", + "title": "Introduction to Hilt", + "content": "Learn how to add and use Hilt for dependency injection in your Android app, best practices for testing with Hilt, and more advanced content.", + "url": "https://www.youtube.com/watch?v=mnMCgjuMJPA&list=PLWz5rJ2EKKc_9Qo-RBRYhVmME1iR4oeTK", + "headerImageUrl": "https://i3.ytimg.com/vi/mnMCgjuMJPA/maxresdefault.jpg", + "publishDate": "2021-08-22T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "8" + ], + "authors": [ + "23" + ] + }, + { + "id": "222", + "title": "Paging", + "content": "Learn the basics of paging, from the core types to binding them to your UI elements.", + "url": "https://www.youtube.com/watch?v=Pw-jhS-ucYA&list=PLWz5rJ2EKKc9L-fmWJLhyXrdPi1YKmvqS", + "headerImageUrl": "https://i3.ytimg.com/vi/Pw-jhS-ucYA/maxresdefault.jpg", + "publishDate": "2021-09-26T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "8" + ], + "authors": [ + "38" + ] + }, + { + "id": "223", + "title": "Introduction to Gradle and AGP Build APIs\n", + "content": "Learn how to configure your build, customize the build process to your needs and how to write your own plugins to extend your build even further.", + "url": "https://www.youtube.com/watch?v=mk0XBWenod8&list=PLWz5rJ2EKKc8fyNmwKXYvA2CqxMhXqKXX", + "headerImageUrl": "https://i3.ytimg.com/vi/mk0XBWenod8/maxresdefault.jpg", + "publishDate": "2021-11-15T00:00:00.000Z", + "type": "Video 📺", + "topics": [ + "5", + "5" + ], + "authors": [ + "25" + ] + }, + { + "id": "224", + "title": "Google I/O", + "content": "At I/O we released updates in Jetpack, Compose, Android Studio tooling, Large screens, Wear OS, Testing, and more! Get caught up on all the Android videos from I/O!", + "url": "https://www.youtube.com/watch?v=D_mVOAXcrtc", + "headerImageUrl": "https://i3.ytimg.com/vi/D_mVOAXcrtc/maxresdefault.jpg", + "publishDate": "2021-05-17T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "1" + ], + "authors": [] + }, + { + "id": "225", + "title": "Android Dev Summit", + "content": "At Android Dev Summit we released updates on privacy and security, large screens, Android 12, Google Play & Games, Building across screens, Jetpack Compose, Modern Android Development and more. Check out all the videos from ADS!", + "url": "https://www.youtube.com/watch?v=WZgR5Yf1iq8", + "headerImageUrl": "https://i3.ytimg.com/vi/WZgR5Yf1iq8/maxresdefault.jpg", + "publishDate": "2021-10-26T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "1" + ], + "authors": [] + }, + { + "id": "226", + "title": "Conveying state for Accessibility", + "content": "In this episode of the Accessibility series, you can learn more about the StateDescription API, when to use stateDescription and contentDescription, and how to represent error states to the end user.", + "url": "https://youtu.be/JvWM2PjLJls", + "headerImageUrl": "https://i.ytimg.com/vi/JvWM2PjLJls/maxresdefault.jpg", + "publishDate": "2021-11-30T00:00:00.000Z", + "type": "Video 📺", + "topics": [ + "2" + ], + "authors": [ + "39" + ] + }, + { + "id": "227", + "title": "Take your Gradle plugin to the next step", + "content": "This third and last episode of the Gradle MAD Skills series teaches you how to get access to various build artifacts using the new Artifact API.", + "url": "https://youtu.be/SB4QlngQQW0", + "headerImageUrl": "https://i.ytimg.com/vi/SB4QlngQQW0/maxresdefault.jpg", + "publishDate": "2021-11-29T00:00:00.000Z", + "type": "Video 📺", + "topics": [ + "5" + ], + "authors": [ + "25" + ] + }, + { + "id": "228", + "title": "How to write a Gradle plugin", + "content": "In this second episode of the Gradle MAD Skills series, Murat explains how to write your own custom Gradle plugin.", + "url": "https://youtu.be/LPzBVtwGxlo", + "headerImageUrl": "https://i.ytimg.com/vi/LPzBVtwGxlo/maxresdefault.jpg", + "publishDate": "2021-11-22T00:00:00.000Z", + "type": "Video 📺", + "topics": [ + "5" + ], + "authors": [ + "25" + ] + }, + { + "id": "229", + "title": "Convert YUV to RGB for CameraX Image Analysis", + "content": "Learn about a new feature in CameraX to convert YUV, the format that CameraX produces, to RGB used for image analysis capabilities available in TensorFlow Lite, for example. Read the blog post for more information about these formats and how to use the new conversion feature.", + "url": "https://medium.com/androiddevelopers/convert-yuv-to-rgb-for-camerax-imageanalysis-6c627f3a0292", + "headerImageUrl": "https://miro.medium.com/max/1400/1*cuOorbZgMbRvkSSGuDGccw.png", + "publishDate": "2021-11-19T00:00:00.000Z", + "type": "Article 📚", + "topics": [ + "8", + "18" + ], + "authors": [ + "40" + ] + }, + { + "id": "230", + "title": "AppCompat, Activity, and Fragment to support multiple back stacks", + "content": "The 1.4.0 release of these libraries brings stable support for multiple back stacks.", + "url": "https://developer.android.com/jetpack/androidx/releases/appcompat#1.4.0", + "headerImageUrl": "https://developer.android.com/images/social/android-developers.png", + "publishDate": "2021-11-17T00:00:00.000Z", + "type": "Jetpack release 🚀", + "topics": [ + "8", + "2" + ], + "authors": [] + }, + { + "id": "231", + "title": "Emoji2 adds support for modern emojis", + "content": "The 1.0 stable release of Emoji2 allows you to use modern emojis in your app.", + "url": "https://developer.android.com/jetpack/androidx/releases/emoji2#1.0.0", + "headerImageUrl": "https://developer.android.com/images/social/android-developers.png", + "publishDate": "2021-11-17T00:00:00.000Z", + "type": "Jetpack release 🚀", + "topics": [ + "8", + "2" + ], + "authors": [] + }, + { + "id": "232", + "title": "Lifecycle introduces lifecycle-aware coroutine APIs", + "content": "The new 2.4 release of Lifecycle introduces repeatOnLifecycle and flowWithLifecycle.", + "url": "https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0", + "headerImageUrl": "https://developer.android.com/images/social/android-developers.png", + "publishDate": "2021-11-17T00:00:00.000Z", + "type": "Jetpack release 🚀", + "topics": [ + "8", + "4" + ], + "authors": [] + }, + { + "id": "233", + "title": "Paging release brings changes to LoadState", + "content": "The new 3.1 release of Paging changes the behavior of LoadState.", + "url": "https://developer.android.com/jetpack/androidx/releases/paging#3.1.0", + "headerImageUrl": "https://developer.android.com/images/social/android-developers.png", + "publishDate": "2021-11-17T00:00:00.000Z", + "type": "Jetpack release 🚀", + "topics": [ + "8", + "2" + ], + "authors": [] + }, + { + "id": "234", + "title": "Wear tiles released as 1.0 stable", + "content": "The library that you use to build custom tiles for Wear OS devices is now stable.", + "url": "https://developer.android.com/jetpack/androidx/releases/wear-tiles#1.0.0", + "headerImageUrl": "https://developer.android.com/images/social/android-developers.png", + "publishDate": "2021-11-17T00:00:00.000Z", + "type": "Jetpack release 🚀", + "topics": [ + "8", + "19" + ], + "authors": [] + }, + { + "id": "235", + "title": "About Custom Accessibility Actions", + "content": "The accessibility series continues on with more information on how to create custom accessibility actions to make your apps more accessible. You can provide a custom action to the accessibility services and implement logic related to the action. For more information, check out the following episode!", + "url": "https://youtu.be/wWDYIGk0Kdo", + "headerImageUrl": "https://i.ytimg.com/vi/wWDYIGk0Kdo/maxresdefault.jpg", + "publishDate": "2021-11-17T00:00:00.000Z", + "type": "Video 📺", + "topics": [ + "2" + ], + "authors": [ + "39" + ] + }, + { + "id": "236", + "title": "Improving App Startup: Lessons from the Facebook App", + "content": "Improving app startup time is not a trivial task and requires a deep understanding of things that affect it. This year, the Android team and the Facebook app team have been working together on metrics and sharing approaches to improve app startup. Read more about the findings in this blog post.", + "url": "https://android-developers.googleblog.com/2021/11/improving-app-startup-facebook-app.html", + "headerImageUrl": "https://1.bp.blogspot.com/-5VyrQpFJufM/YaVKxf_DanI/AAAAAAAALS4/ybeza_emDKoKP0gjiNkqfDS_ltwo0075ACLcBGAsYHQ/w1200-h630-p-k-no-nu/AppExcellence_Editorial_LessonsFromFBApp_4209x1253-01%2B%25281%2529%2B%25281%2529.png", + "publishDate": "2021-11-16T00:00:00.000Z", + "type": "Article 📚", + "topics": [ + "7" + ], + "authors": [] + }, + { + "id": "237", + "title": "Gradle series kicks off", + "content": "Murat introduces the Gradle series and everything you'll learn in it.", + "url": "https://youtu.be/mk0XBWenod8", + "headerImageUrl": "https://i.ytimg.com/vi/mk0XBWenod8/maxresdefault.jpg", + "publishDate": "2021-11-15T00:00:00.000Z", + "type": "Video 📺", + "topics": [ + "5" + ], + "authors": [ + "25" + ] + }, + { + "id": "238", + "title": "Intro to Gradle and AGP", + "content": "In the first episode of the Gradle MAD Skills series, Murat explains how the Android build system works, and how to configure your build.", + "url": "https://youtu.be/GjPS4xDMmQY", + "headerImageUrl": "https://i.ytimg.com/vi/GjPS4xDMmQY/maxresdefault.jpg", + "publishDate": "2021-11-15T00:00:00.000Z", + "type": "Video 📺", + "topics": [ + "5" + ], + "authors": [ + "25" + ] + }, + { + "id": "239", + "title": "ADB Podcast episode 179 Hosts 3, Guests 0", + "content": "Chet, Romain and Tor sit down to chat about the Android Developer Summit, and in particular all the new features arriving in Android Studio, along with a few other topics like Chet’s new jank stats library, the Android 12L release, and more.", + "url": "https://adbackstage.libsyn.com/episode-178-hosts-3-guests-0", + "headerImageUrl": "http://assets.libsyn.com/show/332855?height=250&width=250&overlay=true", + "publishDate": "2021-11-15T00:00:00.000Z", + "type": "Podcast 🎙", + "topics": [ + "5", + "7", + "13" + ], + "authors": [ + "31" + ] + }, + { + "id": "240", + "title": "The problem with emojis and how emoji2 can help out", + "content": "Meghan wrote about the new emoji2 library that just became stable.", + "url": "https://medium.com/androiddevelopers/support-modern-emoji-99f6dea8e57f", + "headerImageUrl": "https://miro.medium.com/max/1400/1*yAOOlpXKKUl5nWWsPkNb7g.png", + "publishDate": "2021-11-12T00:00:00.000Z", + "type": "Article 📚", + "topics": [ + "8", + "2" + ], + "authors": [ + "15" + ] + }, + { + "id": "241", + "title": "Paging Q&A", + "content": "In this live session, TJ and Dustin answered your questions in the usual live Q&A format.", + "url": "https://youtu.be/8i6vrlbIVCc", + "headerImageUrl": "https://i.ytimg.com/vi/8i6vrlbIVCc/maxresdefault.jpg", + "publishDate": "2021-11-11T00:00:00.000Z", + "type": "Video 📺", + "topics": [ + "2" + ], + "authors": [] + }, + { + "id": "242", + "title": "Thanks for helping us reach 1M YouTube Subscribers", + "content": "Thank you everyone for following the Now in Android series and everything the Android Developers YouTube channel has to offer. During the Android Developer Summit, our YouTube channel reached 1 million subscribers! Here’s a small video to thank you all.", + "url": "https://youtu.be/-fJ6poHQrjM", + "headerImageUrl": "https://i.ytimg.com/vi/-fJ6poHQrjM/maxresdefault.jpg", + "publishDate": "2021-11-09T00:00:00.000Z", + "type": "Video 📺", + "topics": [ + "1" + ], + "authors": [] + }, + { + "id": "243", + "title": "Community tip on Paging", + "content": "Tips for using the Paging library from the developer community", + "url": "https://youtu.be/r5JgIyS3t3s", + "headerImageUrl": "https://i.ytimg.com/vi/r5JgIyS3t3s/maxresdefault.jpg", + "publishDate": "2021-11-08T00:00:00.000Z", + "type": "Video 📺", + "topics": [ + "2" + ], + "authors": [] + }, + { + "id": "244", + "title": "Transformations and customisations in the Paging Library", + "content": "A demonstration of different operations that can be performed with Paging. Transformations like inserting separators, when to create a new pager, and customisation options for consuming PagingData.", + "url": "https://youtu.be/ZARz0pjm5YM", + "headerImageUrl": "https://i.ytimg.com/vi/ZARz0pjm5YM/maxresdefault.jpg", + "publishDate": "2021-11-01T00:00:00.000Z", + "type": "Video 📺", + "topics": [ + "2" + ], + "authors": [ + "38" + ] + }, + { + "id": "245", + "title": "New Compose for Wear OS codelab", + "content": "In this codelab, you can learn how Wear OS can work with Compose, what Wear OS specific composables are available, and more!", + "url": "https://developer.android.com/codelabs/compose-for-wear-os", + "headerImageUrl": "https://developer.android.com/codelabs/compose-for-wear-os/img/4d28d16f3f514083.png", + "publishDate": "2021-10-27T23:00:00.000Z", + "type": "Codelab", + "topics": [ + "3", + "19" + ], + "authors": [ + "41" + ] + }, + { + "id": "246", + "title": "Building apps which are private by design", + "content": "Sara N-Marandi, product manager, and Yacine Rezgui, developer relations engineer, provided guidelines and best practices on how to build apps that are private by design, covered new privacy features in Android 12 and previewed upcoming Android concepts.", + "url": "https://youtu.be/hBVwr2ErQCw", + "headerImageUrl": "https://i.ytimg.com/vi/hBVwr2ErQCw/maxresdefault.jpg", + "publishDate": "2021-10-26T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "11" + ], + "authors": [] + }, + { + "id": "247", + "title": "Memory Safety Tools", + "content": "Serban Constantinescu, product manager, talked about the Memory Safety Tools that became available starting in Android 11 and have continued to evolve in Android 12. These tools can help address memory bugs and improve the quality and security of your application.", + "url": "https://youtu.be/JqLcTFpXreg", + "headerImageUrl": "https://i.ytimg.com/vi/JqLcTFpXreg/maxresdefault.jpg", + "publishDate": "2021-10-26T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "11" + ], + "authors": [] + }, + { + "id": "248", + "title": "Increasing User Transparency with Privacy Dashboard", + "content": "Android is ever evolving in its quest to protect users’ privacy. In Android 12, the platform increases transparency by introducing Privacy Dashboard, which gives users a simple and clear timeline view of the apps that have accessed location, microphone and camera within the past 24 hours. ", + "url": "https://medium.com/androiddevelopers/increasing-user-transparency-with-privacy-dashboard-23064f2d7ff6", + "headerImageUrl": "https://miro.medium.com/max/1400/1*cgaSAY9AvPWlndLimzIIzQ.png", + "publishDate": "2021-10-26T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "11" + ], + "authors": [ + "15" + ] + }, + { + "id": "249", + "title": "The most unusual and interesting security issues addressed last year", + "content": "Lilian Young, software engineer, presented a selection of the most unusual, intricate, and interesting security issues addressed in the last year. Developers and researchers are able to contribute to the security of the Android platform by submitting to the Android Vulnerability Rewards Program.", + "url": "https://medium.com/androiddevelopers/now-in-android-50-ads-special-9934422f8dd1", + "headerImageUrl": "https://miro.medium.com/max/1400/0*6h0XYdyki_1jfImJ", + "publishDate": "2021-10-26T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "11" + ], + "authors": [ + "43" + ] + }, + { + "id": "250", + "title": "New Data Safety section in the Play Console", + "content": "The new Data safety section will give you a simple way to showcase your app’s overall safety. It gives you a place to give users deeper insight into your app’s privacy and security practices, and explain the data your app may collect and why — all before users install.", + "url": "https://youtu.be/J7TM0Yy0aTQ", + "headerImageUrl": "https://i.ytimg.com/vi/J7TM0Yy0aTQ/maxresdefault.jpg", + "publishDate": "2021-10-26T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "11", + "12" + ], + "authors": [] + }, + { + "id": "251", + "title": "Building Android UIs for any screen size", + "content": "Clara Bayarri, engineering manager and Daniel Jacobson, product manager, talked about the state of the ecosystem, focusing on new design guidance, APIs, and tools to help you make the most of your UI on different screen sizes.", + "url": "https://youtu.be/ir3LztqbeRI", + "headerImageUrl": "https://i.ytimg.com/vi/ir3LztqbeRI/maxresdefault.jpg", + "publishDate": "2021-10-26T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "2" + ], + "authors": [] + }, + { + "id": "252", + "title": "What's new for large screens & foldables", + "content": "Emilie Roberts, Chrome OS developer advocate and Andrii Kulian, Android software engineer, introduced new features focused specifically on making apps look great on large screens, foldables, and Chrome OS. ", + "url": "https://youtu.be/6-925K3hMHU", + "headerImageUrl": "https://i.ytimg.com/vi/6-925K3hMHU/maxresdefault.jpg", + "publishDate": "2021-10-26T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "2" + ], + "authors": [] + }, + { + "id": "253", + "title": "Enable great input support for all devices", + "content": "Users expect seamless experiences when using keyboards, mice, and stylus. Emilie Roberts taught us how to handle common keyboard and mouse input events and how to get started with more advanced support like keyboard shortcuts, low-latency styluses, MIDI, and more.", + "url": "https://youtu.be/piLEZYTc_4g", + "headerImageUrl": "https://i.ytimg.com/vi/piLEZYTc_4g/maxresdefault.jpg", + "publishDate": "2021-10-26T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "2" + ], + "authors": [] + }, + { + "id": "254", + "title": "Best practices for video apps on foldable devices", + "content": "Francesco Romano, developer advocate, and Will Chan, product manager at Zoom explored new user experiences made possible by the foldable form factor, focusing on video conferencing and media applications. ", + "url": "https://youtu.be/DBAek_P0nEw", + "headerImageUrl": "https://i.ytimg.com/vi/DBAek_P0nEw/maxresdefault.jpg", + "publishDate": "2021-10-26T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "2", + "18" + ], + "authors": [] + }, + { + "id": "255", + "title": "Design beautiful apps on foldables and large screens", + "content": "Liam Spradlin, design advocate, and Jonathan Koren, developer relations engineer, talked about how to design and test Android applications that look and feel great across device types and screen sizes, from tablets to foldables to Chrome OS.", + "url": "https://youtu.be/DJeJIJKOUbI", + "headerImageUrl": "https://i.ytimg.com/vi/DJeJIJKOUbI/maxresdefault.jpg", + "publishDate": "2021-10-26T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "2" + ], + "authors": [] + }, + { + "id": "256", + "title": "12L and new Android APIs and tools for large screens", + "content": "Dave Burke, vice president of engineering, wrote a post covering the developer preview of 12L, an upcoming feature drop that makes Android 12 even better on large screens. ", + "url": "https://android-developers.googleblog.com/2021/10/12L-preview-large-screens.html", + "headerImageUrl": "https://1.bp.blogspot.com/-sjT5kFGiQtg/YXlpg0uByLI/AAAAAAAARJk/XHO_uo5bRJcMeQVm0Fn1wN-qe54FGI7MgCLcBGAsYHQ/w1200-h630-p-k-no-nu/12L-devices-hero.png", + "publishDate": "2021-10-26T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "2", + "13" + ], + "authors": [] + }, + { + "id": "257", + "title": "New features in ML Kit: Text Recognition V2 & Pose Detections", + "content": "Zongmin Sun, software engineer, and Valentin Bazarevsky, MediaPipe Engineer, talked about Text Recognition V2 & Pose Detection, recently-released features in ML Kit. ", + "url": "https://youtu.be/9EKQ0UC04S8", + "headerImageUrl": "https://i.ytimg.com/vi/9EKQ0UC04S8/maxresdefault.jpg", + "publishDate": "2021-10-26T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "8", + "2" + ], + "authors": [] + }, + { + "id": "258", + "title": "How to retain users with Android backup and restore", + "content": "In this talk, Martin Millmore, engineering manager, and Ruslan Tkhakokhov, software engineer, explored the benefits of transferring users’ data to a new device, using Backup and Restore to achieve that in a simple and secure way.", + "url": "https://youtu.be/bg2drEhz1_s", + "headerImageUrl": "https://i.ytimg.com/vi/bg2drEhz1_s/maxresdefault.jpg", + "publishDate": "2021-10-26T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "13" + ], + "authors": [] + }, + { + "id": "259", + "title": "Compatibility changes in Android 12", + "content": "Developer relations engineers Kseniia Shumelchyk and Slava Panasenko talked about new Android 12 features and changes. They shared tools and techniques to ensure that apps are compatible with the next Android release and users can take advantage of new features, along with app developer success stories.", + "url": "https://youtu.be/fCMJmV6nqGo", + "headerImageUrl": "https://i.ytimg.com/vi/fCMJmV6nqGo/maxresdefault.jpg", + "publishDate": "2021-10-26T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "13" + ], + "authors": [] + }, + { + "id": "260", + "title": "Building great experiences for Novice Internet Users", + "content": "Learn the principles to help craft great experiences for the novice Internet user segment from Mrinal Sharma, UX manager, and Amrit Sanjeev, developer relations engineer. They highlight the gap between nascent and tech savvy user segments and suggest strategies in areas to improve the overall user experience. Factors like low functional literacy, being multilingual by default, being less digitally confident, and having no prior internet experience requires that we rethink the way we build apps for these users.", + "url": "https://youtu.be/Sf_TauUY4LE", + "headerImageUrl": "https://i.ytimg.com/vi/Sf_TauUY4LE/maxresdefault.jpg", + "publishDate": "2021-10-26T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "2" + ], + "authors": [] + }, + { + "id": "261", + "title": "Android Basics in Kotlin course 🧑‍💻", + "content": "Android Basics in Kotlin teaches people with no programming experience how to build simple Android apps. Since the first learning units were released in 2020, over 100,000 beginners have completed it! Today, we’re excited to share that the final unit has been released, and the full Android Basics in Kotlin course is now available.", + "url": "https://android-developers.googleblog.com/2021/10/announcing-android-basics-in-kotlin.html", + "headerImageUrl": "https://1.bp.blogspot.com/-BmlW7k8RhME/YWRvsOes9aI/AAAAAAAAQ_g/FpFS6_new9Y7vdzP7P4RPs_x4WHVi4yxQCLcBGAsYHQ/w1200-h630-p-k-no-nu/Android-announcing-android-basics-in-Kotlin-course-16x9.png", + "publishDate": "2021-10-20T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "10" + ], + "authors": [ + "25" + ] + }, + { + "id": "262", + "title": "Updated Widget docs", + "content": "Widgets can make a huge impact on your user’s home screen! We updated the App Widgets documentation with the recent changes in the latest OS versions. New pages about how to create a simple widget, an advanced widget, and how to provide flexible widget layouts.", + "url": "https://developer.android.com/guide/topics/appwidgets", + "headerImageUrl": "https://www.gstatic.com/devrel-devsite/prod/vab7ee6e3641f10848d404faa598f256587df1a361a1e70cd114230c2961b73d9/android/images/lockup.svg", + "publishDate": "2021-10-20T23:00:00.000Z", + "type": "Docs 📑", + "topics": [ + "2" + ], + "authors": [] + }, + { + "id": "263", + "title": "Extend AGP by creating your own plugins", + "content": "The Android Gradle Plugin (AGP) contains extension points for plugins to control build inputs and extend its functionality. Starting in version 7.0, AGP has a set of official, stable APIs that you can rely on. We also have a new documentation page that walks you through this and explains how to create your own plugins.", + "url": "https://developer.android.com/studio/build/extend-agp", + "headerImageUrl": "https://developer.android.com/images/social/android-developers.png", + "publishDate": "2021-10-20T23:00:00.000Z", + "type": "Docs 📑", + "topics": [ + "5", + "5" + ], + "authors": [] + }, + { + "id": "264", + "title": "Revamped Compose Basics Codelab", + "content": "If you’re planning to start learning Jetpack Compose, our modern toolkit for building native Android UI, it’s your lucky day! We just revamped the Basics Jetpack Compose codelab to help you learn the core concepts of Compose, and only with this, you’ll see how much it improves building Android UIs.", + "url": "https://developer.android.com/codelabs/jetpack-compose-basics", + "headerImageUrl": "https://i.ytimg.com/vi/k3jvNqj4m08/maxresdefault.jpg", + "publishDate": "2021-10-20T23:00:00.000Z", + "type": "Codelab", + "topics": [ + "3" + ], + "authors": [] + }, + { + "id": "265", + "title": "Material components in Compose", + "content": "We added a new Material Components and layouts page that goes over the different Material components in Compose such as backdrop, app bars, modal drawers, etc.!", + "url": "https://developer.android.com/jetpack/compose/layouts/material", + "headerImageUrl": "https://developer.android.com/images/jetpack/compose/layouts/material/material_components.png", + "publishDate": "2021-10-20T23:00:00.000Z", + "type": "Docs 📑", + "topics": [ + "3", + "2" + ], + "authors": [] + }, + { + "id": "266", + "title": "How to implement a custom design system", + "content": "How to implement a custom design system in Compose", + "url": "https://developer.android.com/jetpack/compose/themes/custom", + "headerImageUrl": "https://developer.android.com/images/social/android-developers.png", + "publishDate": "2021-10-20T23:00:00.000Z", + "type": "Docs 📑", + "topics": [ + "3", + "2" + ], + "authors": [] + }, + { + "id": "267", + "title": "The anatomy of a theme", + "content": "Understanding the anatomy of a Compose theme", + "url": "https://developer.android.com/jetpack/compose/themes/anatomy", + "headerImageUrl": "https://developer.android.com/images/social/android-developers.png", + "publishDate": "2021-10-20T23:00:00.000Z", + "type": "Docs 📑", + "topics": [ + "3" + ], + "authors": [] + }, + { + "id": "268", + "title": "Paging 📑 Displaying data and its loading state", + "content": "In the third episode of the Paging video series, TJ adds a local cache to pull from and refresh only when necessary, making use of Room . The local cache acts as the single source of truth for paging data.", + "url": "https://www.youtube.com/watch?v=OHH_FPbrjtA", + "headerImageUrl": "https://i.ytimg.com/vi/OHH_FPbrjtA/maxresdefault.jpg", + "publishDate": "2021-10-17T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "9", + "2" + ], + "authors": [ + "38" + ] + }, + { + "id": "269", + "title": "Data safety in the Play Console 🔒", + "content": "Google Play is rolling out the Data safety form in the Google Play Console. With the new Data safety section, developers will now have a transparent way to show users if and how they collect, share, and protect user data, before users install an app.\nRead the blog post to learn more about how to submit your app information in Play Console, how to get prepared, and what your users will see in your app’s store listing starting February.", + "url": "https://android-developers.googleblog.com/2021/10/launching-data-safety-in-play-console.html", + "headerImageUrl": "https://1.bp.blogspot.com/-Zde9ioLE3SY/YWh7qiquXKI/AAAAAAAARCU/m6D-qJJe6QowYPcDWUtb3-YzFGn9xIaUwCLcBGAsYHQ/w1200-h630-p-k-no-nu/Android-get-ready-to-sumbit-your-data-safety-secton-social.png", + "publishDate": "2021-10-17T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "11", + "12" + ], + "authors": [ + "10" + ] + }, + { + "id": "270", + "title": "Honor every photo - How cameras capture images", + "content": "Episode 177: Honor every photon. In this episode, Chet, Roman, and Tor have a chat with Bart Wronski from the Google Research team, discussing the camera pipeline that powers the Pixel phones. How cameras capture images, how the algorithms responsible for Pixel’s beautiful images, HDR+ or Night Sight mode works, and more!", + "url": "https://adbackstage.libsyn.com/episode-177-honor-every-photon", + "headerImageUrl": "http://assets.libsyn.com/show/332855?height=250&width=250&overlay=true", + "publishDate": "2021-10-17T23:00:00.000Z", + "type": "Podcast 🎙", + "topics": [ + "18" + ], + "authors": [ + "31" + ] + }, + { + "id": "271", + "title": "Accessibility series 🌐 - Touch targets", + "content": "The accessibility series continues on with more information on how to follow basic accessibility principles to make sure that your app can be used by as many users as possible.\nIn general, you should ensure that interactive elements have a width and height of at least 48dp! In the touch targets episode, you’ll learn about a few ways in which you can make this happen.", + "url": "https://www.youtube.com/watch?v=Dqqbe8IFBA4", + "headerImageUrl": "https://i.ytimg.com/vi/Dqqbe8IFBA4/maxresdefault.jpg", + "publishDate": "2021-10-16T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "14" + ], + "authors": [ + "39" + ] + }, + { + "id": "272", + "title": "Using the CameraX Exposure Compensation API", + "content": "This blog post by Wenhung Teng talks about how to use the CameraX Exposure Compensation that makes it much simpler to quickly take images with exceptional quality.", + "url": "https://medium.com/androiddevelopers/using-camerax-exposure-compensation-api-11fd75785bf", + "headerImageUrl": "https://miro.medium.com/max/1400/1*zinEvf1keSZYuZojr31ehQ.png", + "publishDate": "2021-10-12T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "18" + ], + "authors": [ + "44" + ] + }, + { + "id": "273", + "title": "Compose for Wear OS in Developer preview ⌚", + "content": "We’re bringing the best of Compose to Wear OS as well, with built-in support for Material You to help you create beautiful apps with less code. Read the following article to review the main composables for Wear OS we’ve built and point you towards resources to get started using them.", + "url": "https://android-developers.googleblog.com/2021/10/compose-for-wear-os-now-in-developer.html", + "headerImageUrl": "https://1.bp.blogspot.com/-RkL3Yokn3XE/YWWmbuX8E7I/AAAAAAAAQ_o/CEmNJ5_mfq0kScxkFGoMpf1BlU5-uBHjACLcBGAsYHQ/w1200-h630-p-k-no-nu/Android-compose-for-wear-os-now-in-dev-review-header-dark.png", + "publishDate": "2021-10-11T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "19", + "3" + ], + "authors": [ + "41" + ] + }, + { + "id": "274", + "title": "Paging 📑 How to fetch data and bind the PagingData to the UI", + "content": "The series on Paging continues on with more content! In the second episode, TJ shows how to fetch data and bind the PagingData to the UI, including headers and footers.", + "url": "https://www.youtube.com/watch?v=C0H54K63Lww", + "headerImageUrl": "https://i.ytimg.com/vi/C0H54K63Lww/maxresdefault.jpg", + "publishDate": "2021-10-10T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "2" + ], + "authors": [ + "38" + ] + }, + { + "id": "275", + "title": "Room adds support for Kotlin Symbol Processing", + "content": "Yigit Boyar wrote the story about how Room added support for Kotlin Symbol Processing (KSP). Spoiler: it wasn’t easy, but it was definitely worth it.", + "url": "https://medium.com/androiddevelopers/room-kotlin-symbol-processing-24808528a28e", + "headerImageUrl": "https://miro.medium.com/max/1400/1*yM7Lf4dC_hwse6YmoCO4uQ.png", + "publishDate": "2021-10-09T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "9" + ], + "authors": [ + "34" + ] + }, + { + "id": "276", + "title": "Apply special effects to images with the CameraX Extensions API", + "content": "Have you ever wanted to apply special effects such as HDR or Night mode when taking pictures from your app? CameraX is here to help you! In this article by Charcoal Chen, learn how to do that using the new ExtensionsManager available in the camera-extensions Jetpack library. ", + "url": "https://medium.com/androiddevelopers/apply-special-effects-to-images-with-the-camerax-extensions-api-d1a169b803d3", + "headerImageUrl": "https://miro.medium.com/max/1400/1*GZmhCFMCrG4L_mOtwSb0zA.png", + "publishDate": "2021-10-06T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "18" + ], + "authors": [ + "45" + ] + }, + { + "id": "277", + "title": "Wear OS Jetpack libraries now in stable", + "content": "The Wear OS Jetpack libraries are now in stable.", + "url": "https://android-developers.googleblog.com/2021/09/wear-os-jetpack-libraries-now-in-stable.html", + "headerImageUrl": "https://1.bp.blogspot.com/-9zeEGNCG_As/YUD1UO_3kkI/AAAAAAAAQ8k/tCFBpTCwU4MEQHQNB9XzTOXSf6hd9TkQQCLcBGAsYHQ/w1200-h630-p-k-no-nu/image1.png", + "publishDate": "2021-09-14T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "8", + "19" + ], + "authors": [ + "41" + ] + }, + { + "id": "278", + "title": "Android Dev Summit returns on October 27-28, 2021! 📆", + "content": "Join us October 27–28 for Android Dev Summit 2021! The show kicks off at 10 AM PST on October 27 with The Android Show: a technical keynote where you’ll hear all the latest developer news and updates. From there, we have over 30 sessions on a range of technical Android development topics, and we’ll be answering your #AskAndroid questions live.", + "url": "https://developer.android.com/dev-summit", + "headerImageUrl": "https://developer.android.com/dev-summit/images/android-dev-summit-2021.png", + "publishDate": "2021-10-05T23:00:00.000Z", + "type": "Event 📆", + "topics": [ + "1" + ], + "authors": [] + }, + { + "id": "279", + "title": "Android 12 is live in AOSP! 🤖", + "content": "We released Android 12 and pushed it to the Android Open Source Project (AOSP). It will be coming to devices later on this year. Thank you for your feedback during the beta.\nAndroid 12 introduces a new design language called Material You along with redesigned widgets, notification UI updates, stretch overscroll, and app launch splash screens. We reduced the CPU time used by core system services, added performance class device capabilities, made ML accelerator drivers updatable outside of platform releases, and prevented apps from launching foreground services from the background and using notification trampolines to improve performance. The new Privacy Dashboard, approximate location, microphone and camera indicators/toggles, and nearby device permissions give users more insight into and control over privacy. We improved the user experience with a unified API for rich content insertion, compatible media transcoding, easier blurs and effects, AVIF image support, enhanced haptics, new camera effects/capabilities, improved native crash debugging, support for rounded screen corners, Play as you download, and Game Mode APIs.", + "url": "https://android-developers.googleblog.com/2021/10/android-12-is-live-in-aosp.html", + "headerImageUrl": "https://1.bp.blogspot.com/-7dVmEfR3mJs/YVst2TdY16I/AAAAAAAAK3I/pLnt0r5S-pIaJwcSNsNBqT8w2Y4Ej0yaQCLcBGAsYHQ/w1200-h630-p-k-no-nu/Android%2B12.jpeg", + "publishDate": "2021-10-03T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "13" + ], + "authors": [ + "14" + ] + }, + { + "id": "280", + "title": "Improved Google Play Console user management 🧑‍💼", + "content": "The user and permission tools in Play Console have a new, decluttered interface and new team management features, making it easier to make sure every team member has the right set of permissions to fulfill their responsibilities without overexposing unrelated business data.\nWe’ve rewritten permission names and descriptions, clarified differentiation between account and app-level permissions, added new search, filtering, and batch-editing capabilities, and added the ability to export this information to a CSV file. In addition, Play Console users can request access to actions with a justification, and we’ve introduced permission groups to make it easier to assign multiple permissions at once to users that share the same or similar roles.", + "url": "https://android-developers.googleblog.com/2021/09/improved-google-play-console-user.html", + "headerImageUrl": "https://1.bp.blogspot.com/-vw3eaKdwzVU/YUjvyJ6zy2I/AAAAAAAAQ9s/m39byf56P8Icog5e5TgCbu9et0VCZh1iACLcBGAsYHQ/w1200-h630-p-k-no-nu/PlayConsole-revamped-user-management-01.png", + "publishDate": "2021-09-20T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "12" + ], + "authors": [ + "46" + ] + }, + { + "id": "281", + "title": "Making Permissions auto-reset available to billions more devices 🔐", + "content": "Android 11 introduced permission auto-reset, automatically resetting an app’s runtime permissions when it isn’t used for a few months. In December 2021, we are starting to roll this feature out to devices with Google Play services running Android 6.0 (API level 23) or higher for apps targeting Android 11 (API level 30) or higher. Users can manually enable permission auto-reset for apps targeting API levels 23 to 29.\nSome apps and permissions are automatically exempted from revocation, like active Device Administrator apps used by enterprises, and permissions fixed by enterprise policy. If your app is expected to work primarily in the background without user interaction, you can ask the user to prevent the system from resetting your app’s permissions.", + "url": "https://android-developers.googleblog.com/2021/09/making-permissions-auto-reset-available.html", + "headerImageUrl": "https://1.bp.blogspot.com/-W3UAh-gyf3Y/YUJehjKWQjI/AAAAAAAAQ84/zkURLgqMRa4VZK3Is3ENNYG_OjXJxx2pgCLcBGAsYHQ/w1200-h630-p-k-no-nu/Android-making-permissions-auto-reset-social-v2.png", + "publishDate": "2021-09-16T23:00:00.000Z", + "type": "DAC - Android version features", + "topics": [ + "11" + ], + "authors": [ + "47" + ] + }, + { + "id": "282", + "title": "Migrating from Dagger to Hilt", + "content": "While you will eventually want to migrate all your existing Dagger modules over to Hilt’s built in components, you can start by migrating application-wide components to Hilt’s singleton component. This episode explains how.", + "url": "https://www.youtube.com/watch?v=Xt1_3Nq4lD0&t=15s", + "headerImageUrl": "https://i.ytimg.com/vi/Xt1_3Nq4lD0/hqdefault.jpg", + "publishDate": "2021-09-19T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "4" + ], + "authors": [ + "48" + ] + }, + { + "id": "283", + "title": "ADB Podcast Episode 175: Creating delightful user experiences with Lottie animations", + "content": "In this episode, Chet, Romain and Tor have a chat with Gabriel Peal from Tonal, well known for his contributions to the Android community on projects such as Mavericks and Lottie. They talked about Lottie and how it helps designers and developers deliver more delightful user experiences by taking complex animations designed in specialized authoring tools such as After Effects, and rendering them efficiently on mobile devices. They also explored the challenges of designing and implementing a rendering engine such as Lottie.", + "url": "http://adbackstage.libsyn.com/episode-175-lottie", + "headerImageUrl": "http://assets.libsyn.com/show/332855?height=250&width=250&overlay=true", + "publishDate": "2021-09-13T23:00:00.000Z", + "type": "Podcast 🎙", + "topics": [ + "2" + ], + "authors": [ + "31" + ] + }, + { + "id": "284", + "title": "Hilt extensions", + "content": "This episode explains how to write your own Hilt Extensions. Hilt Extensions allow you to extend Hilt support to new libraries. Extensions can be created for common patterns in projects, to support non-standard member injection, mirroring bindings, and more.", + "url": "https://medium.com/androiddevelopers/hilt-extensions-in-the-mad-skills-series-f2ed6fcba5fe", + "headerImageUrl": "https://miro.medium.com/max/1400/1*a_ZJwMHs17SmEFr3uEbxDg.png", + "publishDate": "2021-09-12T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "4" + ], + "authors": [ + "49" + ] + }, + { + "id": "285", + "title": "Labeling images for Accessibility", + "content": "This Accessibilities series episode covers labeling images for accessibility, such as content descriptions for ImageViews and ImageButtons.", + "url": "https://youtu.be/O2DeSITnzFk", + "headerImageUrl": "https://i.ytimg.com/vi/O2DeSITnzFk/maxresdefault.jpg", + "publishDate": "2021-09-09T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "14" + ], + "authors": [ + "28" + ] + }, + { + "id": "286", + "title": "ADB Podcast Episode 174: Compose in Android Studio", + "content": "In this episode, Tor and Nick are joined by Chris Sinco, Diego Perez and Nicolas Roard to discuss the features added to Android Studio for Jetpack Compose. Tune in as they discuss the Compose preview, interactive preview, animation inspector, and additions to the Layout inspector along with their approach to creating tooling to support Compose’s code-centric system.", + "url": "http://adbackstage.libsyn.com/episode-174-compose-tooling", + "headerImageUrl": "http://assets.libsyn.com/content/110962067?height=250&width=250&overlay=true", + "publishDate": "2021-09-08T23:00:00.000Z", + "type": "Podcast 🎙", + "topics": [ + "5", + "3" + ], + "authors": [ + "32" + ] + }, + { + "id": "287", + "title": "Hilt under the hood", + "content": "This episode dives into how the Hilt annotation processors generate code, and how the Hilt Gradle plugin works behind the scenes to improve the overall experience when using Hilt with Gradle.", + "url": "https://medium.com/androiddevelopers/mad-skills-series-hilt-under-the-hood-9d89ee227059", + "headerImageUrl": "https://miro.medium.com/max/1400/1*a_ZJwMHs17SmEFr3uEbxDg.png", + "publishDate": "2021-09-07T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "4" + ], + "authors": [ + "50" + ] + }, + { + "id": "288", + "title": "Trackr comes to the Big Screen", + "content": "A blog post on Trackr, a sample task management app where we showcase Modern Android Development best practices. This post takes you through how applying Material Design and responsive patterns produced a more refined and intuitive user experience on large screen devices.", + "url": "https://medium.com/androiddevelopers/trackr-comes-to-the-big-screen-9f13c6f927bf", + "headerImageUrl": "https://miro.medium.com/max/1400/1*678DlYtu4G7wFrq30FQ7Mw.png", + "publishDate": "2021-09-06T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "2" + ], + "authors": [ + "51" + ] + }, + { + "id": "289", + "title": "Accessibility services and the Android Accessibility model", + "content": "This Accessibilities series episode covers accessibility services like TalkBack, Switch Access and Voice Access and how they help users interact with your apps. Android’s accessibility framework allows you to write one app and the framework takes care of providing the information needed by different accessibility services.", + "url": "https://youtu.be/LxKat_m7mHk", + "headerImageUrl": "https://i.ytimg.com/vi/LxKat_m7mHk/maxresdefault.jpg", + "publishDate": "2021-09-02T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "14" + ], + "authors": [ + "39" + ] + }, + { + "id": "290", + "title": "New Accessibility Pathway", + "content": "Want even more accessibility? You are in luck, check out this entire new learning pathway aimed at teaching you how to make your app more accessible.", + "url": "https://developer.android.com/courses/pathways/make-your-android-app-accessible", + "headerImageUrl": "https://developers.google.com/profile/badges/playlists/make-your-android-app-accessible/badge.svg", + "publishDate": "2021-08-31T23:00:00.000Z", + "type": "", + "topics": [ + "14" + ], + "authors": [] + }, + { + "id": "291", + "title": "Jetpack Compose 1.0 stable is released", + "content": "Jetpack Compose, Android’s modern, native UI toolkit is now stable and ready for you to adopt in production. It interoperates with your existing app, integrates with existing Jetpack libraries, implements Material Design with straightforward theming, supports lists with Lazy components using minimal boilerplate, and has a powerful, extensible animation system.", + "url": "https://android-developers.googleblog.com/2021/07/jetpack-compose-announcement.html", + "headerImageUrl": "https://1.bp.blogspot.com/-9MiK78CFMLM/YQFurOq9AII/AAAAAAAAQ1A/lKj5GiDnO_MkPLb72XqgnvD5uxOsHO-eACLcBGAsYHQ/w1200-h630-p-k-no-nu/Android-Compose-1.0-header-v2.png", + "publishDate": "2021-07-27T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "3" + ], + "authors": [ + "52" + ] + }, + { + "id": "292", + "title": "Android Studio Artic Fox stable is released", + "content": "Android Studio Arctic Fox is now available in the stable release channel. Arctic Fox brings Jetpack Compose to life with Compose Preview, Deploy Preview, Compose support in the Layout Inspector, and Live Editing of literals. Compose Preview works with the @Preview annotation to let you instantly see the impact of changes across multiple themes, screen sizes, font sizes, and more. Deploy Preview deploys snippets of your Compose code to a device or emulator for quick testing. Layout inspector now works with apps written fully in Compose as well as apps that have Compose alongside Views, allowing you to explore your layouts and troubleshoot. With Live Edit of literals, you can edit literals such as strings, numbers, booleans, etc. and see the immediate results change in previews, the emulator, or on a physical device — all without having to compile.\n", + "url": "https://android-developers.googleblog.com/2021/07/android-studio-arctic-fox-202031-stable.html", + "headerImageUrl": "https://1.bp.blogspot.com/-cmcRT5BGOTY/YQBKC6asA0I/AAAAAAAAQzg/hZrde9Sgx881Wdf-c__VMkTvsKoVjOwsACLcBGAsYHQ/w1200-h630-p-k-no-nu/Arctic_Fox_Splash_2x%2B%25281%2529.png", + "publishDate": "2021-07-27T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "5", + "3" + ], + "authors": [ + "53" + ] + }, + { + "id": "293", + "title": "User control, privacy, security, and safety", + "content": "Play announced new updates to bolster user control, privacy, and security. The post covered advertising ID updates, including zeroing out the advertising ID when users opt out of interest-based advertising or ads personalization, the developer preview of the app set ID, enhanced protection for kids, and policy updates around dormant accounts and users of the AccessibilityService API.", + "url": "https://android-developers.googleblog.com/2021/07/announcing-policy-updates-to-bolster.html", + "headerImageUrl": "https://1.bp.blogspot.com/-pWCVY7BR-z8/YQAzb9zCZsI/AAAAAAAAQzY/2-OetxLvjOUYhHlTFJNw5JSm_BVjkI0VwCLcBGAsYHQ/s0/Untitled.png", + "publishDate": "2021-07-27T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "12" + ], + "authors": [ + "10" + ] + }, + { + "id": "294", + "title": "Identify performance bottlenecks using system trace", + "content": "System trace profiling within Android Studio with a detailed walkthrough of app startup performance.", + "url": "https://www.youtube.com/watch?v=aUrqx9AnDUg", + "headerImageUrl": "https://i.ytimg.com/vi/aUrqx9AnDUg/hqdefault.jpg", + "publishDate": "2021-07-25T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "7", + "5" + ], + "authors": [ + "37" + ] + }, + { + "id": "295", + "title": "Testing in Compose", + "content": "ADB released episode #171, part of our continuing series on Jetpack Compose. In this episode, Nick and Romain are joined by Filip Pavlis, Jelle Fresen & Jose Alcérreca to talk about Testing in Compose. They discuss how Compose’s testing APIs were developed hand-in-hand with the UI toolkit, making them more deterministic and opening up new possibilities like manipulating time. They go on to discuss the semantics tree, interop testing, screenshot testing and the possibilities for host-side testing.", + "url": "https://adbackstage.libsyn.com/episode-171-compose-testing", + "headerImageUrl": "http://assets.libsyn.com/content/108505820?height=250&width=250&overlay=true", + "publishDate": "2021-06-29T23:00:00.000Z", + "type": "Podcast 🎙", + "topics": [ + "3", + "6" + ], + "authors": [ + "54" + ] + }, + { + "id": "296", + "title": "DataStore reached release candidate status", + "content": "DataStore has reached release candidate status meaning the 1.0 stable release is right around the corner!", + "url": "https://developer.android.com/topic/libraries/architecture/datastore", + "headerImageUrl": "https://developer.android.com/images/social/android-developers.png", + "publishDate": "2021-06-29T23:00:00.000Z", + "type": "Jetpack release 🚀", + "topics": [ + "9" + ], + "authors": [] + }, + { + "id": "297", + "title": "Scope Storage Myths", + "content": "Apps will be required to update their targetSdkVersion to API 30 in the second half of the year. That means your app will be required to work with Scoped Storage. In this blog post, Nicole Borrelli busts some Scope storage myths in a Q&A format.", + "url": "https://medium.com/androiddevelopers/scope-storage-myths-ca6a97d7ff37", + "headerImageUrl": "https://miro.medium.com/max/1200/1*csWzYUmYq_1HQsqBWk3OTA.jpeg", + "publishDate": "2021-06-27T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "9", + "11" + ], + "authors": [ + "55" + ] + }, + { + "id": "298", + "title": "Navigation with Multiple back stacks", + "content": "As part of the rercommended Material pattern for bottom-navigation, the Jetpack Navigation library makes it easy to implement navigation with multiple back-stacks", + "url": "https://medium.com/androiddevelopers/navigation-multiple-back-stacks-6c67ba41952f", + "headerImageUrl": "https://miro.medium.com/max/1400/1*v7S7LKg4TlrMRlneeP224Q.jpeg", + "publishDate": "2021-06-14T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "2" + ], + "authors": [ + "25" + ] + }, + { + "id": "299", + "title": "Build sophisticated search features with AppSearch", + "content": "AppSearch is an on-device search library which provides high performance and feature-rich full-text search functionality. Learn how to use the new Jetpack AppSearch library for doing high-performance on-device full text searches.", + "url": "https://android-developers.googleblog.com/2021/06/sophisticated-search-with-appsearch-in-jetpack.html", + "headerImageUrl": "https://1.bp.blogspot.com/-PmN4MS50wvo/YMj-HmY4N2I/AAAAAAAAQoQ/5eCx8CU1HgAlFQnQ55IOb_CCVRhe8eGewCLcBGAsYHQ/w1200-h630-p-k-no-nu/AppSearch.jpg", + "publishDate": "2021-06-13T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "8", + "2" + ], + "authors": [ + "56" + ] + }, + { + "id": "300", + "title": "ADB Podcast Episode 167: Jetpack Compose Layout", + "content": "In this second episode of our mini-series on Jetpack Compose (AD/BC), Nick and Romain are joined by Anastasia Soboleva, George Mount and Mihai Popa to talk about Compose’s layout system. They explain how the Compose layout model works and its benefits, introduce common layout composables, discuss how writing your own layout is far simpler than Views, and how you can even animate layout.", + "url": "https://adbackstage.libsyn.com/episode-167-jetpack-compose-layout", + "headerImageUrl": "http://assets.libsyn.com/content/105399023?height=250&width=250&overlay=true", + "publishDate": "2021-06-13T23:00:00.000Z", + "type": "Podcast 🎙", + "topics": [ + "3" + ], + "authors": [ + "57" + ] + }, + { + "id": "301", + "title": "Create an application CoroutineScope using Hilt", + "content": "Learn how to create an applicatioon-scoped CoroutineScope using Hilt, and how to inject it as a dependency.", + "url": "https://medium.com/androiddevelopers/create-an-application-coroutinescope-using-hilt-dd444e721528", + "headerImageUrl": "https://miro.medium.com/max/1400/1*MgDtM-AJmc2m2hg5chkflg.png", + "publishDate": "2021-06-09T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "4" + ], + "authors": [ + "23" + ] + }, + { + "id": "302", + "title": "Android 12 Beta 2 Update", + "content": "The second Beta of Android 12 has just been released for you to try. Beta 2 adds new privacy features like the Privacy Dashboard and continues our work of refining the release.", + "url": "https://android-developers.googleblog.com/2021/06/android-12-beta-2-update.html", + "headerImageUrl": "https://1.bp.blogspot.com/-tLt-TVPqpjA/YKMRwRPMfjI/AAAAAAAAQik/JNtMesFZ2i87RyBACHAVEC14CvcU7G__wCLcBGAsYHQ/w1200-h630-p-k-no-nu/Screen%2BShot%2B2021-05-17%2Bat%2B9.00.30%2BPM.png", + "publishDate": "2021-06-08T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "13" + ], + "authors": [ + "14" + ] + }, + { + "id": "303", + "title": "Top 3 things in Android 12 | Android @ Google I/O '21", + "content": "Did you miss the latest in Android 12 at Google I/O 2021? Android Software Engineer Chet Haase will recap the top three themes in Android 12 from this year’s Google I/O!", + "url": "https://www.youtube.com/watch?v=tvf1wmD5H0M", + "headerImageUrl": "https://i.ytimg.com/vi/tvf1wmD5H0M/maxresdefault.jpg", + "publishDate": "2021-06-08T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "13" + ], + "authors": [ + "31" + ] + }, + { + "id": "304", + "title": "ADB Podcast Episode 166: Security Deposit", + "content": "In this episode, Chad and Jeff from the Android Security team join Tor and Romain to talk about… security. They explain what the platform does to help preserve user trust and device integrity, why it sometimes means restricting existing APIs, and touch on what apps can do or should worry about.", + "url": "http://adbackstage.libsyn.com/episode-166-security-deposit", + "headerImageUrl": "http://assets.libsyn.com/show/332855?height=250&width=250&overlay=true", + "publishDate": "2021-06-07T23:00:00.000Z", + "type": "Podcast 🎙", + "topics": [ + "11" + ], + "authors": [ + "32" + ] + }, + { + "id": "305", + "title": "Multiple Back Stacks", + "content": "A deep dive into multiple back stacks and some of the work it took to make this feature happen in Fragments and Navigation", + "url": "https://medium.com/androiddevelopers/multiple-back-stacks-b714d974f134", + "headerImageUrl": "https://miro.medium.com/max/1400/1*5-lbc-YBJlZnxVFPvNMPAQ.png", + "publishDate": "2021-06-06T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "2" + ], + "authors": [ + "58" + ] + }, + { + "id": "306", + "title": "Building across devices | Android @ Google I/O '21", + "content": "Did you miss the latest in Building across screens at Google I/O 2021? Product Manager Diana Wong will recap the top three announcements from this year’s Google I/O!", + "url": "https://www.youtube.com/watch?v=O5oRiIUk_F4", + "headerImageUrl": "https://i.ytimg.com/vi/O5oRiIUk_F4/maxresdefault.jpg", + "publishDate": "2021-06-02T23:00:00.000Z", + "type": "Video 📺", + "topics": [ + "2" + ], + "authors": [ + "59" + ] + }, + { + "id": "307", + "title": "Navigation in Feature Modules", + "content": "Feature modules delivered with Play Feature delivery at not downloadedd at install time, but only when the app requestss them. Learn how to use the dynamic features navigation library to include the graph from the feature module.", + "url": "https://medium.com/androiddevelopers/navigation-in-feature-modules-322ac3d79334", + "headerImageUrl": "https://miro.medium.com/max/1400/1*v7S7LKg4TlrMRlneeP224Q.jpeg", + "publishDate": "2021-06-01T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "2" + ], + "authors": [ + "25" + ] + }, + { + "id": "308", + "title": "ADB Podcast Episode 165: Material Witnesses", + "content": "In this episode, Chet and Romain chattedd with Hunter and Nick from the Material Design team about recent additions and improvements to the Material Design Component libraries: transitions, motion theming, Compose, large screens support and guidance, etc.", + "url": "http://adbackstage.libsyn.com/episode-165-material-witnesses", + "headerImageUrl": "http://assets.libsyn.com/show/332855?height=250&width=250&overlay=true", + "publishDate": "2021-06-01T23:00:00.000Z", + "type": "Podcast 🎙", + "topics": [ + "2" + ], + "authors": [ + "31" + ] + }, + { + "id": "309", + "title": "Grow Your Indie Game with Help From Google Play", + "content": "Google Play is opening submissions for two of our annual developer programs - the Indie Games Accelerator and the Indie Games Festival. These programs are designed to help small games studios grow on Google Play, no matter what stage they are in", + "url": "https://developers.googleblog.com/2021/06/grow-your-indie-game-with-help-from-google-play.html", + "headerImageUrl": "https://1.bp.blogspot.com/-MNEblg7_8fA/YK7lludSxJI/AAAAAAAAKQM/_YIT15giTk42oPXWIhK6l2FBVt5PCFKTwCLcBGAsYHQ/w1200-h630-p-k-no-nu/Joint_Announcement_Android%2BDevelopers%2BBlog_Header_1200x600%2B%25282%2529.png", + "publishDate": "2021-05-31T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "12", + "17" + ], + "authors": [ + "60" + ] + }, + { + "id": "310", + "title": "Untrusted Touch Events in Android", + "content": "Android 12 prevents touch events from being deliverred if these touches first pass through a window from a different app to ensure users can see what they are interacting with. Learn about alternatives, to see if your app will be affected and how you can test to see if your app will be impacted.", + "url": "https://medium.com/androiddevelopers/untrusted-touch-events-2c0e0b9c374c", + "headerImageUrl": "https://miro.medium.com/max/1400/1*lvwe7v_bcNsNXI_7ltFkJA.jpeg", + "publishDate": "2021-05-25T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "13" + ], + "authors": [ + "15" + ] + }, + { + "id": "311", + "title": "Android @ Google I/O: 3 things to know in Modern Android Development", + "content": "This year’s Google I/O brought lots of updates for Modern Android Development. Learn about the top 3 things you should know.", + "url": "https://android-developers.googleblog.com/2021/05/mad-spotlight.html", + "headerImageUrl": "https://1.bp.blogspot.com/-8cqMFObMeko/YK5RbJ7Yr_I/AAAAAAAAQkw/Iw4_hRZwa7QD1CmVGnZUZ4NjYowXZadTgCLcBGAsYHQ/w1200-h630-p-k-no-nu/Android_PostIO_blog-MAD.png", + "publishDate": "2021-05-24T23:00:00.000Z", + "type": "Article 📚", + "topics": [ + "1" + ], + "authors": [ + "61" + ] + } +] \ No newline at end of file diff --git a/core/network/src/main/assets/topics.json b/core/network/src/main/assets/topics.json new file mode 100644 index 000000000..9157274c8 --- /dev/null +++ b/core/network/src/main/assets/topics.json @@ -0,0 +1,154 @@ +[ + { + "id": "1", + "name": "Headlines", + "shortDescription": "News you'll definitely be interested in", + "longDescription": "The latest events and announcements from the world of Android development.", + "imageUrl": "https://firebasestorage.googleapis.com/v0/b/now-in-android.appspot.com/o/img%2Fic_topic_Headlines.svg?alt=media&token=506faab0-617a-4668-9e63-4a2fb996603f", + "url": "" + }, + { + "id": "2", + "name": "UI", + "shortDescription": "not including Compose", + "longDescription": "Stay up to date on Material Design, Navigation, Text, Paging, Compose, Accessibility (a11y), Internationalization (i18n), Localization (l10n), Animations, Large Screens, Widgets and much more!\n\nTo get Compose specific news, make sure you also follow the Compose topic. ", + "imageUrl": "https://firebasestorage.googleapis.com/v0/b/now-in-android.appspot.com/o/img%2Fic_topic_UI.svg?alt=media&token=0ee1842b-12e8-435f-87ba-a5bb02c47594", + "url": "" + }, + { + "id": "3", + "name": "Compose", + "shortDescription": "", + "longDescription": "All the latest and greatest news on Jetpack Compose - Android’s modern toolkit for building native user interfaces.", + "imageUrl": "https://firebasestorage.googleapis.com/v0/b/now-in-android.appspot.com/o/img%2Fic_topic_Compose.svg?alt=media&token=9f0228e8-fdf2-45ee-9fd0-7e51fda23b48", + "url": "" + }, + { + "id": "4", + "name": "Architecture", + "shortDescription": "", + "longDescription": "Stay up-to-date with Android architecture best practices including scalability and modularization. ", + "imageUrl": "https://firebasestorage.googleapis.com/v0/b/now-in-android.appspot.com/o/img%2Fic_topic_Architecture.svg?alt=media&token=e69ed228-fa91-49ae-9017-c8b7331f4269", + "url": "" + }, + { + "id": "5", + "name": "Android Studio & Tools", + "shortDescription": "", + "longDescription": "The latest news on Android development tools, including Android Studio, Gradle, device emulators, debugging tools and more.", + "imageUrl": "https://firebasestorage.googleapis.com/v0/b/now-in-android.appspot.com/o/img%2Fic_topic_Android-Studio.svg?alt=media&token=b28b82dc-5aa1-4098-9eff-deb04636d3ac", + "url": "" + }, + { + "id": "6", + "name": "Testing", + "shortDescription": "", + "longDescription": "The latest news on testing, including unit and UI testing, and continuous integration. ", + "imageUrl": "https://firebasestorage.googleapis.com/v0/b/now-in-android.appspot.com/o/img%2Fic_topic_Testing.svg?alt=media&token=a11533c4-7cc8-4b11-91a3-806158ebf428", + "url": "" + }, + { + "id": "7", + "name": "Performance", + "shortDescription": "", + "longDescription": "Up-to-date content on optimizing your app performance, including profiling, tracing and jank avoidance.", + "imageUrl": "https://firebasestorage.googleapis.com/v0/b/now-in-android.appspot.com/o/img%2Fic_topic_Performance.svg?alt=media&token=558fdf02-1918-4527-b13f-323db67e31cc", + "url": "" + }, + { + "id": "8", + "name": "New APIs & Libraries", + "shortDescription": "", + "longDescription": "Stay up-to-date with new APIs & library releases, including Jetpack.", + "imageUrl": "https://firebasestorage.googleapis.com/v0/b/now-in-android.appspot.com/o/img%2Fic_topic_New-APIs-_-Libraries.svg?alt=media&token=8efd12df-6dd9-4b1b-81fd-017a49a866ac", + "url": "" + }, + { + "id": "9", + "name": "Data Storage", + "shortDescription": "", + "longDescription": "Everything to do with data storage, including Room and DataStore.", + "imageUrl": "https://firebasestorage.googleapis.com/v0/b/now-in-android.appspot.com/o/img%2Fic_topic_Data-Storage.svg?alt=media&token=c9f78039-f371-4ce1-ba82-2c0c1e20d180", + "url": "" + }, + { + "id": "10", + "name": "Kotlin", + "shortDescription": "", + "longDescription": "New language features and guidance for getting the best out of Kotlin on Android. ", + "imageUrl": "https://firebasestorage.googleapis.com/v0/b/now-in-android.appspot.com/o/img%2Fic_topic_Kotlin.svg?alt=media&token=bdc73380-e80d-47df-8954-d9b61cccacd2", + "url": "" + }, + { + "id": "11", + "name": "Privacy & Security", + "shortDescription": "", + "longDescription": "The latest news on security best practices, APIs and libraries.", + "imageUrl": "https://firebasestorage.googleapis.com/v0/b/now-in-android.appspot.com/o/img%2Fic_topic_Privacy-_-Security.svg?alt=media&token=6232fd17-c1cc-43b3-bf70-a734323fa6df", + "url": "" + }, + { + "id": "12", + "name": "Publishing & Distribution", + "shortDescription": "", + "longDescription": "Everything to do with publishing and distributing your app, including Google Play.", + "imageUrl": "https://firebasestorage.googleapis.com/v0/b/now-in-android.appspot.com/o/img%2Fic_topic_Publishing-_-Distribution.svg?alt=media&token=64a5aeaf-269a-479d-8a44-29f59d337dbf", + "url": "" + }, + { + "id": "13", + "name": "Platform & Releases", + "shortDescription": "", + "longDescription": "Stay up-to-date with the latest Android releases and features.", + "imageUrl": "https://firebasestorage.googleapis.com/v0/b/now-in-android.appspot.com/o/img%2Fic_topic_Platform-_-Releases.svg?alt=media&token=ff6d7a38-5205-4a51-8b6a-721e665dc515", + "url": "" + }, + { + "id": "14", + "name": "Accessibility", + "shortDescription": "", + "longDescription": "The latest news on accessibility features and services, helping you to improve your app's usability, particularly for users with disabilities.", + "imageUrl": "https://firebasestorage.googleapis.com/v0/b/now-in-android.appspot.com/o/img%2Fic_topic_Accessibility.svg?alt=media&token=5b783a03-dd3b-4d0c-9e0c-16ae8350295f", + "url": "" + }, + { + "id": "15", + "name": "Android Auto", + "shortDescription": "", + "longDescription": "The latest news on Android Automotive OS and Android Auto.", + "imageUrl": "https://firebasestorage.googleapis.com/v0/b/now-in-android.appspot.com/o/img%2Fic_topic_Android-Auto.svg?alt=media&token=56453754-14a5-4953-b596-66d63c56c196", + "url": "" + }, + { + "id": "16", + "name": "Android TV", + "shortDescription": "", + "longDescription": "Stay up-to-date on everything to do with building apps for Android TV.", + "imageUrl": "https://firebasestorage.googleapis.com/v0/b/now-in-android.appspot.com/o/img%2Fic_topic_Android-TV.svg?alt=media&token=a78ca0df-f1ba-44a6-a89d-3912c82ef661", + "url": "" + }, + { + "id": "17", + "name": "Games", + "shortDescription": "", + "longDescription": "The latest news on Android game development.", + "imageUrl": "https://firebasestorage.googleapis.com/v0/b/now-in-android.appspot.com/o/img%2Fic_topic_Games.svg?alt=media&token=4effa537-cc42-4d7f-b6bd-f1f14568db07", + "url": "" + }, + { + "id": "18", + "name": "Camera & Media", + "shortDescription": "", + "longDescription": "The latest news on capturing and playing media on Android, including the Camera and Media APIs. ", + "imageUrl": "https://firebasestorage.googleapis.com/v0/b/now-in-android.appspot.com/o/img%2Fic_topic_Camera-_-Media.svg?alt=media&token=73adea20-20d4-4f4c-8f3b-eb47c1097496", + "url": "" + }, + { + "id": "19", + "name": "Wear OS", + "shortDescription": "", + "longDescription": "The latest news on app development for Wear OS.", + "imageUrl": "https://firebasestorage.googleapis.com/v0/b/now-in-android.appspot.com/o/img%2Fic_topic_Wear.svg?alt=media&token=bd11fe4c-9c92-4536-8ebc-5210f44d09be", + "url": "" + } +] \ No newline at end of file diff --git a/core/network/src/main/java/JvmUnitTestFakeAssetManager.kt b/core/network/src/main/java/JvmUnitTestFakeAssetManager.kt new file mode 100644 index 000000000..d840def9f --- /dev/null +++ b/core/network/src/main/java/JvmUnitTestFakeAssetManager.kt @@ -0,0 +1,43 @@ +/* + * Copyright 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import androidx.annotation.VisibleForTesting +import com.google.samples.apps.nowinandroid.core.network.fake.FakeAssetManager +import java.io.File +import java.io.InputStream +import java.util.Properties + +/** + * This class helps with loading Android `/assets` files, especially when running JVM unit tests. + * It must remain on the root package for an easier [Class.getResource] with relative paths. + * @see UnitTestOptions + */ +@VisibleForTesting +internal object JvmUnitTestFakeAssetManager : FakeAssetManager { + // https://developer.android.com/reference/tools/gradle-api/7.3/com/android/build/api/dsl/UnitTestOptions + private val config = + requireNotNull(javaClass.getResource("com/android/tools/test_config.properties")) { + """ + Missing Android resources properties file. + Did you forget to enable the feature in the gradle build file? + android.testOptions.unitTests.isIncludeAndroidResources = true + """.trimIndent() + } + private val properties = Properties().apply { config.openStream().use(::load) } + private val assets = File(properties["android_merged_assets"].toString()) + + override fun open(fileName: String): InputStream = File(assets, fileName).inputStream() +} \ No newline at end of file diff --git a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/repository/FakeNewsRepositoryTest.kt b/core/network/src/main/java/com/google/samples/apps/nowinandroid/core/network/fake/FakeAssetManager.kt similarity index 50% rename from core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/repository/FakeNewsRepositoryTest.kt rename to core/network/src/main/java/com/google/samples/apps/nowinandroid/core/network/fake/FakeAssetManager.kt index e11c309e5..53ad7d48d 100644 --- a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/repository/FakeNewsRepositoryTest.kt +++ b/core/network/src/main/java/com/google/samples/apps/nowinandroid/core/network/fake/FakeAssetManager.kt @@ -14,24 +14,10 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.core.data.repository +package com.google.samples.apps.nowinandroid.core.network.fake -import com.google.samples.apps.nowinandroid.core.data.repository.fake.FakeNewsRepository -import kotlinx.coroutines.test.StandardTestDispatcher -import kotlinx.serialization.json.Json -import org.junit.Before +import java.io.InputStream -class FakeNewsRepositoryTest { - - private lateinit var subject: FakeNewsRepository - - private val testDispatcher = StandardTestDispatcher() - - @Before - fun setup() { - subject = FakeNewsRepository( - ioDispatcher = testDispatcher, - networkJson = Json { ignoreUnknownKeys = true } - ) - } +fun interface FakeAssetManager { + fun open(fileName: String): InputStream } diff --git a/core/network/src/main/java/com/google/samples/apps/nowinandroid/core/network/fake/FakeDataSource.kt b/core/network/src/main/java/com/google/samples/apps/nowinandroid/core/network/fake/FakeDataSource.kt index a7f09f0a8..cf6aff8b5 100644 --- a/core/network/src/main/java/com/google/samples/apps/nowinandroid/core/network/fake/FakeDataSource.kt +++ b/core/network/src/main/java/com/google/samples/apps/nowinandroid/core/network/fake/FakeDataSource.kt @@ -16,60 +16,8 @@ package com.google.samples.apps.nowinandroid.core.network.fake -import com.google.samples.apps.nowinandroid.core.model.data.NewsResourceType.Codelab -import com.google.samples.apps.nowinandroid.core.network.model.NetworkNewsResource -import com.google.samples.apps.nowinandroid.core.network.model.NetworkTopic -import kotlinx.datetime.LocalDateTime -import kotlinx.datetime.TimeZone -import kotlinx.datetime.toInstant -import org.intellij.lang.annotations.Language - -/* ktlint-disable max-line-length */ - object FakeDataSource { - val sampleTopic = NetworkTopic( - id = "1", - name = "Headlines", - shortDescription = "News you'll definitely be interested in", - longDescription = "The latest events and announcements from the world of Android development.", - url = "", - imageUrl = "https://firebasestorage.googleapis.com/v0/b/now-in-android.appspot.com/o/img%2Fic_topic_Headlines.svg?alt=media&token=506faab0-617a-4668-9e63-4a2fb996603f" - ) - val sampleResource = NetworkNewsResource( - id = "125", - title = "Android Basics with Compose", - content = "We released the first two units of Android Basics with Compose, our first free course that teaches Android Development with Jetpack Compose to anyone; you do not need any prior programming experience other than basic computer literacy to get started. ", - url = "https://android-developers.googleblog.com/2022/05/new-android-basics-with-compose-course.html", - headerImageUrl = "https://developer.android.com/images/hero-assets/android-basics-compose.svg", - authors = listOf("25"), - publishDate = LocalDateTime( - year = 2022, - monthNumber = 5, - dayOfMonth = 4, - hour = 23, - minute = 0, - second = 0, - nanosecond = 0 - ).toInstant(TimeZone.UTC), - type = Codelab, - topics = listOf("2", "3", "10"), - ) - - @Language("JSON") - val topicsData = """ -[{"id":"1","name":"Headlines","shortDescription":"News you'll definitely be interested in","longDescription":"The latest events and announcements from the world of Android development.","imageUrl":"https://firebasestorage.googleapis.com/v0/b/now-in-android.appspot.com/o/img%2Fic_topic_Headlines.svg?alt=media&token=506faab0-617a-4668-9e63-4a2fb996603f","url":""},{"id":"2","name":"UI","shortDescription":"not including Compose","longDescription":"Stay up to date on Material Design, Navigation, Text, Paging, Compose, Accessibility (a11y), Internationalization (i18n), Localization (l10n), Animations, Large Screens, Widgets and much more!\n\nTo get Compose specific news, make sure you also follow the Compose topic. ","imageUrl":"https://firebasestorage.googleapis.com/v0/b/now-in-android.appspot.com/o/img%2Fic_topic_UI.svg?alt=media&token=0ee1842b-12e8-435f-87ba-a5bb02c47594","url":""},{"id":"3","name":"Compose","shortDescription":"","longDescription":"All the latest and greatest news on Jetpack Compose - Android’s modern toolkit for building native user interfaces.","imageUrl":"https://firebasestorage.googleapis.com/v0/b/now-in-android.appspot.com/o/img%2Fic_topic_Compose.svg?alt=media&token=9f0228e8-fdf2-45ee-9fd0-7e51fda23b48","url":""},{"id":"4","name":"Architecture","shortDescription":"","longDescription":"Stay up-to-date with Android architecture best practices including scalability and modularization. ","imageUrl":"https://firebasestorage.googleapis.com/v0/b/now-in-android.appspot.com/o/img%2Fic_topic_Architecture.svg?alt=media&token=e69ed228-fa91-49ae-9017-c8b7331f4269","url":""},{"id":"5","name":"Android Studio & Tools","shortDescription":"","longDescription":"The latest news on Android development tools, including Android Studio, Gradle, device emulators, debugging tools and more.","imageUrl":"https://firebasestorage.googleapis.com/v0/b/now-in-android.appspot.com/o/img%2Fic_topic_Android-Studio.svg?alt=media&token=b28b82dc-5aa1-4098-9eff-deb04636d3ac","url":""},{"id":"6","name":"Testing","shortDescription":"","longDescription":"The latest news on testing, including unit and UI testing, and continuous integration. ","imageUrl":"https://firebasestorage.googleapis.com/v0/b/now-in-android.appspot.com/o/img%2Fic_topic_Testing.svg?alt=media&token=a11533c4-7cc8-4b11-91a3-806158ebf428","url":""},{"id":"7","name":"Performance","shortDescription":"","longDescription":"Up-to-date content on optimizing your app performance, including profiling, tracing and jank avoidance.","imageUrl":"https://firebasestorage.googleapis.com/v0/b/now-in-android.appspot.com/o/img%2Fic_topic_Performance.svg?alt=media&token=558fdf02-1918-4527-b13f-323db67e31cc","url":""},{"id":"8","name":"New APIs & Libraries","shortDescription":"","longDescription":"Stay up-to-date with new APIs & library releases, including Jetpack.","imageUrl":"https://firebasestorage.googleapis.com/v0/b/now-in-android.appspot.com/o/img%2Fic_topic_New-APIs-_-Libraries.svg?alt=media&token=8efd12df-6dd9-4b1b-81fd-017a49a866ac","url":""},{"id":"9","name":"Data Storage","shortDescription":"","longDescription":"Everything to do with data storage, including Room and DataStore.","imageUrl":"https://firebasestorage.googleapis.com/v0/b/now-in-android.appspot.com/o/img%2Fic_topic_Data-Storage.svg?alt=media&token=c9f78039-f371-4ce1-ba82-2c0c1e20d180","url":""},{"id":"10","name":"Kotlin","shortDescription":"","longDescription":"New language features and guidance for getting the best out of Kotlin on Android. ","imageUrl":"https://firebasestorage.googleapis.com/v0/b/now-in-android.appspot.com/o/img%2Fic_topic_Kotlin.svg?alt=media&token=bdc73380-e80d-47df-8954-d9b61cccacd2","url":""},{"id":"11","name":"Privacy & Security","shortDescription":"","longDescription":"The latest news on security best practices, APIs and libraries.","imageUrl":"https://firebasestorage.googleapis.com/v0/b/now-in-android.appspot.com/o/img%2Fic_topic_Privacy-_-Security.svg?alt=media&token=6232fd17-c1cc-43b3-bf70-a734323fa6df","url":""},{"id":"12","name":"Publishing & Distribution","shortDescription":"","longDescription":"Everything to do with publishing and distributing your app, including Google Play.","imageUrl":"https://firebasestorage.googleapis.com/v0/b/now-in-android.appspot.com/o/img%2Fic_topic_Publishing-_-Distribution.svg?alt=media&token=64a5aeaf-269a-479d-8a44-29f59d337dbf","url":""},{"id":"13","name":"Platform & Releases","shortDescription":"","longDescription":"Stay up-to-date with the latest Android releases and features.","imageUrl":"https://firebasestorage.googleapis.com/v0/b/now-in-android.appspot.com/o/img%2Fic_topic_Platform-_-Releases.svg?alt=media&token=ff6d7a38-5205-4a51-8b6a-721e665dc515","url":""},{"id":"14","name":"Accessibility","shortDescription":"","longDescription":"The latest news on accessibility features and services, helping you to improve your app's usability, particularly for users with disabilities.","imageUrl":"https://firebasestorage.googleapis.com/v0/b/now-in-android.appspot.com/o/img%2Fic_topic_Accessibility.svg?alt=media&token=5b783a03-dd3b-4d0c-9e0c-16ae8350295f","url":""},{"id":"15","name":"Android Auto","shortDescription":"","longDescription":"The latest news on Android Automotive OS and Android Auto.","imageUrl":"https://firebasestorage.googleapis.com/v0/b/now-in-android.appspot.com/o/img%2Fic_topic_Android-Auto.svg?alt=media&token=56453754-14a5-4953-b596-66d63c56c196","url":""},{"id":"16","name":"Android TV","shortDescription":"","longDescription":"Stay up-to-date on everything to do with building apps for Android TV.","imageUrl":"https://firebasestorage.googleapis.com/v0/b/now-in-android.appspot.com/o/img%2Fic_topic_Android-TV.svg?alt=media&token=a78ca0df-f1ba-44a6-a89d-3912c82ef661","url":""},{"id":"17","name":"Games","shortDescription":"","longDescription":"The latest news on Android game development.","imageUrl":"https://firebasestorage.googleapis.com/v0/b/now-in-android.appspot.com/o/img%2Fic_topic_Games.svg?alt=media&token=4effa537-cc42-4d7f-b6bd-f1f14568db07","url":""},{"id":"18","name":"Camera & Media","shortDescription":"","longDescription":"The latest news on capturing and playing media on Android, including the Camera and Media APIs. ","imageUrl":"https://firebasestorage.googleapis.com/v0/b/now-in-android.appspot.com/o/img%2Fic_topic_Camera-_-Media.svg?alt=media&token=73adea20-20d4-4f4c-8f3b-eb47c1097496","url":""},{"id":"19","name":"Wear OS","shortDescription":"","longDescription":"The latest news on app development for Wear OS.","imageUrl":"https://firebasestorage.googleapis.com/v0/b/now-in-android.appspot.com/o/img%2Fic_topic_Wear.svg?alt=media&token=bd11fe4c-9c92-4536-8ebc-5210f44d09be","url":""}] - """.trimIndent() - - @Language("JSON") - val data = """ - -[{"id":"1","title":"Android Dev Summit ’22: Coming to you, online and around the world! ⛰️","content":"Android Dev Summit is back, so join us online or in person — for the first time since 2019 — at locations around the world. We’ll be sharing the sessions live on YouTube in three tracks spread across three weeks.","url":"https://android-developers.googleblog.com/2022/10/android-dev-summit.html","headerImageUrl":"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1VWQmqQu6wDswls9f_5NpEQnq4eR57g2NwzWvhKItcKtV6rb_Cyo75XSyL6vvmCIo4tzQn-8taNagEp7QG0KU1L4yMqwbYozNMzBMEFxEN2XintAhy5nLI4RQDaOXr8dgiIFdGOBMdl577Ndelzc0tDBzjI6mz7e4MF8_Tn09KWguZi6I-bS5NbJn/w1200-h630-p-k-no-nu/unnamed%20%2816%29.png","publishDate":"2022-10-04T23:00:00.000Z","type":"Event 📆","topics":["1"],"authors":["64"]},{"id":"2","title":"The new Google Pixel Watch is here — start building for Wear OS! ⌚","content":"We launched the Google Pixel Watch, powered by Wear OS 3.5, at the Made by Google event — the perfect device to showcase apps built with Compose for Wear OS. With Compose for Wear OS, the Tiles Material library, and the tools in Android Studio Dolphin, it’s now simpler and more efficient than ever to make apps for WearOS.","url":"https://android-developers.googleblog.com/2022/10/the-new-google-pixel-watch-is-here.html","headerImageUrl":"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhH63icac2kmydOI8Fs2I09KiuRA3GUo2pfZ1Wpf0M5JIEoVQ8dj9LYSl8jpxSQlmlsUVXoeXbwN4UbHMCf5p0M7FHh_EXzMeFRAJ-6feI9-7eIyhBmtGZSD5o-MItwFLH_ESi15Cxd01AlznWaGy9WDqhK0NWtMQwiWELg3xE1I7hba-_7eVqs747V/w1200-h630-p-k-no-nu/WhasNewinPixelDevices_Social.png","publishDate":"2022-10-06T23:00:00.000Z","type":"Article 📚","topics":["1","3","19"],"authors":[]},{"id":"3","title":"Listen to our major Text to Speech upgrades for 64 bit devices 💬","content":"An upgrade to Speech Services by Google is rolling out to 64-bit Android devices via Google Play over the next few weeks, providing clearer, more natural voices. All 421 voices in 67 languages are being upgraded with a new voice model and synthesizer. The post includes more on this update, including demonstrations of some voice upgrades, along with guidance on how to use text to speech in your projects.","url":"https://android-developers.googleblog.com/2022/09/listen-to-our-major-text-to-speech-upgrades-for-64-bit-devices.html","headerImageUrl":"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjrHro6d3BTw7ZZ4IXgfb6_8aESB7-SsWfelDSSInZVamiMSnYpBZzGBaZBBrWxWwYgLqOHuOtroGvGjxrwzdUkhjwuIvM1u6chIblGKS1gQ6JVkjXr-Vztyk2zoYb1ylvhNgLgC5q6M-7LaiXT1xnAT96DvkPx89APNb8JEaz-1mnMRcfaOYYBHzQL/w1200-h630-p-k-no-nu/Text%20to%20Speech%20-%20Social%20-%201024x512.png","publishDate":"2022-09-27T23:00:00.000Z","type":"Article 📚","topics":["14"],"authors":["66","67"]},{"id":"4","title":"MAD Skills Compose: Powerful Toolkit","content":"Learn about the powerful toolkit of UI components that ship with Compose enabling you to build rich UIs and interactions.","url":"https://medium.com/androiddevelopers/compose-toolkit-8d3651228764","headerImageUrl":"https://miro.medium.com/max/1200/1*3FZeNmAPZDYUCmgL0cBXoA.png","publishDate":"2022-09-29T23:00:00.000Z","type":"Article 📚","topics":["3"],"authors":["68"]},{"id":"5","title":"MAD Skills Compose: Accelerate development with tooling","content":"Learn how to accelerate your Compose development process with a dive into Android Studio tooling support, including live templates, gutter icons for drawables and colors, composable preview functions, multipreview, preview on device, live edits of literals, and the Layout Inspector.","url":"https://medium.com/androiddevelopers/compose-tooling-42621bd8719b","headerImageUrl":"https://miro.medium.com/max/1200/1*WVUBQsNgePqQxmrHjaID4g.png","publishDate":"2022-10-06T23:00:00.000Z","type":"Article 📚","topics":["3"],"authors":["68"]},{"id":"6","title":"Deep Links Crash Course: Part 3 - Troubleshooting","content":"In part 3 of the Deep Links Crash Course you'll learn how to diagnose and debug common issues with deep links using command line tools and the Android Debug Bridge (ADB).","url":"https://www.youtube.com/watch?v=OAxJ2kWG4ZI","headerImageUrl":"https://i.ytimg.com/vi/OAxJ2kWG4ZI/maxresdefault.jpg","publishDate":"2022-09-29T23:00:00.000Z","type":"Video 📺","topics":["2","5"],"authors":[]},{"id":"7","title":"Deep Links Crash Course: Part 4 - Deep links for your business","content":"Part 4 of the Deep Links Crash Course explores Deep links for your business, covering the importance and benefits of implementing deep links for your app, your users, and your business, including success stories and how App Links provide an optimal experience for users.","url":"https://www.youtube.com/watch?v=UvMIswgsJF8","headerImageUrl":"https://i.ytimg.com/vi/UvMIswgsJF8/maxresdefault.jpg","publishDate":"2022-10-05T23:00:00.000Z","type":"Video 📺","topics":["2","5"],"authors":[]},{"id":"8","title":"Migrating the AOSP QuickSearchBox App to Kotlin","content":"This article includes the methodology used in the migration to Kotlin, how manual changes were addressed, and what the impact to APK size and build speed was.","url":"https://medium.com/androiddevelopers/migrating-the-aosp-quicksearchbox-app-to-kotlin-1264346619ec","headerImageUrl":"https://miro.medium.com/max/720/1*cWnPe-kD4hAVuH3IIcNUcA.png","publishDate":"2022-09-22T23:00:00.000Z","type":"Article 📚","topics":["10"],"authors":["69"]},{"id":"9","title":"Prepare your Android Project for Android Gradle plugin 8.0 API changes","content":"How to prepare your Android Project for Android Gradle plugin 8.0 API changes; this article specifically addresses migrating from the Transform APIs — which slow down builds and will be removed in 8.0 — to the Artifacts API and Instrumentation API.","url":"https://android-developers.googleblog.com/2022/10/prepare-your-android-project-for-agp8-changes.html","headerImageUrl":"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgy74acii7wq-Z2pW8TUSga1YGpRKjLZjroOlZlUillRJuTFIlGpUi93PPletKlkcAaz9u6NgF8_LejO9686VYEWNtO2ypawLgpY2QW7JMtrMSVTlPsRGgEDUiQJKUfzEXw2Q_Y7qX1CSUlH9lma8Jjdm3AqMogbEI6PScD3AK1XsWgHmVeqJlVqUiK/w1200-h630-p-k-no-nu/Header-PrepareyourAndroidProjectforAGP8.0Changes%20.png","publishDate":"2022-10-05T23:00:00.000Z","type":"Article 📚","topics":["5","5"],"authors":["70","71","72"]},{"id":"10","title":"Optimize for Android (Go edition) : Lessons from Google apps Part 2","content":"Part two of the Optimize for Android Go : Lessons from Google apps blog series, covering strategies Google apps used to improve startup latency and optimize app size — things that will improve the user experience for any app.","url":"https://android-developers.googleblog.com/2022/09/optimize-for-android-go-lessons-from-google-apps-part-2.html","headerImageUrl":"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD7uoBIqlA_WYXwuhyDxKy1Nt2ibaa_GYd9l8ewfQcC7f-f11t0WRCTTS6XhwnkJMqWUxSX-nxAq9DD8oBbk_Om2ik0yNMOV8lHw0sGmRAixLY2T0dxpKtQe0DnsVrzmexNSX1-BYdz9p0cvCtdXoxgDi1Mx6OLixzC5JAnxEEAf1TkHrTQON0fURg/w1200-h630-p-k-no-nu/MAD%20App%20Architecture%20launch%20-%20Mobile%20%281%29%20%281%29.png","publishDate":"2022-09-27T23:00:00.000Z","type":"Article 📚","topics":["7"],"authors":["73"]},{"id":"11","title":"Helping users discover apps for all their devices from their phone","content":"Changes in Google Play are helping users discover apps for all their devices from their phone, including homepages for non-phone devices, a device search filter, and the ability to remotely install an app to another device.","url":"https://android-developers.googleblog.com/2022/09/helping-users-discover-apps-for-all-their-devices-from-their-phone.html","headerImageUrl":"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyGaErzRykqFDWOwEmkHWos7vU7OhdETz5GNEjObA7FOhCudnf5DiQ1hAfpxuq102pwxuBf_ZCeifURihNeAwNnLj46pkdoBdbl_JYn8A9plqwaqS8D_0XML6B7Bupt0GhPZuABbfTXB_nkWsVVW6faVQXqpetHIV6QlNQyl1WD6zuojFf-U7wDSHO/w1200-h630-p-k-no-nu/image3.gif","publishDate":"2022-09-26T23:00:00.000Z","type":"Article 📚","topics":["12"],"authors":["74"]},{"id":"12","title":"Deep Links Crash Course : Part 3 Troubleshooting Your Deep Links","content":"The Deep Links Crash Course continues with Summers writing an article on troubleshooting deep links. He goes over common issues that can occur with deep links and how to solve them.","url":"https://medium.com/androiddevelopers/deep-links-crash-course-part-3-troubleshooting-your-deep-links-61329fecb93","headerImageUrl":"https://miro.medium.com/max/1200/1*IsRqP0Fe9I6YLxrJybIG6Q.png","publishDate":"2022-09-15T23:00:00.000Z","type":"Article 📚","topics":["6"],"authors":["79"]},{"id":"13","title":"Jetpack Compose Composition Tracing","content":"Ben covered Compose Composition Tracing, a new feature that allows showing Jetpack Compose composable functions in the Android Studio Flamingo system trace profiler. This feature gives you the low intrusiveness from system tracing, with method tracing levels of detail in composition. This is great for checking your Compose app’s performance and working out why your app may not be performing as you expect. Learn more about this feature in the post!","url":"https://medium.com/androiddevelopers/jetpack-compose-composition-tracing-9ec2b3aea535","headerImageUrl":"https://miro.medium.com/max/700/1*jPVPY4GjPRK3prnJ2o09cQ.png","publishDate":"2022-09-19T23:00:00.000Z","type":"Article 📚","topics":["3","7"],"authors":["80"]},{"id":"14","title":"Android Studio: Dolphin is available","content":"Android Studio Dolphin is here! In this post, Takeshi goes over the three key themes: Jetpack Compose, Wear OS, and development productivity. Exciting features include the Compose Animation Inspector, the Wear OS Emulator Pairing Assistant, and Gradle managed virtual devices. Learn about all the new features in the blog post or the video!","url":"https://www.youtube.com/watch?v=EQ_btxhpRzU&t=1s","headerImageUrl":"https://i.ytimg.com/vi/EQ_btxhpRzU/maxresdefault.jpg","publishDate":"2022-09-14T23:00:00.000Z","type":"Video 📺","topics":["5","5"],"authors":["81"]},{"id":"15","title":"Mad Skills: Compose","content":"Chris started a brand new MAD Skills series on Compose. This series is a great place to start to learn how to think and start building apps with Compose.","url":"https://www.youtube.com/watch?v=4UXJTeb9Khg&t=1s","headerImageUrl":"https://i.ytimg.com/vi/4UXJTeb9Khg/maxresdefault.jpg","publishDate":"2022-09-12T23:00:00.000Z","type":"Video 📺","topics":["3"],"authors":["68"]},{"id":"16","title":"Introducing Compose Camp","content":"We launched Compose Camp, a series of in-person and virtual sessions where you can learn how to build Android apps with Jetpack Compose alongside your peers. Compose Camp has two tracks: the beginner track caters to complete Android beginners including people that have no coding experience, and the experienced track is for Android developers who want to learn how to migrate to Compose and stop using XML.","url":"https://android-developers.googleblog.com/2022/09/learn-jetpack-compose-at-compose-camp-near-you.html","headerImageUrl":"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjn6__UOZ_lipXjY09TrHeXW4HjKodPUdFzmovYRn1tLwdYr8GVKjCN6wfgKpcby5rrJ6JFrUmZozT7aeDkp8x7v46QdH6wtz9ysQFTZAQPwswFfGWQkWcPmKHbeELq_BUUhazt4ppYm9ErYEo7HbFzPCfBid4IQ9qL-hydSgRpJx7w2lNZKh5ylNcb/w1200-h630-p-k-no-nu/Compose%20Camp%203.png","publishDate":"2022-09-12T23:00:00.000Z","type":"Article 📚","topics":["1","3"],"authors":["78"]},{"id":"17","title":"Privacy Sandbox developer preview 5 🔐","content":"The Privacy Sandbox aims to develop new technologies that improve user privacy and enable effective, personalized advertising experiences for mobile apps. Developer Preview 5 was released, this version is a major milestone that will become the foundation for upcoming Privacy Sandbox Beta releases. Please keep giving us your feedback! See what’s changed in the blog post.","url":"https://android-developers.googleblog.com/2022/09/privacy-sandbox-developer-preview-5-is-here.html","headerImageUrl":"https://services.google.com/fb/forms/privacysandbox/fb/forms/getlogo/5679849861677056/","publishDate":"2022-09-06T23:00:00.000Z","type":"Article 📚","topics":["11"],"authors":["77"]},{"id":"18","title":"Guide to app modularization 🧩","content":"The team just released new guidance on modularization. Guidance on this topic has been one of the top community requests and here it is! The guide is split into two parts. The overview page gives you a high level, theoretical overview of the matter and its benefits. The common modularization patterns page dives deep into practical examples in the context of modern Android architecture. Take a look at the guide announcement blog post to learn more about this.","url":"https://android-developers.googleblog.com/2022/09/announcing-new-guide-to-android-app-modularization.html","headerImageUrl":"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj0ZsQN4PZ_SQ975Hfbc-LDFXMTgOr6RVf42kSUBqNxfv9OcDvc6dTYRZPynsYx0JIlXT7k5TMz_Kjq7bJstYb4dUy2ZX6ilugMH20JudIZISLWEsa19f8sN0hDxA7JWXgS570gDxkXNp3ioHxxH42tvquQ0wUK-qPS6Qv2OeGK06HhumP2vvC0V07V/s1600/Android-AppModularization_4209x1253.png","publishDate":"2022-09-05T23:00:00.000Z","type":"Article 📚","topics":["4"],"authors":["82"]},{"id":"19","title":"Build an offline-first app","content":"If you need to make your app work offline, we got you covered. The new Build an offline-first app guide helps you design your app to properly handle reads and writes, and deal with synchronization and conflict resolution in a device with no Internet connectivity.","url":"https://developer.android.com/topic/architecture/data-layer/offline-first","headerImageUrl":"https://developer.android.com/static/images/topic/architecture/data-layer/data-layer.png","publishDate":"2022-09-13T23:00:00.000Z","type":"Docs 📑","topics":["4"],"authors":[]},{"id":"20","title":"State holders and UI state page ","content":"Another new guide is the State holders and UI state page in the UI layer docs. Not everything needs to be present in ViewModel classes. This page goes through the different types of state holders you can find in the UI layer and what their responsibilities are.","url":"https://developer.android.com/topic/architecture/ui-layer/stateholders","headerImageUrl":"https://developer.android.com/static/images/topic/architecture/ui-layer/udf.png","publishDate":"2022-09-13T23:00:00.000Z","type":"Docs 📑","topics":["4","3"],"authors":[]},{"id":"21","title":"Architecture pathway","content":"If you want to learn all about Architecture and be up-to-date with our current best practices, check out the Architecture pathway, that got updated with all the videos of the Architecture MAD Skills series we produced early this year and the new docs.","url":"https://developer.android.com/courses/pathways/android-architecture","headerImageUrl":"https://developer.android.com/static/topic/libraries/architecture/images/mad-arch-overview.png","publishDate":"2022-09-13T23:00:00.000Z","type":"Codelab","topics":["4"],"authors":[]},{"id":"22","title":"Mad Skills: Performance ⚡️","content":"Ben wrote this blog post that contains a summary of all the videos on MAD Skills: Performance! Don't miss it out!","url":"https://medium.com/androiddevelopers/mad-skills-performance-wrap-up-33688abfc51f","headerImageUrl":"https://miro.medium.com/max/720/0*qdkZp112bKTGtQIN","publishDate":"2022-09-13T23:00:00.000Z","type":"Article 📚","topics":["7"],"authors":["36"]},{"id":"23","title":"AndroidX releases 🚀","content":"Since the previous episode, there are some AndroidX releases worth highlighting.Core and core-ktx made it to 1.9.0 stable. This version improves compatibility with Android 13 adding parity between the accessibility framework and compat APIs, and some other additions. Other releases include new in beta Car app 1.3, and new in alpha Navigation 2.6 and Test Ui Automator 2.3.","url":"https://developer.android.com/jetpack/androidx/versions/all-channel","headerImageUrl":"https://developer.android.com/images/social/android-developers.png","publishDate":"2022-09-13T23:00:00.000Z","type":"Jetpack release 🚀","topics":["8"],"authors":[]},{"id":"24","title":"Precise Improvements: How TikTok Enhanced its Video Social Experience on Android","content":"The Developer Relations team wrote about how TikTok Enhanced its Video Social Experience on Android. They were able to significantly improve their overall performance by following Android’s performance guidance, and employing their deep understanding of development tools such as Android Gradle Plugin and Jetpack libraries. Read more here!","url":"https://android-developers.googleblog.com/2022/08/precise-improvements-how-tiktok-enhanced-its-social-experience-on-android.html","headerImageUrl":"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvwJsvRHyECCaiD1FaBBCLGrUr-PoZoDaqm9aUKoswBFPOlWyKNvcC94FhX6M6Ugdo0wVTdZyI48BUmKaiA1xSgOcEE_xOFt9EGmoHd9PDHyJ4mAiKrfjnFHBIEKgjL1JhFeTQWbjWec4DJX-q9lnYAw5b9l0vC7nM09QBKtItv7JmBNxjYosCroQI/s1600/241588700__38488906__148018.png","publishDate":"2022-09-13T23:00:00.000Z","type":"Article 📚","topics":["7"],"authors":[]},{"id":"25","title":"The deep links crash course, Part 1: Introduction to deep links","content":"Sabs started a crash course series about deep links. The first part is an introduction to deep links with a blog post and a video. Get to know what a deep link is, go from URIs to app links, and more!","url":"https://medium.com/androiddevelopers/the-deep-links-crash-course-part-1-introduction-to-deep-links-2189e509e269","headerImageUrl":"https://miro.medium.com/max/720/1*m44rS8zc3W23lmDy1_Vu8g.png","publishDate":"2022-09-01T23:00:00.000Z","type":"Article 📚","topics":["7"],"authors":["83"]},{"id":"26","title":"Experimenting with Jetpack Glance","content":"Marcel wrote about experimenting with Jetpack Glance that covers a standalone experimental repository to supplement Jetpack Glance with tools that are commonly required for development but not yet available. At the moment, it includes a composable to display RemoteViews inside your app (enabling Live Edit), a debug tool to view and interact with AppWidget snapshots embedded inside the app, and a Material3 Scaffold for AppWidgets.","url":"https://medium.com/androiddevelopers/experimenting-with-jetpack-glance-35fbffe520f4","headerImageUrl":"https://miro.medium.com/max/720/0*gfm9zG95iVoEX5Gu","publishDate":"2022-08-31T23:00:00.000Z","type":"Article 📚","topics":["3","2"],"authors":["9"]},{"id":"27","title":"Jetpack Compose: Debugging Recomposition","content":"Ben Trengove wrote about Debugging recomposition in Compose. Check it out because it also contains a screencast of Ben fixing a performance issue in Jetsnack, a Compose sample. For this, Ben also uses the layout inspector in Android Studio where you can see the recomposition and skip counts of composable functions.","url":"https://medium.com/androiddevelopers/jetpack-compose-debugging-recomposition-bfcf4a6f8d37","headerImageUrl":"https://miro.medium.com/max/720/1*gwdtRcu1bo_PoH8rwh5E4A.png","publishDate":"2022-09-06T23:00:00.000Z","type":"Article 📚","topics":["7","3","5","5"],"authors":["80"]},{"id":"28","title":"Optimize for Android (Go edition): Lessons from Google apps - Part 1","content":"Nikariha started another blog post series about optimizing for Android Go edition. The first part introduces Android Go edition, why you’d want to build for it, and some best practices based on experience building the Gboard and Camera from Google apps.","url":"https://android-developers.googleblog.com/2022/09/optimize-for-android-go-lessons-from-google-apps-part-1.html","headerImageUrl":"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjT34hXV07gVlKKi5X9mjpDGRlawITJfAKr7BpE7E02gtIYVqxYW8RoyjX_SPWJo0KS4PcBNy9rqITsAx0UnXeZp0V6zEoldaBCy9FJ9wyyebLEpPoxJgT6BENWxJqpIrihbpcwUsXO45qhcDAJJ3zTldnKkT8Dw_5VGxl2xYTA2trIVGsczYZLJgKj/s1600/MAD%20App%20Architecture%20launch%20-%20header%20%282%29.png","publishDate":"2022-09-07T23:00:00.000Z","type":"Article 📚","topics":["7"],"authors":["73"]},{"id":"29","title":"ADB Podcast Episodes🎙: Episode 188 - Android 13","content":"In Episode 188: Android 13, Chet, Romain, and Tor talk about some of their favorite new features and changes of the new version of Android, both for users and developers.","url":"https://adbackstage.libsyn.com/episode-188-android-13","headerImageUrl":"https://ssl-static.libsyn.com/p/assets/4/6/e/5/46e518b4880184c288c4a68c3ddbc4f2/ADB_188_Android_13.jpg","publishDate":"2022-08-31T23:00:00.000Z","type":"Podcast 🎙","topics":["13"],"authors":["31"]},{"id":"30","title":"Cross device SDK Developer Preview 📱↔️📱","content":"We launched the Cross device SDK for Android developer preview, which allows you to build rich multi-device experiences, abstracting away the intricacies involved with working with device discovery, authentication, and connection protocols.","url":"https://android-developers.googleblog.com/2022/07/announcing-cross-device-SDK-Developer-Preview-for-Android.html","headerImageUrl":"https://miro.medium.com/max/1280/0*1CDepdsU40_03H5K.png","publishDate":"2022-08-25T23:00:00.000Z","type":"Article 📚","topics":["8","6"],"authors":["84"]},{"id":"31","title":"CameraX 1.2 is now in Beta","content":"CameraX version 1.2 is now in Beta. It introduces a zero shutter lag capture mode along with MlKitAnalyzer, an implementation of ImageAnalysis.Analyzer that handles much of the ML Kit setup for you. MlKitAnalyzer works with both cameraController and cameraProvider workflows and can even handle coordinate transformations between ML Kit output and your PreviewView. Zero shutter lag greatly reduces image capture lag on supported devices by using a circular buffer of captures to get the frame closest to the actual press of the shutter button.","url":"https://android-developers.googleblog.com/2022/08/camerax-12-is-now-in-beta.html","headerImageUrl":"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiS_SSchtaoz90hvgXHZQzwD61bSnd06zOvd7L2sLG-isR8ykrzy7Afk1snnZjCBVkNtMXrmCJIMJfp-gP3X3NMXSbPdVvEgmpqSfTIph-vc_QkBVPDgH8ZQonnMu-XY5Aasi4tp1nmI5jetU2eF4TK_AMOWqA0gLxadk-0dPt2wjpruoDOhxP4PhE_/w681-h202/Android_NewCameraXInBeta_4209x1253.png","publishDate":"2022-08-23T23:00:00.000Z","type":"Article 📚","topics":["18"],"authors":["85"]},{"id":"32","title":"Build Tiles fast with the WearOS Material Tiles Library ⌚","content":"Tiles are one of the most used surfaces on Wear OS, providing users glanceable access to the information and actions they need to get things done quickly. We launched the Tiles Material library allowing you to use pre-built Material components such as Button, Chip, CompactChip, TitleChip, CircularProgressIndicator, and Text along with layouts such as PrimaryLayout, EdgeContentLayout, MultiButtonLayout, and MultiSlotLayout to create tiles that embrace the latest Material design for Wear OS. Together with the Tiles Design Kit, they help you to easily follow the Tiles Design Guidelines.","url":"https://android-developers.googleblog.com/2022/08/wear-os-tiles-material-library-build-tiles-fast.html","headerImageUrl":"https://miro.medium.com/max/1278/0*tgTI6u6xZZFHhvSc.png","publishDate":"2022-08-23T23:00:00.000Z","type":"Article 📚","topics":["19","2"],"authors":["16","86"]},{"id":"33","title":"New deep links monitor in Play Console 🔗","content":"Deep links allow you to get your users directly to in-app content by accepting traffic from external sources, including the web. Since answering basic questions like “is this URL deep-linked?” or “why is this deep link not working?” can be difficult to answer, many apps have partial, broken, or no deep links configured. To make it easier for you to keep your deep links in good shape, we’ve introduced a new, dedicated Play Console page that gives you a quick but comprehensive snapshot of your current setup along with tooling to help you identify and troubleshoot issues at a glance.","url":"https://android-developers.googleblog.com/2022/08/monitor-your-deep-links-in-one-place.html","headerImageUrl":"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj42yJ079EEgbm1oAfoXwCKB_LxBw_0iEPsixWd572w6BThCaA5P-O6Ahp7P6SCcCgLZ59rKPtQFkfbpGeVn-f7dk2ef81nSMMqHz3IEw1FL9fAfhiFGgPJZNu5wny2AoWWZ0Ma1PAqGkSGS60eGB59abQHdQ_Hb-_9VdEnS7yg4JLmUIUuW3dNxg0l/w640-h190/Android-DeepLinksWithGooglePlayConsole_4209x1253%20.png","publishDate":"2022-08-21T23:00:00.000Z","type":"Article 📚","topics":["12","2","5"],"authors":["87","88"]},{"id":"34","title":"Celebrating 5 years of Kotlin on Android 🎉","content":"Five years ago Android announced official support for the interoperable, mature, production-ready, and open source Kotlin programming language. Since then, JetBrains and Google have been collaborating around the development of Kotlin, and the Kotlin Foundation was co-founded by the two companies; JetBrains developing both the language and tooling has given Kotlin outstanding IDE support. We put together some posts and videos to celebrate the journey and elaborate the milestones of Kotlin on Android with many of the people that helped to make it happen.","url":"https://android-developers.googleblog.com/2022/08/celebrating-5-years-of-kotlin-on-android.html","headerImageUrl":"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRKysS-6n5YNTJAtLz2PkRNV5XsFnSlod6hwTvKRHbUb0W5pE8RszvmTfFK6GNbh2TKa3dbTP1AjB4pI0NB3agCRb1F4MbP5LQb6Q-8oveLb-mDjqFteWaZnIaztK4W1yONSJ5M6ffWAt-qu9CAu04v0PBIg6OIm9kFHMX6kolmf3zkagX2MIDDOtn/w640-h192/Kotlin%20Header.png","publishDate":"2022-08-16T23:00:00.000Z","type":"Article 📚","topics":["10"],"authors":["1"]},{"id":"35","title":"Mad Skills: Performance 🏎️💨","content":"The MAD Skills series on Performance continued with a blog post from \nBen and a video from Tomáš that covers how to use the Macrobenchmark library along with UIAutomator to help generate Baseline Profiles for you. Baseline Profiles help your app to start and run faster by optimizing critical code paths ahead of time, allowing for a smoother user experience.","url":"https://medium.com/androiddevelopers/improving-performance-with-baseline-profiles-fdd0db0d8cc6","headerImageUrl":"https://miro.medium.com/max/1400/0*Tztd-PrhMpbWTXGC","publishDate":"2022-08-22T23:00:00.000Z","type":"Article 📚","topics":["7"],"authors":["36"]},{"id":"36","title":"AndroidX releases 🚀","content":"In AndroidX, the Wear Compose Version 1.0.1 release fixed a logic bug in ScalingLazyColumn. As mentioned before, we released Wear Tiles Version 1.1. Webkit Version 1.5 added setAlgorithmicDarkeningAllowed, and added support for setting an allow-list of URLs for the configured proxy.","url":"https://developer.android.com/jetpack/androidx/versions","headerImageUrl":"https://developer.android.com/images/social/android-developers.png","publishDate":"2022-10-25T23:00:00.000Z","type":"DAC - Android version features","topics":["8","19"],"authors":[]},{"id":"37","title":"A story of App Excellence, featuring Tik Tok","content":"Over in video, we covered how TikTok used Android tools to improve app startup and make the user experience more seamless, and how it impacted app usage and Play Store ratings.","url":"https://youtu.be/k9Pdgiugleg","headerImageUrl":"https://i.ytimg.com/vi/k9Pdgiugleg/maxresdefault.jpg","publishDate":"2022-08-31T23:00:00.000Z","type":"Video 📺","topics":["5","7","2"],"authors":["61"]},{"id":"38","title":"Design high-quality apps for kids","content":"We introduced the Google Play Academy course around designing kids’ apps, ensuring that they’re fun, usable, and appropriate for their target age group. The course covers the framework for rating kids apps on Google Play that teachers across the US use, so you can understand what they’re looking for to help your app stand out.","url":"https://youtu.be/-FUmVUPThX8","headerImageUrl":"https://i.ytimg.com/vi/-FUmVUPThX8/hqdefault.jpg","publishDate":"2022-08-31T23:00:00.000Z","type":"Video 📺","topics":["12","2"],"authors":["61"]},{"id":"39","title":"MAD about Media","content":"Avish, our summer Android DevRel Engineer intern, discussed modern approaches to creating Android media apps leveraging experience in converting the Universal Android Media Player (UAMP) media playback sample app to Compose, updating it to use modern libraries such as Media3.","url":"https://medium.com/androiddevelopers/mad-about-media-f536f7d601c","headerImageUrl":"https://miro.medium.com/max/1400/1*BKAchEMpYdP3dEyaIAP5xA.png","publishDate":"2022-08-25T23:00:00.000Z","type":"Article 📚","topics":["18"],"authors":["61"]},{"id":"40","title":"Top Tips for Adopting Android’s Notification Permission","content":"Terence covered tips to improve your app’s user experience with notifications before targeting Android 13, as well as how to test your app’s integration with the permission without flashing different OS versions onto your device.","url":"https://medium.com/androiddevelopers/top-tips-for-adopting-androids-notification-permission-bf69afd677b8","headerImageUrl":"https://miro.medium.com/max/1400/1*XQmi35H84FdYhY_ONP6ntQ.png","publishDate":"2022-08-23T23:00:00.000Z","type":"Article 📚","topics":["13","6"],"authors":["89"]},{"id":"41","title":"Jetpack Compose Accompanist — An FAQ.","content":"Ben wrote a FAQ on the Jetpack Compose Accompanist, a labs-like environment for new Compose APIs. Accompanist is used to help fill known gaps in the Compose toolkit, experiment with new APIs and to gather insight into the development experience of building a Compose library. The goal of Accompanist is to eventually upstream libraries into the official toolkit. (at which point they will be deprecated and removed from Accompanist) Current libraries in Accompanist include support for Flow Layouts, Pager, Navigation Transitions, and Swipe Refresh.","url":"https://medium.com/androiddevelopers/jetpack-compose-accompanist-an-faq-b55117b02712","headerImageUrl":"https://miro.medium.com/max/1400/1*w_MA7M6H9HpwdWb_fx-2IA.png","publishDate":"2022-08-18T23:00:00.000Z","type":"Article 📚","topics":["3"],"authors":["80"]},{"id":"42","title":"Introducing the MAD Skills series on Performance","content":"It’s time for another series of MAD Skills on Performance! Performance spans every aspect of Android development, and as part of Modern Android Development we’re aiming to make it more approachable and user-friendly. We have also found direct correlations between improved app performance, user satisfaction and business metrics.","url":"https://medium.com/androiddevelopers/introducing-the-mad-skills-series-on-performance-7dbb26e8b17f","headerImageUrl":"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkWBi6t47sZvF2EqduUT_a38uamN_jLbjDIoada1oN9PSbkyyduU1f_x6t4H8gX1ghq11Wyt09dBjw-l3efO5EO62AvdrVELnk4qc6Xft96Fk_ViJ8xipsPXirDnvVoYw44tl-gJqUHqOXxrdbPbZjjGwXGmoLL992o_5AMdkpnWyoL0oz8HrAJagH/w1200-h630-p-k-no-nu/unnamed_%281%29.png.jpeg","publishDate":"2022-08-09T23:00:00.000Z","type":"Article 📚","topics":["7","5"],"authors":["36"]},{"id":"43","title":"MAD Skills: Important Performance Metrics","content":"Before you begin to work with performance effectively, we recommend you make yourself familiar with key performance metrics. By understanding what metrics you should look at, you will make inspecting, improving and monitoring performance easier.","url":"https://medium.com/androiddevelopers/important-performance-metrics-c7dacf018eb3","headerImageUrl":"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYdlNQTXP5pTpqN3fQwfF__WHtEmflMVuLS6ErWorUPYM9MwThUmwuBfFhDMVtw5X1jVmchC9z20Bl_yD7M_thVbCmhRJLyZqh3sHZBm6Sryz_xyu4cvusk_xx1kJCh5ANM-TtsvG1WwqMUPllTZegJlstUj3KDesGJ2Xrh6AsLU9HvaFCLT4RLZd7/w1200-h630-p-k-no-nu/resize%20play_10-android_dev.png","publishDate":"2022-08-10T23:00:00.000Z","type":"Article 📚","topics":["7"],"authors":["36"]},{"id":"44","title":"MAD Skills: Inspecting Performance\n","content":"This MAD Skills article on inspecting performance introduces you to tools and methods that help when your code’s performance. When you inspect performance you make sure that what’s happening in your app aligns with what you expect to happen.","url":"https://medium.com/androiddevelopers/inspecting-performance-95b76477a3d7","headerImageUrl":"https://1.bp.blogspot.com/-9MiK78CFMLM/YQFurOq9AII/AAAAAAAAQ1A/lKj5GiDnO_MkPLb72XqgnvD5uxOsHO-eACLcBGAsYHQ/w1200-h630-p-k-no-nu/Android-Compose-1.0-header-v2.png","publishDate":"2022-08-14T23:00:00.000Z","type":"Article 📚","topics":["7","5"],"authors":["36"]},{"id":"45","title":"Consuming flows safely in Jetpack Compose","content":"Collecting flows in a lifecycle-aware manner is the recommended way to collect flows on Android. If you’re building an Android app with Jetpack Compose, use the collectAsStateWithLifecycle API to collect flows in a lifecycle-aware manner from your UI.","url":"https://medium.com/androiddevelopers/consuming-flows-safely-in-jetpack-compose-cde014d0d5a3","headerImageUrl":"https://miro.medium.com/max/720/1*LL7FLWzjT4c6bQdGlvdz7w.png","publishDate":"2022-08-09T23:00:00.000Z","type":"Article 📚","topics":["3","8","4"],"authors":["23"]},{"id":"46","title":"Brushing up on Compose Text coloring","content":"Alejandra Stamato’s last article covered compose brush text coloring, and this week she taught us how to take it a step further and add animation to brush text coloring. She covers using the animation APIs in conjunction with the Brush APIs, demonstrating these with a candy cane shimmer effect and a back-and-forth shimmer effect.","url":"https://medium.com/androiddevelopers/brushing-up-on-compose-text-coloring-84d7d70dd8fa","headerImageUrl":"https://miro.medium.com/max/720/1*PZK1BRIYM22iLQhexPGT1Q.png","publishDate":"2022-07-24T23:00:00.000Z","type":"Article 📚","topics":["3"],"authors":["91"]},{"id":"47","title":"Final Android 13 Beta update, official release is next!","content":"We’re just a few weeks away from the official release of Android 13! Meanwhile, we published the last Beta for your testing and development. We reached Platform Stability at Beta 3, so all app-facing surfaces are final, including SDK and NDK APIs, app-facing system behaviors, and restrictions on non-SDK interfaces. With these and the latest fixes and optimizations, Beta 4 gives you everything you need to complete your testing.","url":"https://android-developers.googleblog.com/2022/07/Final-Android-13-Beta-update-official-release-is-next.html","headerImageUrl":"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiKBGMJx7yKi1RuRF9Q1X-1GOgfCvJ7XVIhNZlsmYgeabTPyljHhEOr2F0iGkF2BM7jeE1HYnL75GXllESyWgpEZEQWm9xfKU5a8kDgrvS5-ZZN0eTq0QaTsCBOAFkJzGX9kBTZxfo_4p6O3DYkXVqsBMRynTq1Mw3EDq3hwEL5OcoCrSQ8rOvFrraK/w1200-h630-p-k-no-nu/Compose%20Blog%20social.jpg","publishDate":"2022-07-12T23:00:00.000Z","type":"DAC - Android version features","topics":["13"],"authors":["62"]},{"id":"48","title":"10 years of Google Play","content":"In 2012, the team opened the (digital) doors of Google Play. A decade later, more than 2.5 billion people in over 190 countries use Google Play every month to discover apps, games and digital content. And more than 2 million developers work with us to build their businesses and reach people around the globe! Congratulations to the Google Play team for this huge milestone.","url":"https://android-developers.googleblog.com/2022/03/celebrating-10-years-of-google-play.html","headerImageUrl":"https://developer.android.com/images/social/android-developers.png","publishDate":"2022-07-24T23:00:00.000Z","type":"Article 📚","topics":["12"],"authors":["63"]},{"id":"49","title":"Android Basics with Compose Unit 3 available","content":"The Unit 3 of Android Basics with Compose course is available already! Unit 3 covers how to build apps that display a list of data and how to make your apps more beautiful with Material Design.","url":"https://developer.android.com/courses/android-basics-compose/course","headerImageUrl":"https://www.gstatic.com/devrel-devsite/prod/vab7ee6e3641f10848d404faa598f256587df1a361a1e70cd114230c2961b73d9/android/images/lockup.svg","publishDate":"2022-08-02T23:00:00.000Z","type":"Codelab","topics":["2","3","10"],"authors":[]},{"id":"50","title":"Jetpack Compose 1.2 is now stable","content":"This release contains new features like downloadable fonts, lazy grids, and improvements for tablets and Chrome OS with better focus, mouse, and input handling.","url":"https://android-developers.googleblog.com/2022/07/jetpack-compose-1-2-is-now-stable.html","headerImageUrl":"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1vg5QdkR-Hj7oQ3yueza1VGYFrNOBbuAxRQycRYGO6HLR-Hf2LR9DHT__OxVFecRYFZbVq6cYg6ca15h7kkKO99zzheFMB_x6MdTO74DaJpTR933pmrkJ-pWVq_7fEmN38nYHQv2u1l7-Ukk8RtNPrtGnn-ChdYwcbbx8Q-MnbJ3z3BjSj3U0Q-YX/w1200-h630-p-k-no-nu/header-image-predictive-back-blog%20%281%29.png","publishDate":"2022-07-26T23:00:00.000Z","type":"Article 📚","topics":["3"],"authors":["65"]},{"id":"51","title":"Compose for Wear OS is now 1.0","content":"Compose for Wear OS makes building apps for Wear OS easier, faster, and more intuitive by following the declarative approach and offering powerful Kotlin syntax. Moving forward, Compose for Wear OS is our recommended approach for building user interfaces for Wear OS apps.","url":"https://android-developers.googleblog.com/2022/07/compose-for-wear-os-10-stable.html","headerImageUrl":"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsdruRjulgaFFtqwrnp6Z0mzIAhmMzJZIOUjVqugCB3i5noivoLOVecpMNBQGVIsG_kjkzthRTpibL-CEmlsn5nZJUhnSkkdhEe0V2yaNPQt2l-FGh0sQz1JnOZVRHRDZIr72twcPZQL7Q0kdgb-JzxgKJlZSsESJkMLuAkvqCfyXoE7d-XxFQYVoJ/w1200-h630-p-k-no-nu/Google_Android_DeveloperPoweredCTS_4209x1253.jpg","publishDate":"2022-07-26T23:00:00.000Z","type":"Article 📚","topics":["3","19"],"authors":["75"]},{"id":"52","title":"AndroidX releases 🚀","content":"Jetpack Compose 1.2, Compose for Wear OS 1.0, Core splashscreen v1.0, and Profile Installer v1.2 went stable. In RC, you can find AppCompat v1.5, Compose Compiler v1.3 (that brings support to Kotlin version 1.7.10), Emoji2 v1.2, and ShareTarget v1.2. Lastly, Wear Tiles v1.1 reached its first beta version!","url":"https://developer.android.com/jetpack/androidx/versions/all-channel","headerImageUrl":"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirdkVqgyYoZDm0ktFFXjyIATaFKJUCVU0lIzQpTw4dlJjvqruWxLJn5mJ5xHoZijqVQ-poghVIGWGCpZM0Nb_bzx274kr1Lo_nn0PvEzMXcU_DgNEFrKzw5HtuE_vA9zfRVy8RDuiAIgC_aDVhHmGdqSLhzsPK5Pj2m3QNB4lzsf4E0VkbctqiowND/w1200-h630-p-k-no-nu/Android-discountinuing-kotlin-synthetics-for-views-social%20%281%29.png","publishDate":"2022-08-02T23:00:00.000Z","type":"Jetpack release 🚀","topics":["8"],"authors":[]},{"id":"53","title":"Make your app large screen ready","content":"Learn how to get started with large screen support and why it is so important. Accurately handling orientation changes, aspect ratios, and adaptive layouts may seem challenging, but with new large screen experiences in mind, multiple form factors bring new possibilities to your users.","url":"https://medium.com/androiddevelopers/make-your-app-large-screen-ready-baf8fe505ae7","headerImageUrl":"https://miro.medium.com/max/1200/0*1hkxEoydoX8GzK9N","publishDate":"2022-07-19T23:00:00.000Z","type":"Article 📚","topics":["2"],"authors":["90"]},{"id":"54","title":"Get familiar with Wear OS 3 (without a physical device)","content":"You don’t need a physical device to test your Wear apps. Read this article to take a brief look at unique UI surfaces on Wear OS, create a Wear emulator and explore it from a user perspective.","url":"https://medium.com/androiddevelopers/get-familiar-with-wear-os-3-without-a-physical-device-e7962c97f02b","headerImageUrl":"https://miro.medium.com/max/1200/1*3M48bGiXnBX8y83eYLgFtw.png","publishDate":"2022-07-20T23:00:00.000Z","type":"Article 📚","topics":["19","2"],"authors":["86"]},{"id":"55","title":"Jetpack Compose Interop: Using Compose in a RecyclerView","content":"What versions of Compose and RecyclerView do you need to use to get the best performance? In addition, you’ll understand how the interop works under the hood.","url":"https://medium.com/androiddevelopers/jetpack-compose-interop-using-compose-in-a-recyclerview-569c7ec7a583","headerImageUrl":"https://miro.medium.com/max/1200/1*aBNjsK7y35V05OKNQ2oIZg.png","publishDate":"2022-07-21T23:00:00.000Z","type":"Article 📚","topics":["3","2"],"authors":["68"]},{"id":"56","title":"Brushing up on Compose Text coloring","content":"A very colorful blog post about how to work with Brush API together with TextStyle to achieve complex text coloring like giving a gradient to your text in a simple way.","url":"https://medium.com/androiddevelopers/brushing-up-on-compose-text-coloring-84d7d70dd8fa","headerImageUrl":"https://miro.medium.com/max/1200/1*PZK1BRIYM22iLQhexPGT1Q.png","publishDate":"2022-07-24T23:00:00.000Z","type":"Article 📚","topics":["3","2"],"authors":["91"]},{"id":"57","title":"Animating brush Text coloring in Compose 🖌️","content":"Learn how to animate gradients in your text using the Brush API and Compose animations. Go check them out, I can’t stop looking at those animations now!","url":"https://medium.com/androiddevelopers/animating-brush-text-coloring-in-compose-%EF%B8%8F-26ae99d9b402","headerImageUrl":"https://miro.medium.com/max/1200/1*9fEDrtJES1CQEVlyI7WjgQ.png","publishDate":"2022-07-31T23:00:00.000Z","type":"Article 📚","topics":["3","2"],"authors":["91"]},{"id":"58","title":"Prepare your app to support predictive back gestures","content":"Predictive back gestures is a feature that will be available in future versions of Android. However, to give you more time to adopt it, we made it available in the developer options of Android 13 Beta 4. Read the blog post for details on how to try out the new gesture and support it in your apps. Spoiler alert: it’s straightforward for most apps!","url":"https://android-developers.googleblog.com/2022/07/prepare-your-app-to-support-predictive-back-gestures.html","headerImageUrl":"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi9NXOkaUCvb2KLyrnCp4DWpr2dyryXzHsqvX94Dcrw3r_5znwMZFy6PwmaHJj25D0DKYcZlF8Jac5C0KhM1s2j_mEc0VULf-eiCpT3JGbYgI_jg105SyUEwNG7w2dvF-60npxBgZidqgXqx7A1iWRftv9lOZrM9OAfc4f105met0ZauGQ5hRQC0_wE/w1200-h630-p-k-no-nu/image3.jpg","publishDate":"2022-07-28T23:00:00.000Z","type":"Article 📚","topics":["13"],"authors":["92","93","94"]},{"id":"59","title":"ADB Podcast Episodes🎙187: System UI: A Retrospective","content":"In this episode Tor and Chet meet Dan Sandler and Adam Cohen from the SystemUI team. They dip into a bit of history, talking about where things were at when they joined the team, and how things have developed in the many years since. They also talk about how to expose (or not) gestures and features in a UI system.","url":"https://adbackstage.libsyn.com/episode-187-system-ui-a-retrospective","headerImageUrl":"https://ssl-static.libsyn.com/p/assets/9/4/d/b/94dbe077f2f14ee640be95ea3302a6a1/ADB184_Skia_and_AGSL.png","publishDate":"2022-07-24T23:00:00.000Z","type":"Podcast 🎙","topics":["2"],"authors":["32","31"]},{"id":"60","title":"Developer-Powered CTS (CTS-D) 🧪","content":"The Compatibility Test Suite (CTS) is a key part of the Android Compatibility Program that helps to ensure that devices provide a stable, consistent environment for your apps. To enhance CTS, we are adding a new test suite called CTS-D that is built and run by developers like you. You can build and contribute test cases to CTS-D to help catch pain points that you are seeing in the field — places where device behavior doesn’t match the Android public APIs and the Android Compatibility Definition Document (CDD).","url":"https://android-developers.googleblog.com/2022/06/developer-powered-cts-cts-d.html","headerImageUrl":"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjsdruRjulgaFFtqwrnp6Z0mzIAhmMzJZIOUjVqugCB3i5noivoLOVecpMNBQGVIsG_kjkzthRTpibL-CEmlsn5nZJUhnSkkdhEe0V2yaNPQt2l-FGh0sQz1JnOZVRHRDZIr72twcPZQL7Q0kdgb-JzxgKJlZSsESJkMLuAkvqCfyXoE7d-XxFQYVoJ/w1200-h630-p-k-no-nu/Google_Android_DeveloperPoweredCTS_4209x1253.jpg","publishDate":"2022-06-22T23:00:00.000Z","type":"Article 📚","topics":["6","13"],"authors":["98"]},{"id":"61","title":"Independent versioning of Jetpack Compose libraries ✒️","content":"We announced that the various Jetpack Compose libraries will move to independent versioning schemes, making it easier to incrementally upgrade your application and stay up-to-date with the latest Compose features.","url":"https://android-developers.googleblog.com/2022/06/independent-versioning-of-Jetpack-Compose-libraries.html","headerImageUrl":"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjolHnYXFnb81t2qu38Z8BPxU0QNitCVulwRwgZlijGDwCbcSSPETvSVr9apTSV_eDknzPDs1BwccZU_lYr15czYU_ddiXete76bVxWWIhNE29-PfOCxMzvashjOwvGWrzZ4rynym-k4aNQ4c-tmN7v4O5vh0iaRpFZTMuYTFqjFLrNpHNlOwSyZyf6/w1200-h630-p-k-no-nu/unnamed_%281%29.png.jpeg","publishDate":"2022-06-28T23:00:00.000Z","type":"Article 📚","topics":["3"],"authors":["65"]},{"id":"62","title":"Notes from Google Play: making Play work for everyone ▶️","content":"In the latest edition of Notes from Google Play, we touched on the Play Integrity API, the Data Safety section, the Privacy Sandbox on Android, and the newly-launched Google Play SDK Index, which provides data and insights about over 100 of the most widely used commercial SDKs. We covered new subscription capabilities that allow you to create multiple base plans and offers for each subscription, as well as the option to lower prices starting at the equivalent of 5 US cents to adapt to local purchasing power.","url":"https://android-developers.googleblog.com/2022/06/notes-from-google-play-making-play-work.html","headerImageUrl":"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicboZEaxs6kOlhHSoRE__yCFdTkFvVW7z9ksAfVlkdCVgNQzkG1B1z4RVCV6l3g-Up3ZPGchGjq5idAKV5prrVVy9T2o6MtJh-iXZtUKcKyNY1Cqt39bi5VzwZ2CLy7N3FANcklla-mHIGboZzvNRl3eN5ZMvjl29tjtGGLGubVKIYwIUCh6q2-FhT/w1200-h630-p-k-no-nu/AD%20Blog%20Social.png","publishDate":"2022-06-21T23:00:00.000Z","type":"Article 📚","topics":["12"],"authors":[]},{"id":"63","title":"Dark theme testing in Pre-Launch Report 🕶️","content":"After you upload and publish a test Android App Bundle to Google Play, we install it on a set of Android devices, launch and crawl your app for several minutes, and compile your results into the pre-launch report. We’ve introduced a new test in the Pre-Launch Report that runs accessibility checks on a device switched to dark theme; this can detect color contrast issues that make it difficult to differentiate text and icons from a background. ","url":"https://support.google.com/googleplay/thread/170731936/dark-theme-test-now-included-in-pre-launch-report","headerImageUrl":"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgJtTKEaaohJa7b5H5mkmCNu1LbQ3FPrPv0hSVWdEacemvtEHRWhk-DCi5aEartYwL0OMg6NOHJ1Vnn1fqeJ5cMc7Bl08SY7JcEBpKp5Vde-y_VDIPoVNlhb5VZbyv4PlauW_xpvnf6iS8yszMOnuo5w0Rw5NmYZ45reEvulY2KgGoPaG9NZ6H8hO2b/w1200-h630-p-k-no-nu/Android_SandboxPreview_V2_1024x512.jpg","publishDate":"2022-07-10T23:00:00.000Z","type":"Docs 📑","topics":["12","6"],"authors":[]},{"id":"64","title":"Performance tips to achieve App Excellence","content":"The Performance tips to achieve App Excellence video covered five app performance issues along with the tools that Android Studio and Google Play Console provide to help you diagnose and troubleshoot them.","url":"https://www.youtube.com/watch?v=VJItLXb7_V8","headerImageUrl":"https://i.ytimg.com/vi/VJItLXb7_V8/maxresdefault.jpg","publishDate":"2022-07-05T23:00:00.000Z","type":"Video 📺","topics":["7","2"],"authors":[]},{"id":"65","title":"Making Sense of Intent Filters in Android 13","content":"Before Android 13, when an app registered an exported component in its manifest and added an , the component could be started by any explicit intent — even those that do not match the intent filter. In some circumstances this can allow other apps to trigger internal-only functionality.\n\nThis behavior has been updated in Android 13. Now intents that specify actions and originate from external apps are delivered to an exported component if and only if the intent matches its declared elements.","url":"https://medium.com/androiddevelopers/making-sense-of-intent-filters-in-android-13-8f6656903dde","headerImageUrl":"https://miro.medium.com/max/1200/1*PX8VuYcLzaC-AvOtSPgMRw.png","publishDate":"2022-07-05T23:00:00.000Z","type":"Article 📚","topics":["13","2"],"authors":["99"]},{"id":"66","title":"Customizing AnimatedContent in Jetpack Compose 🌟","content":"Rebecca covers using AnimatedContent to transition between different composables with a smoother and more custom transition effect. Even the default behavior of AnimatedContent can make a big difference to the look and feel of your app, without much effort.","url":"https://medium.com/androiddevelopers/customizing-animatedcontent-in-jetpack-compose-629c67b45894","headerImageUrl":"https://miro.medium.com/max/1200/1*Yu-W3qMxx1YyPm_AJMcXGg.png","publishDate":"2022-06-30T23:00:00.000Z","type":"Article 📚","topics":["3"],"authors":["96"]},{"id":"67","title":"Jetpack Compose Stability Explained","content":"Ben does a detailed exploration of how Compose determines the stability of each parameter of your composables to see what can be skipped during recomposition, including using compiler reports to determine what stability is being inferred about your classes. ","url":"https://medium.com/androiddevelopers/jetpack-compose-stability-explained-79c10db270c8","headerImageUrl":"https://miro.medium.com/max/1200/1*iLEtRB3BpIkD6CgjWFP2RQ.png","publishDate":"2022-06-29T23:00:00.000Z","type":"Article 📚","topics":["3"],"authors":["80"]},{"id":"68","title":"Migrating to the new coroutines 1.6 test APIs","content":"kotlinx.coroutines 1.6 introduces a set of new testing APIs, and the previous testing APIs are now deprecated.\n \nMarton talked about how we’ve migrated some of our own samples to the new APIs, covering a bunch of the necessary work for most Android projects.","url":"https://medium.com/androiddevelopers/migrating-to-the-new-coroutines-1-6-test-apis-b99f7fc47774","headerImageUrl":"https://miro.medium.com/max/1200/1*XQmi35H84FdYhY_ONP6ntQ.png","publishDate":"2022-06-28T23:00:00.000Z","type":"Article 📚","topics":["10","6"],"authors":["1"]},{"id":"69","title":"Android 13 beta 3","content":"We released the third beta of Android 13! Android 13 has been built on our core themes of privacy and security, developer productivity, and large screen support. ​​Beta 3 takes Android 13 to Platform Stability, which means that the developer APIs and all app-facing behaviors are now final; you can confidently develop and release your updates. Read all about it in the post!\n","url":"https://android-developers.googleblog.com/2022/06/android-13-beta-3-platform-stability.html","headerImageUrl":"https://developer.android.com/images/social/android-developers.png","publishDate":"2022-06-07T23:00:00.000Z","type":"Article 📚","topics":["1","13"],"authors":["14"]},{"id":"70","title":"Google Play @ Google I/O - 3 updates you need to know","content":"In this video and blog post, Phalene tells us about the top three things to know about Google Play from Google I/O. These include updates on custom store listings, introducing more developers to the LiveOps beta, and new subscription capabilities. Learn more about these three topics in the video or blog post!\n","url":"https://android-developers.googleblog.com/2022/06/google-play-google-io-3-updates-you-need-to-know_01537187872.html","headerImageUrl":"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg40pvJlLB9LP1shkyFOq4pIexSrdI-kSH9uPxMEdhjynUPm2Zdfy4W1sHb6v0d5hZqycnWP9qTVjxHu0DADwL2BrtBwkPrOOIFXA8-H2RC6W70ehcnYUTgKXy8eRvwvWDeu2J-0iVmMgkd4c1lyYUBnZi39mPVTJV5Ke83DvWMBioeLOWPivE0Tpvv/w1200-h630-p-k-no-nu/Android-io-spotlight-modern-android-development-social.png","publishDate":"2022-06-12T23:00:00.000Z","type":"Article 📚","topics":["1","12"],"authors":["76"]},{"id":"71","title":"Privacy Sandbox Developer Preview 3","content":"The Privacy Sandbox on Android aims to develop new solutions that preserve user privacy while enabling effective, personalized advertising experiences for apps. Now it is in Developer Preview 3, which adds APIs and resources for conversion measurement and remarketing use cases; this allows you to begin testing and evaluating impact on all key APIs for Privacy Sandbox on Android.","url":"https://android-developers.googleblog.com/2022/06/privacy-sandbox-developer-preview-3.html","headerImageUrl":"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjg5R2hd0VZp__xKUUgs6-tfKHEoabMPqo2aY6uoGvzre-9E4gUlz6RbGsrE-Txszbrc3OaNL9r2TshsZmzGhEiM3M-_eO8M39K6ljm9NrX2BMHRLHM3HeF04YgJf8l4Z1-kNaP9YV8BCRe3n2zTUTSx3FOvA5IRc4PCjVPiJ7CEw7M7Y7uAJLVd7WQ/w1200-h630-p-k-no-nu/Android-GoogleIO3thingstoknowaboutFormFactors_4209x1253.png","publishDate":"2022-06-15T23:00:00.000Z","type":"Article 📚","topics":["11"],"authors":["77"]},{"id":"72","title":"ADB Podcast Episodes🎙186: Live Edit","content":"In this episode, we talk with Alan and Esteban from Android Studio about the new \"Live Edit\" feature recently launched at Google I/O in the Electric Eel canary build. We dive into the technology -- how it works, what the technical challenges are, and its current state.","url":"https://adbackstage.libsyn.com/episode-186-live-edit","headerImageUrl":"http://assets.libsyn.com/show/332855?height=250&width=250&overlay=true","publishDate":"2022-06-07T23:00:00.000Z","type":"Podcast 🎙","topics":["5","5"],"authors":["31","30","32"]},{"id":"73","title":"AndroidX releases","content":"Let’s take a look at what’s been up with AndroidX releases since the last episode of Now in Android. We have a few new features that are stable including Wear Watchface, Games-Activity, Benchmark, and Annotation","url":"https://developer.android.com/jetpack/androidx/versions/all-channel","headerImageUrl":"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizEliXuy2sTNnhRQtwNAvL46sKpcBLbHiuROrEiOtPDTJ1D0eQlWDDUjspVECqlDw3_sLhFzJO8SCrGJuFaT2QQ7Iezi0xrkhD7yWqpbacVLRC8aX-1bx0aZ-RM1k_S-S0LFTE0PrvX-BlNsmmilGCGMdvRk0v6zhHs8nKwdFv-AluPQIRjAtFx938/w1200-h630-p-k-no-nu/Android-GoogleIOSpotlightPrivacyAndSecurity_1024x512.png","publishDate":"2022-06-22T23:00:00.000Z","type":"Jetpack release 🚀","topics":["8"],"authors":[]},{"id":"74","title":"Google I/O recaps ⏱ - Modern Android Development!\n","content":"Our goal is to make developing beautiful and engaging Android apps as fast and easy as possible. We want to take on the complex parts of building apps so that you can focus on your app’s features and deliver high quality experiences to your users.\n\nWe call this approach Modern Android Development (or MAD for short!) and deliver it through a suite of tools, libraries and guidance. At Google I/O we announced a number of updates and additions to our MAD offerings; here’s a recap of the three largest announcements.","url":"https://android-developers.googleblog.com/2022/05/io22-spotlights-mad.html","headerImageUrl":"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpSQB-YhRGzOJ4X1hoh1DlnMx9cOxfUKdoriSncXDPuaXZXpiXGYBXpxJUsMVKPhGTbTKkT-Gn3g52Tqcy7Alyv6gkMQEKd7twzAj1JbR2DwdFUZYbIcnMgXD2PeRrkTq9jZw8XId5t0D9im6i3XkVCK-YIk10g3E7ut_pLnVdA9tVnGJU5T7XFLi8/w1200-h630-p-k-no-nu/unnamed.png","publishDate":"2022-05-22T23:00:00.000Z","type":"Article 📚","topics":["3","5"],"authors":["57"]},{"id":"75","title":"Google I/O recaps ⏱ - Form factors!","content":"With close to half a billion cars, TVs, watches and laptops running on Android, it is more important than ever for apps to work seamlessly across every device. This year at I/O, we renewed our focus on form factors and announced major updates for Wear OS and Large Screens. To help you get to the bottom of what’s new, here are the three things you need to know about Form Factors at Google I/O","url":"https://android-developers.googleblog.com/2022/05/form-factors-google-io-22.html","headerImageUrl":"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7lx3OtPkMXTr0cwNlItkSUwDQYcTAO1cP-fE8n_NLtnZQ5uBnoP-y0MfENfmuB_2HGRUbmrx_ADz4FmDW8VkBmp_WcdISO0uQiO4Dw2yi9XjBUPqwjX2o24j8lUEhvYWJidFi6ra9WrjHxO1sTCjwBZrLyXHhIjgbRZzFQX-oUOKeqvf1dXg4XQ-A/w1200-h630-p-k-no-nu/Android_ImplementingColor_1024x512.jpg","publishDate":"2022-05-30T23:00:00.000Z","type":"Article 📚","topics":["19","2","16","15"],"authors":[]},{"id":"76","title":"Google I/O recaps ⏱ - Android Privacy, Platform & Security!","content":"Amidst the whirlwind of content at Google I/O, we shared huge announcements involving privacy, security, and the Android platform. Read on for the details, and don’t forget to watch the topic playlist on YouTube.","url":"https://android-developers.googleblog.com/2022/06/privacy-security-google-io-22.html","headerImageUrl":"https://developer.android.com/images/social/android-developers.png","publishDate":"2022-06-05T23:00:00.000Z","type":"Article 📚","topics":["11","13"],"authors":["95"]},{"id":"77","title":"Spot your UI jank using CPU profiler in Android Studio","content":"Takeshi wrote about spotting your UI jank using the CPU profiler in Android Studio. The article goes through a step by step walkthrough about how to use the new jank detection UI in Android Studio Chipmunk including how to record a trace, and how to inspect janky frames.","url":"https://medium.com/androiddevelopers/spot-your-ui-jank-using-cpu-profiler-in-android-studio-9a4c41a54dab","headerImageUrl":"https://miro.medium.com/max/1200/1*FkkN0FugRiSDxhfp1TQz-Q.png","publishDate":"2022-05-15T23:00:00.000Z","type":"Article 📚","topics":["5"],"authors":["81"]},{"id":"78","title":"Custom Canvas Animations in Jetpack Compose ✨","content":"Rebecca Franks wrote about custom Canvas animations in Jetpack Compose. Using the Animatable states and some side-effects, you’ll be able to achieve custom animations as you were able to do with ValueAnimator in the View system.","url":"https://medium.com/androiddevelopers/custom-canvas-animations-in-jetpack-compose-e7767e349339","headerImageUrl":"https://miro.medium.com/max/1200/1*16bn5V--jLMAJLCWspst2Q.png","publishDate":"2022-05-16T23:00:00.000Z","type":"Article 📚","topics":["3"],"authors":["96"]},{"id":"79","title":"Implementing Dynamic Color: Lessons from the Chrome team","content":"If you’re interested in Material You dynamic color, Rebecca Gutteridge talks about how the Chrome team implemented it and the things they kept in mind such as accessibility, custom colors, incognito, and more. It also comes with a really helpful list of recommendations from the designers and developers of the team.","url":"https://android-developers.googleblog.com/2022/05/implementing-dynamic-color-lessons-from.html","headerImageUrl":"https://developer.android.com/images/social/android-developers.png","publishDate":"2022-05-26T23:00:00.000Z","type":"Article 📚","topics":["2","3"],"authors":["97"]},{"id":"80","title":"ViewModel: One-off event antipatterns","content":"We’re very opinionated about what to do with ViewModel events in our UI events Architecture guidance, and this blog post explains why the alternatives to our recommendation might bring higher engineering costs to developers and a worse user experience.","url":"https://medium.com/androiddevelopers/viewmodel-one-off-event-antipatterns-16a1da869b95","headerImageUrl":"https://miro.medium.com/max/1200/0*ROW1i16idpH-rHO-.png","publishDate":"2022-05-31T23:00:00.000Z","type":"Article 📚","topics":["2"],"authors":["23"]},{"id":"81","title":"Diving Into Compose — Lessons Learned While Building Maps Compose","content":"If you’re interested in Compose and Google Maps, Chris Arriola wrote about the lessons learned while building Maps Compose. You’ll see how they took advantage of Kotlin features, how to aim for binary compatibility, subcomposition, and more!","url":"https://medium.com/androiddevelopers/diving-into-compose-lessons-learned-while-building-maps-compose-d20ef5dfe1bb","headerImageUrl":"https://miro.medium.com/max/1200/1*6rFVWLu8FXGXfmASVP3zYQ.jpeg","publishDate":"2022-06-02T23:00:00.000Z","type":"Article 📚","topics":["3"],"authors":["68"]},{"id":"82","title":"I/O 22: What's New in Android","content":"For a survey of what I/O 22 offers to Android developers in video form check out the What’s New in Android talk.","url":"https://youtu.be/Z6iFhczA3NY","headerImageUrl":"https://i.ytimg.com/vi/Z6iFhczA3NY/maxresdefault.jpg","publishDate":"2022-05-10T23:00:00.000Z","type":"Video 📺","topics":["1"],"authors":[]},{"id":"83","title":"I/O 22: What's New for Android Devs","content":"Move quickly through some of the top material for Android Devs at IO/22","url":"https://www.youtube.com/watch?v=l0iBPh7k_HQ","headerImageUrl":"https://i.ytimg.com/vi/l0iBPh7k_HQ/hqdefault.jpg?sqp=-oaymwEmCOADEOgC8quKqQMa8AEB-AH-CYAC0AWKAgwIABABGGUgUShhMA8=&rs=AOn4CLCNz_S_i8TyDdvX_y1-SZGyAfoK3A","publishDate":"2022-05-10T23:00:00.000Z","type":"Video 📺","topics":["1","5","3","8"],"authors":[]},{"id":"84","title":"I/O 22: Android Fireside Chat","content":"Android Fireside Chat is back! Android leaders answered your questions from the stage.","url":"https://www.youtube.com/watch?v=wq3Et-D9P5Y","headerImageUrl":"https://i.ytimg.com/vi/wq3Et-D9P5Y/maxresdefault.jpg","publishDate":"2022-05-17T23:00:00.000Z","type":"","topics":["1"],"authors":[]},{"id":"85","title":"13 Things to know for Android developers at Google I/O!","content":"There aren’t many platforms where you can build something and instantly reach billions of people around the world, not only on their phones—but their TVs, cars, tablets, watches, and more. Today, at Google I/O, we covered a number of ways Android helps you make the most of this opportunity, and how Modern Android Development brings as much commonality as possible, to make it faster and easier for you to create experiences that tailor to all the different screens we use in our daily lives.","url":"https://android-developers.googleblog.com/2022/05/13-things-to-know-for-android-developers-at-google-io.html","headerImageUrl":"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiC2X0sIY_AGvgi6jD8Eh_u8rOdZXKA6PP18tnJdA6jQxR-n4bF6vsIVI2D4FTOnHAlqSY5hJShEjHcRQr7P8QM-YyP3sM3Su_KxFRdBXhg8WUIoXr74luWfFvtgYGJHWdDe_gPnwpCsLR4YhE0U88QcSqrYs3LLjp7dGqQul_pRoerJr__-mD8lUPA/w1200-h630-p-k-no-nu/Android-IO22AndroidDevRecap_Social.png","publishDate":"2022-05-10T23:00:00.000Z","type":"Article 📚","topics":["1","3","2","5","19"],"authors":["62"]},{"id":"86","title":"I/O 22: Now in Android, the App ⏱️","content":"After being available on this blog, our YouTube series, and a podcast, starting today, you can check out the alpha version of the Now in Android app on GitHub that was featured in the Google I/O 2022 Developer Keynote 🎉\n\nThe app showcases best practices, opinionated designs, and solutions to complex real-world problems. ","url":"https://android-developers.googleblog.com/2022/05/now-in-android-sample-app-alpha.html","headerImageUrl":"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgCfJQnd9fqg_J5d_j4lWDbJQ-u-sHd_Z_z8srVPoEuO3_CWY3eVZBulaRTPxqQV3VNkA_1qqkleLVYBI7tRtSIZsOsIDzOKKstOLehI8a1RAUwFgHpXY-3kEmoEPujjQZU1VUk08DesedqDdiA1ZOxUxR-XJIMb66G3gruUq3cxqHwokSQSWycIRPl/w1200-h630-p-k-no-nu/Now-in-Android%28Splash%29.jpg","publishDate":"2022-05-11T23:00:00.000Z","type":"Article 📚","topics":["3","2"],"authors":["42"]},{"id":"87","title":"I/O 22: Jetpack, Compose, and Tooling 🚀","content":"What’s new in Jetpack covered additions and updates to the over 120 libraries we’ve created to address common pain points and make development easier.","url":"https://android-developers.googleblog.com/2022/05/whats-new-in-jetpack-compose.html","headerImageUrl":"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQyCrAWdIb8-moiYuP7EdpznRLOLaKoZWJ04MLzMi1wkJrMfLKQshwXhB_ODNz3T6_aoOwQ0YccVpSbLO2K9qkpx-HTklvNm3ZR_spOINLr861_PgDXDnh6LgpptIyzR5Nv-UjlQ-5FyeLpHwOCb4NjZ8darLIomTVjHM2VvDv7YZdzO-FS6zMKEhlCQ/w1200-h630-p-k-no-nu/Android-JetpackCompose1.2-Social.png","publishDate":"2022-05-10T23:00:00.000Z","type":"Article 📚","topics":["3","8"],"authors":["65","52"]},{"id":"88","title":"I/O 22: Lazy layouts in Compose","content":"Compose brings a simple and performant way of creating scrolling lists, with fewer lines of code than RecyclerView. Learn how lazy layouts enable adding content on demand, how to use Lazy composables, how these work under the hood, and optimization tips for better performance.","url":"https://youtu.be/1ANt65eoNhQ","headerImageUrl":"https://i.ytimg.com/vi/1ANt65eoNhQ/maxresdefault.jpg","publishDate":"2022-05-10T23:00:00.000Z","type":"Video 📺","topics":["3","5"],"authors":[]},{"id":"89","title":"I/O 22: Fragments: The good (non-deprecated) parts","content":"Fragments have been in constant motion over the past couple of years as we move towards a world where all the behavior is defined. Some of these moves have resulted in new APIs designed to do a specific function and replace old, unreliable ones. Learn about the changes in menus, fragment communication, the new strict mode, single lifecycle, and more.","url":"https://www.youtube.com/watch?v=OE-tDh3d1F4","headerImageUrl":"https://i.ytimg.com/vi/OE-tDh3d1F4/maxresdefault.jpg","publishDate":"2022-05-10T23:00:00.000Z","type":"Video 📺","topics":["3","5"],"authors":[]},{"id":"90","title":"I/O 22: Performance best practices for Jetpack Compose","content":"Jetpack Compose can feel like magic, but what do you do when the magic isn't as performant as you want? Discover best practices in Jetpack Compose with regards to performance, common mistakes, and how to avoid them.","url":"https://www.youtube.com/watch?v=EOQB8PTLkpY","headerImageUrl":"https://i.ytimg.com/vi/EOQB8PTLkpY/maxresdefault.jpg","publishDate":"2022-05-10T23:00:00.000Z","type":"Video 📺","topics":["3","7"],"authors":[]},{"id":"91","title":"I/O 22: Workshop: Basic layouts in Compose","content":"Learn how to implement a realistic and complex UI using Compose Layouts.","url":"https://www.youtube.com/watch?v=kyH01Lg4G1E","headerImageUrl":"https://i.ytimg.com/vi/kyH01Lg4G1E/maxresdefault.jpg","publishDate":"2022-05-10T23:00:00.000Z","type":"Video 📺","topics":["3","2"],"authors":[]},{"id":"92","title":"I/O 22: Workshop: State in Jetpack Compose","content":"Discover the core concepts of using state in Jetpack Compose by building a wellness app. Learn how the app's state determines what is displayed in the UI, how Compose keeps the UI updated when state changes, how to optimize the structure of your composable functions, and work with ViewModels in a Compose app.","url":"https://www.youtube.com/watch?v=PMMY23F0CFg","headerImageUrl":"https://i.ytimg.com/vi/PMMY23F0CFg/maxresdefault.jpg","publishDate":"2022-05-10T23:00:00.000Z","type":"Video 📺","topics":["3","2"],"authors":[]},{"id":"93","title":"I/O 22: Airbnb uses Jetpack Compose to empower devs to do their best work","content":"Jetpack Compose, Android’s modern UI-building toolkit, directly supports both of Airbnb’s development principles. Compose provided a solid foundation for adaptable, quality engineering and reduced boilerplate code, so developers could focus on delivering a great user experience — and advance their two-fold pursuit of engineering excellence.","url":"https://android-developers.googleblog.com/2022/05/airbnb-uses-jetpack-compose.html","headerImageUrl":"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj1-9FyHvhui7rTgRvUNvyQE8Mmrx5vQ1ZHnuYs0DMdkwFeBK7DuGIP2VL1sgxiQgBtrGvKF4j0QcKInGgSWXCx4bszhPM4VwmuUHm1VIBjmkJqBSWPYk4D9fPmDVhK3asVTNqmkxRjTidzZpzaUzQYn0JmQzjwblhp3el20qowfr00yTpPdKyhefcT/w1200-h630-p-k-no-nu/image1.gif","publishDate":"2022-05-11T23:00:00.000Z","type":"Article 📚","topics":["3"],"authors":[]},{"id":"94","title":"I/O 22: What’s new in Android development tools ","content":"Get an overview of what's new in Android Studio for Android app developers, including demos and a presentation of relevant features that can accelerate developers' workflow on the latest Android APIs.","url":"https://www.youtube.com/watch?v=RFv8GkLd5OY","headerImageUrl":"https://i.ytimg.com/vi/RFv8GkLd5OY/maxresdefault.jpg","publishDate":"2022-05-10T23:00:00.000Z","type":"Video 📺","topics":["5","2"],"authors":[]},{"id":"95","title":"I/O 22: Designing apps for large screens","content":"Explore key concepts and strategies for adapting mobile apps to large screen devices, such as tablets and foldables. Dig into the challenges of optimizing design and finding ways to meet the changing expectations of your users, in order to offer the highest quality large screen app experience.","url":"https://www.youtube.com/watch?v=pvdqeIM6mh0&t","headerImageUrl":"https://i.ytimg.com/vi/pvdqeIM6mh0/maxresdefault.jpg","publishDate":"2022-05-10T23:00:00.000Z","type":"Video 📺","topics":["2"],"authors":[]},{"id":"96","title":"I/O 22: Learn how to update your app for the larger screen","content":"You already have an app you’ve been working on for years, with a set, and hard to change, architecture. Discover the many options to bring your existing app forward, and build optimized large screen experiences without starting from scratch.","url":"https://www.youtube.com/watch?v=1ZOQ_-XPSv8","headerImageUrl":"https://i.ytimg.com/vi/1ZOQ_-XPSv8/maxresdefault.jpg","publishDate":"2022-05-10T23:00:00.000Z","type":"Video 📺","topics":["2"],"authors":[]},{"id":"97","title":"I/O 22: Implementing Android apps for all screen sizes ","content":"Get a better understanding of how to build your app to fill all screen formats. Explore development best practices to optimize applications for all devices with an emphasis on Jetpack Compose, navigation, managing state, and testing.","url":"https://www.youtube.com/watch?v=MPwf5DklKp0&t","headerImageUrl":"https://i.ytimg.com/vi/MPwf5DklKp0/maxresdefault.jpg","publishDate":"2022-05-10T23:00:00.000Z","type":"Video 📺","topics":["2"],"authors":[]},{"id":"98","title":"I/O 22: Input for all screens","content":"Learn about some straight-forward best practices to support input methods like keyboard, mouse, and stylus. These simple changes can elevate your app experience and grow user engagement.","url":"https://www.youtube.com/watch?v=XtImpP23uhE","headerImageUrl":"https://i.ytimg.com/vi/XtImpP23uhE/maxresdefault.jpg","publishDate":"2022-05-10T23:00:00.000Z","type":"Video 📺","topics":["2"],"authors":[]},{"id":"99","title":"I/O 22: Building an adaptive layout with SlidingPaneLayout","content":"Learn how to add a list and detail layout to a View-based app with SlidingPaneLayout. Explore how to reconfigure your fragments, open and close the detail pane, handle custom back navigation, and disable gesture navigation.","url":"https://www.youtube.com/watch?v=2rtLdF9UFqg","headerImageUrl":"https://i.ytimg.com/vi/2rtLdF9UFqg/maxresdefault.jpg","publishDate":"2022-05-10T23:00:00.000Z","type":"Video 📺","topics":["2"],"authors":[]},{"id":"100","title":"I/O 22: Android Developer Story: eBay gets a 4.7 Google Play rating","content":"Matthew Mossman, Android engineer for eBay, shares how he and his team optimized the eBay app for large screens and discusses the impact they saw in their customer’s engagement and experience on the tablets.","url":"https://www.youtube.com/watch?v=8gGXwOxHQjk","headerImageUrl":"https://i.ytimg.com/vi/8gGXwOxHQjk/maxresdefault.jpg","publishDate":"2022-05-10T23:00:00.000Z","type":"Video 📺","topics":["2"],"authors":[]},{"id":"101","title":"I/O 22: Tablet moments, built by you!","content":"Android developers around the world are building some amazing experiences for tablets and large screen devices. You can see how Facebook, TikTok, HBO Max, Zoom and Google Slides are all enhancing their applications.","url":"https://www.youtube.com/watch?v=IRiEcVfJJko","headerImageUrl":"https://i.ytimg.com/vi/IRiEcVfJJko/maxresdefault.jpg","publishDate":"2022-05-10T23:00:00.000Z","type":"Video 📺","topics":["2"],"authors":[]},{"id":"102","title":"I/O 22: Second Beta of Android 13","content":"The Android 13 Beta is available to test on a range of devices from Asus, Lenovo, Nokia, OnePlus, Oppo, Realme, Sharp, TECNO, Vivo, Xiaomi, and ZTE.","url":"https://android-developers.googleblog.com/2022/05/second-beta-of-android-13.html","headerImageUrl":"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjjV9RykVMNPi7wNhkdMXSTn14sT_GE3-0m7iHPi6zfEIMlLjUr9I8icC7vKh7u0bTKqpU6PKnMKGufNHfE7QJJjvwU6PcTygM0Umd0sEh3C1lYKkAxyeJfOCJblem10kjPCZWlwpUT6E-ITy1F3AglIvqQAoA6mxcHCUAmjNzXfNXw2lCOLUQvjTHj/w1200-h630-p-k-no-nu/Android13_dpp.png","publishDate":"2022-05-10T23:00:00.000Z","type":"DAC - Android version features","topics":["13"],"authors":["14"]},{"id":"103","title":"I/O 22: Developing privacy user-centric apps","content":"Keeping users in control of their privacy and safeguarding everything they do online is more important than ever, particularly when it comes to the mobile operating system.","url":"https://www.youtube.com/watch?v=opGkUl8C-HM&t","headerImageUrl":"https://i.ytimg.com/vi/opGkUl8C-HM/maxresdefault.jpg","publishDate":"2022-05-10T23:00:00.000Z","type":"Video 📺","topics":["13","11"],"authors":[]},{"id":"104","title":"I/O 22: Building the Privacy Sandbox","content":"The Privacy Sandbox initiative is an industry-wide effort to make Android and the web private. It introduces a set of privacy-preserving APIs that give both developers and entrepreneurs the tools they need to build thriving digital businesses and protect people's privacy online. Hear from a panel of Privacy Sandbox team members to hear answers to popular questions.","url":"https://www.youtube.com/watch?v=NKz5oT6kXI4&t","headerImageUrl":"https://i.ytimg.com/vi/NKz5oT6kXI4/maxresdefault.jpg","publishDate":"2022-05-10T23:00:00.000Z","type":"Video 📺","topics":["13","11"],"authors":[]},{"id":"105","title":"I/O 22: Overview of the Privacy Sandbox on Android","content":"The Privacy Sandbox on Android is intended to fundamentally advance privacy for the ecosystem, without sacrificing key ads functionality and without putting access to free ad-supported apps at risk. Listen to an overview of the key changes and technical considerations for developers.","url":"https://www.youtube.com/watch?v=pQdzFbmlvOo","headerImageUrl":"https://i.ytimg.com/vi/pQdzFbmlvOo/maxresdefault.jpg","publishDate":"2022-05-10T23:00:00.000Z","type":"Video 📺","topics":["13","11"],"authors":[]},{"id":"106","title":"I/O 22: Best practices for running background work on Android","content":"Learn about several changes to how and when apps can run tasks in the background. Discover why the changes were made and some best practices for developers to run work in the background.","url":"https://www.youtube.com/watch?v=t1_8WSEguDY","headerImageUrl":"https://i.ytimg.com/vi/t1_8WSEguDY/maxresdefault.jpg","publishDate":"2022-05-10T23:00:00.000Z","type":"Video 📺","topics":["13","7"],"authors":[]},{"id":"107","title":"I/O 22: What’s new in Android machine learning","content":"Learn about the latest APIs and early access programs for machine learning (ML) on Android.","url":"https://www.youtube.com/watch?v=tG6hiQNMLmE","headerImageUrl":"https://i.ytimg.com/vi/tG6hiQNMLmE/maxresdefault.jpg","publishDate":"2022-05-10T23:00:00.000Z","type":"Video 📺","topics":["13"],"authors":[]},{"id":"108","title":"I/O 22: What’s new in Android Camera","content":"A camera is one of the top reasons consumers purchase phones and devices. Explore the latest in Android Camera and upcoming launches. Learn best practices when using Android Camera and how to bring delightful experiences to users.","url":"https://www.youtube.com/watch?v=n8mubjwEVxQ","headerImageUrl":"https://i.ytimg.com/vi/n8mubjwEVxQ/maxresdefault.jpg","publishDate":"2022-05-10T23:00:00.000Z","type":"Video 📺","topics":["18"],"authors":[]},{"id":"109","title":"I/O 22: What’s new in Android media","content":"Get a high level overview of everything that's new in Android media, including media features and changes in Android 12+, as well as new features in ExoPlayer and the Jetpack media libraries. Hear about key announcements in Spatial audio, HDR video, video transcoding, editing APIs, AV1 decode, and Performance Class 13.","url":"https://www.youtube.com/watch?v=Ba70zmFZgk0","headerImageUrl":"https://i.ytimg.com/vi/Ba70zmFZgk0/maxresdefault.jpg","publishDate":"2022-05-10T23:00:00.000Z","type":"Video 📺","topics":["18"],"authors":[]},{"id":"110","title":"I/O 22: Workshop: How to optimize media streaming with ExoPlayer\n","content":"This workshop guides you through using the new Jetpack Media3 APIs to build a simple media app using ExoPlayer for progressive and adaptive streaming playback. Learn about the advantages of using ExoPlayer and the features it offers.","url":"https://www.youtube.com/watch?v=Hw0Jeq42FNU","headerImageUrl":"https://i.ytimg.com/vi/Hw0Jeq42FNU/maxresdefault.jpg","publishDate":"2022-05-10T23:00:00.000Z","type":"Video 📺","topics":["18"],"authors":[]},{"id":"111","title":"I/O 22: What’s new in Accessibility for developers\n","content":"Making applications accessible ensures equal access to roughly one billion people in the world with disabilities, and it can also benefit people without disabilities by providing a better user experience in general. Learn about new developments in Android Studio, a new API that improves the video consuming experience, and advancements in Jetpack Compose that can help you build more accessible apps.","url":"https://www.youtube.com/watch?v=6LsaP6oKxMY","headerImageUrl":"https://i.ytimg.com/vi/6LsaP6oKxMY/maxresdefault.jpg","publishDate":"2022-05-10T23:00:00.000Z","type":"Video 📺","topics":["14"],"authors":[]},{"id":"112","title":"I/O 22: What's new in app performance","content":"Users expect apps to launch quickly and scroll smoothly, even on low-end devices. That's why performance enhancements should be available on devices with older versions of Android. Learn how to write, maintain, and monitor apps that perform to users' high standards.","url":"https://www.youtube.com/watch?v=DYdHLqLVspY","headerImageUrl":"https://i.ytimg.com/vi/DYdHLqLVspY/maxresdefault.jpg","publishDate":"2022-05-10T23:00:00.000Z","type":"Video 📺","topics":["7"],"authors":[]},{"id":"113","title":"I/O 22: Introducing Google Wallet and developer API features","content":"Learn more about how to use the Google Wallet APIs to digitize tickets, loyalty cards, and much more. Discover the new Android SDK and additional developer tools to simplify your integration.","url":"https://www.youtube.com/watch?v=2gTCghy-dU4","headerImageUrl":"https://i.ytimg.com/vi/2gTCghy-dU4/maxresdefault.jpg","publishDate":"2022-05-10T23:00:00.000Z","type":"Video 📺","topics":["8"],"authors":[]},{"id":"114","title":"I/O 22: Android solutions for seamless sign-in across devices","content":"Discover Android solutions that enable seamless and secure login experiences so users can enjoy your app across devices.","url":"https://www.youtube.com/watch?v=xghjqgj4peA","headerImageUrl":"https://i.ytimg.com/vi/xghjqgj4peA/maxresdefault.jpg","publishDate":"2022-05-10T23:00:00.000Z","type":"Video 📺","topics":["13"],"authors":[]},{"id":"115","title":"I/O 22: Build power, multi-device experiences\n","content":"Developers play a critical role in Google's multi-device ecosystem. Hear about new tools available to you so that you can build your own powerful, multi-device experiences that span platforms and form factors. Learn about Cast, BlockStore, and the new abstraction layer D2DI.","url":"https://www.youtube.com/watch?v=H6UxTnghkMw","headerImageUrl":"https://i.ytimg.com/vi/H6UxTnghkMw/maxresdefault.jpg","publishDate":"2022-05-10T23:00:00.000Z","type":"Video 📺","topics":["13"],"authors":[]},{"id":"116","title":"I/O 22: Announcing Compose for Wear OS Beta!","content":"Today we’re launching the Beta release of Compose for Wear OS, our modern declarative UI toolkit designed to help developers create beautiful user experiences for Wear OS.","url":"https://android-developers.googleblog.com/2022/05/announcing-compose-for-wear-os-beta.html","headerImageUrl":"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhrfM5DyOkb4yfuiuJEOelmS5x4sTioxYCRPdnoSI1h64j-xWkWq9Wk0mZ61ljUw_tkO7NXxKsDUb5TbYMHLxLxhcY24rzNnnDhjzFOOClkM_WH--2bTLJFq93HODS7PHebGl00oluu0Sg5p0MTeNAfusLgHvorSxTDS26YwnQXkTJsDq2HJC36m7Jl/w1200-h630-p-k-no-nu/image4.png","publishDate":"2022-05-10T23:00:00.000Z","type":"Article 📚","topics":["19","3","8","13"],"authors":["75"]},{"id":"117","title":"I/O 22: Introducing Health Connect","content":"Introducint Health Connect, a new API for Android app developers to securely access user health dataAs Android developers, connecting and sharing health and fitness data between apps can help you provide more meaningful experiences and insights for your users","url":"https://android-developers.googleblog.com/2022/05/introducing-health-connect.html","headerImageUrl":"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioB9TK2fLuYAv8nIzhQMGsmSQJFhcWTsEl4ZUkR1XXbEkmR4JR3ZBP2N3YLYU143Lo02Qsx3iXE2VBobBBDJ0fr9V_2_epxOtnDLRA9S2XpkUdAWO-OyBejhkrf53wv4sIqnaqmjRB8iu8XzeFhCgM00gxgln1M-ipVeww9WG5bduNTBcpxRpASMha/w1200-h630-p-k-no-nu/231491533__37260715__148018.png","publishDate":"2022-05-11T23:00:00.000Z","type":"Article 📚","topics":["8"],"authors":[]},{"id":"118","title":"I/O 22: What’s new with Google TV & Android TV OS","content":"Since last year’s I/O, we’ve continued our commitment to enable you to build better and more engaging experiences on Android TV OS. In addition to platform updates, new features, like expanded integrations with the Live tab, offer opportunities for users to better engage with your content.","url":"https://android-developers.googleblog.com/2022/05/whats-new-with-google-tv-android-tv-os.html","headerImageUrl":"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgkqwL9j8jLb9ItKoISX9Yo0d3r_IdPdNMje6cca3obZpFDuNmmfKsL6Qj-E3agkDK7E312kuVjVLw3Ez2dF-vVj9UeRSUUPuOuc2T3T9d-HqEaZ6g76NQXEvqwIik0rAqFRZPiE6NH2PfgFmaDDQh6hb81HRgQrzmWGT6WJyuyK-yxnrrCfV4YHYnh/w1200-h630-p-k-no-nu/Android_WhatsNewInAndroidTVGoogleTV_1024x512.png","publishDate":"2022-05-11T23:00:00.000Z","type":"Article 📚","topics":["16","13"],"authors":["27"]},{"id":"119","title":"I/O 22: What’s new with Android for Cars","content":"We’re excited to share some of our combined accomplishments from this past year, and introduce new updates that will make it easier for you to provide users with an even better experience in the car.","url":"https://android-developers.googleblog.com/2022/05/whats-new-with-android-for-cars.html","headerImageUrl":"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgNnogZQP4IGFjoSw7QWt1vr7MphwOi1OtRAAfCAVaNDTdnD5_CAaKhsf11nzxS_XrQ3ERet5yhpK7bs0e5YXdarv6o8iuzNYRqJ25fZrRL8TPfyBGpADg3oOrGM364foSvEdNhSTqDOF_2_TTBkRq-rElETpNAC6pOIHioH7ug3s8z8iJ_f3vWL5pTuQ/w1200-h630-p-k-no-nu/Android-whats-new-with-android-for-cars-io22-social%20%281%29.png","publishDate":"2022-05-11T23:00:00.000Z","type":"Article 📚","topics":["15"],"authors":[]},{"id":"120","title":"I/O 22: What's new in Google Play","content":"At this year’s Google I/O, we focused on three major ways we can help you continue growing your business on Google Play: Privacy and security initiatives ; Tools to help you improve your app quality; New ways to help you acquire users and engage with existing ones","url":"https://android-developers.googleblog.com/2022/05/whats-new-in-google-play.html","headerImageUrl":"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiugYmi_1-WFvfxVe8BJ5GCiZjAp1R_B42dvrxu-fHkL1WkswlvjZpAVImVJIJdgzEERdFyzF9QzNZYPmoAJDEe2lfwdOnpSr2zHiQy0od18YP2ozVpC_fR7WQUpeB9kJyqTLx7udivLZn1w3trWfVeT4ejl8e9bZqVJfUyH05k0SgODQpYsUb4Junn/w1200-h630-p-k-no-nu/Play-new-google-play-io-01.png","publishDate":"2022-05-10T23:00:00.000Z","type":"Article 📚","topics":["12","8","11"],"authors":[]},{"id":"121","title":"I/O 22: New Google Play SDK Index","content":"New Google Play SDK Index helps you choose the right SDKs for your app. Helping developers, like you, make informed decisions about SDKs is part of keeping Google Play a safe, trusted space for billions of people.","url":"https://android-developers.googleblog.com/2022/05/new-google-play-sdk-index.html","headerImageUrl":"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjEBzXvqydpodashPiKchgLE9NA6WXVUYbTFBuooFn8_XwK6E4cMEbM7hyiTRPZ-H3pwTvyHY8143pGB5zgUt_zgUuzsjAIkRSQsngYBd4_dusLSXF94j6KZ0r1UiZC3vQFrabOw9vXdA0Wzcm3SDm_LvlCFdxW67-FplcMJLpZYLQ02I2EUrvORXHl/w1200-h630-p-k-no-nu/Play-new-google-play-sdk-index-social-V2.png","publishDate":"2022-05-10T23:00:00.000Z","type":"Article 📚","topics":["12"],"authors":["87"]},{"id":"122","title":"I/O 22: How to integrate Android widgets with Google Assistant","content":"Explore intermediate-level concepts for integrating Android widgets with Google Assistant. Provide quick answers and interactive app experiences on Assistant enabled surfaces like Android and Android Auto to their users.","url":"https://www.youtube.com/watch?v=6vXZcg9g_Mo","headerImageUrl":"https://i.ytimg.com/vi/6vXZcg9g_Mo/maxresdefault.jpg","publishDate":"2022-05-10T23:00:00.000Z","type":"Video 📺","topics":["2"],"authors":[]},{"id":"123","title":"I/O 22: Integrate Google Assistant into Android for cars","content":"Learn how to integrate voice into apps built for Android Auto. Learn to add voice to Widgets for Auto, and explore some of the other voice-first features coming to the platform.","url":"https://www.youtube.com/watch?v=hhdVMLG5Y10","headerImageUrl":"https://i.ytimg.com/vi/hhdVMLG5Y10/maxresdefault.jpg","publishDate":"2022-05-10T23:00:00.000Z","type":"Video 📺","topics":["2","15"],"authors":[]},{"id":"124","title":"I/O 22: ADB Podcast Episode 185 : Play Store🎙","content":"In this episode Tor, Chet, and Romain chat with Jon and Andrew from the Play team about the Play Store app, which recently went through a major refactoring.","url":"https://adbackstage.libsyn.com/episode-185-play-store","headerImageUrl":"http://assets.libsyn.com/show/332855?height=250&width=250&overlay=true","publishDate":"2022-05-17T23:00:00.000Z","type":"Podcast 🎙","topics":["12"],"authors":[]},{"id":"125","title":"Android Basics with Compose","content":"We released the first two units of Android Basics with Compose, our first free course that teaches Android Development with Jetpack Compose to anyone; you do not need any prior programming experience other than basic computer literacy to get started. ","url":"https://android-developers.googleblog.com/2022/05/new-android-basics-with-compose-course.html","headerImageUrl":"https://developer.android.com/images/hero-assets/android-basics-compose.svg","publishDate":"2022-05-04T23:00:00.000Z","type":"Codelab","topics":["2","3","10"],"authors":["25"]},{"id":"126","title":"Android 13 Beta 1","content":"Beta 1 includes the latest updates to photo picker, themed app icons, improved localization and language support, and the new notification permission which requires apps targeting Android 13 to request the notification permission from the user before posting notifications. Check out the beta by visiting the Android 13 developer site.","url":"https://android-developers.googleblog.com/2022/04/android-13-beta-1-blog.html","headerImageUrl":"https://developer.android.com/about/versions/13/images/android-13-hero_1440.png","publishDate":"2022-05-04T23:00:00.000Z","type":"DAC - Android version features","topics":["13"],"authors":["14"]},{"id":"127","title":"Architecture: Entities - MAD Skills","content":"In this episode, Garima from GoDaddy Studio talks about entities and more specifically how creating separate entities per layer per project leads to clean and scalable model architecture.","url":"https://www.youtube.com/watch?v=cfak1jDKM_4","headerImageUrl":"https://i3.ytimg.com/vi/cfak1jDKM_4/maxresdefault.jpg","publishDate":"2022-05-04T23:00:00.000Z","type":"Video 📺","topics":["4"],"authors":[]},{"id":"128","title":"Architecture: Live Q&A - MAD Skills","content":"Manuel , Yigit , TJ , and Milosz hosted a very special Architecture Q&A and answered questions from the community. Find out the answers to: “Is LiveData deprecated?”, “MVVM or MVI for Compose”, “Should we use flow in DataSources” and more.","url":"https://www.youtube.com/watch?v=_2BtE1P6MPE","headerImageUrl":"https://i3.ytimg.com/vi/_2BtE1P6MPE/maxresdefault.jpg","publishDate":"2022-05-04T23:00:00.000Z","type":"Video 📺","topics":["4"],"authors":["23","34","38"]},{"id":"129","title":"MAD Skills: Architecture","content":"To wrap up the Architecture Android MAD skills series, \nManuel wrote a blog post summarizing each episode of the series! Check it out to get caught up on all things Android Architecture.","url":"https://android-developers.googleblog.com/2022/04/architecture-mad-skills-series-wrap-up.html","headerImageUrl":"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjwpLUhIDR7IVIgPnCayAMbm0cYAC0ktSWLT9_vWJ1au0oZK_0un_IlXfu4HixEtc4G_AOi4BkWATw6BsyFCTPtCiu2wSvnfL3OVqWVNdblp6neIuFh9N3KH02SYDBgr6hIpAU7A9KjX9mT3oFJI6uuasaYqqMg_GZgptg0aooIqLywmeTp_PrpTAOj/s1600/1_J2NKRQ4qedvMVWoxL_4ZLA.jpeg","publishDate":"2022-05-04T23:00:00.000Z","type":"Article 📚","topics":["4"],"authors":["23"]},{"id":"130","title":"The first developer preview of Privacy Sandbox on Android","content":"Privacy Sandbox is a program to help you conduct initial testing of the proposed APIs and evaluate how you might adopt them for your solutions. The Developer Preview provides additional platform APIs and services on top of the Android 13 Developer Beta release, SDK, system images, Preview APIs, API reference, and support references. See the release notes for more details on what’s included in the release.","url":"https://android-developers.googleblog.com/2022/04/first-preview-privacy-sandbox-android.html","headerImageUrl":"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEimeEtKqNjaaRY2oxecefVbcytzULjln30fNMxfJQfWOu6Tqy9XYQKAVkwLTeGRiPh50RBIxyA6HD86_Qm_Vpiit7eEO1ZmeZttgdsH187-cL8YE-w6NOvqYDwcn-MzIPmk0yiJy-4_kbsZ4_k3CngfP36F-U5g-PQmunzFpPAHuWtBNCsHcbP80flJ/s1600/Android_PrivacySandboxonAndroidDeveloper_4209x1253.png","publishDate":"2022-05-04T23:00:00.000Z","type":"DAC - Android version features","topics":["11","13"],"authors":["77"]},{"id":"131","title":"Expanding Play’s Target Level API Requirements 🎯","content":"Starting on November 1, 2022, apps that don’t target an API level within two years of the latest major Android release version will not be available on Google Play to new users with devices running Android OS versions newer than your app’s target API level. For example, as of this November, existing apps need to target at least API level 30, Android 11, to be available to new users on Android 12 and 13 devices.","url":"https://android-developers.googleblog.com/2022/04/expanding-plays-target-level-api-requirements-to-strengthen-user-security.html","headerImageUrl":"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifh6osWctzfS76FGmd91DArGexlVFw7BNh0ZCqgSuU5aO1AU2pt2T554nkpGy8AzeY_oIOY-TWc0YsS_DwMR9yp3aV_TSrgh7-XPNAg8jSDe_8ySG4ae6D6OqVUMzPmwEoPDXvEhA09um5qahSO1cfSjWIk03bq7vUVDvDHnvt-EubXLKw_Dz2uoUI/s1600/Android-New-policy-update-to-strengthen-Google-Play-social.png","publishDate":"2022-04-13T23:00:00.000Z","type":"DAC - Android version features","topics":["12"],"authors":["10"]},{"id":"132","title":"Google Play PolicyBytes - April 2022 policy updates","content":"Users who have previously installed your app from Google Play will continue to be able to discover, re-install, and use your app, even if they move to a new Android device. App updates still also need to target an API level within a year of the latest major Android release version. Expanding our target level API requirements will protect users from installing older apps that may not have the privacy and security protections in place that newer Android releases offer.","url":"https://www.youtube.com/watch?v=O0UwUF2DgQc","headerImageUrl":"https://i3.ytimg.com/vi/O0UwUF2DgQc/maxresdefault.jpg","publishDate":"2022-04-13T23:00:00.000Z","type":"Video 📺","topics":["12"],"authors":[]},{"id":"133","title":"Upgrading Android Attestation: Remote Provisioning 🔐","content":"Attestation for device integrity has been mandated since Android 8.0, and is used in a variety of services such as SafetyNet. Android 12 added the option of Remote Key Provisioning for device manufacturers, and it will be mandated in Android 13. If you’re leveraging attestation in your app, watch out for a longer certificate chain structure, a new root of trust, the deprecation of RSA attestation, and short-lived certificates/attestation keys.","url":"https://android-developers.googleblog.com/2022/03/upgrading-android-attestation-remote.html","headerImageUrl":"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhXGH6tNkY1UkXgIQluciMoaSR9hZNKAoKcRyv_UxyHbEuPRvTVfWT4A_3BQEb_HCMUALR5bScXZsIEzHiRJwrFgm9fhouknFkP5H5ngCUtdf7uiGpTuCOm5dF5rtDrjR5Vm0r9NNU4J7lzN3k0sdMQumgan-NPp2nPSgXypTqj-yqn6BBS9URGrh1F/s1600/Android-KeyAttestation-Header.png","publishDate":"2022-04-13T23:00:00.000Z","type":"DAC - Android version features","topics":["13"],"authors":[]},{"id":"134","title":"Architecture: Handling UI events - MAD Skills","content":"With this episode of MAD skills we continue with our architecture series of videos. In this video you'll learn about UI events. Developer Relations Engineer Manuel Vivo covers the different types of UI events, the best practices for handling them, and more!","url":"https://www.youtube.com/watch?v=lwGtp0Yr0PE","headerImageUrl":"https://i3.ytimg.com/vi/lwGtp0Yr0PE/maxresdefault.jpg","publishDate":"2022-04-13T23:00:00.000Z","type":"Video 📺","topics":["4"],"authors":["23"]},{"id":"135","title":"Architecture: The Domain Layer - MAD Skills","content":"In this episode of MAD skills you'll learn about the Domain Layer - an optional layer which sits between the UI and Data layers. Developer Relations Engineer Don Turner will explain how the domain layer can simplify your app architecture, making it easier to understand and test.","url":"https://www.youtube.com/watch?v=gIhjCh3U88I","headerImageUrl":"https://i3.ytimg.com/vi/gIhjCh3U88I/maxresdefault.jpg","publishDate":"2022-04-13T23:00:00.000Z","type":"Video 📺","topics":["4"],"authors":["42"]},{"id":"136","title":"Architecture: Organizing modules - MAD Skills","content":"In this episode of Architecture for Modern Android Development Skills, Emily Kager shares a tip around organizing modules in Android apps.","url":"https://www.youtube.com/watch?v=HB_r9wn49Gc","headerImageUrl":"https://i3.ytimg.com/vi/HB_r9wn49Gc/maxresdefault.jpg","publishDate":"2022-04-13T23:00:00.000Z","type":"Video 📺","topics":["4"],"authors":[]},{"id":"137","title":"App Excellence: Android Architecture","content":"How do you build a successful app? Our advice: think like a building architect. If you need help getting started, we have the perfect blueprint for success when building on Android. Check out our updated guide to Android App Architecture, and build something that your users will love.","url":"https://www.youtube.com/watch?v=fodD6UHjLmw","headerImageUrl":"https://i3.ytimg.com/vi/fodD6UHjLmw/maxresdefault.jpg","publishDate":"2022-04-13T23:00:00.000Z","type":"Video 📺","topics":["4"],"authors":[]},{"id":"138","title":"Accessibility on TV - Integrate with Android TV & Google TV","content":"Thinking about accessibility is critical when developing a quality app on Android TV OS. Ian will be covering the most common issues, the solution to these issues, and some more complex scenarios. ","url":"https://www.youtube.com/watch?v=GyglHvJ6LMY","headerImageUrl":"https://i3.ytimg.com/vi/GyglHvJ6LMY/maxresdefault.jpg","publishDate":"2022-04-13T23:00:00.000Z","type":"Video 📺","topics":["16","14"],"authors":[]},{"id":"139","title":"Google Play Billing - Integrate with Android TV & Google TV","content":"In this episode of Integrate with Android TV & Google TV, Thomas will discuss how you can monetize your Android TV app using Google Play Billing. ","url":"https://www.youtube.com/watch?v=gb55CjH7NHY","headerImageUrl":"https://i3.ytimg.com/vi/gb55CjH7NHY/maxresdefault.jpg","publishDate":"2022-04-13T23:00:00.000Z","type":"Video 📺","topics":["16"],"authors":[]},{"id":"140","title":"Android for Cars 🚗","content":"Android for cars has introduced media recommendations powered by Google Assistant, a progress bar for long form content, and per-item content styles to allow browsable/playable items to be individually assigned to a list or grid. Head on over to the developer documentation to learn about all of these changes.","url":"https://developer.android.com/cars","headerImageUrl":"https://developers.google.com/cars/design/images/designforcars_1920.png","publishDate":"2022-04-13T23:00:00.000Z","type":"Docs 📑","topics":["16"],"authors":[]},{"id":"141","title":"Google Play Academy🎓 - Go Global: Japan\n","content":"With over 2 billion active Android devices globally, more and more developers are looking for new markets to expand. If you’re looking to succeed in Japan, one of the largest mobile app and gaming markets, these courses will cover strategies to make your content relevant across development, marketing and growth, and monetization.","url":"https://www.youtube.com/watch?v=hY1HH-9efkg","headerImageUrl":"https://i3.ytimg.com/vi/hY1HH-9efkg/maxresdefault.jpg","publishDate":"2022-04-13T23:00:00.000Z","type":"Video 📺","topics":["12"],"authors":[]},{"id":"142","title":"Google Play Academy🎓 - Go Global: Southeast Asia","content":"With over 2 billion active Android devices globally, more and more developers are looking for new markets to expand. If you’re looking to succeed in Southeast Asia, a fast-growing market that spends as much as 1.5x more time on the mobile internet than any other region, these courses will cover strategies to make your content relevant across development, marketing and growth, and monetization.","url":"https://www.youtube.com/watch?v=j9VRzvDhTO0","headerImageUrl":"https://i3.ytimg.com/vi/j9VRzvDhTO0/maxresdefault.jpg","publishDate":"2022-04-13T23:00:00.000Z","type":"Video 📺","topics":["12"],"authors":[]},{"id":"143","title":"Google Play Academy🎓 - Design for All Users","content":"Learn how to optimize for onboarding, build accessible apps, and reduce app size to reach more users.","url":"https://www.youtube.com/watch?v=07NUULjEJ5A","headerImageUrl":"https://i3.ytimg.com/vi/07NUULjEJ5A/maxresdefault.jpg","publishDate":"2022-04-13T23:00:00.000Z","type":"Video 📺","topics":["12"],"authors":[]},{"id":"144","title":"Game development 🎮","content":"We covered how to help you monitor your game’s stability using Android vitals on Google Play Console, how to best optimize your game to improve your customer engagement during the month of Ramadan, and announced that the Indie Games Accelerator & Indie Games Festival 2022 from Google Play is coming soon, offering a way to get notified when submissions open.","url":"https://www.youtube.com/watch?v=m2gTnT2kCRQ","headerImageUrl":"https://i3.ytimg.com/vi/m2gTnT2kCRQ/maxresdefault.jpg","publishDate":"2022-04-13T23:00:00.000Z","type":"Video 📺","topics":["17"],"authors":[]},{"id":"145","title":"Migrating Architecture Blueprints to Jetpack Compose","content":"Manuel wrote about how and why we’ve Migrated our Architecture Blueprints to Jetpack Compose, and some issues we faced in doing so.","url":"https://medium.com/androiddevelopers/migrating-architecture-blueprints-to-jetpack-compose-8ffa6615ede3","headerImageUrl":"https://miro.medium.com/max/1400/1*J2NKRQ4qedvMVWoxL_4ZLA.jpeg","publishDate":"2022-04-13T23:00:00.000Z","type":"Article 📚","topics":["4","3"],"authors":["23"]},{"id":"146","title":"The curious case of FLAG_ACTIVITY_LAUNCH_ADJACENT","content":"Pietro wrote about how to enable split screen use cases using the Android 7.0 FLAG_ACTIVITY_LAUNCH_ADJACENT flag to open your Activity in a new adjacent window on Android 12L. (and some supported Android 11+ devices)","url":"https://medium.com/androiddevelopers/the-curious-case-of-flag-activity-launch-adjacent-f1212f37a8e0","headerImageUrl":"https://miro.medium.com/max/1400/1*YWg6uZkqSakAb5vW6uc-gg.png","publishDate":"2022-04-13T23:00:00.000Z","type":"Article 📚","topics":["2"],"authors":["12"]},{"id":"147","title":"AndroidX releases 🚀","content":"AppCompat AppCompat-Resources Version 1.5.0-alpha01 contains a bunch of bugfixes, as well as updated nullability to match Android 13 DP2 and a few small compatibility features involving TextView, AppCompatDialog, SearchView, and SwitchCompat.\n\nNavigation Version 2.4.2 has been released with all the new bugfixes backported from the 2.5 alpha releases.","url":"https://developer.android.com/jetpack/androidx/versions/all-channel","headerImageUrl":"https://blogger.googleusercontent.com/img/a/AVvXsEhxtjouMCgk8sv8wkvC5Aip4muxMo4TLnfSVtZ3Hw7ZpuqXQmk-EkV9qk9PKim0yVFVFlpjEJG-vqh6gCLFkQPuf2dQk6qEdQZM_9brvuxBA0dtOUlvUh7tMIQsF11RnSnSPWOPKDIzeiixfapL2ax4YgMahJppgG_a5rjs_4QBjzzgzqsDs9Wc-Ldx=w1200-h630-p-k-no-nu","publishDate":"2022-04-13T23:00:00.000Z","type":"Jetpack release 🚀","topics":["8"],"authors":[]},{"id":"148","title":"ADB Podcast Episodes🎙184: Skia and AGSL - Shaders of Things to Come","content":"In this episode Tor, Chet, and Romain chat with Derek and Brian from the Skia team about Skia (the graphics layer that backs the Android Canvas APIs), pixel shaders, and the new “AGSL” API that lets you provide pixel shaders for advanced graphics effects, which was recently added as part of the Android T preview release. If you’re interested in graphics technology, this is the episode for you.","url":"https://adbackstage.libsyn.com/episode-184-skia-and-agsl-shaders-of-things-to-come","headerImageUrl":"https://ssl-static.libsyn.com/p/assets/9/4/d/b/94dbe077f2f14ee640be95ea3302a6a1/ADB184_Skia_and_AGSL.png","publishDate":"2022-04-13T23:00:00.000Z","type":"Podcast 🎙","topics":["2","8"],"authors":["32","30","31"]},{"id":"149","title":"Android 13 DP 2 😍","content":"Recently we shared Android 13 Developer Preview 2 with more new features and changes for you to try in your apps! Some notable features include Developer downgradable permissions which allows your app to protect user privacy by downgrading previously granted runtime permissions, and Bluetooth LE Audio which helps users receive high fidelity audio without sacrificing battery life; it can also seamlessly switch between different use cases that were not possible with Bluetooth Classic. Check out all the new features in the post!","url":"https://android-developers.googleblog.com/2022/03/second-preview-android-13.html","headerImageUrl":"https://blogger.googleusercontent.com/img/a/AVvXsEjnrShXcFkBmErmhgdmx82vJbaKBIxU6p2Yz2Vr1V7AlFkD2tGwRmx_a7tWcInPmiUh8VpPmEEqXut-EjP23lFYG9wiMO4sKBDEwbZ3MNppZOy_HW54OXO4SkdQVH08cWdi7QnTMMwGELFoPq_r7_cyaGU8fx2InJG2R-NfkqF1IRt7rKOfA8M1GhUy","publishDate":"2022-03-29T23:00:00.000Z","type":"DAC - Android version features","topics":["13"],"authors":["14"]},{"id":"150","title":"Architecture: The data layer - MAD Skills","content":"Jose goes over the data layer and its two components: repositories and data sources. You will dive deeper into what the roles of these two are and understand their differences. You will also learn about data immutability, error handling, threading testing and more!","url":"https://www.youtube.com/watch?v=r5AseKQh2ZE","headerImageUrl":"https://i3.ytimg.com/vi/r5AseKQh2ZE/maxresdefault.jpg","publishDate":"2022-03-29T23:00:00.000Z","type":"Video 📺","topics":["4"],"authors":[]},{"id":"151","title":"Architecture: The UI layer - MAD Skills","content":"TJ covers the UI layer in this episode of MAD skills using the JetNews sample app as a case study You will learn UI Layer pipeline, UI state exposure, UI state consumption and more!","url":"https://www.youtube.com/watch?v=p9VR8KbmzEE","headerImageUrl":"https://i3.ytimg.com/vi/p9VR8KbmzEE/maxresdefault.jpg","publishDate":"2022-03-29T23:00:00.000Z","type":"Video 📺","topics":["4"],"authors":["38"]},{"id":"152","title":"Account Linking - Integrate with Android TV & Google TV","content":"Miguel and Adekunle discuss account linking. ​​Google Account Linking lets you safely link a user’s Google Account with their account on your platform, granting Google applications and devices access to your services and is needed for many integrations on Android TV & Google TV. They discuss the basics of OAuth like implementing your authorization, token exchange, and revocation endpoints. You will also learn the difference between the Web OAuth, Streamlined, and App Flip linking flows.","url":"https://www.youtube.com/watch?v=-Fa99hpUsdk","headerImageUrl":"https://i3.ytimg.com/vi/-Fa99hpUsdk/maxresdefault.jpg","publishDate":"2022-03-29T23:00:00.000Z","type":"Video 📺","topics":["16"],"authors":[]},{"id":"153","title":"Modern media playback on Android - Integrate with Android TV & Google TV","content":"Paul explores best practices for integrating and validating media sessions, the unified way for Android apps to interact with media content. MediaSessions allows different devices like smart speakers, watches, peripherals and accessories to surface and interact with playback and content metadata.","url":"https://www.youtube.com/watch?v=OYy41ceW59s","headerImageUrl":"https://i3.ytimg.com/vi/OYy41ceW59s/maxresdefault.jpg","publishDate":"2022-03-29T23:00:00.000Z","type":"Video 📺","topics":["16"],"authors":["27"]},{"id":"154","title":"FHIR SDK for Android Developers 🏥","content":"Community health workers in low-and-middle-income countries use mobile devices as critical tools for doing community outreach and providing crucial health services. Unfortunately, the lack of data interoperability means that patient records are fragmented and caregivers may only receive incomplete information. Last year, Google introduced a collaboration with the World Health Organization to build an open source software developer kit designed to help developers build mobile solutions using the Fast Healthcare Interoperability Resources (FHIR) global standard for healthcare data. Read the article to learn more about how this SDK can help you create apps to aid community health workers in low-and-middle-income countries.","url":"https://medium.com/androiddevelopers/our-fhir-sdk-for-android-developers-9f8455e0b42f","headerImageUrl":"https://miro.medium.com/max/1400/1*azSHuKma0fz1RxcPcqiusg.png","publishDate":"2022-03-29T23:00:00.000Z","type":"Article 📚","topics":["1"],"authors":[]},{"id":"155","title":"Helping Users Discover Quality Apps on Large Screens 🔎","content":"Adoption of large screens is growing rapidly and now there are over 250M active Android tablets, foldables, and ChromeOS devices. To help people get the most from their devices, we’re making three big changes in Google Play to enable users to discover and engage with high quality apps and games: ranking and promotability changes, alerts for low quality apps, and device-specific ratings and reviews. Read all about it in the post!","url":"https://android-developers.googleblog.com/2022/03/helping-users-discover-quality-apps-on.html","headerImageUrl":"https://blogger.googleusercontent.com/img/a/AVvXsEiWXMaly6_CP_gSHmxE92yVBXUQ1X5EcTA6pdKwo_NsAtO1Ouv_RhHxG1HqtbStufdnylV51VbHI0FmmPV8lvmLAOqNzhcD2znU3vWVajQXfOlFw_kP-01jxSvrzVIXZG7SCQMiw58yUaWgmqzO-dsaso5DOeYVKnwQm3Vdu9lFmogfCkQT5u7H0sVt","publishDate":"2022-03-29T23:00:00.000Z","type":"Docs 📑","topics":["2"],"authors":["61"]},{"id":"156","title":"Access Android vitals data through the new Play Developer Reporting API","content":"In this article Lauren talks about Android vitals which are a great way to track how your app is performing in Google Play Console. Now there are new use cases for Android vitals which include building internal dashboards, joining with other datasets for deeper analysis and automation troubleshooting and releases. Learn more about the API and how to use it in this post!","url":"https://android-developers.googleblog.com/2022/03/play-developer-reporting-API.html","headerImageUrl":"https://blogger.googleusercontent.com/img/a/AVvXsEhnvMF36lJv9wDDHWLQb7AfVBajueyEuocw_9ne1jgKJAO5dgXWcAyrKa92f4miTcFoSH5usz_Jha2C1gJwJNSr6et8sZGSCnkZTgtdaKPemEfwaHJDjiurWaPtqFF3qI0aX7aRB7B9WUW1VXT_Wgkyyq8nYK7RrOy9zW4a7gROkzd3H5m9T36Bc7Ww","publishDate":"2022-03-29T23:00:00.000Z","type":"Docs 📑","topics":["12"],"authors":[]},{"id":"157","title":"Using performance class to optimize your user experience","content":"The Jetpack Core Performance library in alpha has launched! This library enables you to easily identify what a device is capable of, and tailor your user experience accordingly. As developer, this means you can reliably group devices with the same level of performance and tailor your app’s behavior to those different groups. This enables you to deliver an optimal experience to users with both more and less capable devices.","url":"https://android-developers.googleblog.com/2022/03/using-performance-class-to-optimize.html","headerImageUrl":"https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjYa28aPEBLCSzLkir02bVSWusH5BBIiAcq_CzCx5DD3iQu5WyDLC1sZe1y5OInomon5KHJKemMCa5q6XAtfkMhljMoePuebLGDz6yRDU3cjkwMo7sV5WKe20KNzWhP1ktdOn7OxOxeiXqzeDrPwLcpoVaStm8840phqHOqDptiQ0twMsGTD2u3o0Xf/s1600/Android-using-performance-class-to-optimize-user-experience-header%20%281%29.png","publishDate":"2022-03-29T23:00:00.000Z","type":"Docs 📑","topics":["7"],"authors":["42"]},{"id":"158","title":"AndroidX releases 🚀","content":"We have a few libraries in alpha-01 including Activity Version 1.6.0-alpha01, CustomView-Poolingcontainer Version 1.0.0-alpha01, and Junit-Gtest Version 1.0.0-alpha01.\n\nCar App Version 1.2.0-rc01 and Mediarouter Version 1.3.0-rc01 are also in rc-01.","url":"https://developer.android.com/jetpack/androidx/versions/all-channel","headerImageUrl":"https://blogger.googleusercontent.com/img/a/AVvXsEi6y_NUo9gnpHYdRc7lwnbVnraBtUSIZTnIoAcHXkbq8Z0AFHBUHDI_s7HwwP2h2nTwo571RnRuXN-sUWdgJ7qkNb2MSslYiXWP3tteXooTdwAS_YzbZMTux25eLZk0kgdLtXmWTRLdolft-ZcsgGjCyJnH-CjzHsZXGy8vNVxB5oFZkBExOpBwvoDL=w1200-h630-p-k-no-nu","publishDate":"2022-03-29T23:00:00.000Z","type":"Jetpack release 🚀","topics":["8"],"authors":[]},{"id":"159","title":"Discontinuing Kotlin synthetics for views","content":"Synthetic properties to access views were created as a way to eliminate the common boilerplate of findViewById calls. These synthetics are provided by JetBrains in the Kotlin Android Extensions Gradle plugin (not to be confused with Android KTX).","url":"https://android-developers.googleblog.com/2022/02/discontinuing-kotlin-synthetics-for-views.html","headerImageUrl":"https://blogger.googleusercontent.com/img/a/AVvXsEhAba1fyHq6ddgUfT09YxU3XkAhnolKyLnXE2GmcJABVT-y8PWLKUiC7LmesY7Txak65fc6nW8T7yar9_4Uz4ezcBA_MDZ-yqBR2cj4ipSN-5l_E57exa3m9qt2MHFo_RdLWc_YDX7J7AOMkyzs43ylbGtwl6Z8GSf1zgs71Te36cQ-9Z_qgMgFroLq=w1200-h630-p-k-no-nu","publishDate":"2022-02-18T00:00:00.000Z","type":"Article 📚","topics":["2","10"],"authors":["1"]},{"id":"160","title":"Things to know from the 2022 Google for Games Developer Summit","content":"This week marked the 2022 Google for Games Developer Summit, Google’s biggest event of the year centered around game development. The Android team shared information around the next generation of services, tools and features to help you develop and deliver high quality games. ","url":"https://android-developers.googleblog.com/2022/03/GGDS-recap-blog.html","headerImageUrl":"https://blogger.googleusercontent.com/img/a/AVvXsEhW4RL-UKUurgM2bVJRepqjKehVETjf9bqdXllyspPaWTTt8s86MGvfxlxLkDyJAnnkGr7vDpDTPx6bQbgkThYXMSaW1GQvXw9V57xybA8Y89vIE45JDElGxSNFHwOAndATPYrGmc200fkyBTRSNi7w53hTbS1ao-TSoEBFs8jvTgz6ud5Tcb1qitkt","publishDate":"2022-03-15T00:00:00.000Z","type":"Article 📚","topics":["17"],"authors":["2"]},{"id":"161","title":"MAD Skills: DataStore and Introduction to Architecture💡","content":"Now that our MAD Skills series on Jetpack DataStore is complete, let’s do a quick wrap up of all the things we’ve covered in each episode.","url":"https://android-developers.googleblog.com/2022/03/jetpack-datastore-wrap-up.html","headerImageUrl":"https://blogger.googleusercontent.com/img/a/AVvXsEgo2-I1LhMjWd1zzpIQXzjMCPoZeUZc35n43UosKDuLMyP7rIDe8cGfs23tmkSAed6Wxw9EoNTIpvvWCljermK_lCu0etlrCnONx3WeXMCGe-s8I45hYhuVo6w_Q2UTNATMTA70t2o9MS5p2pBdPFz5Ye4b2ajOJjNlW9rELtqWcEW4O1Rkzy4lfqRO","publishDate":"2022-03-14T00:00:00.000Z","type":"Article 📚","topics":["9"],"authors":["3"]},{"id":"162","title":"Play Time with Jetpack Compose","content":"Learn about Google Play Store’s strategy for adopting Jetpack Compose, how they overcame specific performance challenges, and improved developer productivity and happiness.","url":"https://android-developers.googleblog.com/2022/03/play-time-with-jetpack-compose.html","headerImageUrl":"https://developer.android.com/images/social/android-developers.png","publishDate":"2022-03-10T00:00:00.000Z","type":"Article 📚","topics":["3","12"],"authors":["4","5"]},{"id":"163","title":"App Excellence Summit 2022 ⭐","content":"Did you know that 54% of users who left a 1-star review in the Play Store mentioned app stability and bugs? *\n\nTo help product managers and business decision makers understand how high quality app experiences drive business growth and what tools they can use to make sound business and technical decisions, we are hosting our first Android App Excellence Summit in just a few weeks!","url":"https://android-developers.googleblog.com/2022/03/app-excellence-summit-2022.html","headerImageUrl":"https://blogger.googleusercontent.com/img/a/AVvXsEh4Vck7mqle-tLweEgrIc1WT0ycY6O6zBxv9mC1Dt1xCnJN5COTGFxDSQlIM1rbbMKIMZHPtjzXgENMGk80oxb5Mn8kTn6qO7kgUXC_N5YSB0dWxcXvQOIPHEEgNJze9g8eZrY1xgA9_oBls71NLItDJKTYeoJGEXxIBiAE_c6SkXv2jSELZEoFfqVq","publishDate":"2022-03-10T00:00:00.000Z","type":"Event 📆","topics":["1"],"authors":[]},{"id":"164","title":"#TheAndroidShow: Tablets, Jetpack Compose, and Android 13 📹","content":"Last week, Florina and Huyen hosted #TheAndroidShow, where we went Behind the scenes with animations & Jetpack Compose, asked whether now is the moment to think tablet first, and covered Android 13 along with other key themes for Android this year.","url":"https://www.youtube.com/watch?v=WL9h46CymlU","headerImageUrl":"https://i.ytimg.com/vi/WL9h46CymlU/maxresdefault.jpg","publishDate":"2022-03-09T00:00:00.000Z","type":"Video 📺","topics":["3","2","13","1"],"authors":["6"]},{"id":"165","title":"Freeing up 60% of storage for apps 💾","content":"App archiving will allow users to reclaim ~60% of app storage temporarily by removing parts of the app rather than uninstalling the app completely.","url":"https://android-developers.googleblog.com/2022/03/freeing-up-60-of-storage-for-apps.html","headerImageUrl":"https://developer.android.com/images/social/android-developers.png","publishDate":"2022-03-08T00:00:00.000Z","type":"Article 📚","topics":["9"],"authors":["7","8"]},{"id":"166","title":"Demystifying Jetpack Glance for app widgets","content":"We recently announced the first Alpha version of Glance, initially with support for AppWidgets and now for Tiles for Wear OS. This new framework is built on top of the Jetpack Compose runtime and designed to make it faster and easier to build “glanceables” such as app widgets without having to handle a lot of boilerplate code or lifecycle events to connect different components.","url":"https://medium.com/androiddevelopers/demystifying-jetpack-glance-for-app-widgets-8fbc7041955c","headerImageUrl":"https://miro.medium.com/max/1400/1*mlswR3fyxaIG-C1OUifYVw.jpeg","publishDate":"2022-03-07T00:00:00.000Z","type":"Article 📚","topics":["2","19"],"authors":["9"]},{"id":"167","title":"Keeping Google Play safe with our key 2022 initiatives 🔒","content":"We shared information about what’s ahead in 2022 for Google Play’s privacy and safety initiatives to give you time to prepare.","url":"https://android-developers.googleblog.com/2022/03/privacy-and-security-direction.html","headerImageUrl":"https://blogger.googleusercontent.com/img/a/AVvXsEhh3FMLL-etD7iDzhSI6CoYbuwgB9ZADjXa6A9C4aM3W-eRqj1FGfP8dyMY4i5RlMtQJD8Sx1y1NHFuaCae10iZkAs_cETaCAllzCDU075awpkAc1pkhld7uxwjTmwNdihGhB-FtySiSsf9aknd1ZULz0zkRtybX4gRUp8JCbPh2n3pPEhjK0mTjNWS","publishDate":"2022-03-03T00:00:00.000Z","type":"Article 📚","topics":["11"],"authors":["10"]},{"id":"168","title":"Games-Activity Version 1.1.0","content":"adds WindowInsets listening/querying for notch and IME response along with key and motion event filters.","url":"https://developer.android.com/jetpack/androidx/releases/games#1.1.0","headerImageUrl":"https://developer.android.com/images/social/android-developers.png","publishDate":"2022-02-23T00:00:00.000Z","type":"Jetpack release 🚀","topics":["17"],"authors":[]},{"id":"169","title":"Room Version 2.5.0-alpha01","content":"Converted room-common, room-migration, and paging related files in room-runtime from Java to Kotlin along with a new API for multi-process lock to protect multi-process 1st time database creation and migrations","url":"https://developer.android.com/jetpack/androidx/releases/room#2.5.0-alpha01","headerImageUrl":"https://developer.android.com/images/social/android-developers.png","publishDate":"2022-02-23T00:00:00.000Z","type":"Jetpack release 🚀","topics":["9"],"authors":[]},{"id":"170","title":"Media Version 1.6.0-alpha 01","content":"Adds the extras necessary to setup a signin/settings page using CarAppLibrary.","url":"https://developer.android.com/jetpack/androidx/releases/media#media-1.6.0-alpha01","headerImageUrl":"https://blogger.googleusercontent.com/img/a/AVvXsEjo_CL5arSn2zb_YKP8hKjaMG3nqXXPQ_zn05X9FQ0XLdE2Ii6WeGG0eD_miObCRv2iz3hJ2T0lIIn3iDFyT3yN8B7NFET_fE5nhcw6MHQmOKK4G4R5XgXTkEIyqY4kjz2F5hpPscvQgsz0aRkVqSLynp-6x9HqkoldNYwDSp7kbttmh2JCW1cwUXhG=w1200-h630-p-k-no-nu","publishDate":"2022-02-23T00:00:00.000Z","type":"Jetpack release 🚀","topics":["18"],"authors":[]},{"id":"171","title":"AppCompat-Resources Version 1.6.0-alpha01","content":"Adds support for customizing locales, providing backwards compatibility for the Android 13 per-language preferences API","url":"https://developer.android.com/jetpack/androidx/releases/appcompat#1.6.0-alpha01","headerImageUrl":"https://blogger.googleusercontent.com/img/a/AVvXsEhxsx2mynFgTjtKCAxJiWvIYuJF1sNFfRCPnEbBWSmQLATP_Z6Bmz81sr9WmS2CWVUqIzW4uYyRyW2wQSLR73i9WXLUzGc-LbMS-QEcQQZI5qoymfRf3pyrMnOeGuFAKsfLaAEtquvNyqA2KaO28BnF3plt0jr6kVYIyl0tkpWhxHa47CPuNvhEehQ1=w1200-h630-p-k-no-nu","publishDate":"2022-02-23T00:00:00.000Z","type":"Jetpack release 🚀","topics":["2"],"authors":[]},{"id":"172","title":"Recording Video with CameraX VideoCapture API","content":"A picture is worth a thousand words, and CameraX ImageCapture has already made it much easier to tell your story through still images on Android. Now with the new VideoCapture API, CameraX can help you create thousands of continuous pictures to tell an even better and more engaging story!","url":"https://medium.com/androiddevelopers/recording-video-with-camerax-videocapture-api-a36cfd8a48c8","headerImageUrl":"https://miro.medium.com/max/1400/1*GZmhCFMCrG4L_mOtwSb0zA.png","publishDate":"2022-02-23T00:00:00.000Z","type":"Article 📚","topics":["18"],"authors":["11"]},{"id":"173","title":"Unbundling the stable WindowManager","content":"The 1.0.0 stable release of Jetpack WindowManager, the foundation for great experiences on all types of large screen devices.","url":"https://medium.com/androiddevelopers/unbundling-the-stable-windowmanager-a5471ff2907","headerImageUrl":"https://miro.medium.com/max/1400/0*dIXjHF8_-47CvYTb.png","publishDate":"2022-02-17T00:00:00.000Z","type":"Article 📚","topics":["2"],"authors":["12"]},{"id":"174","title":"Jetpack Compose 1.1 is now stable!","content":"Last week we released version 1.1 of Jetpack Compose and Florina Muntenescu wrote an article giving us all the information! This release contains new features like improved focus handling, touch target sizing, ImageVector caching and support for Android 12 stretch overscroll. This also means that previously experimental APIs are now stable. Check out our recently updated samples, codelabs, and the Accompanist library!","url":"https://android-developers.googleblog.com/2022/02/jetpack-compose-11-now-stable.html","headerImageUrl":"https://blogger.googleusercontent.com/img/a/AVvXsEiEIiQOoFF-f-sDcbYOMINZw5-2R9aQjrREfiXFMGsRYODVfaz1sgdCS2C3UjgeJjCII5oyE4y97kbvQIUsl9wIx8RqTSZPSdIoCywW89lvmAJ5a15bkFOwoR9UacCEUb4CjOMy0omVMfC0CQhUfz9VMTZR4iyjDGagEZfNuMid8BT0lvarns9Tp6PC","publishDate":"2022-02-09T00:00:00.000Z","type":"Jetpack release 🚀","topics":["2"],"authors":["6"]},{"id":"175","title":"MAD Skills: DataStore","content":"The DataStore MAD Skills series rolls on! In the sixth episode, Simona Stojanovic covered DataStore: Best Practices part 2 covering DataStore-to-DataStore migration. This is used when you make significant changes to your dataset like renaming your data model values or changing their type. ","url":"https://medium.com/androiddevelopers/datastore-and-data-migration-fdca806eb1aa","headerImageUrl":"https://miro.medium.com/max/1400/0*8wsdb7Z7QxT1d4lM","publishDate":"2022-02-15T00:00:00.000Z","type":"Article 📚","topics":["9"],"authors":["3"]},{"id":"176","title":"DataStore and Testing","content":"For the final part of the DataStore series, Simona covered DataStore and testing and teaches you how to fully test your DataStore.","url":"https://medium.com/androiddevelopers/datastore-and-testing-edf7ae8df3d8","headerImageUrl":"https://miro.medium.com/max/1400/1*5_yt1M6_QEMN0OgGU8VaZw.png","publishDate":"2022-02-16T00:00:00.000Z","type":"Article 📚","topics":["9"],"authors":["3"]},{"id":"177","title":"Material You: Coming to more Android Devices near you","content":"Material You will soon be available on more Android 12 phones globally including devices by Samsung, Oppo, OnePlus and more! Material You has made the Android experience more fluid and personal than ever. Our OEM partners continue to work with us to ensure that key design APIs work consistently across the Android ecosystem so developers can benefit from a cohesive experience.","url":"https://android-developers.googleblog.com/2022/02/material-you-coming-to-more-android.html","headerImageUrl":"https://blogger.googleusercontent.com/img/a/AVvXsEhDOIPFoqZ8uvg7VmH5EuY3ocfxvKZXawUQ9NczUCEtOdpw3v42vSTrpUSvHjbph5KmTlDH-XtnmGeXmCFTMaHDnRS9ibzLUHBip_XnVHUL7xv-3UrVL6plimErj_oK_KyW5ULpmj6orVTaTq9r56K0V3npQFdIrBPE7_caRWb_QA5E9FljpREWVB7Y","publishDate":"2022-02-10T00:00:00.000Z","type":"Article 📚","topics":["2","13"],"authors":["13"]},{"id":"178","title":"The first developer preview of Android 13","content":"We’re sharing a first look at the next release of Android, with the Android 13 Developer Preview 1. With Android 13 we’re continuing some important themes: privacy and security, as well as developer productivity. We’ll also build on some of the newer updates we made in 12L to help you take advantage of the 250+ million large screen Android devices currently running.","url":"https://android-developers.googleblog.com/2022/02/first-preview-android-13.html","headerImageUrl":"https://blogger.googleusercontent.com/img/a/AVvXsEjnrShXcFkBmErmhgdmx82vJbaKBIxU6p2Yz2Vr1V7AlFkD2tGwRmx_a7tWcInPmiUh8VpPmEEqXut-EjP23lFYG9wiMO4sKBDEwbZ3MNppZOy_HW54OXO4SkdQVH08cWdi7QnTMMwGELFoPq_r7_cyaGU8fx2InJG2R-NfkqF1IRt7rKOfA8M1GhUy","publishDate":"2022-02-10T00:00:00.000Z","type":"Article 📚","topics":["13"],"authors":["14"]},{"id":"179","title":"AndroidX releases 🚀","content":"Since Compose just went stable, the Animation, Compiler, Foundation, Material, Runtime and UI Versions also went stable! Games-Text-Input and ProfileInstaller also went stable! \n\nThere are a bunch of new APIs in alpha including new Testing APIs (Test Runner, Test Monitor, Test Services and Test Orchestrator), Metrics Version and Startup Version.","url":"https://developer.android.com/jetpack/androidx/versions/all-channel#february_9_2022","headerImageUrl":"https://miro.medium.com/max/1400/0*bux1xKYcB3A9pBFx","publishDate":"2022-02-09T00:00:00.000Z","type":"Docs 📑","topics":["3","8"],"authors":["15"]},{"id":"180","title":"DataStore best practices part 1","content":"learn about performing synchronous work and how to make it work with Kotlin data class serialization and Hilt.","url":"https://www.youtube.com/watch?v=S10ci36lBJ4","headerImageUrl":"https://i.ytimg.com/vi/S10ci36lBJ4/maxresdefault.jpg","publishDate":"2022-02-07T00:00:00.000Z","type":"Video 📺","topics":["9"],"authors":["3"]},{"id":"181","title":"All about Proto DataStore","content":"In this post, we will learn about Proto DataStore, one of two DataStore implementations. We will discuss how to create it, read and write data and how to handle exceptions, to better understand the scenarios that make Proto a great choice.","url":"https://medium.com/androiddevelopers/all-about-proto-datastore-1b1af6cd2879","headerImageUrl":"https://miro.medium.com/max/1400/1*UtNu7pmbt3WEA213SW9p9Q.png","publishDate":"2022-01-31T00:00:00.000Z","type":"Article 📚","topics":["9"],"authors":["3"]},{"id":"182","title":"Glance: Tiles for Wear OS made simple ⌚️","content":"Last year we announced the Wear Tiles API. To complement that Java API, we are excited to announce that support for Wear OS Tiles has been added to Glance, a new framework built on top of Jetpack Compose designed to make it easier to build for surfaces outside your Android app. As this library is in alpha, we’d love to get your feedback.","url":"https://android-developers.googleblog.com/2022/01/announcing-glance-tiles-for-wear-os.html","headerImageUrl":"https://developer.android.com/images/social/android-developers.png","publishDate":"2022-01-26T00:00:00.000Z","type":"Article 📚","topics":["19"],"authors":["16"]},{"id":"183","title":"Android Studio Bumblebee 🐝 stable","content":"Android Studio Bumblebee (2021.1.1) is now stable. We’ve since patched it to address some launch issues — so make sure to upgrade! It improves functionality across the typical developer workflow: Build and Deploy, Profiling and Inspection, and Design.","url":"https://android-developers.googleblog.com/2022/01/android-studio-bumblebee-202111-stable.html","headerImageUrl":"https://blogger.googleusercontent.com/img/a/AVvXsEhQ7R2ySipHb8y5jNJeiIj3pE8dZfWAV7EF0wQZ4rQ65lB4MsZroAT4R_7rSfznMZ30xBMLx9_dwnt05V6I0Du0EfI7mvLicK6LwdkuZsF_Gc3sPqrZGxkojTJpHCXFI3Kvr3bLyoSjElldtt1NUpGSBzHgG3O1pvS9BR02L9R2_FYTUgPLfUoNLWYQ","publishDate":"2022-01-25T00:00:00.000Z","type":"Article 📚","topics":["5"],"authors":["17"]},{"id":"184","title":"All about Preferences DataStore","content":"In this post, we will take a look at Preferences DataStore, one of two DataStore implementations. We will go over how to create it, read and write data, and how to handle exceptions, all of which should, hopefully, provide you with enough information to decide if it’s the right choice for your app.","url":"https://medium.com/androiddevelopers/all-about-preferences-datastore-cc7995679334","headerImageUrl":"https://miro.medium.com/max/1400/1*UtNu7pmbt3WEA213SW9p9Q.png","publishDate":"2022-01-24T00:00:00.000Z","type":"Article 📚","topics":["9"],"authors":["3"]},{"id":"185","title":"Building apps for Android Automotive OS 🚘","content":"The Car App Library version 1.2 is already in beta, enabling app developers to start building their navigation, parking, and charging apps for Android Automotive OS. Now, developers can begin building and testing apps for these categories using the Automotive OS emulator across both Android Automotive OS and Android Auto.","url":"https://android-developers.googleblog.com/2022/01/building-apps-for-android-automotive-os.html","headerImageUrl":"https://blogger.googleusercontent.com/img/a/AVvXsEicCVDoRaflBAdKr9_Zh2cAGUB8pphAj9m0w1iN7VLizNZ6L2iNGNSnt7tvD6MP72BW8eqobZpU751t32aF47bpNDv2walZ6zzsXxyuAjCyhBl0b4o06X1j3bPi0AAU0EedqYjp5FSXMQHHzvxBedjsST3MIIFvalX3tZpgiFZgEdqbB2f_H741Irrb=w1200-h630-p-k-no-nu","publishDate":"2022-01-27T00:00:00.000Z","type":"Article 📚","topics":["15"],"authors":["18"]},{"id":"186","title":"Navigation 2.4 is stable ","content":"It’s been rewritten in Kotlin, with two pane integration, Navigation routes + Kotlin DSL improvements, Navigation Compose’s first stable release, and multiple back stack support.","url":"https://developer.android.com/jetpack/androidx/releases/navigation#2.4.0","headerImageUrl":"https://blogger.googleusercontent.com/img/a/AVvXsEhsJgTKhUlIb-1X_G1rWQLCxpd0KMmGTUgqUfSNr4__CsxxjiOdJgJHCtgO9dG8mZdwzAHat9HyIcMsvA-fS0o6T0-_ut_Ej74hKfn09AJUPNc3YscwfGG6hqFS-W_oTczgtd1aGNzpCdDDo4b4lrUM3n8OsFKjvslqE6pHRY3w0aZSTHsaYytSnQSA=w1200-h630-p-k-no-nu","publishDate":"2022-01-26T00:00:00.000Z","type":"Jetpack release 🚀","topics":["2"],"authors":[]},{"id":"187","title":"Google Maps with Jetpack Compose","content":"A project which contains Jetpack Compose components for the Google Maps SDK for Android.\n\n","url":"https://github.com/googlemaps/android-maps-compose","headerImageUrl":"https://opengraph.githubassets.com/0952eadfbb07f5ce9f631fd0312d87e8f0e2557df01bac3b587311ca864cf836/googlemaps/android-maps-compose","publishDate":"2022-02-11T00:00:00.000Z","type":"Jetpack release 🚀","topics":["3"],"authors":[]},{"id":"188","title":"Improving App Performance with Baseline Profiles","content":"In this blog post we’ll discuss Baseline Profiles and how they improve app and library performance, including startup time by up to 40%. While this blogpost focuses on startup, baseline profiles also significantly improve jank as well.","url":"https://android-developers.googleblog.com/2022/01/improving-app-performance-with-baseline.html","headerImageUrl":"https://developer.android.com/images/social/android-developers.png","publishDate":"2022-01-28T00:00:00.000Z","type":"Article 📚","topics":["7"],"authors":["19","20","21"]},{"id":"189","title":"Smule Adopts Google’s Oboe to Improve Recording Quality & Completion Rates","content":"As the most downloaded singing app of all time, Smule Inc. has been investing on Android to improve the overall audio quality and, more specifically, to reduce latency, i.e. allowing singers to hear their voices in the headset as they perform. The teams specialized in Audio and Video allocated a significant part of 2021 into making the necessary changes to convert the Smule application used by over ten million Android users from using the OpenSL audio API to the Oboe audio library, enabling roughly a 10%+ increase in recording completion rate.","url":"https://android-developers.googleblog.com/2022/02/smule-adopts-googles-oboe-to-improve.html","headerImageUrl":"https://developer.android.com/images/social/android-developers.png","publishDate":"2022-02-02T00:00:00.000Z","type":"Article 📚","topics":["18"],"authors":[]},{"id":"190","title":"Guide to background work","content":"Do you use coroutines or WorkManager for background work? The team updated the guide to background work to help you choose which library is best for your use case. It depends on whether or not the work is persistent, and if it needs to run immediately, it’s long running, or deferrable.","url":"https://developer.android.com/guide/background","headerImageUrl":"https://developer.android.com/images/social/android-developers.png","publishDate":"2022-02-11T00:00:00.000Z","type":"Docs 📑","topics":["4"],"authors":[]},{"id":"191","title":"Accessibility best practices","content":"If you work on Android TV, you should be aware of the accessibility best practices that the team created. It provides recommendations for both native and non-native apps. Get to know why accessibility is important for your TV app, how to evaluate your apps when TalkBack is used, how to adopt system caption settings, and more!","url":"https://developer.android.com/training/tv/accessibility","headerImageUrl":"https://developer.android.com/images/social/android-developers.png","publishDate":"2022-02-11T00:00:00.000Z","type":"Docs 📑","topics":["16","14"],"authors":[]},{"id":"192","title":"TalkBack - the Google screen reader","content":"Next up in the Accessibility series is TalkBack, the Google screen reader! In this video, learn what TalkBack is, how to set it up, how to navigate through your app with it, and how you can use it to improve the Accessibility of your app.","url":"https://www.youtube.com/watch?v=_1yRVwhEv5I","headerImageUrl":"https://i.ytimg.com/vi/_1yRVwhEv5I/maxresdefault.jpg","publishDate":"2022-01-21T00:00:00.000Z","type":"Video 📺","topics":["14"],"authors":[]},{"id":"193","title":"ADB Podcast 182: Large screens are a big deal","content":"Clara, Florina and Daniel join your usual hosts to talk about large screens, what they are and what they mean for app developers. You will also learn about the resources at your disposal to build high quality experiences on large screen devices: from samples and guidance to canonical layouts and new APIs such as window size classes. Disclaimer: Florina is very excited about this, don’t miss the epic Large screens! Large screens! Large screens! intro!","url":"https://adbackstage.libsyn.com/episode-182-large-screens-are-a-big-deal","headerImageUrl":"http://assets.libsyn.com/show/332855?height=250&width=250&overlay=true","publishDate":"2022-02-01T00:00:00.000Z","type":"Podcast 🎙","topics":["2"],"authors":[]},{"id":"194","title":"Jetpack Alpha for Glance Widgets 🔍","content":"We made the first release of Jetpack Glance available, a new framework designed to make it faster and easier to build app widgets for the home screen and other surfaces. Glance offers similar modern, declarative Kotlin APIs that you are used to with Jetpack Compose, helping you build beautiful, responsive app widgets with way less code. Glance provides a base-set of its own Composables to help build “glanceable” experiences — starting today with app widget components but with more coming. Using the Jetpack Compose runtime, Glance translates these Composables into RemoteViews that can be displayed in an app widget","url":"https://android-developers.googleblog.com/2021/12/announcing-jetpack-glance-alpha-for-app.html","headerImageUrl":"https://blogger.googleusercontent.com/img/a/AVvXsEgol-A5cMCZY79MH5v0axcekWIVJ--ymPUe0U5Q4BLsC0BA1LTbWIlZ76XWi2cHjxHVu-kbpv0o2QJWBjNAda_93Ah7AW_PcAgz9o082cd6zyTJZAM8HjQnrZ69A6CaKQaCFuf2LLi4p6xRvS_WUn9tVA2K2wmV3_qB6JDKnFNhO3Guvn5tPc_SuoaY","publishDate":"2021-12-15T00:00:00.000Z","type":"Article 📚","topics":["8"],"authors":["9"]},{"id":"195","title":"Jetpack Watch Face Library ⌚","content":"We launched the Jetpack Watch Face library written from the ground up in Kotlin, including all functionality from the Wearable Support Library along with many new features such as: Watch face styling which persists across both the watch and phone (with no need for your own database or companion app); Support for a WYSIWYG watch face configuration UI on the phone; Smaller, separate libraries (that only include what you need); Battery improvements through promoting good battery usage patterns out of the box, such as automatically reducing the interactive frame rate when the battery is low; New screenshot APIs so users can see previews of their watch face changes in real time on both the watch and phone.\n\nIf you are still using the Wearable Support Library, we strongly encourage migrating to the new Jetpack libraries to take advantage of the new APIs and upcoming features and bug fixes.","url":"https://android-developers.googleblog.com/2021/12/develop-watch-faces-with-stable-jetpack.html","headerImageUrl":"https://1.bp.blogspot.com/-P4S1eEhqouE/YaaFy_bGD1I/AAAAAAAARNA/-w5O05Mppo8pe0hoeMC1yDNRWiX_mnTOgCLcBGAsYHQ/s0/image1.png","publishDate":"2021-12-01T00:00:00.000Z","type":"Article 📚","topics":["19","3","8"],"authors":["22"]},{"id":"196","title":"Rebuilding our Guide to App Architecture 📐","content":"We launched a revamped guide to app architecture which includes best practices. As Android apps grow in size, it’s important to design the code with an architecture in place that allows the app to scale, improves quality and robustness, and makes testing easier. The guide contains pages for UI, domain, and data layers including deep dives into more complex topics, such as how to handle UI events. We also have a learning pathway to walk you through it.","url":"https://android-developers.googleblog.com/2021/12/rebuilding-our-guide-to-app-architecture.html","headerImageUrl":"https://blogger.googleusercontent.com/img/a/AVvXsEgnJ0CCtKClhEOE_BDOoWiXGr2eA6LWjn-RPvFjFx8Va97f_1_xCmpF3uI_bUILoQPqJUDlXUbIRVPjvi3oCiFtRVZlcAAkHBa1cJlufG5OvmeovQeiHgH9bLhxREufi-fw7FnxIcmxGmzWuW0DmYUZolsM6rywTSZIm3KtI6yx9jSIeRpuYzRZubke","publishDate":"2021-12-14T00:00:00.000Z","type":"Article 📚","topics":["4"],"authors":["23"]},{"id":"197","title":"Google Play Games on PC Beta 🎮","content":"We announced that we’re opening sign-ups for Google Play Games on PC as a beta in Korea, Taiwan, and Hong Kong, allowing users participating in the beta to play a catalog of Google Play games on their PC via a standalone application built by Google. The developer site has a form to express interest, along with information about bringing your Android game to PCs. It involves many of the same updates that you do to optimize your game for Chrome OS devices, such as support for Mouse and Keyboard controls.","url":"https://developers.googleblog.com/2022/01/googleplaygames.html","headerImageUrl":"https://blogger.googleusercontent.com/img/a/AVvXsEgsNv-PVLNLlX2SYd2p5DwTN2Jxwb54Rc7Ekbm0LgcFuwHBrF_5Y-DiUblL9oTjmeJ1Y44nPRMMkH5K-xlC0OApgUGxqBpUcfuV1LYPVvKsI67BKTpc_gNhaHsNda6Q1Uk1UvTznmMydqNHtXSqTgSJbjpQCoTGZM_ZLXlkGwMoBFfnMQkAIdl2zjsC","publishDate":"2022-01-19T00:00:00.000Z","type":"Article 📚","topics":["17"],"authors":["24"]},{"id":"198","title":"MAD Skills: Gradle 🐘","content":"Murat covered building custom plugins in more depth, including the Artifact API in addition to the Variant API covered previously. It demonstrates building a plugin which automatically updates the version code specified in the app manifest with the git version. With the AGP 7.0 release, you can use these APIs to control build inputs, read, modify, or even replace intermediate and final artifacts.","url":"https://medium.com/androiddevelopers/gradle-and-agp-build-apis-taking-your-plugin-to-the-next-step-95e7bd1cd4c9","headerImageUrl":"https://miro.medium.com/max/1400/0*WkRft2aAKv19MoIm.jpeg","publishDate":"2021-12-01T00:00:00.000Z","type":"Article 📚","topics":["5"],"authors":["25"]},{"id":"199","title":"Gradle and AGP Build APIs: Community tip - MAD Skills","content":"On this episode of Gradle and AGP Build APIs for MAD Skills, Alex Saveau walks you through manipulating Android build artifacts with the Android Gradle Plugin (AGP) and Gradle APIs.","url":"https://www.youtube.com/watch?v=8SFfffaB0CU","headerImageUrl":"https://i3.ytimg.com/vi/8SFfffaB0CU/maxresdefault.jpg","publishDate":"2021-12-15T00:00:00.000Z","type":"Video 📺","topics":["5"],"authors":["26"]},{"id":"200","title":"Gradle and AGP Build APIs: Taking your plugin to the next step - MAD Skills","content":"On this episode of Gradle and AGP Build APIs for MAD Skills, Murat will discuss Gradle tasks, providers, properties, and basics of task inputs and outputs. Next, you will be able to take your plugin a step further and learn how to get access to various build artifacts using the new Artifact API. ","url":"https://www.youtube.com/watch?v=SB4QlngQQW0","headerImageUrl":"https://i3.ytimg.com/vi/SB4QlngQQW0/maxresdefault.jpg","publishDate":"2021-11-29T00:00:00.000Z","type":"Video 📺","topics":["5"],"authors":["25"]},{"id":"201","title":"MAD Skills Gradle and AGP build APIs Wrap Up!","content":"This wrap-up post summarizes the whole MAD Skills Gradle series","url":"https://android-developers.googleblog.com/2021/12/mad-skills-gradle-and-agp-build-apis.html","headerImageUrl":"https://blogger.googleusercontent.com/img/a/AVvXsEgo1Fw61B9qtQESKdVJzcNXOG0RzhA2k85zkDMDNidBiQY7B6uguHXQ9t9IPB9BiHS0WTB1b4fwIgeN5zEIJrmznF9pt5lu9186wvXxJ3IKfLi8Fci8LyMDbQKGYc7nnijJ9_lhrNHtRQamaF2GTSXyJq5_lQk7we3cSfSviOxhgKN9TscMJaGgdMZJ","publishDate":"2021-12-16T00:00:00.000Z","type":"Article 📚","topics":["5"],"authors":["25"]},{"id":"202","title":"MAD Skills: DataStore 🗄️","content":"Simona began MAD Skills: DataStore. DataStore is a thread-safe, non-blocking library in Android Jetpack that provides a safe and consistent way to store small amounts of data, such as preferences or application state, replacing SharedPreferences. It provides an implementation that stores typed objects backed by protocol buffers (Proto DataStore) and an implementation that stores key-value pairs (Preferences DataStore).","url":"https://www.youtube.com/watch?v=9ws-cJzlJkU","headerImageUrl":"https://i3.ytimg.com/vi/9ws-cJzlJkU/maxresdefault.jpg","publishDate":"2022-01-18T00:00:00.000Z","type":"Video 📺","topics":["9"],"authors":["3"]},{"id":"203","title":"AndroidX releases 🚀","content":"Since the last Now in Android episode, a lot of libraries were promoted to stable! Compose ConstraintLayout brings support for ConstraintLayout syntax to Compose. We also released CoordinatorLayout 1.2, Car App 1.1.0, Room 2.4.0, Sqlite 2.2.0, Collection 1.2.0, and Wear Watchface 1.0.0.\n\nOur first alpha of Jetpack Compose 1.2 was released, along with alphas for Glance 1.0.0, Core-Ktx 1.8.0, WorkManager 2.8.0, Mediarouter 1.3.0, Emoji2 1.1.0, Annotation 1.4.0, Core-RemoteViews, Core-Peformance, and more.","url":"https://developer.android.com/jetpack/androidx/versions/all-channel#december_1_2021","headerImageUrl":"https://developer.android.com/images/social/android-developers.png","publishDate":"2021-12-01T00:00:00.000Z","type":"Docs 📑","topics":["8"],"authors":[]},{"id":"204","title":"Jetnews for every screen","content":"Alex wrote about the recent updates to Jetnews that improves its behavior across big and small mobile devices. It describes our design and development process so that you can learn our philosophy and associated implementation steps for building an application optimized for all screens with Jetpack Compose, including how to build a list/detail layout.","url":"https://medium.com/androiddevelopers/jetnews-for-every-screen-4d8e7927752","headerImageUrl":"https://miro.medium.com/max/1400/1*678DlYtu4G7wFrq30FQ7Mw.png","publishDate":"2022-01-18T00:00:00.000Z","type":"Article 📚","topics":["2"],"authors":["22"]},{"id":"205","title":"Simplifying drag and drop","content":"Paul wrote about drag & drop, and how the Android Jetpack DragAndDrop library alpha makes it easier to handle data dropped into your app.","url":"https://medium.com/androiddevelopers/simplifying-drag-and-drop-3713d6ef526e","headerImageUrl":"https://miro.medium.com/max/1400/1*pUe4RBLe7FVlISDtAqeQ4Q.png","publishDate":"2021-12-15T00:00:00.000Z","type":"Article 📚","topics":["8"],"authors":["27"]},{"id":"206","title":"Accessibility series 🌐: Handling content that times out - Accessibility on Android","content":"The accessibility series continues on, beginning with an episode on how to properly implement UI elements that disappear after a set amount of time.","url":"https://www.youtube.com/watch?v=X97P6Y8WHl0","headerImageUrl":"https://i3.ytimg.com/vi/X97P6Y8WHl0/maxresdefault.jpg","publishDate":"2021-12-03T00:00:00.000Z","type":"Video 📺","topics":["14"],"authors":["28"]},{"id":"207","title":"Accessibility series 🌐: Acessibility Scanner","content":"We also cover how Accessibility Scanner can help you improve your app for all users by suggesting improvements in areas of accessibility.","url":"https://www.youtube.com/watch?v=i1gMzQv0hWU","headerImageUrl":"https://i3.ytimg.com/vi/i1gMzQv0hWU/maxresdefault.jpg","publishDate":"2021-12-10T00:00:00.000Z","type":"Video 📺","topics":["14"],"authors":["28"]},{"id":"208","title":"Accessibility series 🌐: Accessibility test framework and Espresso - Accessibility on Android","content":"We investigate how Espresso and the Accessibility Test Framework can help you create automated accessibility tests.","url":"https://www.youtube.com/watch?v=DLN2s16HwcE","headerImageUrl":"https://i3.ytimg.com/vi/DLN2s16HwcE/maxresdefault.jpg","publishDate":"2021-12-22T00:00:00.000Z","type":"Video 📺","topics":["14"],"authors":["28"]},{"id":"209","title":"Android TV & Google TV 📺","content":"Mayuri covered best practices for the Watch Next API on Android TV & Google TV, which increases engagement with your app by allowing your content to show up in the Watch Next row.","url":"https://www.youtube.com/watch?v=QFMIP5GOo70","headerImageUrl":"https://i3.ytimg.com/vi/QFMIP5GOo70/maxresdefault.jpg","publishDate":"2022-01-14T00:00:00.000Z","type":"Video 📺","topics":["16"],"authors":["29"]},{"id":"210","title":"ADB Podcast 179: Flibberty Widget","content":"In this episode, Chet and Romain talked with Nicole McWilliams and Petr Čermák from the London engineering office about their work on App Widgets and Digital Wellbeing.","url":"https://adbackstage.libsyn.com/flibberty-widget","headerImageUrl":"https://ssl-static.libsyn.com/p/assets/4/0/e/c/40ec1fb11096bffed959afa2a1bf1c87/adb-180-flibberty-widget.png","publishDate":"2021-11-30T00:00:00.000Z","type":"Podcast 🎙","topics":["13"],"authors":["30","31","32","33"]},{"id":"211","title":"ADB Podcast 180: Kotlin Magic Platform","content":"In this episode, we chat with Yigit Boyar from the Android Toolkit Team about Kotlin multi platform, while Romain provides light background music on his piano.","url":"https://adbackstage.libsyn.com/episode-180-kotlin-magic-platform","headerImageUrl":"https://ssl-static.libsyn.com/p/assets/2/6/2/5/262599d4ce76d20fa04421dee9605cbd/adb-181-kmp.png","publishDate":"2021-12-16T00:00:00.000Z","type":"Podcast 🎙","topics":["10"],"authors":["30","31","32","34"]},{"id":"212","title":"ADB Podcast 181: Architecture → Fewer bugs at the end","content":"In this episode, we chat with Yigit Boyar (again!) from the Android Toolkit Team and Manuel Vivo from the Developer Relations team about application architecture. The team has released new architecture guidance, and we talk about that guidance here, as well as how our architecture recommendations apply in the new Jetpack Compose world.","url":"https://adbackstage.libsyn.com/episode-181-architecture-fewer-bugs-at-the-end","headerImageUrl":"https://ssl-static.libsyn.com/p/assets/8/d/1/3/8d137b65f392a68c27a2322813b393ee/ADB_181_Architecture.png","publishDate":"2022-01-11T00:00:00.000Z","type":"Podcast 🎙","topics":["4"],"authors":["31","31","32","23"]},{"id":"213","title":"Android 12","content":"We released Android 12 and pushed it to the Android Open Source Project (AOSP). We introduced a new design language called Material You. We reduced the CPU time used by core system services, added performance class device capabilities, and added new features to improve performance. Users have more control of their privacy with the Privacy Dashboard and other new security and privacy features. We improved the user experience with a unified API for rich content insertion, compatible media transcoding, easier blurs and effects, AVIF image support, enhanced haptics, new camera effects/capabilities, improved native crash debugging, support for rounded screen corners, Play as you download, and Game Mode APIs.","url":"https://android-developers.googleblog.com/2021/10/android-12-is-live-in-aosp.html","headerImageUrl":"https://1.bp.blogspot.com/-mGlzRmn42Rs/YVstltyrboI/AAAAAAAAK3A/44QpoNJDeuoHhlgrRJSbk0L_ZopgFDLFACLcBGAsYHQ/s0/Android%2B12%2Blogo.png","publishDate":"2021-10-03T23:00:00.000Z","type":"DAC - Android version features","topics":["13"],"authors":["14"]},{"id":"214","title":"Compose","content":"Jetpack Compose, Android’s modern, native UI toolkit became stable and ready for you to adopt in production. It interoperates with your existing app, integrates with existing Jetpack libraries, implements Material Design with straightforward theming, supports lists with Lazy components using minimal boilerplate, and has a powerful, extensible animation system. You can learn more about working with Compose in the Compose learning path and see where we’re going in future Compose releases in the Compose roadmap.","url":"https://developer.android.com/jetpack/compose","headerImageUrl":"https://www.gstatic.com/devrel-devsite/prod/vab7ee6e3641f10848d404faa598f256587df1a361a1e70cd114230c2961b73d9/android/images/lockup.svg","publishDate":"2021-12-07T00:00:00.000Z","type":"Jetpack release 🚀","topics":["3"],"authors":[]},{"id":"215","title":"Training","content":"This year, the Android Training Team released the final four new units of Android Basics in Kotlin.","url":"https://developer.android.com/courses/android-basics-kotlin/course","headerImageUrl":"https://developer.android.com/images/hero-assets/android-basics-kotlin.svg","publishDate":"2021-12-07T00:00:00.000Z","type":"Codelab","topics":["10"],"authors":[]},{"id":"216","title":"Introduction to Kotlin and Jetpack ","content":"Learn the basics of Jetpack KTX libraries, how to simplify callbacks with coroutines and Flow, and how to use and test Room/WorkManager APIs.","url":"https://youtu.be/nw7nnlHDkHw?list=PLWz5rJ2EKKc98e0f5ZbsgB63MdjZTFgsy","headerImageUrl":"https://i3.ytimg.com/vi/nw7nnlHDkHw/maxresdefault.jpg","publishDate":"2021-12-14T00:00:00.000Z","type":"Video 📺","topics":["10","8"],"authors":["6"]},{"id":"217","title":"Introduction to Motion Layout","content":"Learn how to use MotionLayout and its design tool to create rich, animated experiences.","url":"https://www.youtube.com/watch?v=M1jE3W3_NTQ&list=PLWz5rJ2EKKc_PEOEHNBEyy6tPX1EgtUw2","headerImageUrl":"https://i3.ytimg.com/vi/M1jE3W3_NTQ/maxresdefault.jpg","publishDate":"2022-01-19T00:00:00.000Z","type":"Video 📺","topics":["10","2","8"],"authors":["35"]},{"id":"218","title":"Introduction to WorkManager","content":"Learn how to schedule critical background work with WorkManager: from basic usage, threading, custom configuration and more.","url":"https://www.youtube.com/watch?v=NtpgWjiXEfg&list=PLWz5rJ2EKKc_J88-h0PhCO_aV0HIAs9Qk","headerImageUrl":"https://i3.ytimg.com/vi/NtpgWjiXEfg/maxresdefault.jpg","publishDate":"2022-03-01T00:00:00.000Z","type":"Video 📺","topics":["8"],"authors":["36"]},{"id":"219","title":"Introduction to Navigation","content":"Learn the basics of the Navigation component, specific features of the tool and the APIs to create and navigate to destinations.","url":"https://www.youtube.com/watch?list=PLWz5rJ2EKKc9VpBMZUS9geQtc5RJ2RsUd&v=fiQiMy0HzsY&feature=emb_title","headerImageUrl":"https://i3.ytimg.com/vi/fiQiMy0HzsY/maxresdefault.jpg","publishDate":"2022-03-25T00:00:00.000Z","type":"Video 📺","topics":["8"],"authors":["31"]},{"id":"220","title":"Introduction to Performance","content":"Learn about using system tracing and sampling profiling to debug performance issues in apps.","url":"https://www.youtube.com/watch?v=_5LgIrd4O5g&list=PLWz5rJ2EKKc-xjSI-rWn9SViXivBhQUnp","headerImageUrl":"https://i3.ytimg.com/vi/_5LgIrd4O5g/maxresdefault.jpg","publishDate":"2021-07-18T23:00:00.000Z","type":"Video 📺","topics":["7"],"authors":["37"]},{"id":"221","title":"Introduction to Hilt","content":"Learn how to add and use Hilt for dependency injection in your Android app, best practices for testing with Hilt, and more advanced content.","url":"https://www.youtube.com/watch?v=mnMCgjuMJPA&list=PLWz5rJ2EKKc_9Qo-RBRYhVmME1iR4oeTK","headerImageUrl":"https://i3.ytimg.com/vi/mnMCgjuMJPA/maxresdefault.jpg","publishDate":"2021-08-22T23:00:00.000Z","type":"Video 📺","topics":["8"],"authors":["23"]},{"id":"222","title":"Paging","content":"Learn the basics of paging, from the core types to binding them to your UI elements.","url":"https://www.youtube.com/watch?v=Pw-jhS-ucYA&list=PLWz5rJ2EKKc9L-fmWJLhyXrdPi1YKmvqS","headerImageUrl":"https://i3.ytimg.com/vi/Pw-jhS-ucYA/maxresdefault.jpg","publishDate":"2021-09-26T23:00:00.000Z","type":"Video 📺","topics":["8"],"authors":["38"]},{"id":"223","title":"Introduction to Gradle and AGP Build APIs\n","content":"Learn how to configure your build, customize the build process to your needs and how to write your own plugins to extend your build even further.","url":"https://www.youtube.com/watch?v=mk0XBWenod8&list=PLWz5rJ2EKKc8fyNmwKXYvA2CqxMhXqKXX","headerImageUrl":"https://i3.ytimg.com/vi/mk0XBWenod8/maxresdefault.jpg","publishDate":"2021-11-15T00:00:00.000Z","type":"Video 📺","topics":["5","5"],"authors":["25"]},{"id":"224","title":"Google I/O","content":"At I/O we released updates in Jetpack, Compose, Android Studio tooling, Large screens, Wear OS, Testing, and more! Get caught up on all the Android videos from I/O!","url":"https://www.youtube.com/watch?v=D_mVOAXcrtc","headerImageUrl":"https://i3.ytimg.com/vi/D_mVOAXcrtc/maxresdefault.jpg","publishDate":"2021-05-17T23:00:00.000Z","type":"Video 📺","topics":["1"],"authors":[]},{"id":"225","title":"Android Dev Summit","content":"At Android Dev Summit we released updates on privacy and security, large screens, Android 12, Google Play & Games, Building across screens, Jetpack Compose, Modern Android Development and more. Check out all the videos from ADS!","url":"https://www.youtube.com/watch?v=WZgR5Yf1iq8","headerImageUrl":"https://i3.ytimg.com/vi/WZgR5Yf1iq8/maxresdefault.jpg","publishDate":"2021-10-26T23:00:00.000Z","type":"Video 📺","topics":["1"],"authors":[]},{"id":"226","title":"Conveying state for Accessibility","content":"In this episode of the Accessibility series, you can learn more about the StateDescription API, when to use stateDescription and contentDescription, and how to represent error states to the end user.","url":"https://youtu.be/JvWM2PjLJls","headerImageUrl":"https://i.ytimg.com/vi/JvWM2PjLJls/maxresdefault.jpg","publishDate":"2021-11-30T00:00:00.000Z","type":"Video 📺","topics":["2"],"authors":["39"]},{"id":"227","title":"Take your Gradle plugin to the next step","content":"This third and last episode of the Gradle MAD Skills series teaches you how to get access to various build artifacts using the new Artifact API.","url":"https://youtu.be/SB4QlngQQW0","headerImageUrl":"https://i.ytimg.com/vi/SB4QlngQQW0/maxresdefault.jpg","publishDate":"2021-11-29T00:00:00.000Z","type":"Video 📺","topics":["5"],"authors":["25"]},{"id":"228","title":"How to write a Gradle plugin","content":"In this second episode of the Gradle MAD Skills series, Murat explains how to write your own custom Gradle plugin.","url":"https://youtu.be/LPzBVtwGxlo","headerImageUrl":"https://i.ytimg.com/vi/LPzBVtwGxlo/maxresdefault.jpg","publishDate":"2021-11-22T00:00:00.000Z","type":"Video 📺","topics":["5"],"authors":["25"]},{"id":"229","title":"Convert YUV to RGB for CameraX Image Analysis","content":"Learn about a new feature in CameraX to convert YUV, the format that CameraX produces, to RGB used for image analysis capabilities available in TensorFlow Lite, for example. Read the blog post for more information about these formats and how to use the new conversion feature.","url":"https://medium.com/androiddevelopers/convert-yuv-to-rgb-for-camerax-imageanalysis-6c627f3a0292","headerImageUrl":"https://miro.medium.com/max/1400/1*cuOorbZgMbRvkSSGuDGccw.png","publishDate":"2021-11-19T00:00:00.000Z","type":"Article 📚","topics":["8","18"],"authors":["40"]},{"id":"230","title":"AppCompat, Activity, and Fragment to support multiple back stacks","content":"The 1.4.0 release of these libraries brings stable support for multiple back stacks.","url":"https://developer.android.com/jetpack/androidx/releases/appcompat#1.4.0","headerImageUrl":"https://developer.android.com/images/social/android-developers.png","publishDate":"2021-11-17T00:00:00.000Z","type":"Jetpack release 🚀","topics":["8","2"],"authors":[]},{"id":"231","title":"Emoji2 adds support for modern emojis","content":"The 1.0 stable release of Emoji2 allows you to use modern emojis in your app.","url":"https://developer.android.com/jetpack/androidx/releases/emoji2#1.0.0","headerImageUrl":"https://developer.android.com/images/social/android-developers.png","publishDate":"2021-11-17T00:00:00.000Z","type":"Jetpack release 🚀","topics":["8","2"],"authors":[]},{"id":"232","title":"Lifecycle introduces lifecycle-aware coroutine APIs","content":"The new 2.4 release of Lifecycle introduces repeatOnLifecycle and flowWithLifecycle.","url":"https://developer.android.com/jetpack/androidx/releases/lifecycle#2.4.0","headerImageUrl":"https://developer.android.com/images/social/android-developers.png","publishDate":"2021-11-17T00:00:00.000Z","type":"Jetpack release 🚀","topics":["8","4"],"authors":[]},{"id":"233","title":"Paging release brings changes to LoadState","content":"The new 3.1 release of Paging changes the behavior of LoadState.","url":"https://developer.android.com/jetpack/androidx/releases/paging#3.1.0","headerImageUrl":"https://developer.android.com/images/social/android-developers.png","publishDate":"2021-11-17T00:00:00.000Z","type":"Jetpack release 🚀","topics":["8","2"],"authors":[]},{"id":"234","title":"Wear tiles released as 1.0 stable","content":"The library that you use to build custom tiles for Wear OS devices is now stable.","url":"https://developer.android.com/jetpack/androidx/releases/wear-tiles#1.0.0","headerImageUrl":"https://developer.android.com/images/social/android-developers.png","publishDate":"2021-11-17T00:00:00.000Z","type":"Jetpack release 🚀","topics":["8","19"],"authors":[]},{"id":"235","title":"About Custom Accessibility Actions","content":"The accessibility series continues on with more information on how to create custom accessibility actions to make your apps more accessible. You can provide a custom action to the accessibility services and implement logic related to the action. For more information, check out the following episode!","url":"https://youtu.be/wWDYIGk0Kdo","headerImageUrl":"https://i.ytimg.com/vi/wWDYIGk0Kdo/maxresdefault.jpg","publishDate":"2021-11-17T00:00:00.000Z","type":"Video 📺","topics":["2"],"authors":["39"]},{"id":"236","title":"Improving App Startup: Lessons from the Facebook App","content":"Improving app startup time is not a trivial task and requires a deep understanding of things that affect it. This year, the Android team and the Facebook app team have been working together on metrics and sharing approaches to improve app startup. Read more about the findings in this blog post.","url":"https://android-developers.googleblog.com/2021/11/improving-app-startup-facebook-app.html","headerImageUrl":"https://1.bp.blogspot.com/-5VyrQpFJufM/YaVKxf_DanI/AAAAAAAALS4/ybeza_emDKoKP0gjiNkqfDS_ltwo0075ACLcBGAsYHQ/w1200-h630-p-k-no-nu/AppExcellence_Editorial_LessonsFromFBApp_4209x1253-01%2B%25281%2529%2B%25281%2529.png","publishDate":"2021-11-16T00:00:00.000Z","type":"Article 📚","topics":["7"],"authors":[]},{"id":"237","title":"Gradle series kicks off","content":"Murat introduces the Gradle series and everything you'll learn in it.","url":"https://youtu.be/mk0XBWenod8","headerImageUrl":"https://i.ytimg.com/vi/mk0XBWenod8/maxresdefault.jpg","publishDate":"2021-11-15T00:00:00.000Z","type":"Video 📺","topics":["5"],"authors":["25"]},{"id":"238","title":"Intro to Gradle and AGP","content":"In the first episode of the Gradle MAD Skills series, Murat explains how the Android build system works, and how to configure your build.","url":"https://youtu.be/GjPS4xDMmQY","headerImageUrl":"https://i.ytimg.com/vi/GjPS4xDMmQY/maxresdefault.jpg","publishDate":"2021-11-15T00:00:00.000Z","type":"Video 📺","topics":["5"],"authors":["25"]},{"id":"239","title":"ADB Podcast episode 179 Hosts 3, Guests 0","content":"Chet, Romain and Tor sit down to chat about the Android Developer Summit, and in particular all the new features arriving in Android Studio, along with a few other topics like Chet’s new jank stats library, the Android 12L release, and more.","url":"https://adbackstage.libsyn.com/episode-178-hosts-3-guests-0","headerImageUrl":"http://assets.libsyn.com/show/332855?height=250&width=250&overlay=true","publishDate":"2021-11-15T00:00:00.000Z","type":"Podcast 🎙","topics":["5","7","13"],"authors":["31"]},{"id":"240","title":"The problem with emojis and how emoji2 can help out","content":"Meghan wrote about the new emoji2 library that just became stable.","url":"https://medium.com/androiddevelopers/support-modern-emoji-99f6dea8e57f","headerImageUrl":"https://miro.medium.com/max/1400/1*yAOOlpXKKUl5nWWsPkNb7g.png","publishDate":"2021-11-12T00:00:00.000Z","type":"Article 📚","topics":["8","2"],"authors":["15"]},{"id":"241","title":"Paging Q&A","content":"In this live session, TJ and Dustin answered your questions in the usual live Q&A format.","url":"https://youtu.be/8i6vrlbIVCc","headerImageUrl":"https://i.ytimg.com/vi/8i6vrlbIVCc/maxresdefault.jpg","publishDate":"2021-11-11T00:00:00.000Z","type":"Video 📺","topics":["2"],"authors":[]},{"id":"242","title":"Thanks for helping us reach 1M YouTube Subscribers","content":"Thank you everyone for following the Now in Android series and everything the Android Developers YouTube channel has to offer. During the Android Developer Summit, our YouTube channel reached 1 million subscribers! Here’s a small video to thank you all.","url":"https://youtu.be/-fJ6poHQrjM","headerImageUrl":"https://i.ytimg.com/vi/-fJ6poHQrjM/maxresdefault.jpg","publishDate":"2021-11-09T00:00:00.000Z","type":"Video 📺","topics":["1"],"authors":[]},{"id":"243","title":"Community tip on Paging","content":"Tips for using the Paging library from the developer community","url":"https://youtu.be/r5JgIyS3t3s","headerImageUrl":"https://i.ytimg.com/vi/r5JgIyS3t3s/maxresdefault.jpg","publishDate":"2021-11-08T00:00:00.000Z","type":"Video 📺","topics":["2"],"authors":[]},{"id":"244","title":"Transformations and customisations in the Paging Library","content":"A demonstration of different operations that can be performed with Paging. Transformations like inserting separators, when to create a new pager, and customisation options for consuming PagingData.","url":"https://youtu.be/ZARz0pjm5YM","headerImageUrl":"https://i.ytimg.com/vi/ZARz0pjm5YM/maxresdefault.jpg","publishDate":"2021-11-01T00:00:00.000Z","type":"Video 📺","topics":["2"],"authors":["38"]},{"id":"245","title":"New Compose for Wear OS codelab","content":"In this codelab, you can learn how Wear OS can work with Compose, what Wear OS specific composables are available, and more!","url":"https://developer.android.com/codelabs/compose-for-wear-os","headerImageUrl":"https://developer.android.com/codelabs/compose-for-wear-os/img/4d28d16f3f514083.png","publishDate":"2021-10-27T23:00:00.000Z","type":"Codelab","topics":["3","19"],"authors":["41"]},{"id":"246","title":"Building apps which are private by design","content":"Sara N-Marandi, product manager, and Yacine Rezgui, developer relations engineer, provided guidelines and best practices on how to build apps that are private by design, covered new privacy features in Android 12 and previewed upcoming Android concepts.","url":"https://youtu.be/hBVwr2ErQCw","headerImageUrl":"https://i.ytimg.com/vi/hBVwr2ErQCw/maxresdefault.jpg","publishDate":"2021-10-26T23:00:00.000Z","type":"Video 📺","topics":["11"],"authors":[]},{"id":"247","title":"Memory Safety Tools","content":"Serban Constantinescu, product manager, talked about the Memory Safety Tools that became available starting in Android 11 and have continued to evolve in Android 12. These tools can help address memory bugs and improve the quality and security of your application.","url":"https://youtu.be/JqLcTFpXreg","headerImageUrl":"https://i.ytimg.com/vi/JqLcTFpXreg/maxresdefault.jpg","publishDate":"2021-10-26T23:00:00.000Z","type":"Video 📺","topics":["11"],"authors":[]},{"id":"248","title":"Increasing User Transparency with Privacy Dashboard","content":"Android is ever evolving in its quest to protect users’ privacy. In Android 12, the platform increases transparency by introducing Privacy Dashboard, which gives users a simple and clear timeline view of the apps that have accessed location, microphone and camera within the past 24 hours. ","url":"https://medium.com/androiddevelopers/increasing-user-transparency-with-privacy-dashboard-23064f2d7ff6","headerImageUrl":"https://miro.medium.com/max/1400/1*cgaSAY9AvPWlndLimzIIzQ.png","publishDate":"2021-10-26T23:00:00.000Z","type":"Article 📚","topics":["11"],"authors":["15"]},{"id":"249","title":"The most unusual and interesting security issues addressed last year","content":"Lilian Young, software engineer, presented a selection of the most unusual, intricate, and interesting security issues addressed in the last year. Developers and researchers are able to contribute to the security of the Android platform by submitting to the Android Vulnerability Rewards Program.","url":"https://medium.com/androiddevelopers/now-in-android-50-ads-special-9934422f8dd1","headerImageUrl":"https://miro.medium.com/max/1400/0*6h0XYdyki_1jfImJ","publishDate":"2021-10-26T23:00:00.000Z","type":"Article 📚","topics":["11"],"authors":["43"]},{"id":"250","title":"New Data Safety section in the Play Console","content":"The new Data safety section will give you a simple way to showcase your app’s overall safety. It gives you a place to give users deeper insight into your app’s privacy and security practices, and explain the data your app may collect and why — all before users install.","url":"https://youtu.be/J7TM0Yy0aTQ","headerImageUrl":"https://i.ytimg.com/vi/J7TM0Yy0aTQ/maxresdefault.jpg","publishDate":"2021-10-26T23:00:00.000Z","type":"Video 📺","topics":["11","12"],"authors":[]},{"id":"251","title":"Building Android UIs for any screen size","content":"Clara Bayarri, engineering manager and Daniel Jacobson, product manager, talked about the state of the ecosystem, focusing on new design guidance, APIs, and tools to help you make the most of your UI on different screen sizes.","url":"https://youtu.be/ir3LztqbeRI","headerImageUrl":"https://i.ytimg.com/vi/ir3LztqbeRI/maxresdefault.jpg","publishDate":"2021-10-26T23:00:00.000Z","type":"Video 📺","topics":["2"],"authors":[]},{"id":"252","title":"What's new for large screens & foldables","content":"Emilie Roberts, Chrome OS developer advocate and Andrii Kulian, Android software engineer, introduced new features focused specifically on making apps look great on large screens, foldables, and Chrome OS. ","url":"https://youtu.be/6-925K3hMHU","headerImageUrl":"https://i.ytimg.com/vi/6-925K3hMHU/maxresdefault.jpg","publishDate":"2021-10-26T23:00:00.000Z","type":"Video 📺","topics":["2"],"authors":[]},{"id":"253","title":"Enable great input support for all devices","content":"Users expect seamless experiences when using keyboards, mice, and stylus. Emilie Roberts taught us how to handle common keyboard and mouse input events and how to get started with more advanced support like keyboard shortcuts, low-latency styluses, MIDI, and more.","url":"https://youtu.be/piLEZYTc_4g","headerImageUrl":"https://i.ytimg.com/vi/piLEZYTc_4g/maxresdefault.jpg","publishDate":"2021-10-26T23:00:00.000Z","type":"Video 📺","topics":["2"],"authors":[]},{"id":"254","title":"Best practices for video apps on foldable devices","content":"Francesco Romano, developer advocate, and Will Chan, product manager at Zoom explored new user experiences made possible by the foldable form factor, focusing on video conferencing and media applications. ","url":"https://youtu.be/DBAek_P0nEw","headerImageUrl":"https://i.ytimg.com/vi/DBAek_P0nEw/maxresdefault.jpg","publishDate":"2021-10-26T23:00:00.000Z","type":"Video 📺","topics":["2","18"],"authors":[]},{"id":"255","title":"Design beautiful apps on foldables and large screens","content":"Liam Spradlin, design advocate, and Jonathan Koren, developer relations engineer, talked about how to design and test Android applications that look and feel great across device types and screen sizes, from tablets to foldables to Chrome OS.","url":"https://youtu.be/DJeJIJKOUbI","headerImageUrl":"https://i.ytimg.com/vi/DJeJIJKOUbI/maxresdefault.jpg","publishDate":"2021-10-26T23:00:00.000Z","type":"Video 📺","topics":["2"],"authors":[]},{"id":"256","title":"12L and new Android APIs and tools for large screens","content":"Dave Burke, vice president of engineering, wrote a post covering the developer preview of 12L, an upcoming feature drop that makes Android 12 even better on large screens. ","url":"https://android-developers.googleblog.com/2021/10/12L-preview-large-screens.html","headerImageUrl":"https://1.bp.blogspot.com/-sjT5kFGiQtg/YXlpg0uByLI/AAAAAAAARJk/XHO_uo5bRJcMeQVm0Fn1wN-qe54FGI7MgCLcBGAsYHQ/w1200-h630-p-k-no-nu/12L-devices-hero.png","publishDate":"2021-10-26T23:00:00.000Z","type":"Article 📚","topics":["2","13"],"authors":[]},{"id":"257","title":"New features in ML Kit: Text Recognition V2 & Pose Detections","content":"Zongmin Sun, software engineer, and Valentin Bazarevsky, MediaPipe Engineer, talked about Text Recognition V2 & Pose Detection, recently-released features in ML Kit. ","url":"https://youtu.be/9EKQ0UC04S8","headerImageUrl":"https://i.ytimg.com/vi/9EKQ0UC04S8/maxresdefault.jpg","publishDate":"2021-10-26T23:00:00.000Z","type":"Video 📺","topics":["8","2"],"authors":[]},{"id":"258","title":"How to retain users with Android backup and restore","content":"In this talk, Martin Millmore, engineering manager, and Ruslan Tkhakokhov, software engineer, explored the benefits of transferring users’ data to a new device, using Backup and Restore to achieve that in a simple and secure way.","url":"https://youtu.be/bg2drEhz1_s","headerImageUrl":"https://i.ytimg.com/vi/bg2drEhz1_s/maxresdefault.jpg","publishDate":"2021-10-26T23:00:00.000Z","type":"Video 📺","topics":["13"],"authors":[]},{"id":"259","title":"Compatibility changes in Android 12","content":"Developer relations engineers Kseniia Shumelchyk and Slava Panasenko talked about new Android 12 features and changes. They shared tools and techniques to ensure that apps are compatible with the next Android release and users can take advantage of new features, along with app developer success stories.","url":"https://youtu.be/fCMJmV6nqGo","headerImageUrl":"https://i.ytimg.com/vi/fCMJmV6nqGo/maxresdefault.jpg","publishDate":"2021-10-26T23:00:00.000Z","type":"Video 📺","topics":["13"],"authors":[]},{"id":"260","title":"Building great experiences for Novice Internet Users","content":"Learn the principles to help craft great experiences for the novice Internet user segment from Mrinal Sharma, UX manager, and Amrit Sanjeev, developer relations engineer. They highlight the gap between nascent and tech savvy user segments and suggest strategies in areas to improve the overall user experience. Factors like low functional literacy, being multilingual by default, being less digitally confident, and having no prior internet experience requires that we rethink the way we build apps for these users.","url":"https://youtu.be/Sf_TauUY4LE","headerImageUrl":"https://i.ytimg.com/vi/Sf_TauUY4LE/maxresdefault.jpg","publishDate":"2021-10-26T23:00:00.000Z","type":"Video 📺","topics":["2"],"authors":[]},{"id":"261","title":"Android Basics in Kotlin course 🧑‍💻","content":"Android Basics in Kotlin teaches people with no programming experience how to build simple Android apps. Since the first learning units were released in 2020, over 100,000 beginners have completed it! Today, we’re excited to share that the final unit has been released, and the full Android Basics in Kotlin course is now available.","url":"https://android-developers.googleblog.com/2021/10/announcing-android-basics-in-kotlin.html","headerImageUrl":"https://1.bp.blogspot.com/-BmlW7k8RhME/YWRvsOes9aI/AAAAAAAAQ_g/FpFS6_new9Y7vdzP7P4RPs_x4WHVi4yxQCLcBGAsYHQ/w1200-h630-p-k-no-nu/Android-announcing-android-basics-in-Kotlin-course-16x9.png","publishDate":"2021-10-20T23:00:00.000Z","type":"Article 📚","topics":["10"],"authors":["25"]},{"id":"262","title":"Updated Widget docs","content":"Widgets can make a huge impact on your user’s home screen! We updated the App Widgets documentation with the recent changes in the latest OS versions. New pages about how to create a simple widget, an advanced widget, and how to provide flexible widget layouts.","url":"https://developer.android.com/guide/topics/appwidgets","headerImageUrl":"https://www.gstatic.com/devrel-devsite/prod/vab7ee6e3641f10848d404faa598f256587df1a361a1e70cd114230c2961b73d9/android/images/lockup.svg","publishDate":"2021-10-20T23:00:00.000Z","type":"Docs 📑","topics":["2"],"authors":[]},{"id":"263","title":"Extend AGP by creating your own plugins","content":"The Android Gradle Plugin (AGP) contains extension points for plugins to control build inputs and extend its functionality. Starting in version 7.0, AGP has a set of official, stable APIs that you can rely on. We also have a new documentation page that walks you through this and explains how to create your own plugins.","url":"https://developer.android.com/studio/build/extend-agp","headerImageUrl":"https://developer.android.com/images/social/android-developers.png","publishDate":"2021-10-20T23:00:00.000Z","type":"Docs 📑","topics":["5","5"],"authors":[]},{"id":"264","title":"Revamped Compose Basics Codelab","content":"If you’re planning to start learning Jetpack Compose, our modern toolkit for building native Android UI, it’s your lucky day! We just revamped the Basics Jetpack Compose codelab to help you learn the core concepts of Compose, and only with this, you’ll see how much it improves building Android UIs.","url":"https://developer.android.com/codelabs/jetpack-compose-basics","headerImageUrl":"https://i.ytimg.com/vi/k3jvNqj4m08/maxresdefault.jpg","publishDate":"2021-10-20T23:00:00.000Z","type":"Codelab","topics":["3"],"authors":[]},{"id":"265","title":"Material components in Compose","content":"We added a new Material Components and layouts page that goes over the different Material components in Compose such as backdrop, app bars, modal drawers, etc.!","url":"https://developer.android.com/jetpack/compose/layouts/material","headerImageUrl":"https://developer.android.com/images/jetpack/compose/layouts/material/material_components.png","publishDate":"2021-10-20T23:00:00.000Z","type":"Docs 📑","topics":["3","2"],"authors":[]},{"id":"266","title":"How to implement a custom design system","content":"How to implement a custom design system in Compose","url":"https://developer.android.com/jetpack/compose/themes/custom","headerImageUrl":"https://developer.android.com/images/social/android-developers.png","publishDate":"2021-10-20T23:00:00.000Z","type":"Docs 📑","topics":["3","2"],"authors":[]},{"id":"267","title":"The anatomy of a theme","content":"Understanding the anatomy of a Compose theme","url":"https://developer.android.com/jetpack/compose/themes/anatomy","headerImageUrl":"https://developer.android.com/images/social/android-developers.png","publishDate":"2021-10-20T23:00:00.000Z","type":"Docs 📑","topics":["3"],"authors":[]},{"id":"268","title":"Paging 📑 Displaying data and its loading state","content":"In the third episode of the Paging video series, TJ adds a local cache to pull from and refresh only when necessary, making use of Room . The local cache acts as the single source of truth for paging data.","url":"https://www.youtube.com/watch?v=OHH_FPbrjtA","headerImageUrl":"https://i.ytimg.com/vi/OHH_FPbrjtA/maxresdefault.jpg","publishDate":"2021-10-17T23:00:00.000Z","type":"Video 📺","topics":["9","2"],"authors":["38"]},{"id":"269","title":"Data safety in the Play Console 🔒","content":"Google Play is rolling out the Data safety form in the Google Play Console. With the new Data safety section, developers will now have a transparent way to show users if and how they collect, share, and protect user data, before users install an app.\nRead the blog post to learn more about how to submit your app information in Play Console, how to get prepared, and what your users will see in your app’s store listing starting February.","url":"https://android-developers.googleblog.com/2021/10/launching-data-safety-in-play-console.html","headerImageUrl":"https://1.bp.blogspot.com/-Zde9ioLE3SY/YWh7qiquXKI/AAAAAAAARCU/m6D-qJJe6QowYPcDWUtb3-YzFGn9xIaUwCLcBGAsYHQ/w1200-h630-p-k-no-nu/Android-get-ready-to-sumbit-your-data-safety-secton-social.png","publishDate":"2021-10-17T23:00:00.000Z","type":"Article 📚","topics":["11","12"],"authors":["10"]},{"id":"270","title":"Honor every photo - How cameras capture images","content":"Episode 177: Honor every photon. In this episode, Chet, Roman, and Tor have a chat with Bart Wronski from the Google Research team, discussing the camera pipeline that powers the Pixel phones. How cameras capture images, how the algorithms responsible for Pixel’s beautiful images, HDR+ or Night Sight mode works, and more!","url":"https://adbackstage.libsyn.com/episode-177-honor-every-photon","headerImageUrl":"http://assets.libsyn.com/show/332855?height=250&width=250&overlay=true","publishDate":"2021-10-17T23:00:00.000Z","type":"Podcast 🎙","topics":["18"],"authors":["31"]},{"id":"271","title":"Accessibility series 🌐 - Touch targets","content":"The accessibility series continues on with more information on how to follow basic accessibility principles to make sure that your app can be used by as many users as possible.\nIn general, you should ensure that interactive elements have a width and height of at least 48dp! In the touch targets episode, you’ll learn about a few ways in which you can make this happen.","url":"https://www.youtube.com/watch?v=Dqqbe8IFBA4","headerImageUrl":"https://i.ytimg.com/vi/Dqqbe8IFBA4/maxresdefault.jpg","publishDate":"2021-10-16T23:00:00.000Z","type":"Video 📺","topics":["14"],"authors":["39"]},{"id":"272","title":"Using the CameraX Exposure Compensation API","content":"This blog post by Wenhung Teng talks about how to use the CameraX Exposure Compensation that makes it much simpler to quickly take images with exceptional quality.","url":"https://medium.com/androiddevelopers/using-camerax-exposure-compensation-api-11fd75785bf","headerImageUrl":"https://miro.medium.com/max/1400/1*zinEvf1keSZYuZojr31ehQ.png","publishDate":"2021-10-12T23:00:00.000Z","type":"Article 📚","topics":["18"],"authors":["44"]},{"id":"273","title":"Compose for Wear OS in Developer preview ⌚","content":"We’re bringing the best of Compose to Wear OS as well, with built-in support for Material You to help you create beautiful apps with less code. Read the following article to review the main composables for Wear OS we’ve built and point you towards resources to get started using them.","url":"https://android-developers.googleblog.com/2021/10/compose-for-wear-os-now-in-developer.html","headerImageUrl":"https://1.bp.blogspot.com/-RkL3Yokn3XE/YWWmbuX8E7I/AAAAAAAAQ_o/CEmNJ5_mfq0kScxkFGoMpf1BlU5-uBHjACLcBGAsYHQ/w1200-h630-p-k-no-nu/Android-compose-for-wear-os-now-in-dev-review-header-dark.png","publishDate":"2021-10-11T23:00:00.000Z","type":"Article 📚","topics":["19","3"],"authors":["41"]},{"id":"274","title":"Paging 📑 How to fetch data and bind the PagingData to the UI","content":"The series on Paging continues on with more content! In the second episode, TJ shows how to fetch data and bind the PagingData to the UI, including headers and footers.","url":"https://www.youtube.com/watch?v=C0H54K63Lww","headerImageUrl":"https://i.ytimg.com/vi/C0H54K63Lww/maxresdefault.jpg","publishDate":"2021-10-10T23:00:00.000Z","type":"Video 📺","topics":["2"],"authors":["38"]},{"id":"275","title":"Room adds support for Kotlin Symbol Processing","content":"Yigit Boyar wrote the story about how Room added support for Kotlin Symbol Processing (KSP). Spoiler: it wasn’t easy, but it was definitely worth it.","url":"https://medium.com/androiddevelopers/room-kotlin-symbol-processing-24808528a28e","headerImageUrl":"https://miro.medium.com/max/1400/1*yM7Lf4dC_hwse6YmoCO4uQ.png","publishDate":"2021-10-09T23:00:00.000Z","type":"Article 📚","topics":["9"],"authors":["34"]},{"id":"276","title":"Apply special effects to images with the CameraX Extensions API","content":"Have you ever wanted to apply special effects such as HDR or Night mode when taking pictures from your app? CameraX is here to help you! In this article by Charcoal Chen, learn how to do that using the new ExtensionsManager available in the camera-extensions Jetpack library. ","url":"https://medium.com/androiddevelopers/apply-special-effects-to-images-with-the-camerax-extensions-api-d1a169b803d3","headerImageUrl":"https://miro.medium.com/max/1400/1*GZmhCFMCrG4L_mOtwSb0zA.png","publishDate":"2021-10-06T23:00:00.000Z","type":"Article 📚","topics":["18"],"authors":["45"]},{"id":"277","title":"Wear OS Jetpack libraries now in stable","content":"The Wear OS Jetpack libraries are now in stable.","url":"https://android-developers.googleblog.com/2021/09/wear-os-jetpack-libraries-now-in-stable.html","headerImageUrl":"https://1.bp.blogspot.com/-9zeEGNCG_As/YUD1UO_3kkI/AAAAAAAAQ8k/tCFBpTCwU4MEQHQNB9XzTOXSf6hd9TkQQCLcBGAsYHQ/w1200-h630-p-k-no-nu/image1.png","publishDate":"2021-09-14T23:00:00.000Z","type":"Article 📚","topics":["8","19"],"authors":["41"]},{"id":"278","title":"Android Dev Summit returns on October 27-28, 2021! 📆","content":"Join us October 27–28 for Android Dev Summit 2021! The show kicks off at 10 AM PST on October 27 with The Android Show: a technical keynote where you’ll hear all the latest developer news and updates. From there, we have over 30 sessions on a range of technical Android development topics, and we’ll be answering your #AskAndroid questions live.","url":"https://developer.android.com/dev-summit","headerImageUrl":"https://developer.android.com/dev-summit/images/android-dev-summit-2021.png","publishDate":"2021-10-05T23:00:00.000Z","type":"Event 📆","topics":["1"],"authors":[]},{"id":"279","title":"Android 12 is live in AOSP! 🤖","content":"We released Android 12 and pushed it to the Android Open Source Project (AOSP). It will be coming to devices later on this year. Thank you for your feedback during the beta.\nAndroid 12 introduces a new design language called Material You along with redesigned widgets, notification UI updates, stretch overscroll, and app launch splash screens. We reduced the CPU time used by core system services, added performance class device capabilities, made ML accelerator drivers updatable outside of platform releases, and prevented apps from launching foreground services from the background and using notification trampolines to improve performance. The new Privacy Dashboard, approximate location, microphone and camera indicators/toggles, and nearby device permissions give users more insight into and control over privacy. We improved the user experience with a unified API for rich content insertion, compatible media transcoding, easier blurs and effects, AVIF image support, enhanced haptics, new camera effects/capabilities, improved native crash debugging, support for rounded screen corners, Play as you download, and Game Mode APIs.","url":"https://android-developers.googleblog.com/2021/10/android-12-is-live-in-aosp.html","headerImageUrl":"https://1.bp.blogspot.com/-7dVmEfR3mJs/YVst2TdY16I/AAAAAAAAK3I/pLnt0r5S-pIaJwcSNsNBqT8w2Y4Ej0yaQCLcBGAsYHQ/w1200-h630-p-k-no-nu/Android%2B12.jpeg","publishDate":"2021-10-03T23:00:00.000Z","type":"Article 📚","topics":["13"],"authors":["14"]},{"id":"280","title":"Improved Google Play Console user management 🧑‍💼","content":"The user and permission tools in Play Console have a new, decluttered interface and new team management features, making it easier to make sure every team member has the right set of permissions to fulfill their responsibilities without overexposing unrelated business data.\nWe’ve rewritten permission names and descriptions, clarified differentiation between account and app-level permissions, added new search, filtering, and batch-editing capabilities, and added the ability to export this information to a CSV file. In addition, Play Console users can request access to actions with a justification, and we’ve introduced permission groups to make it easier to assign multiple permissions at once to users that share the same or similar roles.","url":"https://android-developers.googleblog.com/2021/09/improved-google-play-console-user.html","headerImageUrl":"https://1.bp.blogspot.com/-vw3eaKdwzVU/YUjvyJ6zy2I/AAAAAAAAQ9s/m39byf56P8Icog5e5TgCbu9et0VCZh1iACLcBGAsYHQ/w1200-h630-p-k-no-nu/PlayConsole-revamped-user-management-01.png","publishDate":"2021-09-20T23:00:00.000Z","type":"Article 📚","topics":["12"],"authors":["46"]},{"id":"281","title":"Making Permissions auto-reset available to billions more devices 🔐","content":"Android 11 introduced permission auto-reset, automatically resetting an app’s runtime permissions when it isn’t used for a few months. In December 2021, we are starting to roll this feature out to devices with Google Play services running Android 6.0 (API level 23) or higher for apps targeting Android 11 (API level 30) or higher. Users can manually enable permission auto-reset for apps targeting API levels 23 to 29.\nSome apps and permissions are automatically exempted from revocation, like active Device Administrator apps used by enterprises, and permissions fixed by enterprise policy. If your app is expected to work primarily in the background without user interaction, you can ask the user to prevent the system from resetting your app’s permissions.","url":"https://android-developers.googleblog.com/2021/09/making-permissions-auto-reset-available.html","headerImageUrl":"https://1.bp.blogspot.com/-W3UAh-gyf3Y/YUJehjKWQjI/AAAAAAAAQ84/zkURLgqMRa4VZK3Is3ENNYG_OjXJxx2pgCLcBGAsYHQ/w1200-h630-p-k-no-nu/Android-making-permissions-auto-reset-social-v2.png","publishDate":"2021-09-16T23:00:00.000Z","type":"DAC - Android version features","topics":["11"],"authors":["47"]},{"id":"282","title":"Migrating from Dagger to Hilt","content":"While you will eventually want to migrate all your existing Dagger modules over to Hilt’s built in components, you can start by migrating application-wide components to Hilt’s singleton component. This episode explains how.","url":"https://www.youtube.com/watch?v=Xt1_3Nq4lD0&t=15s","headerImageUrl":"https://i.ytimg.com/vi/Xt1_3Nq4lD0/hqdefault.jpg","publishDate":"2021-09-19T23:00:00.000Z","type":"Video 📺","topics":["4"],"authors":["48"]},{"id":"283","title":"ADB Podcast Episode 175: Creating delightful user experiences with Lottie animations","content":"In this episode, Chet, Romain and Tor have a chat with Gabriel Peal from Tonal, well known for his contributions to the Android community on projects such as Mavericks and Lottie. They talked about Lottie and how it helps designers and developers deliver more delightful user experiences by taking complex animations designed in specialized authoring tools such as After Effects, and rendering them efficiently on mobile devices. They also explored the challenges of designing and implementing a rendering engine such as Lottie.","url":"http://adbackstage.libsyn.com/episode-175-lottie","headerImageUrl":"http://assets.libsyn.com/show/332855?height=250&width=250&overlay=true","publishDate":"2021-09-13T23:00:00.000Z","type":"Podcast 🎙","topics":["2"],"authors":["31"]},{"id":"284","title":"Hilt extensions","content":"This episode explains how to write your own Hilt Extensions. Hilt Extensions allow you to extend Hilt support to new libraries. Extensions can be created for common patterns in projects, to support non-standard member injection, mirroring bindings, and more.","url":"https://medium.com/androiddevelopers/hilt-extensions-in-the-mad-skills-series-f2ed6fcba5fe","headerImageUrl":"https://miro.medium.com/max/1400/1*a_ZJwMHs17SmEFr3uEbxDg.png","publishDate":"2021-09-12T23:00:00.000Z","type":"Article 📚","topics":["4"],"authors":["49"]},{"id":"285","title":"Labeling images for Accessibility","content":"This Accessibilities series episode covers labeling images for accessibility, such as content descriptions for ImageViews and ImageButtons.","url":"https://youtu.be/O2DeSITnzFk","headerImageUrl":"https://i.ytimg.com/vi/O2DeSITnzFk/maxresdefault.jpg","publishDate":"2021-09-09T23:00:00.000Z","type":"Video 📺","topics":["14"],"authors":["28"]},{"id":"286","title":"ADB Podcast Episode 174: Compose in Android Studio","content":"In this episode, Tor and Nick are joined by Chris Sinco, Diego Perez and Nicolas Roard to discuss the features added to Android Studio for Jetpack Compose. Tune in as they discuss the Compose preview, interactive preview, animation inspector, and additions to the Layout inspector along with their approach to creating tooling to support Compose’s code-centric system.","url":"http://adbackstage.libsyn.com/episode-174-compose-tooling","headerImageUrl":"http://assets.libsyn.com/content/110962067?height=250&width=250&overlay=true","publishDate":"2021-09-08T23:00:00.000Z","type":"Podcast 🎙","topics":["5","3"],"authors":["32"]},{"id":"287","title":"Hilt under the hood","content":"This episode dives into how the Hilt annotation processors generate code, and how the Hilt Gradle plugin works behind the scenes to improve the overall experience when using Hilt with Gradle.","url":"https://medium.com/androiddevelopers/mad-skills-series-hilt-under-the-hood-9d89ee227059","headerImageUrl":"https://miro.medium.com/max/1400/1*a_ZJwMHs17SmEFr3uEbxDg.png","publishDate":"2021-09-07T23:00:00.000Z","type":"Article 📚","topics":["4"],"authors":["50"]},{"id":"288","title":"Trackr comes to the Big Screen","content":"A blog post on Trackr, a sample task management app where we showcase Modern Android Development best practices. This post takes you through how applying Material Design and responsive patterns produced a more refined and intuitive user experience on large screen devices.","url":"https://medium.com/androiddevelopers/trackr-comes-to-the-big-screen-9f13c6f927bf","headerImageUrl":"https://miro.medium.com/max/1400/1*678DlYtu4G7wFrq30FQ7Mw.png","publishDate":"2021-09-06T23:00:00.000Z","type":"Article 📚","topics":["2"],"authors":["51"]},{"id":"289","title":"Accessibility services and the Android Accessibility model","content":"This Accessibilities series episode covers accessibility services like TalkBack, Switch Access and Voice Access and how they help users interact with your apps. Android’s accessibility framework allows you to write one app and the framework takes care of providing the information needed by different accessibility services.","url":"https://youtu.be/LxKat_m7mHk","headerImageUrl":"https://i.ytimg.com/vi/LxKat_m7mHk/maxresdefault.jpg","publishDate":"2021-09-02T23:00:00.000Z","type":"Video 📺","topics":["14"],"authors":["39"]},{"id":"290","title":"New Accessibility Pathway","content":"Want even more accessibility? You are in luck, check out this entire new learning pathway aimed at teaching you how to make your app more accessible.","url":"https://developer.android.com/courses/pathways/make-your-android-app-accessible","headerImageUrl":"https://developers.google.com/profile/badges/playlists/make-your-android-app-accessible/badge.svg","publishDate":"2021-08-31T23:00:00.000Z","type":"","topics":["14"],"authors":[]},{"id":"291","title":"Jetpack Compose 1.0 stable is released","content":"Jetpack Compose, Android’s modern, native UI toolkit is now stable and ready for you to adopt in production. It interoperates with your existing app, integrates with existing Jetpack libraries, implements Material Design with straightforward theming, supports lists with Lazy components using minimal boilerplate, and has a powerful, extensible animation system.","url":"https://android-developers.googleblog.com/2021/07/jetpack-compose-announcement.html","headerImageUrl":"https://1.bp.blogspot.com/-9MiK78CFMLM/YQFurOq9AII/AAAAAAAAQ1A/lKj5GiDnO_MkPLb72XqgnvD5uxOsHO-eACLcBGAsYHQ/w1200-h630-p-k-no-nu/Android-Compose-1.0-header-v2.png","publishDate":"2021-07-27T23:00:00.000Z","type":"Article 📚","topics":["3"],"authors":["52"]},{"id":"292","title":"Android Studio Artic Fox stable is released","content":"Android Studio Arctic Fox is now available in the stable release channel. Arctic Fox brings Jetpack Compose to life with Compose Preview, Deploy Preview, Compose support in the Layout Inspector, and Live Editing of literals. Compose Preview works with the @Preview annotation to let you instantly see the impact of changes across multiple themes, screen sizes, font sizes, and more. Deploy Preview deploys snippets of your Compose code to a device or emulator for quick testing. Layout inspector now works with apps written fully in Compose as well as apps that have Compose alongside Views, allowing you to explore your layouts and troubleshoot. With Live Edit of literals, you can edit literals such as strings, numbers, booleans, etc. and see the immediate results change in previews, the emulator, or on a physical device — all without having to compile.\n","url":"https://android-developers.googleblog.com/2021/07/android-studio-arctic-fox-202031-stable.html","headerImageUrl":"https://1.bp.blogspot.com/-cmcRT5BGOTY/YQBKC6asA0I/AAAAAAAAQzg/hZrde9Sgx881Wdf-c__VMkTvsKoVjOwsACLcBGAsYHQ/w1200-h630-p-k-no-nu/Arctic_Fox_Splash_2x%2B%25281%2529.png","publishDate":"2021-07-27T23:00:00.000Z","type":"Article 📚","topics":["5","3"],"authors":["53"]},{"id":"293","title":"User control, privacy, security, and safety","content":"Play announced new updates to bolster user control, privacy, and security. The post covered advertising ID updates, including zeroing out the advertising ID when users opt out of interest-based advertising or ads personalization, the developer preview of the app set ID, enhanced protection for kids, and policy updates around dormant accounts and users of the AccessibilityService API.","url":"https://android-developers.googleblog.com/2021/07/announcing-policy-updates-to-bolster.html","headerImageUrl":"https://1.bp.blogspot.com/-pWCVY7BR-z8/YQAzb9zCZsI/AAAAAAAAQzY/2-OetxLvjOUYhHlTFJNw5JSm_BVjkI0VwCLcBGAsYHQ/s0/Untitled.png","publishDate":"2021-07-27T23:00:00.000Z","type":"Article 📚","topics":["12"],"authors":["10"]},{"id":"294","title":"Identify performance bottlenecks using system trace","content":"System trace profiling within Android Studio with a detailed walkthrough of app startup performance.","url":"https://www.youtube.com/watch?v=aUrqx9AnDUg","headerImageUrl":"https://i.ytimg.com/vi/aUrqx9AnDUg/hqdefault.jpg","publishDate":"2021-07-25T23:00:00.000Z","type":"Video 📺","topics":["7","5"],"authors":["37"]},{"id":"295","title":"Testing in Compose","content":"ADB released episode #171, part of our continuing series on Jetpack Compose. In this episode, Nick and Romain are joined by Filip Pavlis, Jelle Fresen & Jose Alcérreca to talk about Testing in Compose. They discuss how Compose’s testing APIs were developed hand-in-hand with the UI toolkit, making them more deterministic and opening up new possibilities like manipulating time. They go on to discuss the semantics tree, interop testing, screenshot testing and the possibilities for host-side testing.","url":"https://adbackstage.libsyn.com/episode-171-compose-testing","headerImageUrl":"http://assets.libsyn.com/content/108505820?height=250&width=250&overlay=true","publishDate":"2021-06-29T23:00:00.000Z","type":"Podcast 🎙","topics":["3","6"],"authors":["54"]},{"id":"296","title":"DataStore reached release candidate status","content":"DataStore has reached release candidate status meaning the 1.0 stable release is right around the corner!","url":"https://developer.android.com/topic/libraries/architecture/datastore","headerImageUrl":"https://developer.android.com/images/social/android-developers.png","publishDate":"2021-06-29T23:00:00.000Z","type":"Jetpack release 🚀","topics":["9"],"authors":[]},{"id":"297","title":"Scope Storage Myths","content":"Apps will be required to update their targetSdkVersion to API 30 in the second half of the year. That means your app will be required to work with Scoped Storage. In this blog post, Nicole Borrelli busts some Scope storage myths in a Q&A format.","url":"https://medium.com/androiddevelopers/scope-storage-myths-ca6a97d7ff37","headerImageUrl":"https://miro.medium.com/max/1200/1*csWzYUmYq_1HQsqBWk3OTA.jpeg","publishDate":"2021-06-27T23:00:00.000Z","type":"Article 📚","topics":["9","11"],"authors":["55"]},{"id":"298","title":"Navigation with Multiple back stacks","content":"As part of the rercommended Material pattern for bottom-navigation, the Jetpack Navigation library makes it easy to implement navigation with multiple back-stacks","url":"https://medium.com/androiddevelopers/navigation-multiple-back-stacks-6c67ba41952f","headerImageUrl":"https://miro.medium.com/max/1400/1*v7S7LKg4TlrMRlneeP224Q.jpeg","publishDate":"2021-06-14T23:00:00.000Z","type":"Article 📚","topics":["2"],"authors":["25"]},{"id":"299","title":"Build sophisticated search features with AppSearch","content":"AppSearch is an on-device search library which provides high performance and feature-rich full-text search functionality. Learn how to use the new Jetpack AppSearch library for doing high-performance on-device full text searches.","url":"https://android-developers.googleblog.com/2021/06/sophisticated-search-with-appsearch-in-jetpack.html","headerImageUrl":"https://1.bp.blogspot.com/-PmN4MS50wvo/YMj-HmY4N2I/AAAAAAAAQoQ/5eCx8CU1HgAlFQnQ55IOb_CCVRhe8eGewCLcBGAsYHQ/w1200-h630-p-k-no-nu/AppSearch.jpg","publishDate":"2021-06-13T23:00:00.000Z","type":"Article 📚","topics":["8","2"],"authors":["56"]},{"id":"300","title":"ADB Podcast Episode 167: Jetpack Compose Layout","content":"In this second episode of our mini-series on Jetpack Compose (AD/BC), Nick and Romain are joined by Anastasia Soboleva, George Mount and Mihai Popa to talk about Compose’s layout system. They explain how the Compose layout model works and its benefits, introduce common layout composables, discuss how writing your own layout is far simpler than Views, and how you can even animate layout.","url":"https://adbackstage.libsyn.com/episode-167-jetpack-compose-layout","headerImageUrl":"http://assets.libsyn.com/content/105399023?height=250&width=250&overlay=true","publishDate":"2021-06-13T23:00:00.000Z","type":"Podcast 🎙","topics":["3"],"authors":["57"]},{"id":"301","title":"Create an application CoroutineScope using Hilt","content":"Learn how to create an applicatioon-scoped CoroutineScope using Hilt, and how to inject it as a dependency.","url":"https://medium.com/androiddevelopers/create-an-application-coroutinescope-using-hilt-dd444e721528","headerImageUrl":"https://miro.medium.com/max/1400/1*MgDtM-AJmc2m2hg5chkflg.png","publishDate":"2021-06-09T23:00:00.000Z","type":"Article 📚","topics":["4"],"authors":["23"]},{"id":"302","title":"Android 12 Beta 2 Update","content":"The second Beta of Android 12 has just been released for you to try. Beta 2 adds new privacy features like the Privacy Dashboard and continues our work of refining the release.","url":"https://android-developers.googleblog.com/2021/06/android-12-beta-2-update.html","headerImageUrl":"https://1.bp.blogspot.com/-tLt-TVPqpjA/YKMRwRPMfjI/AAAAAAAAQik/JNtMesFZ2i87RyBACHAVEC14CvcU7G__wCLcBGAsYHQ/w1200-h630-p-k-no-nu/Screen%2BShot%2B2021-05-17%2Bat%2B9.00.30%2BPM.png","publishDate":"2021-06-08T23:00:00.000Z","type":"Article 📚","topics":["13"],"authors":["14"]},{"id":"303","title":"Top 3 things in Android 12 | Android @ Google I/O '21","content":"Did you miss the latest in Android 12 at Google I/O 2021? Android Software Engineer Chet Haase will recap the top three themes in Android 12 from this year’s Google I/O!","url":"https://www.youtube.com/watch?v=tvf1wmD5H0M","headerImageUrl":"https://i.ytimg.com/vi/tvf1wmD5H0M/maxresdefault.jpg","publishDate":"2021-06-08T23:00:00.000Z","type":"Video 📺","topics":["13"],"authors":["31"]},{"id":"304","title":"ADB Podcast Episode 166: Security Deposit","content":"In this episode, Chad and Jeff from the Android Security team join Tor and Romain to talk about… security. They explain what the platform does to help preserve user trust and device integrity, why it sometimes means restricting existing APIs, and touch on what apps can do or should worry about.","url":"http://adbackstage.libsyn.com/episode-166-security-deposit","headerImageUrl":"http://assets.libsyn.com/show/332855?height=250&width=250&overlay=true","publishDate":"2021-06-07T23:00:00.000Z","type":"Podcast 🎙","topics":["11"],"authors":["32"]},{"id":"305","title":"Multiple Back Stacks","content":"A deep dive into multiple back stacks and some of the work it took to make this feature happen in Fragments and Navigation","url":"https://medium.com/androiddevelopers/multiple-back-stacks-b714d974f134","headerImageUrl":"https://miro.medium.com/max/1400/1*5-lbc-YBJlZnxVFPvNMPAQ.png","publishDate":"2021-06-06T23:00:00.000Z","type":"Article 📚","topics":["2"],"authors":["58"]},{"id":"306","title":"Building across devices | Android @ Google I/O '21","content":"Did you miss the latest in Building across screens at Google I/O 2021? Product Manager Diana Wong will recap the top three announcements from this year’s Google I/O!","url":"https://www.youtube.com/watch?v=O5oRiIUk_F4","headerImageUrl":"https://i.ytimg.com/vi/O5oRiIUk_F4/maxresdefault.jpg","publishDate":"2021-06-02T23:00:00.000Z","type":"Video 📺","topics":["2"],"authors":["59"]},{"id":"307","title":"Navigation in Feature Modules","content":"Feature modules delivered with Play Feature delivery at not downloadedd at install time, but only when the app requestss them. Learn how to use the dynamic features navigation library to include the graph from the feature module.","url":"https://medium.com/androiddevelopers/navigation-in-feature-modules-322ac3d79334","headerImageUrl":"https://miro.medium.com/max/1400/1*v7S7LKg4TlrMRlneeP224Q.jpeg","publishDate":"2021-06-01T23:00:00.000Z","type":"Article 📚","topics":["2"],"authors":["25"]},{"id":"308","title":"ADB Podcast Episode 165: Material Witnesses","content":"In this episode, Chet and Romain chattedd with Hunter and Nick from the Material Design team about recent additions and improvements to the Material Design Component libraries: transitions, motion theming, Compose, large screens support and guidance, etc.","url":"http://adbackstage.libsyn.com/episode-165-material-witnesses","headerImageUrl":"http://assets.libsyn.com/show/332855?height=250&width=250&overlay=true","publishDate":"2021-06-01T23:00:00.000Z","type":"Podcast 🎙","topics":["2"],"authors":["31"]},{"id":"309","title":"Grow Your Indie Game with Help From Google Play","content":"Google Play is opening submissions for two of our annual developer programs - the Indie Games Accelerator and the Indie Games Festival. These programs are designed to help small games studios grow on Google Play, no matter what stage they are in","url":"https://developers.googleblog.com/2021/06/grow-your-indie-game-with-help-from-google-play.html","headerImageUrl":"https://1.bp.blogspot.com/-MNEblg7_8fA/YK7lludSxJI/AAAAAAAAKQM/_YIT15giTk42oPXWIhK6l2FBVt5PCFKTwCLcBGAsYHQ/w1200-h630-p-k-no-nu/Joint_Announcement_Android%2BDevelopers%2BBlog_Header_1200x600%2B%25282%2529.png","publishDate":"2021-05-31T23:00:00.000Z","type":"Article 📚","topics":["12","17"],"authors":["60"]},{"id":"310","title":"Untrusted Touch Events in Android","content":"Android 12 prevents touch events from being deliverred if these touches first pass through a window from a different app to ensure users can see what they are interacting with. Learn about alternatives, to see if your app will be affected and how you can test to see if your app will be impacted.","url":"https://medium.com/androiddevelopers/untrusted-touch-events-2c0e0b9c374c","headerImageUrl":"https://miro.medium.com/max/1400/1*lvwe7v_bcNsNXI_7ltFkJA.jpeg","publishDate":"2021-05-25T23:00:00.000Z","type":"Article 📚","topics":["13"],"authors":["15"]},{"id":"311","title":"Android @ Google I/O: 3 things to know in Modern Android Development","content":"This year’s Google I/O brought lots of updates for Modern Android Development. Learn about the top 3 things you should know.","url":"https://android-developers.googleblog.com/2021/05/mad-spotlight.html","headerImageUrl":"https://1.bp.blogspot.com/-8cqMFObMeko/YK5RbJ7Yr_I/AAAAAAAAQkw/Iw4_hRZwa7QD1CmVGnZUZ4NjYowXZadTgCLcBGAsYHQ/w1200-h630-p-k-no-nu/Android_PostIO_blog-MAD.png","publishDate":"2021-05-24T23:00:00.000Z","type":"Article 📚","topics":["1"],"authors":["61"]}] - """.trimIndent() - - @Language("JSON") - val authors = """ -[{"id":"1","name":"Márton Braun","mediumPage":"https://medium.com/@zsmb13","twitter":"https://twitter.com/zsmb13","imageUrl":"https://pbs.twimg.com/profile_images/1047591879431397377/nNjQUt0F_400x400.jpg","bio":"Márton is an Android Developer Relations Engineer at Google, working on anything and everything Kotlin."},{"id":"2","name":"Greg Hartrell","mediumPage":"https://medium.com/@greghart/about","twitter":"https://twitter.com/ghartrell","imageUrl":"https://pbs.twimg.com/profile_images/971602488984940547/plY3bBRz_400x400.jpg","bio":"Greg Hartrell is a product leader with a 15+ year history helping large teams build high performing software products and businesses. At Google, he’s a Product Management Director at Google Play / Android, covering product lines from games, to digital content and platform expansion. He’s previously been VP of Product Development at Capcom/Beeline, and a product leader for 8 years at Microsoft for Xbox Live/360 and the Windows platform. When he’s not speaking, he enjoys looting random objects out of boxes, jumping from platform to platform, and grinding while afk."},{"id":"3","name":"Simona Stojanovic","mediumPage":"https://medium.com/@anomisSi","twitter":"https://twitter.com/anomisSi","imageUrl":"https://pbs.twimg.com/profile_images/1437506849016778756/pG0NZALw_400x400.jpg","bio":"Android Developer Relations Engineer @Google, working on the Compose team and taking care of Layouts & Navigation."},{"id":"4","name":"Andrew Flynn","mediumPage":"","twitter":"","imageUrl":"https://lh3.googleusercontent.com/xfI5PujnEqdQ4GlsRZAvVOGiC_v3VTz6wYM8kxaPyOtXIZY4-BDYOr-d-cjN8kxAkr4yAthuWu2gTZ7t-do=s1016-rw-no","bio":"Andrew joined Google in 2007 after graduating from Dartmouth College. He has worked on a wide range of team from Ads to Android devices to Google Fi, and currently works on the Play Store."},{"id":"5","name":"Jon Boekenoogen","mediumPage":"","twitter":"","imageUrl":"","bio":""},{"id":"6","name":"Florina Muntenescu","mediumPage":"https://medium.com/@florina.muntenescu","twitter":"https://twitter.com/FMuntenescu","imageUrl":"https://pbs.twimg.com/profile_images/726323972686503937/nZkTQVQJ_400x400.jpg","bio":"Florina is working as an Android Developer Relations Engineer at Google, helping developers build beautiful apps with Jetpack Compose. She has been working with Android for more than 10 years, previous work covering news at upday, payment solutions at payleven and navigation services at Garmin."},{"id":"7","name":"Lidia Gaymond","mediumPage":"","twitter":"","imageUrl":"","bio":""},{"id":"8","name":"Vicki Amin","mediumPage":"","twitter":"","imageUrl":"","bio":""},{"id":"9","name":"Marcel Pintó","mediumPage":"https://medium.com/@marxallski","twitter":"https://twitter.com/marxallski","imageUrl":"https://pbs.twimg.com/profile_images/1196804242310234112/6pq8qguX_400x400.jpg","bio":""},{"id":"10","name":"Krish Vitaldevara","mediumPage":"","twitter":"https://twitter.com/vitaldevara","imageUrl":"https://pbs.twimg.com/profile_images/1326982232100122626/GDN-QoX-_400x400.png","bio":""},{"id":"11","name":"Gerry Fan","mediumPage":"","twitter":"","imageUrl":"","bio":""},{"id":"12","name":"Pietro Maggi","mediumPage":"https://medium.com/@pmaggi","twitter":"https://twitter.com/pfmaggi","imageUrl":"https://pbs.twimg.com/profile_images/1149328128868794370/T59BFarK_400x400.png","bio":"Pietro joined Android DevRel in 2018, and has worked supporting Jetpack WorkManager, large screen devices and lately, Android Enterprise."},{"id":"13","name":"Rohan Shah","mediumPage":"","twitter":"twitter.com/rohanscloud","imageUrl":"https://pbs.twimg.com/profile_images/828723313396502530/dfVBFeZP_400x400.jpg","bio":"Product Manager on the System UI team, experienced Android developer in a past life. Focused on customization, gesture navigation, and smooth motion."},{"id":"14","name":"Dave Burke","mediumPage":"","twitter":"https://twitter.com/davey_burke","imageUrl":"https://pbs.twimg.com/profile_images/1035017742825357312/f0IHVAG1_400x400.jpg","bio":""},{"id":"15","name":"Meghan Mehta","mediumPage":"https://medium.com/@magicalmeghan","twitter":"https://twitter.com/adressyengineer","imageUrl":"https://pbs.twimg.com/profile_images/1121847353214824449/wIB-dD0__400x400.jpg","bio":"Meghan has been in Google DevRel since 2018 and loves every minute of it. She mostly works on training and is passionate about making learning Android accessible to all. Outside of work you can find her singing, dancing, or petting dogs."},{"id":"16","name":"Anna Bernbaum","mediumPage":"","twitter":"","imageUrl":"","bio":"Anna Bernbaum is a Product Manager for Wear OS, she specifically focusses on Watch Faces, Complications and Tiles."},{"id":"17","name":"Adarsh Fernando","mediumPage":"","twitter":"https://twitter.com/AdarshFernando","imageUrl":"https://pbs.twimg.com/profile_images/1291755351298121728/SFGD_KCm_400x400.jpg","bio":""},{"id":"18","name":"Madan Ankapura","mediumPage":"","twitter":"https://twitter.com/madan_ankapura","imageUrl":"https://pbs.twimg.com/profile_images/195140822/IMG_0612_400x400.JPG","bio":""},{"id":"19","name":"Kateryna Semenova","mediumPage":"https://medium.com/@katerynasemenova","twitter":"https://twitter.com/SKateryna","imageUrl":"https://miro.medium.com/fit/c/176/176/2*MWidJNpRKpwnPhMYw1hBTA.png","bio":"Kate joined Google Android DevRel team in 2020 with the focus on Android performance. She worked on Android12 features, such as Splash screens and App links as well as App startup improvements. Right now she is working on new Deep links tools for develoeprs.\n\nBefore Google, Kate worked as an Android engineer at Lyft. She built LyftPink membership, ride passes, subscriptions and users onboarding flow."},{"id":"20","name":"Rahul Ravikumar","mediumPage":"https://medium.com/@rahulrav","twitter":"https://twitter.com/tikurahul","imageUrl":"https://pbs.twimg.com/profile_images/839866273160822785/sLb2Ld53_400x400.jpg","bio":"Software Engineer on the Toolkit team. Recent projects include Jetpack Macrobenchmarks, Baseline Profiles and WorkManager."},{"id":"21","name":"Chris Craik","mediumPage":"https://medium.com/@chriscraik","twitter":"https://twitter.com/chris_craik","imageUrl":"https://pbs.twimg.com/profile_images/865356883971919872/EkFpz3r1_400x400.jpg","bio":""},{"id":"22","name":"Alex Vanyo","mediumPage":"https://medium.com/@alexvanyo","twitter":"https://twitter.com/alex_vanyo","imageUrl":"https://pbs.twimg.com/profile_images/1431339735931305989/nOE2mmi2_400x400.jpg","bio":"Alex joined Android DevRel in 2021, and has worked supporting form factors from small watches to large foldables and tablets. His special interests include insets, Compose, testing and state."},{"id":"23","name":"Manuel Vivo","mediumPage":"https://medium.com/@manuelvicnt","twitter":"https://twitter.com/manuelvicnt","imageUrl":"https://pbs.twimg.com/profile_images/1126564755202760705/x3qLaiBB_400x400.jpg","bio":"Manuel is an Android Developer Relations Engineer at Google. With previous experience at Capital One, he currently focuses on App Architecture, Kotlin & Coroutines, Dependency Injection and Jetpack Compose."},{"id":"24","name":"Arjun Dayal","mediumPage":"","twitter":"","imageUrl":"","bio":""},{"id":"25","name":"Murat Yener","mediumPage":"https://medium.com/@yenerm","twitter":"https://twitter.com/yenerm","imageUrl":"https://pbs.twimg.com/profile_images/1201558524385316866/7lBmCYmD_400x400.jpg","bio":""},{"id":"26","name":"Alex Saveau","mediumPage":"https://medium.com/@SUPERCILEX","twitter":"https://twitter.com/SUPERCILEX","imageUrl":"https://pbs.twimg.com/profile_images/1093296033759604736/kO9WSDy4_400x400.jpg","bio":""},{"id":"27","name":"Paul Lammertsma","mediumPage":"https://medium.com/@officesunshine","twitter":"https://twitter.com/officesunshine","imageUrl":"https://pbs.twimg.com/profile_images/1281278859506331651/2XBTbfIK_400x400.jpg","bio":"Paul is an Android Developer Relations Engineer at Google, supporting developers for TVs, watches and large screens. He has passionate about building amazing Android experiences since Froyo."},{"id":"28","name":"Caren Chang","mediumPage":"https://medium.com/@calren24","twitter":"https://twitter.com/calren24","imageUrl":"https://pbs.twimg.com/profile_images/1521260707521519617/cW-G-T2R_400x400.jpg","bio":"Developer Relations Engineer on the Android team, with a focus on Accessibiliity. "},{"id":"29","name":"Mayuri Khinvasara Khabya","mediumPage":"https://medium.com/@mayuri.k18","twitter":"https://twitter.com/mayuri_k","imageUrl":"https://pbs.twimg.com/profile_images/769886964170436608/6tsEB7zi_400x400.jpg","bio":"Mayuri is an Android Developer Relations Engineer and has worked across Android TV, App performance and device backup"},{"id":"30","name":"Romain Guy","mediumPage":"https://medium.com/@romainguy","twitter":"https://twitter.com/romainguy","imageUrl":"https://pbs.twimg.com/profile_images/459175652105527298/6qGNL0QI_400x400.jpeg","bio":"Romain joined the Android team in 2007, working on the UI Toolkit and the Graphics pipeline for many years. He now leads the Toolkit and Jetpack teams."},{"id":"31","name":"Chet Haase","mediumPage":"https://chethaase.medium.com/","twitter":"https://twitter.com/chethaase","imageUrl":"https://miro.medium.com/max/3150/1*5pR0GFT8Cosn_zGIdRfc0Q.jpeg","bio":"Chet joined the Android team in 2010, where he has worked as an engineer and lead for the UI Toolkit team, as Chief Android Advocate on the Developer Relations team, and now as an engineer on the Graphics team."},{"id":"32","name":"Tor Norbye","mediumPage":"","twitter":"https://twitter.com/tornorbye","imageUrl":"https://pbs.twimg.com/profile_images/1411058065839845376/SeUHA-sR_400x400.jpg","bio":"Tor joined the Android team in 2010, and leads engineering for Android Studio."},{"id":"33","name":"Nicole Laure","mediumPage":"","twitter":"https://twitter.com/nicolelaure","imageUrl":"https://pbs.twimg.com/profile_images/442979550285557760/0nq7QOTn_400x400.jpeg","bio":""},{"id":"34","name":"Yigit Boyar","mediumPage":"https://medium.com/@yigit","twitter":"https://twitter.com/yigitboyar","imageUrl":"https://pbs.twimg.com/profile_images/530840695347482624/me4HgEMU_400x400.jpeg","bio":"Yigit joined the Android team in 2014 and worked on various projects from RecyclerView to Architecture Components with the dream of making Android development better. Still trying :)"},{"id":"35","name":"Sean McQuillan","mediumPage":"https://medium.com/@objcode","twitter":"https://twitter.com/objcode","imageUrl":"https://pbs.twimg.com/profile_images/913524063175286784/nhyO1wkU_400x400.jpg","bio":"Software Engineer on the Toolkit team. Working on making text 📜 sparkle ✨. Also helping melting face 🫠 render on your phone."},{"id":"36","name":"Ben Weiss","mediumPage":"https://medium.com/@keyboardsurfer","twitter":"https://twitter.com/keyboardsurfer","imageUrl":"https://pbs.twimg.com/profile_images/1455956781830709255/GqeqbgEY_400x400.jpg","bio":"Ben works as an Engineer on the Android Developer Relations team. Over the years he contributed to many areas of Android. To get the latest info on what's up with Ben, read one of his articles or follow him on Twitter."},{"id":"37","name":"Carmen Jackson","mediumPage":"","twitter":"","imageUrl":"https://media-exp1.licdn.com/dms/image/C5603AQE8wPl4iNUPeA/profile-displayphoto-shrink_200_200/0/1553574292680?e=1655337600&v=beta&t=6zsc9QaC95DM19uXbG3FJQwUIpObp4XeO-WsLzlNGIo","bio":"Carmen has been an engineer on the Android Platform Performance team since 2016 and has worked with Android for over 10 years. She currently leads a team focused on improving application performance."},{"id":"38","name":"TJ Dahunsi","mediumPage":"https://tunjid.medium.com/","twitter":"","imageUrl":"https://pbs.twimg.com/profile_images/1504815529848152074/iA9Q_QME_400x400.jpg","bio":"Tj is an engineer on the Android Developer Relations Team working on app architecture. He's also a connoiseur of fine memes."},{"id":"39","name":"Shailen Tuli","mediumPage":"","twitter":"https://twitter.com/shailentuli","imageUrl":"https://pbs.twimg.com/profile_images/1521593961/shailen_400x400.jpg","bio":""},{"id":"40","name":"Kailiang Chen","mediumPage":"https://medium.com/@bbfee","twitter":"https://twitter.com/KailiangChen3","imageUrl":"https://avatars.githubusercontent.com/u/1756481?v=4","bio":"Kailiang is a software engineer on Android Camera Platform team. He works on Jetpack CameraX. In the past, he worked at Youtube and Uber."},{"id":"41","name":"Jeremy Walker","mediumPage":"https://medium.com/@codingjeremy","twitter":"https://twitter.com/codingjeremy","imageUrl":"https://pbs.twimg.com/profile_images/1124334569887428610/etnNE5hz_400x400.png","bio":""},{"id":"42","name":"Don Turner","mediumPage":"https://medium.com/@donturner","twitter":"https://twitter.com/donturner","imageUrl":"https://pbs.twimg.com/profile_images/1282701855555018753/xcnlScis_400x400.jpg","bio":"Don is an engineer on the Android Developer Relations team. He has founded and led several businesses in the software development, digital marketing and events industries. He joined Google in 2014 and focuses on improving Android app architecture. "},{"id":"43","name":"Lilian Young","mediumPage":"","twitter":"https://twitter.com/memnus","imageUrl":"https://developer.android.com/events/dev-summit/images/speakers/lilian_young_720.jpg","bio":"Lilian has been part of the Android Vulnerability Rewards Program nearly from the beginning, since joining Android Security Assurance in 2016. As a member of both the vulnerability assessment team and the design review team for upcoming Android versions, they review bugs and features to determine which is which. "},{"id":"44","name":"Wenhung Teng","mediumPage":"","twitter":"","imageUrl":"https://lh3.googleusercontent.com/a-/AOh14Ghsnwfup3BUugAxNwQsAD8Ph_CWNrH8SL6Wb8OZ","bio":""},{"id":"45","name":"Charcoal Chen","mediumPage":"https://medium.com/@charcoalchen","twitter":"","imageUrl":"https://miro.medium.com/fit/c/262/262/0*XgfVFjuchPekBYfh","bio":"Charcoal Chen is a software engineer on Jetpack CameraX team."},{"id":"46","name":"Mike Yerou","mediumPage":"","twitter":"","imageUrl":"","bio":""},{"id":"47","name":"Peter Visontay","mediumPage":"","twitter":"","imageUrl":"","bio":""},{"id":"48","name":"Marcelo Hernandez","mediumPage":"","twitter":"","imageUrl":"","bio":""},{"id":"49","name":"Daniel Santiago","mediumPage":"https://medium.com/@danysantiago","twitter":"","imageUrl":"https://miro.medium.com/fit/c/262/262/2*fe7m2z-tRofWYjaiXihi9g.jpeg","bio":""},{"id":"50","name":"Brad Corso","mediumPage":"https://medium.com/@bcorso1","twitter":"","imageUrl":"","bio":""},{"id":"51","name":"Jonathan Koren","mediumPage":"https://medium.com/@jdkoren","twitter":"","imageUrl":"","bio":"Jonathan is an Android Developer Relations Engineer at Google, with particular interest in UI and app architecture. In the past, he developed Android applications and libraries at Yahoo and Personal Capital. In the future, he will have fixed the bugs he is writing in the present (hopefully)."},{"id":"52","name":"Anna-Chiara Bellini","mediumPage":"","twitter":"https://twitter.com/dr0nequeen","imageUrl":"https://pbs.twimg.com/profile_images/852490449961066496/AxcrR7xX_400x400.jpg","bio":"Anna-Chiara joined Google in 2019 after a long career as a Computer Engineer and Startup founder. Now she focuses on making Android developers' lives easier. "},{"id":"53","name":"Amanda Alexander","mediumPage":"","twitter":"","imageUrl":"https://developer.android.com/events/dev-summit/images/speakers/amanda_alexander_720.jpg","bio":""},{"id":"54","name":"Android Developers Backstage","mediumPage":"","twitter":"","imageUrl":"https://ssl-static.libsyn.com/p/assets/d/b/3/6/db362cf09b34bd4ce5bbc093207a2619/height_250_width_250_Android_Devs_Backstage_Thumb_v2.png","bio":"Android Developers Backstage is a podcast by and for Android developers. Hosted by developers from the Android platform team, this show covers topics of interest to Android programmers, with in-depth discussions and interviews with engineers on the Android team at Google."},{"id":"55","name":"Nicole Borrelli","mediumPage":"https://medium.com/@borrelli","twitter":"","imageUrl":"","bio":""},{"id":"56","name":"Dan Saadati","mediumPage":"","twitter":"","imageUrl":"","bio":""},{"id":"57","name":"Nick Butcher","mediumPage":"https://medium.com/@crafty","twitter":"https://twitter.com/crafty","imageUrl":"https://pbs.twimg.com/profile_images/964457443517444097/AiMNiPtx_400x400.jpg","bio":""},{"id":"58","name":"Ian Lake","mediumPage":"https://medium.com/@ianhlake","twitter":"https://twitter.com/ianhlake","imageUrl":"https://pbs.twimg.com/profile_images/438932314504978434/uj3Sgwy9_400x400.jpeg","bio":"Ian is a software engineer on the Android Toolkit team at Google. He leads the teams working on the Navigation Component, Fragments, and the integration of fundamental building blocks such as Lifecycle, Saved State, and Activity APIs across Jetpack."},{"id":"59","name":"Diana Wong","mediumPage":"","twitter":"https://twitter.com/droidiana1000","imageUrl":"https://pbs.twimg.com/profile_images/1268358805537951744/zCYvvpvV_400x400.jpg","bio":"Diana is a Product Manager on the Android Developer team, owning the Large Screen app ecosystem and loves Android foldables and tablets. Previously she's worked on Android Jetpack, the NDK, and the Android runtime (ART), among other things."},{"id":"60","name":"Patricia Correa","mediumPage":"","twitter":"","imageUrl":"https://pbs.twimg.com/profile_images/940666196050944000/w12h2qOz_400x400.jpg","bio":""},{"id":"61","name":"The Modern Android Development Team","mediumPage":"","twitter":"","imageUrl":"","bio":"Development tools, APIs, language, and distribution technologies recommended by the Android team to help developers be productive and create better apps that run across billions of devices."},{"id":"62","name":"Maru Ahues Bouza","mediumPage":"https://medium.com/@mahues","twitter":"https://twitter.com/mabouza","imageUrl":"https://pbs.twimg.com/profile_images/1496362581253967872/4S4SBVYC_400x400.jpg","bio":"Director of Android Developer Relations @ Google. Venezolana 🇻🇪."},{"id":"63","name":"Purnima Kochikar","mediumPage":"","twitter":"https://twitter.com/purnimakochikar","imageUrl":"https://media-exp1.licdn.com/dms/image/C4D03AQHUHmUGiioagQ/profile-displayphoto-shrink_800_800/0/1639519434507?e=2147483647&v=beta&t=OIt4yJkbJ7Suewlgyc7OrsLweMLBULRBvVHb9h4ZX5o","bio":"VP, Google Play, Apps & Games at Google"},{"id":"64","name":"Yasmine Evjen","mediumPage":"https://yasmineevjen.medium.com/","twitter":"https://twitter.com/yasmineevjen","imageUrl":"https://miro.medium.com/fit/c/96/96/1*xK0hkXcG3TYOXDkdxorXOA.jpeg","bio":"Community Lead, Android Developer Relations"},{"id":"65","name":"Jolanda Verhoef","mediumPage":"https://medium.com/@lojanda","twitter":"https://twitter.com/Lojanda","imageUrl":"https://pbs.twimg.com/profile_images/1396863889996980225/qBgkY5rY_400x400.jpg","bio":"Android Developer Relations Engineer @Google, focusing on Jetpack Compose 🚀"},{"id":"66","name":"Rakesh Iyer","mediumPage":"","twitter":"","imageUrl":"","bio":"Staff Software Engineer"},{"id":"67","name":"Leland Rechis","mediumPage":"","twitter":"","imageUrl":"","bio":"Group Product Manager"},{"id":"68","name":"Chris Arriola","mediumPage":"https://medium.com/@arriolachris","twitter":"https://twitter.com/arriolachris","imageUrl":"https://pbs.twimg.com/profile_images/1392882006074093568/zITOTjRR_400x400.jpg","bio":"Android Developer Relations Engineer at Google"},{"id":"69","name":"Ryan O’Leary","mediumPage":"","twitter":"","imageUrl":"","bio":""},{"id":"70","name":"Wojtek Kaliciński","mediumPage":"https://medium.com/@wkalicinski","twitter":"https://twitter.com/wkalic","imageUrl":"https://pbs.twimg.com/profile_images/906094366388875264/RzDjkVh7_400x400.jpg","bio":"Android Developer Relations Engineer"},{"id":"71","name":"Boris Farber","mediumPage":"","twitter":"https://twitter.com/BorisFarber","imageUrl":"","bio":""},{"id":"72","name":"Xavier Ducrohet","mediumPage":"","twitter":"https://twitter.com/droidxav","imageUrl":"","bio":""},{"id":"73","name":"Niharika Arora","mediumPage":"","twitter":"https://twitter.com/theDroidLady","imageUrl":"","bio":""},{"id":"74","name":"Marcus Leal","mediumPage":"","twitter":"","imageUrl":"","bio":""},{"id":"75","name":"Kseniia Shumelchyk","mediumPage":"","twitter":"https://twitter.com/kseniiaS","imageUrl":"https://media-exp1.licdn.com/dms/image/C4D03AQGdVWXQeoKI3g/profile-displayphoto-shrink_800_800/0/1635165725069?e=2147483647&v=beta&t=lyf4j6SsqBidEZQZem5Ewi62QkqERPxZWVNByKeRMks","bio":"Developer Relations Engineer @Google focused on ⌚️and 📱. Former Android @GoogleDevExpert, #GDG and @WomenTechmakers 🇺🇦."},{"id":"76","name":"Tom Grinsted","mediumPage":"","twitter":"","imageUrl":"","bio":"Group Product Manager, Google Play"},{"id":"77","name":"Fred Chung","mediumPage":"","twitter":"https://twitter.com/fredchung","imageUrl":"https://pbs.twimg.com/profile_images/2670736355/1a3614dbe62d9ba31933626e273a3f77_400x400.jpeg","bio":"Android Developer Relations Engineer at Google"},{"id":"78","name":"Kat Kuan","mediumPage":"","twitter":"https://twitter.com/katherine_kuan","imageUrl":"https://pbs.twimg.com/profile_images/1062503708964020224/gXpwDkOM_400x400.jpg","bio":"Android Developer Relations Engineer at Google"},{"id":"79","name":"Summers Pitman","mediumPage":"https://medium.com/@mrsummers","twitter":"","imageUrl":"https://miro.medium.com/fit/c/176/176/0*8wWgPmCgxariqpFo","bio":""},{"id":"80","name":"Ben Trengrove","mediumPage":"https://medium.com/androiddevelopers/jetpack-compose-composition-tracing-9ec2b3aea535","twitter":"https://twitter.com/bentrengrove","imageUrl":"https://pbs.twimg.com/profile_images/1536488024661700609/zxdNBhWT_400x400.jpg","bio":"Android Developer Relations Engineer at Google"},{"id":"81","name":"Takeshi Hagikura","mediumPage":"https://medium.com/@thagikura","twitter":"","imageUrl":"https://miro.medium.com/fit/c/176/176/1*esL5OPETU5LMXNO-8os7dw.jpeg","bio":"Android Developer Relations Engineer at Google"},{"id":"82","name":"Miłosz Moczkowski","mediumPage":"https://medium.com/@m_moczkowski","twitter":"https://twitter.com/m_moczkowski?lang=en","imageUrl":"https://pbs.twimg.com/profile_images/1571116773612654592/sAJD-u-T_400x400.jpg","bio":"Android Developer Relations Engineer at Google"},{"id":"83","name":"Sabs","mediumPage":"https://medium.com/@iamsabs","twitter":"","imageUrl":"","bio":"Developer Relations Engineer at Google"},{"id":"84","name":"Alex Rocha","mediumPage":"","twitter":"","imageUrl":"","bio":"Developer Relations Engineer at Google"},{"id":"85","name":"Donovan McMurray","mediumPage":"","twitter":"","imageUrl":"","bio":"CameraX Developer Relations Engineer"},{"id":"86","name":"Ataul Munim","mediumPage":"https://medium.com/@ataulm","twitter":"https://twitter.com/ataulm","imageUrl":"https://pbs.twimg.com/profile_images/1586614206803083266/BrGIIU23_400x400.jpg","bio":"Android Developer Relations Engineer at Google"},{"id":"87","name":"Yafit Becher","mediumPage":"","twitter":"","imageUrl":"","bio":"Google Play Product Manager at Google"},{"id":"88","name":"Luis Dorelli","mediumPage":"","twitter":"","imageUrl":"","bio":"Google Play Software Engineer at Google"},{"id":"89","name":"Terence Zhang","mediumPage":"https://medium.com/@tzterencezhang","twitter":"","imageUrl":"","bio":"Developer Relations Engineer at Google"},{"id":"90","name":"Roberto Orgiu","mediumPage":"https://tiwiz.medium.com/","twitter":"https://twitter.com/_tiwiz","imageUrl":"https://pbs.twimg.com/profile_images/1504459589877698562/CncWER1I_400x400.jpg","bio":"@AndroidDev Relations Engineer @Google | Former @nytimes | 🚴🚵📷 👨‍👩‍👧‍👦"},{"id":"91","name":"Alejandra Stamato","mediumPage":"https://medium.com/@astamato","twitter":"https://twitter.com/astamatok","imageUrl":"https://developer.android.com/events/dev-summit/images/speakers/alejandra-stamato.jpg","bio":"Android Developer Relations Engineer 🥑 @Google #JetpackCompose | 🇦🇷 @ 🏴󠁧󠁢󠁥󠁮󠁧󠁿👑 | Ex 🇮🇪🍀"},{"id":"92","name":"Jason Tang","mediumPage":"","twitter":"","imageUrl":"","bio":"Product Manager at Google"},{"id":"93","name":"Diego Zuluaga","mediumPage":"","twitter":"","imageUrl":"","bio":"Developer Relations Engineer at Google"},{"id":"94","name":"Michael Mauzy","mediumPage":"","twitter":"","imageUrl":"","bio":"Developer Documentation at Google"},{"id":"95","name":"Dan Galpin","mediumPage":"https://medium.com/@dagalpin","twitter":"https://twitter.com/dagalpin","imageUrl":"https://developer.android.com/events/dev-summit/images/speakers/daniel-galpin_720.jpg","bio":"Android Developer Relations Engineer at Google"},{"id":"96","name":"Rebecca Franks","mediumPage":"https://medium.com/@riggaroo ","twitter":"https://twitter.com/riggaroo","imageUrl":"https://developer.android.com/events/dev-summit/images/speakers/rebecca-franks_720.jpg","bio":"Rebecca is a Developer Relations Engineer on the Android team. Having joined the team in 2022, she is focused on Jetpack Compose: all things animation and graphics. Prior to joining Google she worked on a couple of interesting projects such as a Image/Video editor and TV Streaming app. "},{"id":"97","name":"Rebecca Gutteridge","mediumPage":"","twitter":"https://twitter.com/BexSG_","imageUrl":"https://twitter.com/BexSG_/photo","bio":"Senior Android Developer Relations Engineer at Google"},{"id":"98","name":"Sachiyo Sugimoto","mediumPage":"","twitter":"","imageUrl":"","bio":"Android Partner Engineering"},{"id":"99","name":"Todd Burner","mediumPage":"https://medium.com/@tburner","twitter":"","imageUrl":"","bio":"Developer Relations Engineer"}] - """.trimIndent() + const val AUTHORS = "authors.json" + const val DATA = "data.json" + const val TOPICS = "topics.json" } - -/* ktlint-enable max-line-length */ diff --git a/core/network/src/main/java/com/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource.kt b/core/network/src/main/java/com/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource.kt index 9bbe0bed3..027034169 100644 --- a/core/network/src/main/java/com/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource.kt +++ b/core/network/src/main/java/com/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource.kt @@ -16,6 +16,7 @@ package com.google.samples.apps.nowinandroid.core.network.fake +import JvmUnitTestFakeAssetManager import com.google.samples.apps.nowinandroid.core.network.Dispatcher import com.google.samples.apps.nowinandroid.core.network.NiaDispatchers.IO import com.google.samples.apps.nowinandroid.core.network.NiaNetworkDataSource @@ -26,29 +27,30 @@ import com.google.samples.apps.nowinandroid.core.network.model.NetworkTopic import javax.inject.Inject import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.withContext -import kotlinx.serialization.decodeFromString import kotlinx.serialization.json.Json +import kotlinx.serialization.json.decodeFromStream /** * [NiaNetworkDataSource] implementation that provides static news resources to aid development */ class FakeNiaNetworkDataSource @Inject constructor( @Dispatcher(IO) private val ioDispatcher: CoroutineDispatcher, - private val networkJson: Json + private val networkJson: Json, + private val assets: FakeAssetManager = JvmUnitTestFakeAssetManager, ) : NiaNetworkDataSource { override suspend fun getTopics(ids: List?): List = withContext(ioDispatcher) { - networkJson.decodeFromString(FakeDataSource.topicsData) + assets.open(FakeDataSource.TOPICS).use(networkJson::decodeFromStream) } override suspend fun getNewsResources(ids: List?): List = withContext(ioDispatcher) { - networkJson.decodeFromString(FakeDataSource.data) + assets.open(FakeDataSource.DATA).use(networkJson::decodeFromStream) } override suspend fun getAuthors(ids: List?): List = withContext(ioDispatcher) { - networkJson.decodeFromString(FakeDataSource.authors) + assets.open(FakeDataSource.AUTHORS).use(networkJson::decodeFromStream) } override suspend fun getTopicChangeList(after: Int?): List = diff --git a/core/network/src/test/java/com/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSourceTest.kt b/core/network/src/test/java/com/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSourceTest.kt index 78d28d98b..770788268 100644 --- a/core/network/src/test/java/com/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSourceTest.kt +++ b/core/network/src/test/java/com/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSourceTest.kt @@ -16,8 +16,15 @@ package com.google.samples.apps.nowinandroid.core.network.fake +import JvmUnitTestFakeAssetManager +import com.google.samples.apps.nowinandroid.core.model.data.NewsResourceType.Codelab +import com.google.samples.apps.nowinandroid.core.network.model.NetworkNewsResource +import com.google.samples.apps.nowinandroid.core.network.model.NetworkTopic import kotlinx.coroutines.test.StandardTestDispatcher import kotlinx.coroutines.test.runTest +import kotlinx.datetime.LocalDateTime +import kotlinx.datetime.TimeZone +import kotlinx.datetime.toInstant import kotlinx.serialization.json.Json import org.junit.Assert.assertEquals import org.junit.Before @@ -33,14 +40,22 @@ class FakeNiaNetworkDataSourceTest { fun setUp() { subject = FakeNiaNetworkDataSource( ioDispatcher = testDispatcher, - networkJson = Json { ignoreUnknownKeys = true } + networkJson = Json { ignoreUnknownKeys = true }, + assets = JvmUnitTestFakeAssetManager ) } @Test fun testDeserializationOfTopics() = runTest(testDispatcher) { assertEquals( - FakeDataSource.sampleTopic, + NetworkTopic( + id = "1", + name = "Headlines", + shortDescription = "News you'll definitely be interested in", + longDescription = "The latest events and announcements from the world of Android development.", + url = "", + imageUrl = "https://firebasestorage.googleapis.com/v0/b/now-in-android.appspot.com/o/img%2Fic_topic_Headlines.svg?alt=media&token=506faab0-617a-4668-9e63-4a2fb996603f" + ), subject.getTopics().first() ) } @@ -48,8 +63,26 @@ class FakeNiaNetworkDataSourceTest { @Test fun testDeserializationOfNewsResources() = runTest(testDispatcher) { assertEquals( - FakeDataSource.sampleResource, - subject.getNewsResources().find { it.id == FakeDataSource.sampleResource.id } + NetworkNewsResource( + id = "125", + title = "Android Basics with Compose", + content = "We released the first two units of Android Basics with Compose, our first free course that teaches Android Development with Jetpack Compose to anyone; you do not need any prior programming experience other than basic computer literacy to get started. ", + url = "https://android-developers.googleblog.com/2022/05/new-android-basics-with-compose-course.html", + headerImageUrl = "https://developer.android.com/images/hero-assets/android-basics-compose.svg", + authors = listOf("25"), + publishDate = LocalDateTime( + year = 2022, + monthNumber = 5, + dayOfMonth = 4, + hour = 23, + minute = 0, + second = 0, + nanosecond = 0 + ).toInstant(TimeZone.UTC), + type = Codelab, + topics = listOf("2", "3", "10"), + ), + subject.getNewsResources().find { it.id == "125" } ) } } From 67dea1c1365f1fcbd4708b9c5f1dc81770ab66a7 Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Fri, 11 Nov 2022 14:48:50 +0100 Subject: [PATCH 05/23] Fix spotless issues --- .../repository/fake/FakeAuthorsRepository.kt | 4 ++-- .../repository/fake/FakeNewsRepository.kt | 4 ++-- .../repository/fake/FakeTopicsRepository.kt | 4 ++-- .../main/java/JvmUnitTestFakeAssetManager.kt | 22 +++++++++---------- .../fake/FakeNiaNetworkDataSourceTest.kt | 4 ++++ 5 files changed, 21 insertions(+), 17 deletions(-) diff --git a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/fake/FakeAuthorsRepository.kt b/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/fake/FakeAuthorsRepository.kt index 21edb4ffe..566214dd7 100644 --- a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/fake/FakeAuthorsRepository.kt +++ b/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/fake/FakeAuthorsRepository.kt @@ -24,6 +24,8 @@ import com.google.samples.apps.nowinandroid.core.network.NiaDispatchers.IO import com.google.samples.apps.nowinandroid.core.network.fake.FakeAssetManager import com.google.samples.apps.nowinandroid.core.network.fake.FakeDataSource import com.google.samples.apps.nowinandroid.core.network.model.NetworkAuthor +import java.io.InputStream +import javax.inject.Inject import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flow @@ -31,8 +33,6 @@ import kotlinx.coroutines.flow.flowOn import kotlinx.coroutines.flow.map import kotlinx.serialization.json.Json import kotlinx.serialization.json.decodeFromStream -import java.io.InputStream -import javax.inject.Inject /** * Fake implementation of the [AuthorsRepository] that returns hardcoded authors. diff --git a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/fake/FakeNewsRepository.kt b/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/fake/FakeNewsRepository.kt index 78b64d124..e9d965ae6 100644 --- a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/fake/FakeNewsRepository.kt +++ b/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/fake/FakeNewsRepository.kt @@ -27,14 +27,14 @@ import com.google.samples.apps.nowinandroid.core.network.NiaDispatchers.IO import com.google.samples.apps.nowinandroid.core.network.fake.FakeAssetManager import com.google.samples.apps.nowinandroid.core.network.fake.FakeDataSource import com.google.samples.apps.nowinandroid.core.network.model.NetworkNewsResource +import java.io.InputStream +import javax.inject.Inject import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.flowOn import kotlinx.serialization.json.Json import kotlinx.serialization.json.decodeFromStream -import java.io.InputStream -import javax.inject.Inject /** * Fake implementation of the [NewsRepository] that retrieves the news resources from a JSON String. diff --git a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/fake/FakeTopicsRepository.kt b/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/fake/FakeTopicsRepository.kt index bfb09439a..d8cdaa51a 100644 --- a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/fake/FakeTopicsRepository.kt +++ b/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/fake/FakeTopicsRepository.kt @@ -24,6 +24,8 @@ import com.google.samples.apps.nowinandroid.core.network.NiaDispatchers.IO import com.google.samples.apps.nowinandroid.core.network.fake.FakeAssetManager import com.google.samples.apps.nowinandroid.core.network.fake.FakeDataSource import com.google.samples.apps.nowinandroid.core.network.model.NetworkTopic +import java.io.InputStream +import javax.inject.Inject import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flow @@ -31,8 +33,6 @@ import kotlinx.coroutines.flow.flowOn import kotlinx.coroutines.flow.map import kotlinx.serialization.json.Json import kotlinx.serialization.json.decodeFromStream -import java.io.InputStream -import javax.inject.Inject /** * Fake implementation of the [TopicsRepository] that retrieves the topics from a JSON String, and diff --git a/core/network/src/main/java/JvmUnitTestFakeAssetManager.kt b/core/network/src/main/java/JvmUnitTestFakeAssetManager.kt index d840def9f..e4b2c7faa 100644 --- a/core/network/src/main/java/JvmUnitTestFakeAssetManager.kt +++ b/core/network/src/main/java/JvmUnitTestFakeAssetManager.kt @@ -1,17 +1,17 @@ /* * Copyright 2022 The Android Open Source Project * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at * - * https://www.apache.org/licenses/LICENSE-2.0 + * https://www.apache.org/licenses/LICENSE-2.0 * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ import androidx.annotation.VisibleForTesting @@ -34,10 +34,10 @@ internal object JvmUnitTestFakeAssetManager : FakeAssetManager { Missing Android resources properties file. Did you forget to enable the feature in the gradle build file? android.testOptions.unitTests.isIncludeAndroidResources = true - """.trimIndent() + """.trimIndent() } private val properties = Properties().apply { config.openStream().use(::load) } private val assets = File(properties["android_merged_assets"].toString()) override fun open(fileName: String): InputStream = File(assets, fileName).inputStream() -} \ No newline at end of file +} diff --git a/core/network/src/test/java/com/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSourceTest.kt b/core/network/src/test/java/com/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSourceTest.kt index 770788268..2147b8cc4 100644 --- a/core/network/src/test/java/com/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSourceTest.kt +++ b/core/network/src/test/java/com/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSourceTest.kt @@ -48,6 +48,7 @@ class FakeNiaNetworkDataSourceTest { @Test fun testDeserializationOfTopics() = runTest(testDispatcher) { assertEquals( + /* ktlint-disable max-line-length */ NetworkTopic( id = "1", name = "Headlines", @@ -56,6 +57,7 @@ class FakeNiaNetworkDataSourceTest { url = "", imageUrl = "https://firebasestorage.googleapis.com/v0/b/now-in-android.appspot.com/o/img%2Fic_topic_Headlines.svg?alt=media&token=506faab0-617a-4668-9e63-4a2fb996603f" ), + /* ktlint-enable max-line-length */ subject.getTopics().first() ) } @@ -63,6 +65,7 @@ class FakeNiaNetworkDataSourceTest { @Test fun testDeserializationOfNewsResources() = runTest(testDispatcher) { assertEquals( + /* ktlint-disable max-line-length */ NetworkNewsResource( id = "125", title = "Android Basics with Compose", @@ -82,6 +85,7 @@ class FakeNiaNetworkDataSourceTest { type = Codelab, topics = listOf("2", "3", "10"), ), + /* ktlint-enable max-line-length */ subject.getNewsResources().find { it.id == "125" } ) } From e128f9b877301a65c3c2f282aa9695ff2ad38e06 Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Fri, 11 Nov 2022 15:29:05 +0100 Subject: [PATCH 06/23] Fix lint crash --- core/network/lint.xml | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 core/network/lint.xml diff --git a/core/network/lint.xml b/core/network/lint.xml new file mode 100644 index 000000000..bdb5e1f97 --- /dev/null +++ b/core/network/lint.xml @@ -0,0 +1,25 @@ + + + + + + + + From 321b1602e10c90f5fd35738d6b8727f0ed130f6a Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Fri, 11 Nov 2022 15:35:20 +0100 Subject: [PATCH 07/23] Remove duplicated link --- core/network/src/main/java/JvmUnitTestFakeAssetManager.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/core/network/src/main/java/JvmUnitTestFakeAssetManager.kt b/core/network/src/main/java/JvmUnitTestFakeAssetManager.kt index e4b2c7faa..79370d5a8 100644 --- a/core/network/src/main/java/JvmUnitTestFakeAssetManager.kt +++ b/core/network/src/main/java/JvmUnitTestFakeAssetManager.kt @@ -27,7 +27,6 @@ import java.util.Properties */ @VisibleForTesting internal object JvmUnitTestFakeAssetManager : FakeAssetManager { - // https://developer.android.com/reference/tools/gradle-api/7.3/com/android/build/api/dsl/UnitTestOptions private val config = requireNotNull(javaClass.getResource("com/android/tools/test_config.properties")) { """ From 0e6f16e0a8b650a42a361c361e13dca972234487 Mon Sep 17 00:00:00 2001 From: Simon Marquis Date: Fri, 11 Nov 2022 15:43:29 +0100 Subject: [PATCH 08/23] Fix spotless issues --- core/network/lint.xml | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/core/network/lint.xml b/core/network/lint.xml index bdb5e1f97..59fd50bd5 100644 --- a/core/network/lint.xml +++ b/core/network/lint.xml @@ -1,19 +1,19 @@ - + + Copyright 2022 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> l#JM=~=GHUTG3GnOI6F()qs$kWf;Vb2)NX1nhuftxT&b ze7O%E>bJb&jX^jiG4}!ml3wuX^~=wO%Abw!`{m22>=|0wl+3ZL$wJLKl{O$C zikghDY}MHF8%wKaOhr#*s`WHpT_yyyb{!?t`snVe4Y!76IAce5`*@$1s+GmX*2gN) zrpPIp({ji^FH2|P_Ho~9Ha)CqvVE~+^~2JWbutBSuixxbHP61bFP(*DV-2Xm9%DE3 zPWKuA9(GUuP>{E(KuD67#X!-aM1qMv-f<$qR7=J|0YxGr5{oB0^go&Q#>{PY`}+ko z0G1^Si3LyCV)HWy4#0qmtE+e{0-|;7~#+pV;yxUijZ={MALxJ0{QG!-X0kIcJ*}BI%<)r6iFFc#Mh3S%&zSA{@PS~hYVGtw zbJKvF6FV`VAeOWM-cuvAJoxeRPplw^xdvv`T#&j|p2V;6rA3o^#OCAVwCeOM#4b^NkmDO zot0=mHSB{gi=zVgdviNWhDUs4IRjqhKtJ(h9~n_T3^8X#w7+AWt$#RTAs5io)&9Kv zBFpoksOYLAC!kclxkle%cD(KPqGGFIA)d{j^f!7X0V*nAbP!0SGq`-G4eEGZ@B40f zukJ4rAKi}D-)?>aSBTmOOmloMb}s-TeF?#E9vv7!3nvDib)nypC3FZ0QvkYgh74W2 zP8V=SJEzwV$pRN$1W%0uQu)cTY# z$c4t+ON9|1&cD1RQ_5HUSm#kO>x!^N+xxmE*2&qwIVv0fbst^)ImtUElW%es+A(aMXPTySKVH#>SwvmsF>RZP#kfv> z#IxDd0|8P)1E8&@%5@MrUu-B3W%8>DLSk2Hh%9JV@*|1%^_VykbeQgS=HHdeu$KNV z_jA9)H6v| zP98e+2z${Ei7Q402vlMMx+USarMpZW9UaZhpXFZp2eyjZp#xy z&CLr1wU9Fx&_dKSG&I!I$-t<>^H3lB5=bWPh1r&(!oH_=Q^N+%`Q3{U#U+ zTx_#-bnp&K+hG(VNucj-OLC6`M09qC$A=9){iE({d)UI?#Sp$F=+7g%2a zsrJ3;#k$CVzL1p(H*%kxc)VJ!$O?8eMwqcvF&KdO81F88Q$|Bl$Zhdu3M`|PrXAP$<+_#z-20$^G-hogz0y$mrfcRFqrIEefdh%B~#GKB!dblAkTjCJw$(J^k|8GO{rUxGM zzo3iRCSca(vKfyY43g%~HTVL#Jw1sg6La06RYxGP07PuLQHKaaCm=Y0N2Tmji%y*l zH*~>`7&=0O9PhEWOO=!^mV*0nxs*nm>{p&E`05j-i;VPhzK{0F(ehT+kXt$`TV;eG z4^PiNVi@Qdi$lzvQR5sI06Mpc)LnFNQc2?i^T`g@%N9 zA#qJlV)*0^RZ{3$uc{?6B$Zb!??t!@t8Kex z&0b3hd9q5nA52Txn5xd?)&wU62PY)tRVU=-F$s+fknw6j65bp_n zi0+;CQ=JKtli9QdlN&A) zj6}}q6NIFzr4?`q;1_=XMoj_4O8TC>Bs>&lz)1&%9G%+B-4sW><{9#T{2;yG8p<%p zvw>7iwCFETt5oYt;RT*!>-!P0%!`=NG!+zV3|ez~Kigu^qkxMVi|g>2CC%kDIFOuhKgNl0zCHO^R!Av2uBRHdn%*agQ@q4-@R6C9{i=i zQd^y<;rv-|CL?Vo^*6JEMIlGY$5WZ@Bs@;4J9T|bT~j6^( zYoRW6NTQ5`(V{6Rwq}#P-5TlBAWySHFwCaFz!*5BzcWAref46X*U3`>iY|x4NHK!_ zEmbcGfpF;ute`{PAtav0pcV}1kJRMYFa2n9&hJgSz`u%*{no46{E<3DPv=i5-#`Vq z!jS!t0`t(ir3-G_uW4;(d1dxUX4F-zNn{Knw|~6{U#+C<{^{!rL=FW>KL@-?hy+!B z%@){ZQ)GADn;}SiOpvrRHD%zeW=omj@3$l0An>rX)U=s35e9)f)CsZ}=om2;s%o~bq%wkAxAj?bo+V@Dwe@BO zjAf;ho0FQB$pkL0YH4Y|v~`Yg3$x3>}HyiD)z z{7ObFH0dOBM5Eu*B%r5%w&c8}3&7JT!KhL4NGz7~--%)sLZw22eSHc~X<`_gpVV0^ zpu0ZHnv2>8|I-uWUg?NDqurmAH$4pENf&{Ze#q_)Ah2zpnV`OJ> zUJZL^xoOGf!TnioJ=t;+vteSlNz-v+vfY9=gCw@Xj;x&7u6(G1Ns)Qb+*0-9$M+UE zbgFL-_dAc>|MW5|yJpuMxH|8=6hh70#32J@84el72gI*D44rUq$-tFK!~*AAPz&g> z(Z*xk!U1lZ@t04mQ8=%lA2w{Tqi4ZtZc1{9CID%**Vw~^)#y+s#dng zew3IAD$n^;lpkc4Gue-_&Fed`Bo1I;#P*|L*3?&L;j+>3(xlkuM9cHGdEJ^iEb9-w z=A(yTgwmkQV0B^#(b7?^Lt6aCJCsF-AT8tXP)5&4SSpbl53M+I-%*zn%dJ+-rq(wm zD0P*0g;W#46dLjiaD|J8x@Z;$c*?xGj<pVll@GogK8@hFQMYb&`A zJg6|JO%7i5YzgOh-mI3jyMXL|mCjxAC$;3zAiQPVMz?2jw0CTHV1Bl1d|-ZDj)j+( zhl60i8Lv-tJLke?YN6IzOGOTD7lBDxy==s^Z`NF34avPf1|S#b5~#L3>7EsDN#dpD zLDtfbhavyK`*l(9hJ(v~zLSHvRT;LuU+;bb7WwZ`$jQjSD>mM__!k-7Hw^GZK?ZGn zMi?BIo9xp(I3FGAfz$Q#r`Qwxi(|=d+a4W~!0wDiFDRtdD4lCOSUmLX81<)BwjG;m zwG8#R)G)BCDAm@R)=t-vc*dKgC;KW&K`gJ_+!?E}%7&6p@c7*wZi7Dy3%UAvIX%A! zF&vbv^8y7D8w~}?1xGC3di6aLSD1TzCB;+SE_XMvefI=N0g)vOsW8D2ANK`>0)uOh zXjBec06at5>x6gZ`}QRD)Ff)k`Unwk1rd4eYZeL~L zh+B552MVuTZR{&;wgA>a~P=-L$sc@*@vW0v`CnTt@Mgn6kTS@zGM$PXK zcW_Xe!g^P^zf$Kiw|#W~957L_okdUaCZn|Wmo$$&-|vp}OI+qeB)QkDl6>4K-g54% zlXC71_tBvQTGeHxj>g9H+@JN*nj5X_R!1zX@+(>HT>mZSC1&v0=~a~0#uj81G{-il z#ipfYm84~AtL52u43M|^sWD3;eJ4ikrL%A`i zQ_H$iM3c+EQApjDT55hvT#(~`Cu*BJm~ND!QR0|8-CKUc3Q95F<@px~iF7FmV8%)` zXcONK(!g=Cc6NfElgop;R6!0N3hFrEQ=Ub0<-HbDf_}sljgpm)m7@s0)s`_DdU55)$$2Ldbb`hX-hW3o<4@RM=1FQa#lV zGl(!)s)oVdgAyg<^k0d>@@Qq;b)>g3mQyIu0LJ59FQx;*B4Tt(@1Xu<{oiHXiG}_0 zGF`ptRg2GNuu{t0NCH((4$Or3v80^Pb4_3%3`^djs9-?P_g>?O z$uPaxdWwxkElN&KPIW&t@t0(;z#RVzoFd%z@v+kZ#0_-;H?Qrrsqk)QdD?$1V7=4l zpDE!#w)v&&%4NwE_FRQvtDa*c*ey>x}m_32v)Q%bX zaBz>-VE!KUe#K3DTrI#--j;Z2dxdH&+WJNr&PjCR$G_Aw0*aM0Ei2rFTb?&>YhSbG zb>n>@`5^C9oDudNs2hRQ0R?P1{2dW}L^qoPz0c2*BzV}5XUJ28He=HtQKHoeY@TwC zGZGgdWQ{&}e;7H->A));&!ZE4YAp@O+h^;;Z7uEx!h6GMEo*G*Gkxz*_U5^<_a0^` zn~fKagagV}wC8$jq6(TTnyDk_elwGqCtvn*oDJND`*a;^C?^n^j5RuT$ZxTntT1Y& zp`%fx;k2l}JcPPo#3l~kscM>rs@*=1$7 z=n=M|_SFWu~3 zdDy0*wEa3O8d<3xtVPZp%H@B%{wnPIr>EQu*7w?gd?_}p2TUud`F=Tgi6;Zt+Ts@m z;UdF%mb*7q<>=s0NgAZdiAsg)O*~$fpLklEG0rc~UFKODWTxRJ?_#LnBJYmF95~?n z$bNMYk;%&+&%r{@Pw9GNc$yW)*vHbl0PFq{T(&+r9fAFO)Lr4xxbi<{2Y5Mm&Pn@vfk_}(_Lj)#2CQ|E8TyQ5^1N%@Zzj|NfpoS_Yw9g3{rBoSpxZHzzKk4IqlluWd zIn!D65nA5-;QS~2Jf~#b@Tzc}wDFoK_X^9yihmbJ++O35ktN;MM(6TfI}7U~qSkaR z6&QddX%&g%gK|qS?W)fr`np{oC#JQ>YGtZii-zy}xgJTe&({GJ_hazKe%*fgIMaJ2 zAEf}zcFYJQ?w-oN5Ut+|L(ksIm^KD{j0$^)f*sV0t*;D$VU>df^rTdPqU>RWAujBe z(J~1kq?ajxu!w2D_<%TsZE9lD31U~1o%K&(z|GwTkS)-P$o=p-TrF@-S;j*K(%_ev zTU&`T$_xSBfSn8uHYGq-V|;GasLSkgvCT7X-ISC# z*w8XKHVo7LTGWrACh0UiRS|G+A80>CrQnoQksBdltoTmhV=E=0t03*Ihntr^2Ho0^E$lwKexVnZ0cA*eV1cmRhH6U@3DG9>~to6%4 zwsE}r#DvoityjL??bE949Nwjt^{1QL9f?-&$xk~}i)^(0KSaHCSd?4$Kg)T<1C<+;i`}*80@C zet(_uYA9B4ztQANAB*3+Q%t|7pRr0mx$v1-&ugf)ka!=$XADxUIr17^Psh;j`}n=9 z=knaRxBC`)3V+GSH4ai~pIbj~{LMB2%~YY8`10l+I+B{7cus+}N%m0x%`!7@Mt1gW ztFYLV%bMX_N1L{jzZkQFiWrtVmA1QBrsrutt{QeuR)6K>+n=0lRFoK98n4fFxrA~> zot2LkdXi*1YiilHYxAYwc%ly3pK$N|+A905Wj%DEuaZrA_4brWitBp#(&+Q#zCJ;_ zfbA^xy%Ili*|3SE_x6&*r$x~~iG9tC3?jMi6`%Ag@vH9K;&K$Pow6M7k<`52B_CqG z;P2Hj{2S_c;>|nyCdOykO>~ph*IGgKMb6V5aLa!Q4%S4H05S^z{h~}=Cn7bqy(w%v&621`W#ntjX6dpD z99u1pXQqJgBQquD`@GtJ6SK-Re3*~?*iOq>EAv^Ci>a@HuNke`MAc^dhmQZy z07(icZ4{N=wCS1p(=$3%+EXP#+GJB#iMX|1PjT_PhK8KhNpX9!|doOK_TKO>oDWWR8+E{(;e05q^Rq4wGCG&0#&ZDx&^Bp)$5Weq9}tS-R) zyPUgdC$XXJDZb!oKa^;cy?i34d*-T`k>S=o87b}MSU&! zw7kNq7pw#HKPCLqavV6hgCrH~!0sStrM*H1mGAB46JDAY(Vr95$3lML&d;vR@6eiA z^Q+lcF#r2gV^QM|pG|BXL!woYZHdymY1=zZb#hTYGE|Ir6|1LjVdN{r;t;I6(nVS}JDtzB5!2b!7C8tXGlD(iSVz5KAhYU#Fh&2dgq-5Pj%2Ea_S z8;rm8*XFq*udO$lGFNCAKOv*mj^C8tO75O7Mc&EV^*pBEKpTl#DS!IDMX@{tQuL!H z`_l&_Q%v_4-RHLb#jNFr4Mjh?rSSfW^@w_EC)?xLwl5P>x1b9290Jk|@a3TU!o|gP zo%94MWC9`tu~pbin|!+PM};9}cm zV^po}ogAz-Z7nQZoUClj%q&XDBjwcb;uh;#N#Kq@~k(X_Z=0$~cjXyhEKMgNVcbIMV z`wrl_NR=ywlK!zPo>!Ue^m4fP4NoxJp(BlQLccve9Mac4sV;Aa)EzMuvGD#myn5Tb z+VO)6$Iv5SDjDrwR;ul6`S*%@@&H|Fd}ce(E0dEFF>Y-v%~i~bk41D>8hZOSPC(u! zJ2RbbRhB@olUpf5iY7(gMM+7nRLo>eS{kcaRgziJS}||T_33Tq4EfyDxPzGL7b_{d zWoRO%SI@pbVA_+KNGN#qYEXbg{qAq)SIohO6CB+{3 zq{?b&x~?tq_mK;~2`J=&KucFg`;GOaI<`Pz@GRSNeM{~lW0bqV@px(eTuuY?PQ=UZ zWB&cGh9GYWq+8x=r}<_yaAjyGBwYo9Q<9wTw%EYA^TZgLa@hak6M%mlSh_UJ)E|NF z%A5w92OmLVJQkV1{vSh9iqW~+hrI;|b3-GeXZTS&Y@SG0*8?GuZ`1-DZyKKcARRVB zw@`G;Nlkh0cDO6oqIY(9);B^*(HTmC+5vR3QOV54xvSJT`gl0qf+vL!;}A!&VM~ha z-po6=Vr|MsBlpqabu>7D^768w{Gx1E`B?YWxTZJ`k@u1}HxjgdLT}{Hln&aFAO27yCD@JYZe5j0}IIEEPCsauEYjHxCYtdTZ!CH zmNkV(LO?S+>L+IzOdh<^lPN`ipCjt~r|3FqIu&Wx|9&qJeUf(I87a4ZbxRzF&npQO zSh~s!8DbNXkM`0B4{W7`o~@NB98?H*sXWIv4EeTx6G%T4epzPyAYy%$jP{98H6;-H;>sKNa zm;*rCDy^z?+3EgO{-a%`iI7qR8q`Yxuh&Ydfc!OFkSjrnqB~BO?+Dc)RFsS1q36sM z{dmc=x?aOCG+7%xPyUh1@-CKs4zIuv=kbT7o|pbDBIc{52dA{4VjDGpCH3b9b*81n zokKpCOdTwLICeiP8NZyv4xzL!KBvM!VzvQ%-_!9^Bu2$?6Tek*BZND zPRkYGN0H0wIW-EW>!;yX2_Mp16b<#i)K7}dw@qCzG^fAKnr-*{t*m{{gnvxzqd{;> z90xv#p|vNOGJLJAF%>1hx=qZDp4so1J6hMcFns@V`(}M}gL7n8>>*m5lc__2P{no) z-yLBC%CW^0aGJVDiAT!iAmcGSdQAhAj9~5Xk)j6@?(4 zWfG_aGb$l3?NLvFi*cF~PP#!#LIy2kEb02rf-PuvLm?m*-R>7Tx_i@lyb^kmv~>66 zxD4n4;jj2smE>Jt@l0oM81u~qKShP}%;pFO{a(j<*M+(P@_E$r`Cgv1QFFE6?TNLx z%_uKvcJf3=u)A4?{YVQZCP)6}M^5#4)|-W$Gj8ElOwU7Su%7lC%squ*9{y9GjsH8? z#rAo+TSR3ZaqmYF8Y%hlG?e(aJIkA25V7ghVP1J+K9A2PopA4nzGDponV= z!uqgnNx@VjlJXEvB8p5|c+mC}NQA1xcrc}@wQI^|G`yXcC@2UpvYFy@4|uL!DL3{l@ z9+$~2vqFRy`x6guW3r(L#oR=iz8JZ(8p#(KJ$Y9w6_uq?3+><9(`T)np|Ed&!BSqR zd&i`}cG;e^L^JMzExBwprcs1jzLHw5`03U92Nd`(#4`b;N(xdN z@V{H)*rLFy3Y5@|nl}KXBx?;-VIUL|5)v*1iMOszJRyn1q$n^%3|^4}9^eN#)0V&L z;zqY&+M5YT?X6+Psf^5vJp>6QR^Lw?pbMk)TP03{6``kUi`l@Utt(5LsCClNQz~IF`IOUe7pI;l3o`U)5TFZ7pI!Yw<_A|$z#Ex{ z+C47B1H!gY!DeByPVG&+9Navbrqz+Zhe9-*SrYfdtt|a#yw^Jr+oZ&W=eVrO1!KUU zq>3d?U;{0Bd|;0B_cn?wKm4tVO)`SEi#))Qr~%z7IaEPb_7&12a&lqEX&z1B);auu zi3v0F$-L3m^tBjClpqdC3?|2;?*-`_$w-u3p(FW{NqkxP>ypo;u;;(nNMXQ0RfvcP zUx_aRNLPr1^XRTRIf(|P6voTMFthu;TVI3NH@xxwnldcaQ8lSds<8<%R^IoC=|IBb z*yqN~Y{M2xMM&z(F$eUsGhbmjA+v3Fv2;mm<6!F|W!4urQpG?b26Sepg zuN77IE%#pbxHbk?vOLey$EI3Wd?vaoRfhU4{SJ?hDjrPl*$Pr zcm)cC!0aOm+6hx^4dP~ei1lC`z9Tj8JO( zbGX0oyaSY%A57VF^O7utiIrLVHANhwfrPug*kC8_HSz@Hx)S)p+>&9KO@k&7~besVq25F zm{Qvjy0`6HT}sm;)S9e&xi8lL!X5wo@GK@iI^YJn#x$gobKTBI+{yX{BSNhI5rP|K z32g)#1|d}Ve}J%tOf ztS~j{udv&_n}D;3gyBOdd#r*@M^OIhm1%*hLU&CIXVufZdC&MfH17LbFpnp>^h9!E zXG*bO9F4}E*UiUudTg#tkmLIW?F^pc6a=HH<-4EuSe>Bibn$MqUx;)?RHU=1mqZIa zQ*4%Q(mh=z*{s<sG3=#@)bQP3(OL;Qd#k_FO7Y?vkn zZVqS|lTqNnu&ap%7KmjeQ4un!_~t+vPm6{yP=L7@ zs4mWwGKs~=uGY<&m<`r^?bZ4Y%xKDaq4TxaAHQD->_UaLa*rfkeZXK2YHO73u*u7SAE6rihu?l^ zGihjEHbmq1u(R8DQczM*teUmFY0yy&(2H3njA^nNG3iT^lk}>sV-ilp+mk>yAb4Pw zmQbUJkN=L-fHY9d@WfiGI$RC@pm5|%AU~3!hA+a~2NbiOyVIlNO0Ag&6mS9tp%%dKjZeUi5yL?oBH7{;d?@QnDdKXdJli`aN}^MC zViEfz)=7=ZMkyO$0$!vH8~aP`3P|wp6!6FHi=aQ}4v(ZtZgzgFI9xKC!ZFYN7@R>;A1Id|}v4 z^u6TW?+yF){;TvSv#dm=;rTZ#L8r*1(E-xq$c+}`GuClZ!6&HwCWcSrK0^|O2ek6P zzf&1WvhLxtO?iTqbnrt`!w=K6@Nm&WZtHk?rJknKk2@uQGy&_n)8}Y+{%-t$gnUyF zwKETxR}_%4xVkji5KX`CO7mH$S1rw#`M>XK8PDbZk;mxJD)uhOGh;qv%E)HG=?BK( zhcKxiZYqEwqQLqP+7H0|en4vbow59Nj1c;TxYo2n#S9Z_@rLux?B;}Zyw0Re*-6IF zXMd&J7pvfQTe}Qx5EJQg?BH*mUi0>U!K+84<8-l0Qm|Dod*gw(*qU8z}wO47ydfn&??7jmNV zhLvoM9MmU_L`!~G~oQ^IIW+E^g;8yDD1E*`LqKF2Zjf;0dN zc(Eme_X0?9!j_K&d7j{Ny_O@oFQF^0kiSH#|-W# z<51)UaiIGFiNtGwO;P&?Xx}*^sR1WJ2%fuqb2rO#6(+^2nVR@U+3GhQS`=_bBP_z> zvx>B3d^D1a6@}h>@`cZp1CZ!1i_~Y(S~1{ ztW0;+<@o?+iKdqDF&1qqww>!s$#=XWGg6$ zOQS-z1>*K+#%N|BilHv2r3Zl#5I#h}f@pA#5Nn`sXa2$bP4^nK6EoJyUiTgT^Y33T z(zoM177o~%<%CzPmIWwW=81Y?-X0&^eXA!C_xIidEmh~k$FpJnc-Ct9>-s|tEmbjc zu1}+ZMd_2{jQw23-#`5XZh=-^1@oupT)=O!d*C^^#rw%+-rCzY#x37sd)}t_2nga( zqVo76Fp&{Ti3?^_I1BRZ;$j{O97yA?KmJ`oXz41D;XuoAeR1K6G^9)n{bsPEIank} z;BdA#%PyLX^nN5)oQ#@W-1--}F#XHVZaC^zWr=y1CwSp1p@0`y>YOzkjz{oWGQsWj-6K~}^lSW~N2#8=5L`9+f`{9R&6H(wbM$IN2 zZX{^%by!fxbvLagGp#HIyf78NlD(?{3GOQZE!KU&)hz83S~flCtlOL(E%;XbNb~z3 z($;TO@aCR7E#BII<2zR>vpvchJc@J`sHwa%vHET*s=CALH)h_~w|)!f1}=PiWqY&r z7I)RJc*1H}N|tx;w6nW~h?zEme+Fgy>>U0nsp=++V49EhkE7Hy>ncv$B|kLgm@Q@7 zaM2VjUm4BcDZT-z5%}Yv8Pc?IIXT<10|q9|&;ti0IbWO=Z)oh+izDOK#p$0dbvFB0 zQNta|{=-l8M|I}$q>>&w*fFs-qDonfFYA=u;N`n5mHa3U=hEkO)9(upm;B<(oz?M# zmCfW3t@3KcB{=V9cd%1CHIO-xyt@4HOKey=1w59JTAAN3+$CQR$q=i*TACrG_se2L zsu}Q$m=yz^&L}qMt*_(BFGuzjBo0hflLzgH(~@gFD~TmxH|jqqtG)p1M%+XF#jRd1Fw zcV34NfTTP1e(4i$8zI4kLw7Kcz_N=B;OL=%12i7Ytc=2EE=vP0wC>xbQqQIY9O2JB z2xUC~fl#hUY7pD+3v~(@!SZ*lp5v1MZ}7a9G4Ax+w*NW^BIpmsUd4TW{K;}91vDNc z8zgK@Jo6nclko-supIG8=>i?cc_;oDwnYrQMUugu zkHw~@$UIKL`Mgp)p^uYJI)3yi_&jKIjz8iu!u2rH`cW~RTPw2d*2{7fG(%uOns4F7 zZUd?{K3Ja;`d^@JQ+Ab&tp1-G7z8^<;)C>tXF&dp0*k_?craxK5=~6$IaXFyfF-X# zgo*w!4vcjas`fToErCDj$kxNW;zCd~ou+}18nf&J$`3;;j6}RwKG~Olo}E!STBx|T zt8>SS`nw1I%qPRm3k1$m-c3$LPqy~oQvh23>~g%vYQdzyfg1<%WzID>wk3WDh1U!u z4k^Y3eXvv&K$tjEB|Kf&{S!6xTAUe*#? z#oCozRDklsJ{jAVX|s(OLmd-ZRFcw533M?arehil3*-O4f3udw@&-d{fv_JH4pzN{ zFQU^@q1FNrhF~frl0`$_wc{}!G%V^v1Cpqigcu(kVeiY5(A7C1=WCy95dXb0oFE2T z)(8&hf#i1zpPrA-zgt19Oh;Ukya@ zm&bhW1NJT5x_Y5z_O8!)XgYE411~0rjAoW_+GU#^%vX_-A5^?ynG|{e8!dcch+_*v zIOItf%MK$+#@BdZuk5n4T4&^s1+bgYIc}NM8}EJ&^STf zWK*yzwRWCqv8vwJC;o>J`+nO1r)ttbeCJ8(b^OU+BwOm9Q^Co9ulWNwfQwjw@~*>g zoelVSq=`eEL8uG18c+nPxIRG|QkP-Dg(-cld_XtBD;Zjm{@c=vbzx9gFjJQwhGEmk z5Z=$RVH4wfUMFiKsmSh}!`gL7d#$!RfmW3f?u7pGeA&&Td#EMc=rue@QTA#Sh=38RgXQlp*XuKNz zZacqZ-6k$61+7?pP})1Z5rkSz2Ll&? zbz9c12Ec~z)NC3Z(g&1fa2c{)m4tk|WdPA`NNs!k z6>cbSkhA(v+^c2<{p7qbyRgs!;_86SA9N<8qoe8=Fn^EzF3>{_7b?37i-~nZzJ>M-cZM8VdRbIFhacp z-AS!cqjO(3BY)Y@e4E|Qn+~*%i;*`27;o>f?<0;$BWuw+T(4v*J{5j(S-06Vl??Vh z>gn6VS>WX00LOt{w>F+mSe%#dX=FO+wW+uNx*tum(sX?>=qhoslwAXzd%J>9R7Cjq z-kuL=RXlZXvpnBwT|U?%>j%YCAev4X16F~J5G@Ikk_uPIpnPg>mP5n~04nPMd+SJZ z$s}+Yzniu|8Jr5xZ9n0M^*ui5P6fzJ)W^q9_+S()F>>aTL+Bdcwb|0Y(QxK`$EmCy z@p~U+dEFHkHLRJ6kLih|zPHe_)A2lX6^xTW7$-L6lqBl@Xg~W=_G{anyT)tvfnNbyRJ)TB=Ge z;(SJY4{8LUU-N>bN?1zXs+@vyP{oqmNKS+`P0xhS*MGj#$f3nDv%b#CP( zrI}_kv;gHVIOMaZ@3{UNHSdfS3@itQS*vF?cpuj`ZCQG}S55|jXytTLCBO5&c5ADR z^(5*#m3*+qRH_m+E$b9++>~8T3+c%A`l1{ty`Oy!(K8YD@#?*>ll;~m7{osMo}lR6 zL(Z8mz9W-AIo->KTD@1i4!M-=Z+JKV7FC@yU&WtO^5y*6k_wotG1kV0sjLo^!~#3X zCKMa?`i>arhcR%Y1Mts$FmQpK*a%?(17qEPPahpO@ZuT?9(DF8l$XJuH}HP=7MzHc z6Goo!TI>i2^R|fJ))rtf54KJK9zpa&BZt>h{uT7eWQ9dpc}DW9I-uJFikh3lxyOK> z(;ydv12 z4u!P}5<{2Lje~4&0T9wfW)Eh-6Xxw*y@x9aDwtW1P;yPfK03|x?qOx|I6n}Zf3z-9 zS>0PJr-~{diUS-QS>b?=1M|qrTwh-wI82|tcYtZ>-7sMd1hgJ<4p1;(vxN?*S}s9C zI$f{2fdFbOb-Pj7(SyS{pP`3z${iX}n80it?oCRo9zvT6hW)8G%$oC3g~h6(+L+gltUn9_-f>raa>)k zE=^(x0?dG$(Xh>yH9!_XRx&7PzJ4bMXOtN1Bl#llvXck)zMuX@Z+m_6*Y?7T<7GQ> zZ3|Ec8hk5yuTb^vMbhabtT$RZ^a}CwP0mEwqPdw_2udb$De6|;{wi%-=&n^$Z|Mme zu)F<#j{%rSK-du~yvFe3Zv>xV1)ZuheGEKgMZzG)5{UajzsPcp$B7PX-Dg&e!oRW% zlFHT82C@db^-2(mpYGx^?mXgve%*#Z5F_`yuQ9Yo+$v%R50LQ^YCjowu&}N-*w09^ zZr>l{=GjQ7js(2VxO{>mvGLuiLy5c4^ku~hJ8tK^&X0kAC*7|#6u1)fc^noSausl$ z#9YDQBx8M;X0ZBL?o+jX5$>H1Ds!F^c zwf8NpxOGqQ*Uftndp2I(ix>43BosdcQj7-NsG=AP)48)S7Ha7al(H7m<-7nSO={NFDF74 zLq`gICiD%|slT%%@0PzJQBDDU>dj{e9FW;QH%fmD_V_DF%?#ZrPk&gK*`!+0naO4W zxc`i<#8))8xTSdJt}%&5ylrI!$Mv@3^+GSOUw)+|$7tMmY{295b7(M-@P5tgeRWkxNbQJv;*AQE#wQ!gFK!fa zprwB1!K6eHzCZX&^~l=YS>D;tP4o=*ayeU_4N#aJQVHqQ`PiD*7b~k`pZ?}NwVEyU z%ub{crKBM6y&n!dyWjK-R*OPK|ugM-IJB6w6=0xS=UMN5*clX8MZiK1iF&s@>)AEFb=PaH7uKH4F<_p7l5;Q*gz2a&Hp=1P%&_TdLG z2J6m(#T>l%)Srz{ikCh8G&PkAF3JqSI*cxcRK~lC$!dH0+$PiQ9(Duf3CZS|(?)eq zI@7EL!>sUZ%%z0q%*0Bndh87x*3ERel-`=lujW5g9$TEvy{O=Z))|zLboBXP_`N$+ zP99YawOHu`28hh_aYAQtwn??;#z%iqE}k~*OVf$~g3tkwjTDMJ z-1IMl<_W14)ZgP2%*ZM>peV~s$sl4lUh%^=K_Wg#Km~L5QgRWyXb6|7bo;RK0C04N zqX(V9M=zpc4XELilY`%N3m(3HzEHwi9hG-4a9v^DbuQENkX)fh{)hZhVsC8gqtqK= zgKs*E`Rs&<-#Q)K@KiR?Z~9c=Izvx17s?ta07(y=!OndS(055!C%eFx!blkN54{F@ zXfX_0iW@d8L71+JD?UnVI7#J^)nv?fN@5yK{#KLAc1t3;rL;TqY*adqYVJc@S3;)@ z=Se_7ZvI6p$Pj46`pcl>*BG7

AWSd-BFthxu==J@&<;57~-Rx0`Qi9LEnf*{Me1 zu<|BvJ#x)Qk-gQXy5{6<9u2I6Swxwht||9A&T>d?{>*sMUc$bZHc$)1By1)y2mI*r zGB}`OC2a9yz_=fO`H6tf!1zWZO2bwd!H3A~n4yI4f=>>}iB0UG!D7Fk>2cM%Xagl~ z(m~`n6A0O0aIZ76v{0`mfjVUS{95FjxJ$= zwD5nDmK8#3*ENtFXsq5vz^LL1L!hY@2&)#=a+yjbXA1)z22Sp|Kcu zEWK%xPB0+aEE&z~wWi>AdcJ9i^Jj1?zdA~=sjcuN5XJ~m4DKX~00(p6}Ci{G^2Q*fT-|s9Qm1Yu(Gw z8G|9#h^}NS2@|OXmCXKmo|n38Kk>*Rk^FZSH6PjgVw_M{2gV?j$GW-G8bzY<97=fW zJtOJazeJU?kDSUqQydh-%2Pj7IHaBsMgEq0D+<%Ed|WM4jW+j_Ih?poMzrE3IkR6C z8&0LDoMWL=Y~TaBq1f3)vS8WiK0jIAHlpC&U8deMiZNHX0dq6fH#6On%=97yJG?Bp zoX6jddZ{xb28gYgUi0tJ=7!&E*FFy|(iYN0N^tl`VOYE%L?CE=Dz2{E)rUntfL}3s z6(H&12Ou*6H|fHtx0H@icO6{ zYZeG7n2G}4GFN}FRTJRHM#zRqHc*h-dCMaM+7rlshD0o61ZM@liS3m%A+*k<^^ctv z7b43F$S6Th1l#6fHKRVs|$PgHlPMA(4eP`gqsEL9N8Ve6anBjZ1npiAzL6`u%w|L1Om`A zDJUp}7ns3%K#EKZpfo3d#^RaWL`Y(Ew0?_g!Iv*zY*Cw#VCR8@{sWyT8EjmZNcouC z^wHU8>Kv1Oemn-_ldSJqrJSC7rdX$|nGX|IxPP#=uNvOq_8N;ymq4kO?#Og}Ui`Yj z`ukGk)@B{s-`wxke{;SE)#T>ekV*#p%`KtU?jNbO)Sc%Ta+*+jL z`Z+pAZm>|?aN=Kdt9){u4pIWRgp{mZQBPR7^Mln*HW0wRCekc$twFXBc_Wh{xR{vT z2oIzLc-`XSc7EUkHwVhpI68osfZq*{2oCZ0^P#!$e~bnKnqq)t0!|Qec5v|g1#;F< z2>6EJi_i!vAt0J9b~y{;0TQ9Xb#Qr9hb^wn9^~DssCRnP)@w8o8OCq}R<}bZuoFsVC#8-3Hw_g45)| zhwhVKMFr;+nLjIqX>X5MITdR+TV*{g8p#*O?Cu}Ct$g~Lf0Xa`j7943Pj$i>R!#a| z&%X9hRovB#n$;7|Md%FH7h5GE*k}!^okoHnqh#Dn(}}jZuRvJwN}MaOK7+U&nEMmT z&tO^rztn$y0+^mAE>@9%aY~@eTfCc&910!{Oz7(R`q?g^CzmPz!=kf5R0Oy%_kfld zxRq!8!-aBq5M3o8eQ-b`62J<|D|5o}aZG_L`O2*ZCkANlK#vAuKN>-zEG9H=GGv2M z7$hhMp-AKBQwakX9rf^=LJIKZTcF&0WkR0;yqt}V4QNkHfxjMXlLEXCHlo4+HFf*7 zp+Pw$@M1sAKGAfWoH7O}0tJPbWW$tFJgw1^thcB>M&y`08S2Q2>bfiAGxwRuF=w zQ@FVspA6*f>KcTGfp95qf^0;);zx;!AjP=4q}MeJ4E1aE+Ysp7;qL%^=qJRFCE)Yhc|0Fa{U8cMh^<-Mp0=Q!8L0S}e9sLPW;ePgr0t2!^ zp+1Y9f!DnWRG_ukaQTW5IC2S{?u`!o`bCVJ-G->pQ?)Nutf4y<54MzLaJHV!ontWy zHz@`TTQn9^Xf$Z2JH;SNN7&jl!6_xf6bbXIE9Fya1f;`g&_z7EHondl$-oBlZ5&a%?il1 z0~lKml0eUE;Rs+7`1qzCyt^Qp=AVfHoaG&?2p|qZujN7(Wne&|^Rcun2F2+AzEu*8 zOv4mq2qW~^l93jfl9K~b>mP}FxRQ|?BhP}c6x~oD5fq;oXk^ZWysXmWB!oUYFsgqA z=?}rh!&4B186XG_>gl#5;UHpDJ#XXt{EqX)s^8Q1_xD4m8`lFv9r1*$TuyB>5hRgLSs}dHVA-mHzYMDdgxUq`%e<{qqC!`E9(cy+Y;wHlweX^)DOf%ta2*1m4(=Yg$1e}qEg)+u-1#O*8G+r7oMb;rcLfujnfB4^1$ zzqzNA!zbi0aSOZ)%!BqJwhaf4!EU|kTuWNdZ0QbN^xia*5A5yMx3Qk4?RGty3< z(ot>CtS9BjrM0}yFfMajjJ-km^&9CTrFCegs0cJ+GfrR0rc=LuQgB_Vibw5(UR{a@ z({Jc*O`rDUD#wl>Z0RnUQB7vLmk)zh60bnY0W4qOg>4g49|(iZ2lS`{eGnXr*{)kO z3}nOdp5HjOIpNQTLiFN8YM+!W;}gJTWMqQ<4}t1pvvEYy;a53<6Lg$acv-th9w$De zcZEFw1i^Uyfh&>2Wf)0apyLGaSkxv%Ok4s8Cj)~HOW_W$*Oh}}2)>D`g zCN6mx0t=$4gollzHl?O&k29%7KwdtTL8gqVgFoypCkYBCsQ&cH8^m70j#m*s(%Zco zct{2v;^*G&Tq}IJZQd17p+stt=zZ=p%JsfF`YyS0+Qn zIranQL4970ZAt)pY;6<>sQhfdxzuiw`Ho+p;_JK6Ul`-q1KGTtY483doV*}wE%G@& zUr?%BsD=WwGLIt&jE*RT;N%v9QBM2?FIp1_czpzU45pjwx zi0Ko@cB`vOw<=OXI3~oT({&~_+|dkrU$;IrL)Kf!@F0s9ri3D}5t1k9KpJm-dvo(X z4^P{5cd7kF(5**nFZCc9tNHu7Ftm6XvXQj9Z@-Z$;~KvDAW6P zxJV(d*Lc~oHB_UFSK6?Ir&;PBc^a`)5dGb8A|>OeRAW4=Fg%25r^ihp;@Osh!+RhqM+c)ooN5c)EfC!O3KLfV*0*3Jt=vURhd91>XWhiq zw$SkrsN_R5UYLZqIL|{gN;uqm9QEYR$v*{>hIE#$#T zY3@U>%U<*C)G7V_mSv|tQ-?pmiecy&Y2=HP7H+DFH9;W8h1R2D`*mU^e$4vJv`3+a zLs`WUQ|@XQb=fyhioaB3%!LR>-!m7|!}{jF6hao79i~8CNg<~04k7j1G-sj(HW?;V z0i`Yi8X9#f`1{bXy)O1>YQ))Hf98QAu-(O8P7Vhf?wMJI!y%j}!*W2Bk4$;o*j1jR z-qql`A~PFO>JCk%F1k>zsZ2k5PhYX-V*;v`m&SxEaXd!nd_F$XRP4r8rx($hU}3 z-8=!48sj`A3vszeL)1XoHpv5z1RWW1i~^!#LV9W1!F^<{<@z-Vq)J=3A?~yQ(M#|@ zl=m36y0%7rjtWA~Dqeo&=W2$y@6(CEL7fgGLe5g^f`q|95RIR||F{U^J{rmvBt!L> ziB{@b0Sjut)yQ@RLN>uB0R}Wg${gNS%W;~F>5y8(=E_0{ zCn#I#`l^_?WMpJpoueU<*>8s-L&eMZs7-I*J{Qqx_(zqQp$K^VhI<|_7lUwqnAc+)b1W#W?Y8E4=z4#_^SVv zW0IAfDRamywpde{XW%&la$|f>u`j35^Wmx#@ltuVZt)_elsGE_??QcO_B*|lTl=^A z$~-vlB}geZ&W2N&$mgtU4C$-0n+~oNi#$^1)5i$&RI7M04DC0>trpGY59O-w1ln5z z1S+-X5^bTWHctTLa@-3?^#BUO<=2==ll|%J!FQLN0hqYp<4@NY#-Ii7jLs?vyPi&b z$cDD-@&ZI|g}=E)J7N`fC6tkplA8S&t$Fh6J@S?5{S{ff;dh2` znSJGW2#%0$0;M21vLXFLwCyhNs)8D+j*@%P#5#UKOf8I2kd%b?2!ey`P9FA*z+)aB z_H2ohiT3764;9=r;P9anG%7s&trB`BG4)ypPR66ZkItNAkqtF>gNDYGj@~m>Fh7jq ztLPut<&@ijGYn&C(;Ez6n?;U3oh{bt5%?pJJof2q(Qff-ai~~T{JC-pw{G}rX~Uwd zy0EXt%^6tzrrg^KI}FY88bhkc#6I8{79r7(K>F*i7VV}loNCmIJbs;-^|^Ud;8;l* z2(OXLL%r?i2>it2bGp&Dz*`ThKm2kOaT7t1vCX01-g~*;OM}P6*5HHOrUhOFc0G^R zuceXw#)_3J31yfN4`D^S!km#8qu}jZ_>u`ZM56v4>f@O5?|eE>)jr~dtz;K3hp1C) zyF$;^+@Rl%KWay*`+wRcMbu32Tw)2}dfKi5cQczHFOZhD;OI$wNMtgu4Sy$aUXDS;*H5rB);|c8ulk5(}j}sN+kG45sVT`a;9rO}^dOW;QTU=X)Ptrj$UW zOP#WENtZV`sX$p0C{0m~!m}yd_@M{1wLaj|>T#|M6?u?F4xc^-jwl@YMh{$DpXu3| znF6pi3(=sm%9Sm{=n)wQ2Ma2rA-(9fV_`4w!5t4e+o&x-ui%-y;fJkUVl2T6z^y$R zQmb1{a;z_j{+t$SHf=0jW3UnQ9bas z$6MWP{0L>Xx||#x!6K>xv?%79)YMePE=_AKK$|m!gVcX;wFtnr^Y-(#FcWXH&)Nms z`9>ftGw>!3v5B4IekG@to?=}6C|;-6&1nlzPb>{7yKs?SS+=gNy#|J)OtVxf+llTX zMXV7E>lBitiZ1aY#ov@P+6>L#Cs_GIGuh*?j_4xPgx~L~X9^rU&izu7d%r$3Al}a1XpYJl2O%(TKBsH5WGwQS&>%)WNkSzj%dr z7dFNa-V@SGOx>9qi03%Rd>784!v~r>aB$@@aof=Dckd;M{`Gw8(hO(%U2SF+^^@UDg$TiGd`f;@hu*U_B1diik;ZJ;*wP z4cT#>7>-pkxoj&6>a&?Qx|Y8}nfzE>@~lzcu*LBRLcvPm%Y^n^{lim=p&h1CKX0FFtq!Yq^CW)Q68=me93)DsjIJUKcSkeFWYILuU@Hy_wC?DS#Ue5 zX1?SxOjU@S>GyL1*b47YayT6Ew$*_BJ>aGaZD5br0mDr!s=(blMvpfK?<07_5d9fP zZ-|$dmo*TBp`C!Zf6#X=fLHIoU;SA--~~WzZLdP8Ket zQ~|gUBpHPEX`k%h877CjCLOX0lOy~6d`k=FWK}$_|K7tGa%9R*sjDse#gM&;Dl+Uo zqmPal3!lJ09Re7%iJb*#K-3XIpbhe$=rXE_!HF)fav>8%6L5hZ6TlDLtcOCZi@(M9 zYQ^POIq&x?3nnc8?ows_%jeKNYu&^!dCD&m$=1tjv1a!cGsR-IzFJ0&5J#A(I;<%g zjo8@|D+2%BC zGW(N(oM!T-60YsdO==dR1cC+%)E8>_0WATX$GXMsDCJ*sO91({O%3k}VFLOh`TrHu z0L*{)R8LssVy3FhPg!UY1YCC(H^dtuXMcCuv26Wbg-glU2JK?Cru4J!}&M=jD@jb?K2Za!3bQ2|OF3*N5neeB2G3 z1&m%7G8$0YeP0v=(@@lubYW}tH*+r3KL6+*bnEY#rj$Gmsk9?z_6(HOS4!c1|Bt4t z42Wv$+9Fa)2uOEJNq2*ENh2LfcXx<@ND3kigObwHT>{cWBaL*|(Dm)%zTcnw!z&19 z_StK#rxss7dwCTktLjsa)x~_g@BkvWyrY?s<5A!mCR=6k(=o!SNBC0ew+csi>rPRR z?e4x<5>8hY|MEnhER9Q=uwfllZ6RqM^l|4nCe8YQ7=~dbz5;)pKo=AS_wbQ&A?=g%{=9_@9-DrJHjA% zb<~Q$_{{*uoJ-A@o^GuWrM=zmTI zCNB(dmbqc`(;+_)=8LVlOvRI;8!j&VFV~W?{EpFJeh-tWPYY-bzy}ICgH7y_Ao`4~ zYE-MD(K&@llbth%BYAKadE+Hjb!f=qLyPv^5 z1GI(4X;mgwAVpe9`m75nTvN$+ zjU@Z`Pgy0KjJTBQ*+Jm_EQm`heaQj2d_hVK1~X+}Wn}KcEYAe*Er$1LkRruhLyUwZ z(<*r%T#SR{g+^X^$L|TWn3R@>Z(k#9Mizd_Q|~5UW9L!FuKCJYzKZy>Ljhi4N%NR3 z5$HxW#fHHGXzN}%yyWJ*&r^{oZgG8y{i-j_-bs8}H7%lLyUmH{F&~l8^YYIrWqwZ| z?XDNfIt9a$QXBtr0^ZFbRhq}d8cq;|+b#m*>6sbH+VJ})Ph#J~`#zb@8^n>IJ6(nL zWuU>H=d%~*V&vyWxBCBX1=M3uaNoqjD}t3cylaN~PyN(-hG7M?fDhjw89u%0B#Hip zBP!Zl5O^O5Kf$0l2qRh}>Tx_K2J(4CVjrg&km~?0hkm8s|NVoTo1d_uVDCmJs?|&o zSP@#2hoG$Pq&rwH!9}d=Y_hV<9#bAR(Vt+$9$WZDUBfj;W}8ZlQ$0AT-sH0bBMjOvxpUQ$woZ1+yU!M#abK|8Vh)Lc;Hu- z`4cy=futPeVLmnFJ>J>92A{^)fgpMj3KpRmA<~6_!;%3??W4%vg}>Bv$%mXuxfZE> zeW}j|%(UfGH>Q})d~E3VEAdAE!Fr=4rF#vzYQECAzI2R1dRbvXib83Aqy2%%sDG6w zNsmfijl=YrMf7;bxJjm3$l#8*SdvJEFhnNRJG4(gCUMpKPWOfUmTV?%xpOupjYbg*kiIxreK^Vg7c>Mpv_V!{12r-hig}Ek-?k|Z)S5tPY5h%Ef33lz(*|^ zNCGCu9F#K1aL^rWOw}5ZxWOG@W17Ux%!pSf!=e=A>@4dR=z*PZRPi?BH8rFc@y%?| z+3_)e!~SOS#$)8FoK+clXeZ zpJtfwm*-7H7a<%F2fxljQOo_EFSs|1TLZu^Q|sJyubnPt+45ii%@~;@NudzxY~$)4#B$yPi3Nk zG&eOZW%t4VF+C8%#`_&ieY77BX*eJpk9~4s!OKOdprF{{NZJ$V#uv-^+s*KVE5#MWb_j%YF4-Km=m8%*Gw9w_*Nzo3_~ zOV6~Ysa;`$bZh#u!3`#vUqi+Ny0OQ^7*+u3b@PQ@Mxa_{k4Az~Y-JR{li1)n$!z{I zU3x0Q?^i?w#ryr=RV2kOtO7RgfvL+LUS-b?4=EF#Pl6p*fLMekMuP95{uvZd@)a5g z0ju5BF#P%k+npJ?DMbe4v}i_RJT=FKJWu1{M5%y*Hte8=+{4>WTy` zM%654Q{TueW3wV!oEa{iM-z$}4u&JbQuCEl^1zJ>8l$;9z=x2NlGji_ZeRg73m8$J zxw*SbBNCV51GpI*3eJ%RFNAN8BX5Z^@ua3~;69hbK0i5lA~)-u_oyB7f`hXh@ff|e z{@XNK_E(3woD~aMT_4`T^w#^VzodKjAll@pk^TtFc5AmV66+lw=42{Y6aFFdv;6^0 zfbqO9WuwVtL>Mrgel#knrM?9jw^^63PW4vm-l2&ucZg5-emcnx$Xag(nT;73iUAwuBN2CK^+kQv!U+Q;xUaNyzF{Z^7hEz>wO2g`k+LHnb* z{l#x9*}<9Ggg_|kN&&icW9W$L@OjB()848Mc%Qkp51rmKFPfI2?n= zT!oK{68eN4%#19sK86o6d#fWe@1=%EFZv8w9s!UwFDuvvnLF!42!JR-0b-N}gZm+# zW94T&=7zdD01a>c+Ctr2T3Wihy=Kn)57z>K0w~eP=*18-aqwqt=<$RIte}w|1qfhR z+D{OMHXnHsG z?(gG%zHE8i&NhQJPW3_+ZElEsYLuafDBGa!+Ln4o&c0w}NqoGO>)^kA4*DPQk+PqQ zt3BaL6+yewj3B7A;fR75UQjK}&9C;yrlo&74t9AYx@s$qai|l1?34 zgEH5VJmF}Pka%4OUjsb3-7_YD8-rd&MN$skYV+(hoL2k3EENVy8i3sa*z+D>pdf9L z<8dm0SLG6(4?W9ZcsTT}wVR|5WzQN;tC@jCAFtG%P@8dCji2xDudB$41Lo%+?MEwd zE|H6kEPqiqrywvHeYAR?_l{f$Frsbc6oH%dRz}m{i7(U>G5uy{pxJl_5cN*kv;8|M z-OZ-iDF=~WpAK_6e86DEO6;~zz{l#D*;&waB)?Y7S$b*ie!3?Ke(uNfb8`R<0V`U; z&#BTL4DVI_P5MO@pJFa_zTY(*MaI|ofHn*|iH5H(mt!VB6eYciCSs)bF|z{O*sC=lOf$H;~kt|M`fSoO5XWVKI^ z){t_n{-2_EVcgTi1VwRe2z$ipI<1BuI_O{@i9(GL>FJw9ILt`YEl{ombK1dA) zVZtbw=&4@dP=6qpVcp?7-x>29twT#1l3ue|KaPT4Yv`G6e>+V>zP;(sS)?}*c3mdR z44et-Mp+WOJBn2myVIaUszwYVHENeyZYtsqnYO_W==P2p^M6uY`q>9F%Tqt!)~ebB^548=zSKTVidt19Qg==v zFr?DrGGgoJS!2TwWsEy6u~JW&YEoyhxcdTNH(YZsFw{q?9s_V78)LK7uyLCkUgk{( zDB!)-bFBa5}&xGIn6^g#~!r|0d2S++lC95mUjl1SlHg0~@?TP`?ugALr=- z(m4-Uy3YyEL58*D{Sa&kpmU)0C>}4yD4IIm8?m*X{&z8basDMj_s`E`bZ<-5bRu4U zlig1vYL-7TiI2VVo|sWXj-=47jE#+NaDM^L@rNS-kw==kwhy&Bf?gpW34qE2n!@e* zMm_^+PBc?5FE1-AFjS>%iml0`*3Va%-5R(PbelcpS}&{rTJolo%|aVTQ4h^R9*-f_ zAw+F**D&RC=oXc=ZU}=kci})ki$H>W4^ewnu$42+tBs}jw>m3I!50~4bSk`erR~3y zTi-^ty(rv9)yUPB<4NwZ!b$3_4J+Qy=y{pU>#F>3i0RqO_;H_5n?!cnh!~KY zXV6Jnw|K2GnI(^Oz^@HTA}HWxI-5|e#5-j{^59wZwAtDI{g?jBHb5r>-z`+Ilu&~ z_=if)(%{uQH|K_cJ;KmZLm>(Z3T_Bk?grYAsA@p#fKC(3XbiX*z)U97lHvCW;Wq33 z1|_TvVA!+?&vD>`9SRasJLpnU-2$w{(_F+|8`(b}*?YHr9HB2u+2DAa!Q@d6i2Si8 zGephY5blZM9?bOz9F#sP{6}OChS1E@)!*@?5V=&Z7>+LrPQ2lTT9KG6k&N*c$%lH{ zY>cd!*4S_;RO7L3=sP>(E=3up5$aqX7`c||32|QN&+<_T#yFgT1kOw$YH3pu92pYm zyIlZtg2v$sDqzjafw>FdLSc3M{Q~yl#zOwmr@f4{IfZTQQs4u)<&RQa<^>NGybkT{ z?O;KjIASV!i}sD9^cVOfx9P|>0|qcJq&|2j@C-DPKmG#9B_4GXE|D1cCyu^J(})F_ zAaJ|z1~S@Z7#c^qsCYdlAG=_4zF&)D3X3Ug!W&3=2L#^w5i-nMUHX0u&#%#Qvz~-jo^{mioR3 z2nCSAeE7`K5W45jA}tQzLxV?$%nc3`y0MfL_{Eg-gY(p#n&OFm&Fw3V9@=ZkJK)~Z zVx&zLBz)9q`zjadr5?e@8{+wKVwZuOS%i^?rDqP1+N`YVBjx6E;_msX!J0=z%1tqX z%HKKcr*}K43*XPHA2!lPBJG%>%C{KbTQ4CXYyW(^j)co-$oNf-0gY|;bDZC-*J#s# zIg4HNS9|J-0Rs7d7@L6wIZKqt+~~#}-0-D=AJsq?QVzC(ldA#nB^MhPVGw*`IFf`d zL;rgX?y$amkb2-K`5;I7;NTO(ryfECkl4A|enjDA3Q~rZAHEjOVWtBihde46N7e^Y z9x7?$=b*5~n6DSBz|R4a(=OGivayVVAkcSqjt9qIQ)q0a2XfYB}LV{FxB4$k%J6eOlRP zW>a2el(He$5K2so@WRAmipf$uxa#Yj>C4Z8E-mJ1nD^YOt@;x0aU>Ul!opeCFKDo# zQYa{&z`ad3$$sBvGx2lzo?SxBC|@N5Aa~3l7x}TzQd=-J3Y_=690y74|0ue#F5W*9 zW(O2V0Q~#ZR9AN`Gqa4B=ug#FmcfYoAknSF6|oyb z=_0NQhd+E{7kb6|pP}8dA)Oz#i(Fry-+F`R3&u=gN|;gZ@&!W|oyx^&En_Rne6za_ z;uwt=H#`gu9E_Z-U{E|jtrRvfMF8@T>5fl@{{zxc8K`I(`5`(#G@PCz0-(y|2{$p6 zLVplp@DuO5OLe4p7e{XyneBqV>e)>e7Pw;yc%Y@ol@e}d10JST#T#nF*gz4 zQD^T)ky)OOMG2_35;x@Zh;xp7tPelQFACF#M5EsTUKwDAH)BOWlK@t&&jghMi3GZH z_C`psEr6~}5d^!kLl9pBI5C2U+Jt{j@&0P6RrH&>6Tg4}qYPY403Sf$t>gcT6#!0_ z_Aw4LDnPLn#$aCphR~_fXz*Mtz&(;ZY6SprEKe*#fAFQC-O+G@VuPDscMHSnqFK)G z>vLgi1w+~VN#(RGF?W?G63=eezNVyeIIJc^j#?KR{mZ_-%70Vw#8QYxV5L3dy6}kc zb713RllxMC0Q4;hmAO@7e@7_cMFZoV=l)y@F9a}MD8-vTx74O4vf^&VoyyZVa6Zkw`1NvVkwRiUSO@==h|?&MN(mHNP=XhSp@jI? zA6+V?T>jBOQb_-&Et>lbxKJObi?%nY zGC$p(#*nYeqh_OcdV1z#Sb1%a3P7Z>UTJcc7}Obbg7)zORF)U6;;pl&R&H6A%4up- z6)H4r2cHh{0IniTPYVlX-rntM5%IB~t)mkXNn^wF2~<#)1McQiRgvpr!wS8p~~nmCp00vYkis%|5-ZTv1l}+Fz%b8 z%)1tus98nxr^2$MjqFD*@xae6hQ(ffL{gUYzPSc2N6CSMG|L-Vfkui~KtJELGP}QZg|%td$I^;pxMN;v~@dh1wq`qW(##H)~CL< zUV!)V>#6BOt^&V}J%GHye-`LYKp1(3`O6G&4klz4284E^1>`#;0x?CN) ze*)_rn@isw_dM4nsF;lV)@3d!Nznr458R%ZEHYuP{Qy$qpLt;NqnL4JrxECkv-mU@ zc(FXME7h>vcd4k)XSYz}+z+q~XlL}CrxzGv;tILe2UBs$Yc8&Gi~PvZ3QT9aOP*~E z84Cw4$0J1!kqRZI#9v-WkZLxXo?dlcW45~hmQvHpX&8YX?-&%tGHJu?9VJC25&zwB zfM%W9E#kRy5kCrj5H+l}7No-dhr+W+O?qkZAwqc^ispI~`zH;dY%lh4-q+zzqMQq24QY22X09Y;hApXjI2<8{y*u6A&Oj-!m6PcVg_qIm3) z>{C2qc+H_4u2LusSk=9il}=f4kh0S$g@*x0?xTV{TwH9xtktk)3vVxh2)6FK(i5O! z0fImSAo#hKW*eQNP{l3NC z*&Cy|RWMSzZ>sVYyTAXMt)_R(*CoEUWtnsv?-x`fTaR9z9nXg+9ndYt410gQq~0T% zbFt%^?kf~rLsyZUF0}8tXHYiHAww8cl|(g!03vi96xOTtdRwy#CU8uUx!o24aRJne z3r*f*VCNFI)pHr3_q(C^Pg&}>ner9U$K*bk-H1+v|AFR`!?fatM@b`f>I^)9X6m2$ zAVB{C-bXz10?pK+oM5J&2~dU0SLsL$`&{@vTOHI^*!Xg3r9l?9aq zd?kOU%TyQRtj9bZ76R_iL_}lw*PM@kSFA``ezaSxvY(nHn_@EzyjeP$i-Y#!(s!^; zfo#QZY?$FZj7N-P^eO__-s!xi`6}s6<|j4j=o;&BpzFmbnp7d=a`@XpSNXwmD22mz zai|%ZX{)A_jmoPOqnIjYI}|#$fngm6GU9Fp{l-7j^_!WS0l2TILkDwn_MmP5_6@hM z&!2V?6!LlBDyN|j)(P}wZ^^M+oX`&aRun0{g4!yIIlD#q3U#LJuT~2yIIz5;@OK5B z;_lboNwVIp9p?&$3P6~(i$AG~b;DVUDyxyl4UU8kKM*jmbb(TxkgvTHA7k^Bc@hn= z0eyV1jM>fI>96QFP!6UT2N2+!TBG26ATJnx4I8+*x!sOed%?UF=r4`vbHCnv-nMnj$He|ge=qXJG$5rVPh<|U$!lu2*%Kr6_XP1p4H{hUe=&G;O#qPi&%Zj z@6wBoGG<8#Q2(I(idKh~&gf;I7lKd5rTV^{OZk^tyO%Tq3#18(3Ge<6ylds%7redP zi6RIjBuuvJ;1(yN>G05-wC%u;Z~vnZHXfJGozmo37ujWi>XXZRxn8oY6=3E7tJj~^ zc1Y!SnHyd_Kf5k9pTf+zy*|qlv6fk_2|?o{Z&vb^(V}y#w3D?%TvDlXy08m(oCWvf znV*$7$X!$K3<53K?;w1jGRY<2ddL@$flD45>>g;31~7a27;Oqa5YxBKNapKxD9*Rn zr#+y8JkpLs-vk?;fmVkW1sK(&0Np6}KXG3af?=hFG7duYi76(9X!>iob;{)bCo0SP z^S{t`gf4DK7M*ZZ7CHCCMEgkLxB2nKkW!;2pZlTaYtMb=Z3$S&F3hfaT81i{Q>UZz zqwy7NzQS7H!GdF8@C!m`7$!`tZlev{ZjyOJ{GP{ln^A8`bjlPJ<@{4`-5lgLCo%L7 z=lNMV+^<%x889hyTpcyY8HOKG9_waO9sI>LKaPHuKa7H+94+XZO<7C1ZsGQa+x%AE zSss)IlkVs%_r(~IH(CmQeY;y!v%Ge}gTtg^WUgH6pv&cBTh#q!GE!Yo6e_bJ!s_ND zw|dt}DBk?aZ17KZr#6cbKFNuRhtr?n`Rnt&xkgI2h3I}hcDg@8m#i}90@QxeMf8KT z=K}DuP{ae8Xf~(AxKD>`VcdwuKQ%4|E)y7(=@E%;q>dS~{6;}UFu+4nK0?95Se165 z((acr^lxNGh9wyXL@@IEobM}d1Q|8BZKVsinsConTB>$G(B0XyL6e=344asa3w-gGq>Hk1uHkUb8o-86L9DbURg`cy zOkyOeI>@HveI;D7m}ac9sV=2b*i#3)7VWG^&oO zmO8pCYCUU7xD5B=*>~P2f*5(118rsE+)7FlNo4f z&h}Z`AGwU&zZ+gbYhBPCnZ4 ziT0x%g+wx&nHu|%nS4VO4F7|vweb-RzZnF8J-l{4r?|b48uk}De^HcAC}OvI^Vd~} zRp0w=^>2zsUY3aS`nhpnhywd-&#_dDWz$HC1%KUw;h@YbUnuAf91NSW{Z~}f4Ms~# zgb0R>y$;R{txu}nwsXahe^UAsU27x0*x#B%^^ZjWq z%k|w**L6fv>=tU7zJ^Xh=nl=~tCUtJaM%lfFjy*KF0{HX_T@59mg%J(vQu3;b8@qY zo>dGPzvCaB8!))T!)_QE|2PisD){V;hO76haJz@{P{OVtWt(!SBH+8)YK@qzZ`372DPF zI4?^kU(eS0F-E@)eIGT)wk{vZ@0z076_4u5jQ8jJZg@)m8R=}j#m)kTP+3-!!B^8G z$TIPJQMu?j50j0Vk{%ComBuuf_WW#O|7YytSe8Ej^lJZ!Z+9ZsAkA<4xZ>I90-n5) zww%`o0|5``ljBox12^~xZ!1qSM-~;)r!@abOii)uRrM@h__x3MZ*5!DYzdl=R?i}3 zL*t%G`?rv@yXp|;JoIgi zY>MB9x^9RCn20Fzavw}iq@j2mB>a-=4>;1mRjL?XaM+*m&LZlXkL4nUK3j}NP$mxn zry0EgXq9}NfY%L#&zM3nqJS&p#Ry!r*#P!pJ}{@yAd3NlTvBKkLB#R|j7T6;pUu3$ z#=1va4ZRRSU(UAt?~89=&|~|52?|XAK6L-JsxLJXtpRcqU?qmlVF@MkY$5?*Cx~e9 zq8!>2Jsz8`s<$p`3a*BOY$THSu#w zDP~@&g`=s#^XLq;7d1r=h_dsoQ>sK*>VxH7BCAn~Go6WP*)J|x7#%e(X24ps@v81fw+OUBUl-YZQf3<#aw}UoBEy1-@d>EPu6n(ob1O89e$Y3)|$Om z@bv3QplFtu<*s9p?2rmS zZ|6q|dq)|Ce)R~clf=%nqw`6N=4Kgn9ha}?J;J_vTzIA8RvA4QrkA9EwE376`hX+& zjG}@Yqg;<82=If2(_GH5U0Khh^)a;wTexVFqlO0N~r& zRZ0?T|1Slo09H4@!Cth|r^ZLK1;!x1F5+(~0$^XQ?yDnpl2{F>Lq8tOH<Poo)N#akMzZpEAPSo?3l5x00UylM{hZY51p5>p$0K-s+ZX?i|9=<_B)(``3qscPebCxy6 zd#Agi%`zKt&(pmQpuJ!-1&V|sLL8i5>Q_L|^uF(fG;sX39|1t4iv!}GK%ekMe;7oE z;_xj$B9d1v}sE=b=3>+xMX>v8aGL>);hdwH*=`;*@ul6^cysn z^gC;yiy@vk3Hz=cok~7SWZh)bHwd*yVQ#An>snZUK_|;Fkj`Ebp@W!JLsnBd_i~== zX^xuL>!&;?OiW6>V&&GJA{z}(2J8h6+O5mkCD(Wkax;H5%Lx+qRzCb@C`Kre{1wl^ z$+_a70Np%_Zr%nN$K}3zyyl%><&Y4Gm31X;>T9_n!Hn_5?3HN7IiKE!x|^Zf>79gU zzub|yibB)avmLivJf2-~GAA)=R$%jU+H&~)VXZUZh=PRO<-CDx%QM0BcI;z1p6j=c zc~GocTu&#by3?6pgC<7wjh*kU>BtbG5vKy>a4T@&wp&cXI_)x}`Gtjr*;x`0JaeE< zMdc4@nFl#kgLzL3h*9{?K$R})-|!v5uwH%b(sdmuGYks3kzuEbQ{a>bn>_i>OUSHW z5~&-)x_cru{Es{X8vX-l%JMLX|IOOjrxCNqZ={$-!~mv@-_PVFP}M|YB9QZ=K6(`N zNdC2iCh%>8K(3Yi7aC4&l=xQ;+z_BfXt=n_m=25zB9H^sR1t^#k&w(c@~5wGqHdP>hcS@kIdo~L9uJZ*b{bJfqtMdv!b6qKl#luws; zlxssQWab81`@=I5LG#I2F&Mnu#0<`MN^WF``Y-`Jwh)&gOVkI)*ku$)!%`(BfLgsj z2s1_Sc6EL(gzB22N|&5kwEX+ zya7O0@D#rxAlu@Q(*pqT#B%U$gUQj_NzxL5tI?nI{*70AGY#f$OP^N4W5~t)>^3Ry zn`b@6dVL-@cwX;+U1YGIEvKUs?c(=c-ahSK>*;l(oEN;_pKH3+8=t7B$}V@>xZ0C; z?d<5p7i+K-af49u-5<7uEM9v!m)cYCTm8v(RjW^_cfy%0)}8nzuc12C(4LU@d%M3$ z!tH1PslaBon>F{+_$e@SxGhrn!$#nv34p9YG@2=#b9fL7MvtL(cH+w@v8L8em%B8> z#qw6-%rfv6qNB5OV<3eKynVW{K-GC8I@yO%vPYu+t1j9AI|N(T)RVhcu#$z6W=)iB zI9X1>0>{}--d;w&`&Br0vfqiXrAdlceCQ(aXDh^+JcWrN`x)aX;q%GEZ7fC+Sba!7 z$wZMO2L$8WPiSSr=*x{}CFUo|r8O^4x{9JYz7K3TRvItA_c!;tq%K*KzN+MVQ}1@+ zG%mwZS^jbdseN-6%s2hxo4;`zV`az$V!anl6Q#Tg}VuozICyIzQF(wf7cfqe6c`ybEr$)?Ka0tMF&vCdV5mr{60m zsCDQ@KWZxs8YL*~em)az@B~H?_I;|`8ZE1}*AFdC%6?cQN^9iX%deuULu^VuSDdGR zXIU7#|L$^j)`y-r*=;N<$_`0!u^2HpB;S#G+zRJDDt&AzuF+kfRLoHHN<^tw?zTyK zbl~&M_n$m+X2DZsqfb?L1-JLM7ygX-9$aNOF?71u6X4Asgj4Lb)Hu5quh<;uPAyn> zUod)i$8AhqqSc?|4~AX;&R4$fnKD;CeIvug)+E2Q-BvPN5#0;IEOvX;pSS@B3+Pug zoZJo;$gVno(yM*C8m#Ei`l*?XVTJPmXyMqtZgcYbqW)m$8^{t1yn=1r-Q58!rBmn2 zhaaR0paKU!|9pdL&iY)WJ1CL;WrsbPy=}Yr2dqe6db;HG+O_k?xozz7$XkP#eI=ZS zG*OaAcm=kW6oj%I*n+Edo6l*pu{0_}q)Z;6d(L157%Do(wXcCyBC6yfDg^nE@^jNu;UVvUFkWjrmybDS$%G(i|37?rV7uinUdv5f#=jbNCN0ZrI@_4fc{ z`_%W+Jo+35-Rf6fqhAYKQTC>*Fgmj&-WI0V>J+!QEOTbz5+#25+TyTg6Xn^>^JWjg zVH=?zRZ`d)-F*J6xh4VdIE66M%~wGe^kE+*jP!@S1E`4xg9;|`{q?@Rkh>4eNdaqr zVR1e`vM6K)8hrN#kGoL%2fdN|{E~qL*M&0olZ=D?5+PaSCz2=Q3p+5>nhZg2CSvGn z*&o1bnOhu-Oi@*)$LU0P}7yjH2Uww)+=* zltEY+xDa0wLl5YYWYKcX^YIDdnbm2PpBWTJEN=vDV%k(hfW--Unuure1sMhnL4A-P{#rY-?D(czY78PhE`CzFXJu?L_1 zyw;2){^9m!2i&qSvaR2goS>*K^1Ji!4Lut4GWSaH;oCZ#yzTLn1q-q-JCjX2lmA_A zM-+er`#FKY6X`21*ECj(qm%KQX=cx13PJz1>8{nyColaowV(T5k{8!|P&3g9BDkHk z_1YKl9=xqxxhm{e{fDuAo>(|E6_&)OVz>p{^W;wnlO;5B>W8Bd9oCsiT+3@R=RzC{nPqX8JAIxG($Vj40(k&xGTzSt-{jG$-JLpVq_(K zuCMthcar=XC*^VJgq*<5kQ_06zi?+RiYtm3A_k3l{4j;LZ(-23Tz_Nuw?2uu`9w`JCy`0!xNF!Hiv)UMG zmIZn-QP5>a{4r;b`F>A_AEq?I_uZLI^;c#a;nrb`l+KVb{i7%-4h5Y|M*X8kQJ=#< z89TM;*4_7txg=O5-96nIV(vqKNIx~XugUntb3~z@2W-sP6Ndh~R=u9I2RMto%ZrX$ zDpqD-Mc_tH^}L$y1)|~6*;L5`Rn^K9uu`bTwg1fXI0$gYM^e;4fe2C?h>@!v#1ViM zo*U}~xCh`QfzcGziZBF=Le%f*Ul%l_Ot<30YS22yCJs=-_|UKYBfJ=6bKkY`v^$xv zkdj^UetE~j087H1s{-@s$^H8!aN(R@rvZE_+2HYl)8^X1S0#&e{Q`;r9`3w@kc^JT zr-&dI`wlTf$H4;gP7mQ*O8l1_egVc;Xdhc0%1ssgo|g8?4T(P^S#UKW`h4gF;dr!S zJl7kuB*e;r!T0g3GwkpwjFy>Tn}vO7F)gB^JBO$Zit=9T&GK?{cmwD#Dm?AxtGxX^ zu~d^9#u!vX2=f1l(m@bFlanDFFuG@3d!c>{#CptfK-oA%_+UK?7LWmYR_>^F@L_Xm z6Htf=BB3;?0Ff*Jf(Q`+<^wny5Vy8TpCXS+W;0v#THLm%t_gF?5%I|Wk{X#SK))!3 zCp0n2{2T3}MFlP6dqWE%ySLU)0MN&)^>aq6Hu%8el*A!&8V*!OBhWzJGx7s+F;jR* zw8{OxZ9%M2NI<8|0BP0i0NU7pUamD6;#P2SbQ*4sDB~>%^2nzyFG^|3%RrZ&mQ?2X ztJ>C}to=+YZSh^JPl}qC%kYR}8uxkWj;Nn_Tf&9i`X~4_Fdsn5?b8JA0A6MNV#5~* zzN#&_U<;08d7gcxHW$4T843I7Sp6&RwwjqK`_yU!vYLO^X0OP02bjf?;PammGk0vxK~!svtE*w-e5e)M(dYib`E!vJ*j@uhzRPr79gWTPDAonzQNfz0A0q z{n~xHEj0TVB|7uX*Q4*090y=q2n{lN$%Z7^R0v!Q`imw@g1g4IAM1!ekUJ}Jm{CE_0B7982|zN3D_q|REI1A zj_%VgJ*m|JTSw*rX0O&bS3dmp8M62X$wjqt0PYb)Vq|pCmIUWBy9M)i2T2seD}Nyn zS^M9fP64wll&#ZVMpoQ&6KV=v^S^^K#R3DIoXT5U19KG;lNqC!?rOgSgODR2!G-*0 zCkK1$gTptLn^BNYcd#-jA3+ssY({tg1j~`qBdlol$J~UHT=TW-i!&t%5{gx=Q2*qxl7m@~oW1-QEPAYdOct`o0u2>2Sy?7=Zv2~p%It28=Bb~8O5>(oCBoXtT(@7=Yx;dMH{ z>F#`{JWOwdLA}oA`|WFzx0w564pDhtfMKlGvv18q+!mwB!ak3qZlg|gqB0LTn-4+d z1t;IM31wD=OsL{z0xgt%%U(qdZ0V#y!6>m%QZeKcb{nA(kVfO9z&H?lGTG);o#|?L z06rICRm-VVt)lj&lUe#f)jhiVWjP1-{tV>3*w!N}-N3*Cgw$q>k-ohmUZL@F_X2An zmp3LV>Al*#!UM@%bicVt-HXTC1}oK?uZ&6^s()&QH*>=dXKHN5DAdE^HeLAwcPDXU zp2>MKY{+CnlN40gF)>wpm&E^1gRuaRh=@6rOFq!@I?eUl^iVDCJOx*5UYYGq6 zN1$UQau*euiu0Fal38>jw_F>_$9oqN{sCWxLUy*1nD4%plBJIx1)H0+mU|Z9dSF%=&C=Uf!x^ig@jDl)st%!!c&#ioBpd}D7j7Xe2J(JDtBZnD zZ6>bsQ?t;l>oZ7?wt|a`zmNjS2lrez5P*k+*PBG)02#XC#ox$3UaZwK)Z!7H`pLV# zKA%44T|P;R?cctU8vL0?%8i*b2Nic{&=A+EavI?iVN^loX;P+kia?T6TL%k=Z09@J zcteazT}fm!&2ABR@vi(95fMFjON}gb=8=8%y{et6szX|^0(K|=5^T&O*j@f}y6G>C zY?hkEFCq4x2v@-+bmWT_nmTyB_$iD7hXZ2&(+`RD<6yQu^v{8RqXKhLz{*>!n$T}F zylzWNW`hQ_FfomPKRzCocTtVy8Amo~&&4qtb&E;9l!k{1$s@~ydfEGsWcQ!>c&nP) zE+s#F9#m0wrf^>%@dm^#*!*4V{Gj&x)Z%O@zL=F^GjX?2wo_8XH*t)PisoP5 zr!tIrwRaA}U>E8=8etis&qsjY4CR~@m6Vj7?VXC9($TT#k0tM4{$rENcTzOx6tC7Q zrGYO*Npf>#1@VU?5H~dYoSM`D0X|%usP{h~Ne3ZRn+5^|vbUBf^Vm>5iQ;s(cz~#c ze7ZbsDwg4>%t_fm!0rBGlbH6|E&i!Hm?TtFsUgif4XUK4vvqAF>}@A5?#A4%cViz7 zK$eDeY0Yq49{r;g=$NL1|m`pJ*pW|dS_6Bf4s?K8S#2A6SytCvLe{*X> zDl^ z^F&hb+D=Q_vl8=yUFtVr9N~%7=DpA3z>K&)-@RUSJ|pR5=7to>$9N#}4QDl+KP471 z9d00#uO*Kq5hUgV)dWeYXXsG6YO#Cd`vC?dDGW^Iv(nurTt!qvv$|qwwsh2NzoL)!uJ{zg_w*>IL|E$}m zW;cT1+P7uoMlJXD3HXa%;~_%n_Ca%=^xfQZ!)mgxfD~7@{CChgI1=#WK+ya>#5fdi zgD@^yY#>sA|DXTQ#8^`&M&>REmTitMn#vM#_gJ1of>LQG7;H5Qc>piMT#JY8P8e%l ziG6h$TSjC9{(E$hut8N)QRLXSy2b$a`v9#6YMBrPNLkOq$!-K!s0;9^F4VB=2|84;X zcmV?(k6{<_+QQhB+|pUuFCp|I#=0q_5N2QO6(dFcPd6RW*>erJIp8{yehzEY0tPz^ z1^OoA#5Vs|Ul;aeut)^VkE{M!#H@p8xL!n{6b7Pg5H>Z0V9%yZqXc3@!1xaA0gCxc zPR`E3%z7Yms7@1zBu4K|pTO?H72;6#_sI!!VovK{?P!Zz+KR;LXp3J9v;sr%3O`$tO-XaDH_Q2Y+%0WsW2AMkyS&LVRyU82u@l?e+s5n^ApB5cH@!Mt z+Ijxt`?bdbk`y4UYa&GhBkg~3bC};mgPP0)jE$&HGma8o1n=imG04S;WSUfJJXXT* zfwVzfQ2qEExu32-qF+x?XyB}kJ4jpa054cA>wNZyU(Lp0#Brop{(YMUaxf0|9yTvtXqg4m>pB69^Vr zhzPqx8Aax9Qfar>t}v6{>?Zc`v~1F1UgB?Z7gE#hVEBF^ zLGcqu%*wn$LNb18zzUer3E}$$!nd>%*LXR#-pOLU{&x4h04y*BwgY|eYJ+FsTb!OnPKfv4%bn76wg@FnvwV@Kwdnv?*C!>qB^Er&=Iw)n!EVgml-pa$orH?@> zp5c`L+Rb4xiuE(g0oUTU{XjjHOhw~SHoH)e$q|H#vB_}s7wifvQClmT;pLG*NBt8y z+-*}yVeu+eU>FRSXS_T;7g&LrdQSK118gE!+GUzu2aPdFu|@{GmS`{hSJcYvE5A9Y z3{{3$ye1QXU)UbTvlr)kStl>Y=2R4I@z6JSzkf_~?z~26BL>YT(%8n5;a6M~-z?*k zA{*!~z#)3GF!4!;q*dB$ui_$r}ntINeq?*WOGbz|7#e^A6&Ju!7yI5i(qQ z0_iCZ!9#k^JN7IVFi56~0#{b?TJ&-aNov)V+9fvNnXer1+*4pw+RU)k zT#^Gv!o}q$NOuGCCtsfP0^$>A zVQFD}=4U+?{*S4z zj*5cozMdfmBt@h_LXeV1ngOJgP!SLikQ#;t=^jay5|OS^N=iB;B?KuML1I8U1!<(? zyW{iz*82W@)_NSBJNKTm&p!L?)8Zv7p+M*!3JXMqINU)TX+);gVp{9$ri=CmKicyB z(=J5rzxd$@-V*pi0E9ZhafSz19hTacfLsc$VCBCL zU#-No`v%pSFn||g-~#h%wB)OCdDocz?`+m0;C*<8r6ij2auuA%9G|rYhLt$9DAX6~ ztyzm@B66b*w_|O}wR+8}I5dHuKGD8IN1yD9^Tp5RI_<=wnDr4hksIiibXy7Fhpggw z^0X(_v&3k<&cZ6IVA)Dvm*)BC?bqdXg?1(z>urIjbli#(`7g5Q$r7vWe>x6)cu9>P z+3?c~cJ@{AsII4cV{ppf#pH9vr%)PLd9q!25+a=|Z}x#CI!3Ac9n{oX9If&aD*tHX z_cmY7_R%MeJKZwE*PZ64Zde8#g@b&_D)l*F^Xd~4Psts7SD#7fM;ZzmJy)^VIVb z&*eVQi)xgW;m@6YAQ5}>cV$YHCSo|Hh{ciPVLqwn8_{gTheg&8PxioiDCvpOwKJ#2 z&UCl1;BER>h2VhI!jh)UAvpl-2UxC*)6AlC?xn}Oo7VE#Q_#PF%B3t_# z5~nn@XC#4Z>w@ZS_jn~67}){^k@_`YQ()JbJL~%VdB|qEBv8~bifMpBKOre8A7FF_ zWT!YITd<0b`%Kd3oE!0V)k0XJ`AUR(YvG25ZJsKLgbs*oMxnWY*_VTe@}9;}96ed*GLx%G1NL*# z(|}&->Z%3v{pUcPunxQ|z=X7B+e4L;ZNPlaG7@-|}$ zH%?w`qx&8JT*(uc0i$14bYI&aPZ{E#fxm}puUtJ_&565)Yr&CsIQe|U1J?_%UZl@yglALlCdPHp0nr*nUxlP?f%iuAzDI5@|<<~>k8;bm^J#v z7@HfiO}IP&SLvEl+&BTJmXP5gDx0|0`B#%ssG5nP^F*^(BfxUYljFBHXe4wbSrN$BUH~Yw_!o&vJkLy>BQ+w672RkA0Xl zt#bF)1cmt`nh*Eav$FRI##HbrT&5@+BRJRQh9x$fAMLV4L7VMg{6OinBnTgMUv%xw zt~LpHh-45vIhI+sdAulnCsGCsnrJ=BvYZgKf!=#^@3=^9C*_reoYB*=IBR=Jr~6{e zT5Glrdg0))$hTad{AA=HL|1ptO9 zlge~mc&KE_>bT2w+kdq4x9h_QN|;YphEVY^hu0XOMNOpwK6TV>C`#($8Yr2gZS--&)~Ls2unO9 z=1!JbX_~mzzWWwi4f(3%fXS>Mr7d01-uD?#ji8KZ>tE;f7=|jDz_IU>15@u2f*uL! zKQEWNmY87R&V&zPmil*wIq~pJ#O=Y}Tw)%%uuTb9%o`xpZV*vsi=Acd6I*OfXr+SR z1Pjeh4%aF1*>)k1fn}yTc)&DZl(~fg|D-cW^nUG|2Rqfz=br0Q>Pp~Gba(Rz3j-k{ znBn^PFb8KCk}J3>96~ zV_%=BbUC}-;LB6&| z-|^~sFkrq)q(u=X-yO}^d8^@_X%Og3(=}03q>Q?&)^{Ixthtbv!Q;vlL0!;bP_riW zr5F*5>e@B~++yzH_w%7GZmSwQ?*!ZEY-4~}WNPdIX}-BVg);fBpgY z>|nRqf#qRI^~dyW`OA5(CztqH`4B$Y zwCWhbMzwt6y5II532znG;i5MhnPtPR``J(yqO1_(Vga0N7S>qWKL!{Q;iQI6HAT zz8`Khr$86Xd{M1sGGTzeMVl!gbaC`=I?&KPBj@9nxDxg|OM+}Q+yCnFEMFZ?}+#<-Y~d}`3I8%- z1U>Lz?yDGGzHU|ot9VnxEb}X6wzSzIAmFPG9Igd66+`}DNE%FpTip5yHiX5p$j)cK z`B!TwF=0lE4ZAgAjouqxYqKQ(l^o#TzduVsK>@m>FeGmHg7*HUqW=mDi|WY5POwDT zl773cG3ibA+&6e(+_!F$aE0A9CWT49zL6Q0&!L)2M}qda@*yN-Nxz%}2IHWTA%L+w zV&`HXaSs~&Ugdwd*(_F7mHzBa;BtWOcf@jI)sorr_w(&V|G9(NbfMNDo7pH=!|nCh z>@pj(yhp3SYQ2HRW?enefY5I~JGw!ijaQ1xE8tePtf!k9lPY<>89Sp6f) zc{o1?g0>*&R)yto-;!p3MU27Fg9+xn-Q9V9w8f%HqnBXREF3Zr7XU-I zV)qlzNs$TBJ{fOzhSPTPs?FbCEqeCz)muvaoJ14tM6o!T}6rYUB?{`W>clHr#v+$fb&t%qsHTZ@CRuNn!v2kms92!MrH^+M`oPN!HaOZ!)f=}Pwv?p2HPqum`HvMa6`*V_Fs`H{16 z?N(K4Pp@Ru@JH;Z5bKcZL{{lp*OW>t^Gm;ccX!20kx=t>h96U{6_opz^&eN+2V2E2 zMt&?r#0H31KFiTHezqq9^|WD=O)YMNN_xFSk-7R{i%o;=VAda(lxNJ5&}Oha zNDe5D(}^)8fv40cZs}6bzOiZwmjQ@}l?@FadU$B)hzv=D{tW#^fL14G(}bkmohLjb zY7Cl?_UimdM@;tgcym|LYpXFO{?$5@;rXSgX4AF~ne#{Ir!8*FN541BgYVe1cdpR9 zH4rfJ+I+0`H)ztB79%_rp?L=n`82E?V1@YjcsZQQ%{-)t(>C+N+;_pKo( zuXwUhU0+C%_1K};z{v|4baKLGL#<2>5#0LmR^;b;`M{@CY_t?@9D`OLk<<+#0HU{ZVWppd#HGxe}-*HfD*t@mX+ zUdVEb$ogiD@?@QT5I#2~aGW~?|8Tq*r3P_wZ|}_*>hEA!h)At>h11NCbf}xK*X-VW zdQVYtr^Zd#ZpUR_%xhIc_&&rq53k|Kxb0wIMq#Q*JLiOT+eoeDZ0)Vlm04RP99<`h zt$hqn{%8OXeJR+*Hvga&-T8T=y@J?G*o@ep3dpLJ0X-iIv93cN*4v-oO>1cuDR5Ek zH$ROEY^DCT{*h*2$y;=9thKR0^_gpjA30jdinAfG)^7p4*`+(1?LS(p`d$msF;9B> z{D}75XgBudzv&{9nd22)r6-dEG|Qs2|nV> zF(Hf;fBZa^CTqQUvsoft;cW5mPffv)v^ocdAmpXFY6FCkLRD^0VA<}j!X&TLPGh#q znaA{`yG*U!6|4C=^C0r9{ZRGxcZ96UXZVuNNA&qJk(A7S?7omcc8hb;dogv}k4+R$ z@r=A4=(QfZ3{LIObv32?-d`5#YD@<2XXC==5KCiQ8+ghTLBZ|Me3cT7fmpt=p#^D!DbUz{BS-6SsA;jJ==A%r0Vh;kTO zpF=8|*n!@AT74+|tNuH9lK$6kH5)<5@YW!COr5%%R<%r6o$2A`TCd|`tIhW8Q5L7r zP4fM}&M@^HS@p9fPvRr~%KLF!nrwf2x096Gw40fZef&BeYDKaBEW7+(7F6_&uPuSj zym@b=+q{;71m9$9H7od{o>IpoUcce+)O4`gnRsyRS4+pTXS(ABe|rRD`dX%*dNiT! zY0_Nr_0q6AUOV4Dla$52katox5%9Ntm4_$euykf4%oC=${8OY*)yMNond-5C&7IeW z&NCy;dWJrh-J?#5W}jbJIRD(}Z;CVg6d4C$lWZ~R|6UesEb0JF2~8)|VoiMHwYNFL z4RLzy=)5^rVq}#~N0U7$pKQ~G>&8S3eliN8YuB2TLIzuk`9U*343Hx^0w$U+Nry|fRGy5U0%fEf%V%?2^ z2*x8H*244$d3Ox3XnV0&ZcfwrYt}&~1t)fbI{eF{avL+)C8L5*18L%=HqUSo$dH)) z!m2x~xcl}}_TXoCkxLy!keS+Oc&KeFwq8PkkH}B;ZltZE?^eey(@kTZ#ZI%j4_Eyf zD`D(-$X`dKNCkWuZti>_o(G%FoUoNQp~y!ySD@n2Q!q3>9-b?;a(!8dY&qDkS2yj4 zbAfq+^BsSSt+Ew^45+yhV6L^z*-w-kQ^H*)n-ZnXnMBDl$>1Hi92JJyUA@XzrhC~| zna}xID4kAR^?Wo^+I^Y6R6S^!j%o1vWiN;~}i@f?psuy!m_KJyjh#v|c5=cZ+v}nBr3V4G_s$*x>nr9lf{yf0>SV z%eNFHXmlUXO|!JkF0IV@b9*eJHdRHl22UC7l0e1A(vL)5AIwNq7%ay3)x zaG;KITP+&5Wdj8JbRB(nSVTx$$QlboCVXtq5vwjvS6Cl?8mBbB~Ct3#=wITUuIt z0W?HS{u>njlpjCv6Sg{@?j$ZM9ev1Ww2t-Q4?Ee6&kT-bmE$;;K4LYSI%!)Ta8P_P z7RYNidwL}~IsJ{F(N0ZBrupT*<^0~Zvio$3=jo&A8B(Q|00A+l&8t#k0hF3M=hvGg zY)@BaS}P5i8WE%tM+2xz-JQuXRdTu5C{YN2!y zQsB$Cy?dB@q%iy_fAc&j8Lve|Mr}C9i(nkzj~rx9XpN$^g_**dR;w52GDcN`ZIf*>8*2AA z!c8Z<$@c&HgJdrfs-D|iwU|S@ey6F??;?E*KIpos*4n0H;e5A@KD1yCTch#+C{G)b?3vql_BTjR&j&`1U|mLZTqzR zXt1S1+G#?Z72dk{T^8)axeBRfvVk||Dx4$rir-)i+SmgZ=CN|@pZqDu@lQ63FGW@s zcX&%fw7-K%l&VbP!*lGN7Q-jc_An^)Hl|!pec%>@4xxM8d!ZI))~iI3?RcSC6fT)E zUT3d3c`&XU^EEGRW#)>7&HC5J-{&NB6;!*>QVdFD%5iy&_k|v#mM5j_S|=*Wm){7c z6EEENa2)os@68qK*4bM*w(lGL_}z4eYv+f&v)N}mzrX#(dox+Xc`E9^D7RW|>r!g? z4QHZcSRU1^?pNp)T6IzS&MmQB)Tt<}eFSgj6=m$K)XOUnMt=0%)gnFU6tKkY#Q~G` zq%ynV268;)I6dy<^dXsV-{P^v5o4U+0Shz+z3G7_z27_*w~k#mB5bZC3k29shhW_` z^?!blzA|l6YuU$>y>;$12qt1SJx3++R)J-A#T7Iex&ki^iX0(Drrc6hRij3IVj$O8 zqf}v0bNvYnmwoq^f!7<@hAV)d23@ zj<(v8XFv1qM7fJ<>52y~3h2p8@C^5~K`yF-vt-V@cly+YuJMfnL*^ehlXOi3YEY-a zQKCMjC1PV}+V5;K_^eXC7vao4lgD(G+LsK^W)-EiKK|6P5uc2s+~%!}ao=S&7#Z9W z!PXai)8SvEMU~A~e>)Q};gRjk+}rxID@*5czW?=L%#88Cak8KTFC--Ggz)tE&Y=U5 z{fHb_{{5dNnl5>lULQG%A8%y*N-f0wIN_tOCbxd8Ucxu20C?#S|`+{yw&^7|FTuB^w%c;%}A1IvTSt%XIb3AWB!B|fBR zFiXn+WW2B`T{3{-0LV)yvaTfL`9IE8X;A!X2(P+w!x4r)Zndz4$jHexft-D09w;2p zaWfgDG2`l>uV8S0LKHHf?h2n-2i~GUk&7~`b;LIL?mdR?UyfWTzMj1iukq=I0d(M! z7KVoen`gjkbF@jF^Ay02?PJ0%DjR~5l9T~{{+d4 z0Uo^9V|e}Et(Mp9*m8tZ3paKV0-21Xv~f zkA`;_4QF_dV`Rf^89dT#zS#Lu9%)-vRdx^YRKAw}>mTB399Xc+T|CH}Bqug60Jr$X z3o&8|6Od9YP#8xO3yiC`(sXfm$HF%R6yj^e(=F+qo6u?Ryv(@fUhM1*fac?$J~)A-m7yZYZ@?U2s!EWwP!iFL1f?8?Mo)o|+9_d%R4XB&Sc(+}Sps0bPDOp1j1r<L6Tsbh&kTLAm@1=k^CkPz?KTz<6D!YP^L#KC%BwHEM3nlgu=m?zKy4yo~Phc69?s{8-`fhb5Ys1G%nPnYp6 zeD}Yt{q&Y*oZtlPO3>1I(berwvHd#uLD)hY$uVvRDXi5V_Gf>{jDVBa3As$_3|B<- zMo?XdUiYA^r(>mFpTJ~w2DcHkSf{5-^Xi+gnIFhMms?Ao-t3XoFOa-e+m0;O8*!Aj z-WzJrdB}$=2a`CZW*c5JV8ABH2!27ih*ULTCd`~BrH}{_@38}8Ml!z)mAu<8RU=-Q z5W}qq#iM4Qan=JI01kNUjXj}wA8Hd@RbWp*T#P#S`!^h#nfQlHV^bHBwpguTbn51D zxVk)$-T{jpA^8qPf}9$!ar*kngQpD|#-VD1wFA||aas}EL^!TZwC zRYpv)NMEf^la{M|y*YqW@Ix3W{`notP-l}JB7atm|!BaJW#yC+b;-?)4|J^ZY zhEa$uB%rgB%+)1d8c`POYZDDR5^rE-mNM;oMFMmP@^^#uQ(J>KBt<6$3ToCLi#W70 zwB--)OR^RYK5;se{_M@4KG3=*^TW||H>l?oB7qsz6p^_r%_3TL{+33OVnT~@u_~48 z!xI)RL1h!Csz2hV?uT?M!E$bP*U<|;Ol;gTJIJe0}({Zqc`Z{HnPL|fsI4CBf>rg!p^ zZ2InLSfO|0Lj?GHWwv+!5aDMVAo^2c(y?gEyjoZE(8!7on%OGA^sI)EA*}vJaWBoKURi759zQ^}>Ed?tzkm1ep^sHz6?lIADIyr!W9nZqd}vLsw+(F6^(FbHFpGkseH9-}igZaau!2`Whp zt*56q$NKia54xv_-=LeVaAf`spP0fL!pMCOXJf6;JS%#I#x><;4KVw<-I^VI#9#v- zLs7vOzKsFn_WH7U=spPS-4Jmtb82|&(R>sPjs14WmWSsz*(JpP{2sr1pJT4_>QAo8 z{d42?USwlD%NaXMx&QgyPCJ}HeuiSJ-)O8N2_V#vgnFk@_25=ex zc^<;hJ7wMgaGfnXG z{3cw2LO>WNh=>#w@Qopu61+5trhA0dsP_ZH#yO(KeuhaZ_6Ysf*gx&7!Nv_9x*ol< z#U;!OE|Byu>{ZVAM(K$TMzWHHlpkfWx`8}<>si=O!(Cq{t237qm_nP>oSO7}1p3@; zDXM;_XlKWEG|Id)>S|=v!R9X|lj}$k`Uob+IH$iQ(adK~(J(^wdYZw7VRiqZdh$ z*V|q|jKAY5mThtSpD;1Bin8*oGHJ5;>)DSCf6A+Qt76pgH5cxiC}!@s46(wlXYK|W_4g=ZDtRMI9vjyh*|7h>gBdKempm}; z<_&rFTTVttJUv*HNk;#?Nqs2;aHD4UU@ZeMvdSk#&pm$~MI{O$-y^Tz_FBcf005OQ z?Rc5&Y1o@V)b;D^*C6}j6;{5G7zxzhwNaC%XChFLoA;mHCx)x5sTCQ(7xoj0F(3dK zBsuBoXmLQapBux_;bce)YGo)~H$$pIzu4gHya04;{@1_Ykl!A{!wkypMH>)$oE~hP zC#u4z0T)H`sX>@wYr0exx|&9fhfIQ!$1IjQx>iZJ&ca7jVN1Y@b@pg^xa=`RToh?k zsqI#TFKfiHRkbqqHs|jTfq4~$+_k32N)<@va}Kk2UcJicq&oTupS1;J_?a9tp0d3m zH{kJBF3rEQHD=TH!MvmA^y~1vRgb_#^1o)QQ9-Ox`R^1#b$1MU!P+&o z;+d0|z&nj~DOKxefN<@Slc#q zKKb>=FhcHRHOB|q=>Y0h5&Q;cuRn|jmbDInNOg9Q|)IB??{tXt-{2<1p0Qry11zlx! zHk;40*PRgYry7mk>pIlT5}eVqpvyylfYxUO@d3bTeOz&}9mbSJDZP^&&}hiE)pjV%?d<@XW?)xGe+s`KQS4r%HP1Z-Ye@~A($TrY^>imj;Gds&XGqPOOmx55_Qtcn~_FJ9krycwcWif0@jbfyPNVjEFuErQ?eI6&0k58 zAUPMoIHg=kIJr2%04RXpMUb?(S*rZ9$ACPDf2veOi*c@HzzBrk2LUREzdw3*=rw4B zVHV6YzU(K80<>_g7!^SxLifQo1wMRa5e`aGHf=6W#q*=Hedb9< zU=%4S9U4=>)bn~<+XdpCC`jrZM3lJjQEdr6fBk164Kwqv2UvhMj(7~=SE!kt!Tm@m zwIrB2ZegY&D+DE3ZHeL_qf8i_gD)?czvU}&}x5^l6M?wE<6OY88ABR?pt1xH#P|R(a5p1t7h-gkZ0Y^`_kn(Yr;n$Eb`w+Y zihj^umsInJ**-W3S}QDgMi8k(*xc9G2Z99n;`I-~!rQygsSDLy<#sx0z-JL*z^(3b zP6_PLrN>xw{mgSu)?Qa+hnV8~%^fSbj)l_>fU1s^f+FHGe;;V*H5-6)9L$j3OEfg2 z=0i(B#Y6k#EJuk4LbN9fd;WwC-eU6T_wr;@b(P|iz4hQZ<8~FE+3}mAKS3LaP-w4X zE!GPki*VN=`CBA~l^&5vajW|4>C2>0D_;+6&$v%x>^@!b)FaGU38 zCuT&587v2{JwULkrSn!rm`k73J(D~h$+WMm&`;w-YePCEhs)g(osj*7IK|kGx?@Hp6!WL`%@T~lhxDn7#h-{i zoP^fmiSFuT9Kb<3>m7%8svRaN5HoRnO#33M&xGNpATrE^p7wxUaCv!ob9@wiNrIug z$GMsbpy&fUMI&fAgBpR803&SOXr#RD3z@2OF)xKt(6@owjGFmV^#E9r5dHGZqXVE{ z3G~IQ9w4+)MV~Du=n@eVcYIp`=nfy02pnN}sAY8ppFdk;S~PG&RU!*<4nbOF9?dS_ zlOX+_#2;SwbA1Z}9w#ZK(=>S7ws^OXij1qN87E|7oY(u#@8W8yvr45Ap-sckAG?#T zT5H#yyyX^3vQEA$i>QUzI8~N>ja|wyMjXFMO6b6BFKta$@F;M{-qa|&A4?&Z#=z6JnMXjfg0~CG-i9!9} zXMwQUHs$ac05L$=pk;l%5d$guz%Le@A}hS390056S>ae>0)j8P;0Q~=5n{qz*@!|J z#98}|mq?LNIOxEp0ALc(AGFp7u`zI4OVL)35s}5_Z;eq?=5O@Y57S!nMN1rHGI^vK zV`|?$Ie0Sg$hY!Og*4BYrgf`lYeeedq|`|N>O(jClmW}IF^ZMM{@sVbuO(BuNpEnl z!YYujlvx5<`@X;7nX&YVw->gBMUnwi-qx>l1vldSLLY8LBn}v>$r^_{7W+Pce3CAG zweV=}Hfh(U`a8i}w=_PXu0yH~2#9gDC^#}08eBt=!=SiI3ACr^S4HyZpdOa3VKXg& zJbC_T-LS-IxFM#oQTCTgJB%WbOeW<4R1ks$r}D2Z{qLl7vU}8B<<7P{o)dur-+~|# zd*`C?7AQzZQMng#C<=1&zmFu5e5`QURH)!p3sdWUS>M+0dIa>P>xRT$lKndIju?^k zzWf8Dgu=q3n3PgcXUWyO=}J`=JfeEOtpYD9dWoj({;o^D`Teoe$tL};qdkk-*Phmf z(wXJFaKq&9{b!OoHHTkLRSP1p9*CT|xa2%~cW+CfP-^nC^~2FF{+ zYp8;><4ADF6h99}(T_@kieJ1Z0sXs?n~+s*?KF7n?)Em2RuG|i!FC&t_y>T9Hib~* z0%r1!g1bR?h2Jnvj2H4#E*C<=C+Ed;2BLqoKTEby! zU$Xggr%%{ea-pm@$P>{WtSTA#C$)4)4PiM_Rjc>z_A45jUv|F&D5oKu1-tBm1DLM=RSaTXVL{^uXO%F^Bp)zmG>o5dzyG?M_fo zG&6q}D_ez+Hu_qEsG_~COwZ=@diEK~+im)M@?DNF8Cndm^>IyQQM6}eI`g5&kExN6I>oNQixOdus zEFEh_(Ea`L2S*qePmS|&+UQ*A)YO!PF*&DH^fIPRI7EdA1BfH=BXGTqDh7}Tutp$T zodxXn@aWUAFM)(cqg!qAt zN5)Z9mPFO}2qJTa+IuS>_f!h7kO|7%RJQH-E!88X8|FvU*)DUJwUj%uUuTsybJXJZ zLsg!yG*6B{jv&^-*>8NZsb!V$F(x-FnYTum@NCsdzmG^r)vl!UV)57oC}^PoJjNRc z@Tm_FRpz3uIs^cgfbzwPK;6Sb9B@0^+d%bZ3y))yxP5-8vMb9IAB}8Z-3cJ{aCLPB z8N!Hw*rWB%w2uk|1CE-Kp8@oDl{n&AeRgQUO{0T|XG72bR1I>Vx~c=E@lVEFf|JVn zx!zKj8r72GP(cThqV8n?LHD0{QUgdXL+pQlY|%mW@4jfpXpa!=>4fg)DBzUq8&KX8)p>^ik!*X z(D^E`DL(1g;(q$GpSLPUhchTt^6M+}cgIGRFA{pX`Wxn{ivk``MXw~s89P0#GEUR# zaGZp4RcV_PXC`ey{B(L;+$LTta`mB&d_2i{f&$V%eVCznoY|BuZ!nGWQI_CoX@1(L z%hVcSG-#LfzNIt8LV5Z2yYsVmwe{pwk8irG3g{CXZ&)`o(*-PgX{eVV=Bmy zk^zd2uVztw-1vZBEG0#YgmB)v^%CL{!&~8kmkq|HjaYlT@K^t?k695A?Dn!4Mn+r+S)r4FKEvKfiIGZ-v-)N?|2;n& zL1g+~`2!)J6Ld6~A0ngBb*-)K(~IYX)%HaDdb;w2Raa81wjn3u)114Loc~=c`nDHv zh6aXThHWX|@sTO@q7Zri14kmX(biYe)$qORfOH4=x0VXrP~t|SN>U^N22_##uY^PJ ziTvmregB5Mp{rH04mEg{UsFRj|dAoIy0q241CTb_KZ{ z91KNrTfM|Sta`b2*SG-Y-K!(mnlyedf=Ev)TGmvFn}c`baiW6g^~|eM28n#riB8-F z7FAf@X5u!-DIqLDYmD|}|5+ETtTZ(keKRtnA2HT*U-HRU+Ph+0g7K@rUITg6#gPSN zAF8YG20o@Fi1bsoFu}px58kd~7WfxaX#IEB9;cY6q{jD%qTNo`x&)QKB?*U+2W|ZNET&~{LDdZsD3BY( zb_S6&w)~GGH?9jH2la>&R)cVVu_vLUqhqJ_4PbQseVi&m=urtnl`uXd*lOkXQq^^T zbBYPN|K$b#oCw*vaKIj}^mz$z+gZmT3~*joPq}9~!pLyz7yNyFcNoB}Z3eT1U!&-% zNRbCK6wXPiu&pZ)CrV~nyV|H+_iMFZZ)DPrU|+M)qO-`Ss(92n-xrS^JcEf8H<|0h zte4I!Q}nuBoV`DFtX3egocmmSl zQ6wRJ<=qupj2teYfP()eP(RVJhq1pAREBZR1JR}(wes8HkPE;-%b}cya$iM8MuIEb zxYg3fA$0^;Lr_iwh{X;%xx*3Z`=-S$O#Jx0PX(pshm+-fp#|lc!Iy zD}Y~_?+XfevZ1AnZEct22~2{@8o0g=V0kIgMuh)C4mV~x_Whk55(u-xf$tGy*HHO`CZ1r zm?Cha#AZq5gEn4UktoZ^a-XE61kYACu|WZ&gn?o~TEcN@t7t(jmM_A4c8}B=`@5JXHd~_urqe*qUz6 z`S1ZGJhBsED^fDDPEy?d)^9I006NWC49k`ATzi%;re*nFgbJ>rr_{#|rs}0UAk{y> z6$xf|-`}J?;{qG!eJd}6U=g|M#H#E3Kx{R#xgUN8!nmM@0J>+d>o9+Nf!|bsA&!5O-?pS?7LK=|gV(c;mYJJh zf!FCv5}|iQ!HvN^%~7yhq}?POw;diTzApmkWdaQ5kP2RqmnQ-l5Czgy?SC{NZ5TB( zC~Rl}+N#rsiuc!K2c6i}f8;<>kdn^hI$UGXPB6vYL0S@`L){jO$`sb?b}SA9mO5b*iEPGh!b!?2jPt?K@x+zF(_9 zRhY7~fpxpbrY_QPV9El(4%ZMBTKE+lj`c2E(!qVq=MVt9XyKqO2txxqa9>bEjycb?$Vbh>C@2t+ zG!7|yt#g_L(AyAa6^}>;RWgW4vrutKx#| z{mu+V#Cp$PUSSt8XN2yLJ7S@xU~PbiFJI+-u;^w)OlI^pN=HlU9S+4L6g{Nr&I1W- zHSDNv4#WYn`6p0$+waUo{~ssZ38a@0Bv@<z^>CKDUMVJP@3`Iep8KLA+mj}ESlt{Jk*-&mQoAbX~#>M zBfL}I>(MmQIZftQC#cGM)orS%3qBJ%eJ*vZN*lRR_F8+Rx>9c?BLv%(k61njSl;nq z;f_lRY{tFd^=FPo53m#O1j4AU03_caje)CyYXR$ZX-TyRnFi4UK8QQ^K1gl!;qPfc z?7@&&Sz3mXA{pQdrA)Zoy+|qw!;NgfV!vm~))`2GF9PvEB9Z?KH$d_VlK8#|*yl-v z+vj=H8sJ6{l>SrKf=-wkt_&^$^nCOyC|GNa{`T_Q09&9A=$rpk6!{DoCIHu?1C)tC zU_K^8sz6Q@l5bxz@LoIeJXzLQl0T zvuhv?{@|@!!LBL8bK`G?_2$}VheB-nZfhq4f(~C^A+WqDrKZXQJ!g{sWHLLqw%(md z&g&M>Ro8L@8>#fL(_+gcr^-lu_`0g=HY80S-jPQOGE*U;me?5}r*WsW)BW(bswS68 zn$&ID%@0oqh$E0AAmH$XgxcVGFd#2+tN%mR5tk#x`10HuC&$OYJ@n>HuFdI-^Z*-f z0JP3u*Ekv1&55Bc;4T>Siw96Zu>uA1Kc0thNgSw?nLkwk!lk=9upc$OyMy>2<>ET_ z_h=!G6BW^gG6y8x`x^9)rIi)%%H_0%Q?l4MxX?hVCGbxa3cXv{a#fN%9Z!P9qOae` zOtVgJG1s?r6Tf$5#4VnM@9g9v`C#R$O~2iCv1DBoVS6tTQ$d)6O**z;E{V9Zd%5~d zPh7{jrjXrgfaV^qXHZ#Hn3-@m8Tqxzr{F@*@uuhT?CzEm_SG;ER~0FaMAlZ>Lp00oT=MCQhgFThfo zA5C*|a2nWs`?yz&gW(5wpOdwA>zkW^Y4H$SeeD_y3#9a0a42i$wubAbiiXF{exc65 z<;}NIt2)z}Mq&ssP8HWmG+Ly8AA$io&NcAgckdGP*8rX8*49=Wgz@t6HGXuX*YA6f z288&HLPek@ADsYOR#GxKfb|)gPS6-MCC|?G|HcPDB&w#EOw1b$u_>T#H7$UD@a#`g zSsRb7sSME2e>CHI*Q+N}Ke5ZPOBX59C#!EWo@y1QVVrU6_>I7**)IF=!#0GS5%v{A zj%(ONR_EeH+OU1OykKz9dXQI0q-^!u-4|EpZ7dLh}J&b$}f+h}~rS!hxU$xGreSb#NbO zYn~g6q7HU;=AhM2{~4vP#>}p$yZ+{;W2=8g~UVfqm9dI>3hEv;6w*z1U3P@VaKLY4-Z!2c@qtWj#Hq#xlfBQ+R#LgGD zGiZmf_Yl6uIxL0P)DxJgYm=!fk`gIj>EM?R0!M@CwTiqiO-j|^((X7m8BGh_U#Pyd z-GJ;2ijHj1~i2 zkAN6QRZA12Ep);x)In5I!%a;{3xakQ{Q&5ifhAsF3~{yZzl!^*dMqCDj42<5Lh)qz zgbbqcVX;F*MepE#~HT^GfHB^4)$p8kRgPceBBF5sO+U@{=?vn62BgK`xvGg4J<{nprAjfm_`b3?hI}fm03}*1{}+ zImADBJ}-v$g=~~r!^I%voJRnBdP1uG1rNs}Vl)&}ZhQM&eRbFG4M?El+XIm5H&D=P zH3Hk*tSo{$ue1M|$Xf?`9W@a2xgfayUGa>HYtot>+zpq&kr zO3>a2NJHT10YCINS2&dm_3osh3MZfPhKbn^h=Le41u48mAY z29`IYG^zUS{s~O$8!U-D!0KcouEUwV4(ETtDIS6j$5GS3k5!os-U#M$aw6h#apI=^ zFY6!{r4HMYMo~31Hi|(q-@OAdC4bSh(JTB40$|`XK?V%yvZO$#fGTivsv-EZ+Z8|p zJ^&DS7mXc03b$^brS7Q^r&khS z34u6H%@y>X0L+*tH8iHLcRP6vk>O>J$7PUGla>foS2@cbR1!bXHpUj}6)3x0ySS3d zA*BK0`bR+db(x5T;m*3dtE>0lr~HXfVnb+ISXcm}i|$(6Lr&cM4G3)Ato~%iJ7BU6 zMndx9b1_vLJMK0QkU|C^X*O`NUPl5p*~NF>3U7w;x+EnV-=$hOH0tQHI;pG+{408- zJ9DsliWMIlGbS@uxPuKqNT9s1gfObz{a51H^b>S)fJQN#tWHlj01!sh%m5D= zz;k9q{crx0Cn?LJ5S&t!Xng=7sJi(}fpCrz4Rm$4@WFwP=9f~q(3%w+2%ZToa`zH( z)>Gg#2?UtvRuI5ImxqH0J#}qAT9E-Y+6#JWU?C$u{+$a$w*Hh4967iW=k3W&Fo#5! zwn%+51RqF~RORL5sNjdIKUB=Z9u(tE=nz%A1w`vCT%4*m_>B1$P*=HO9KDhz?(j$c z1d%Jg|8yjyD9Arr7jK{;s2Hmt-=vsb-zhT+CPvFO8*ImLkS*qa39IsqYJ+fO_qMcgfN z05ow7(;d*dS`htZNP-QliEx2f;=K72f_xl*Y zRUAkdFaYFRPIl;mab<3GlCqp2^~dZRh1XyGKcc=np6WO3|Cq^4B3mex9YWbVS;^j! z88RbVh$57|9fZgzdxQ|OkCZ(Vj=lH#UB~x%o?n0T>h&V$xX=B$?(2H5n@LZ>?IO>b zK>PQ^KFgqMoq*XrqUSm~xH;13HkL-;zi3Z2k$ZH7W0|7%bJ9Dl3-fV0v@epx}Nmtl%watNyqs(sXea!A!Dg*E?!xA&y-p44`Ch0&Vl=oEQQW*Rq z4<5V$$VeL_2!cwFkp})JMkNHz3a{i6!Wt|`#FLGUjRn|HoSX*tL}t%76_^(qF(NjI z!Nu&UfaVkCZLw4+fiOV)pAhRKArc1d!dOgyfU!Swf8mt?i8vpN^HxYYI1{iglG8)M zTIc9eCC5B?00!Cd`MZ^VbhO5{HjdD~HAyso!p4PLz&>Lc{I2{5zeS*>R7u<47{@f0 zf!X!1c8~5Z5iG?Yq-!fuYijH@ExaGD>i^fCtMTqpu0RAmgjma*g0P^`t&!{$+R77MuSwx2GeVu+fd`;wq{-ie}iEe?j zDoO5?&`G|1|04_FNtt{j!&cu?AjUK~kkL_5z=0I_@9GG`qxMW4aNnvhX#@$~n9f~m zlq3R`PfqWBQcnl&0?_M%AllSYe(no%&Rb%-MpJnl906?WdhGk$+@y0L&ijfz(%V}M zy(d&O;2S70v=*q$pploNk>3Kfnk^R8t-x`=zXTxA!KnED!+fXiw`Vhg2vqjLUnIrRbX^c+?N|Z=lmf=e%EXvbIP*uxM61yM z)U#g@>YdE@5_9F-!n0W=#3K*#f91B8^uHOVjuLDXIc~qcBfq73@xbPAXZHGCH|bUz zhwl3f4;C* z=<`Mkoty3pGA8I}K>2#<(o`>yTPpWpsNU%R@Sqj+iOs>|#8|Fprze0-g2SJjp5mse zW+6tTh@rJi@yZa$@iJE7C#s`xa|HE|^VK8cKte-)2j_5)q4vMZ?hOM=2mHk?{S#64 zg&@Na3-%Voj;(9=r5`U0hHh?!Zf=G;$EL6EYx}B8)wf@h2$Rj{hVn;-e8D0N zQ3Qm|LWcY>RdIiTfrX40=P)c%hyotY9W`Y*f#7hmkc1D1`928;@(-)9IdP%fdnXD0 zbqOtty`U14iM$&jU1Z;u8!aev>rLc+ANL9ruzd}Cr7qLN={J~hk-^t!EoXs?!9fmB@?!qaN3X&F zZwib0L<8@8wfo!QwSLB22Pe+$Jz+N_EaO(I9v!+^wihYgIO2|{uXEdz*4`*j`MW&! z*8n$5aZeJ&{TOJm8Pnj?W9BB1GSX_mspw1I1Y_d&pY!zofpraD#F?yi$iQ|L36AY9PpvL4cY^aZeiW zK(5-OMaLyHa7D>K)D@iD06ZzMz0S7>29zqyqvA@b~>#@ zPZ9!BQGy-tW|5nOtPH^zUTO-Y-{=ptLKs@81c=sD|hWfugRY>3h zzR2+f3BWaQxr==G)J;Q640;M9J|-#*wiH+yDu`KyHLo(K2-rl$$6rl27{NM+vMAwk zo*{@xCPq$M+1c5hOX=yb(J&%|IRW5e-U5thSL6Oa~QWX-@yyjuX} zk;aJvG$iBfKY2PjxWt`iR^1b`JJn(vUVL=^YZ99mI@NexE}AT9f!{hmbC9xbBUiDX zOq=`O>AT=#+#x%#sJQX$9)y3DDI8)AR%orulR~Ml1nCUXZwiP@;aO!tg@f zfuXg*I}Lqazs^2De*drl4H5I+cP#Lq!zybqDYd6-xPs+c6cnrScYrZwebRfUajMVG-ml18soqpV#mAj;VQE^B?|kT z8XAbcd>Paw|H|N(#Rc7u^#r8NQ8&KEXqN!w!M2`mc>f4}C4_m&dn93uvd= zr4Z1GW&9PGe)`lB-+Wd^U$xekE>{~TBU)%l@Kbm+f2V4+Uia;Nmky4ShkHN=lzMUE zpq|5`;-DNag0uw8pYVpyagzT}GdYU9MkH}b@3+!9eE*?U^xrXL_y~kz^Svod_g{WW z!Quj*yc;7w{hLt11da5SD?j*<6h}8OU=b$7C8(0n3Q_a6q>*5?mrJ_JtcCC#?ZDJ! zIm!vX!dovF=f(@?mFDR`C%mk34vt;g@xq{oKpF`I-6hydV9IkKjPgR2%6vr0-_5Cg90gl zHV&p2bA-KqkmJlis2x#E%-f87>MqLnU&ZI|Vnz^VuJc8IiIV}u6jtslUzTR;!rWU& zT1e(d(v4Rhxu9IJ|JbSQV!_TuqiIgOd4Ep8uIG+&VxQfvQb;~p;3yjk%+A1cvYJ`j zqUESd2|tnVM#?~c5(o0BCOe=-B!j&lKVD~)1gaTqd{m86VV9!vGeKVFfsx{aQIQpq zM8zB=G7>O0T4J7SG~QFKm0)sf?dAtfi_ty8Rk`{0`nVSyM{(aK@v==YVH)1X!_?=t zgiG_R!qynpxC!*(gx2S11Oeu!UDq|7p z2fthR3Hxhf*H31ni6#AmYjbl{P%-W?rxO0x-vcWA7Ymd)tqrFC@qhk@H`xYZIF9G_ z{QLIilfw=cVOaaQ&(w{~IMx-7E?ktT%VIH38G5s!RboHAEvi7TXaRIqCy!TISBcba zsa3mz1x=aQ&}GjsyQ$Pe;*r)a8O4j7eC>ih4H3G8As=3nY*RaJo*qf>zPzImVVXP4 zvqDZ%qpRmgyPZt3n@~P%(}Ic}w(zQ0TOF>uX}HH&VF&%DqM{;L^3X$HSq)&EsF0G9 zg7`zuV{qrdAbc+3`^w!LgE;xgimCZHb6IFLkJM0+O{^SNt& zxF_ok3?lX85s^|JLR;ny5zY?(d=G}>3O?&?GGA8II`SPQsv|ubb&xpm{QJ`hEmzWQ zGu}~u7wFsy`w4a?XQ{7HP|BV5TWyiga1{&<4d;7OA&kW_8*`3y+QB(;e0+Qfb6mIE zF#Ef?yZdRj`#&!L;h`5hT~`%Ik)GhjV?h=Td`BKT)c=||jpMdIwH#`(D)$WU8B6u@ z`LvGAV@_j+{1lHWv)vD&)e7uXA9XmDi*+48noUfH-V0%$IQ?waDn;QApZG;d4$mXW z+0bUnh7_LeZ+a-c?$D4;oQ9SQ8RjA&8i$^8zJAj2JEAEs9`M^de!SuR|kbTCSvwoP@e z-1=evQkL57y*2k1w=fF|LyCV)hh4)J~ zT&{_Z(7R{eOr!OR^_1PK?3lEZH~Q`~m!EdWfBHDrG^5`#(218y4Rqy4&dRU@S@Cqo zdd4z2xZ)dDO94}3-)EiTA3tPM>cIuh2dXr5%-7pD_n0UqnE{J9MBHa*?|6c%02*Z@ z8p*4P5IvPe^^KoLoGtD|Kf#2cqc$<#hl}G#UvODUV!5mC1JPdNy+N0fBFk4;(G*}) zsCHewd@M`H@1Gc{{j--ZomYax#Fzhi{NuHuDjSW7@2B`Drbj}PA-K3D0Tx3SPh`>T zLnlZRskH#{)?FD1+=jeb_K+`3goq?R?xjyftS1B!`};3(QRgFu{C_0rc^CHw8_A^2 zhhf&~FSm-Nch?-X9F#05aI|uu^>TVCVx#7V7bw@#IVV5pdG1;|r9JQFqpyiJaplk5 zN5w|*sKplwKfbf~WVS#;?vOaCu3-71{(5%mbPR72=HTm^L)TU!(F47_3?an*4IDv$PttaBbWPL1>cYID5JU( zC#J7D%)=CGfs%(wq|gCzCoD>gDwoUtx77#Qs8fsKzJ^-y5d=|vF5hMnPFraF;#P57|qrAE(2j_^!o2RGmxgiCDEywdMQ99|B1I4o}-|Q?Lb?t`@kfGKqxe);TR4dUa~QqZKq;e)EB; zz}TeDgXp7QDm>6Cem=BEl=l@UtL7&XgtLEcGf^IxI1CG#{vPTpj?gXr>+{YHtNAT! z+k8)wnAtin+Nj}lz0>~2WHrF%3&(O$^6Sk{S%kMe7ymu=%MMJufLdQloXMT96T5JD z{o40YVwOjC7U?V=Mz(#r;+WlgRbvgZH==SArZNEis@pyN8_Rd8`Hy|#J5gWAoerJ1r z@P;T+G}WVuc4n6wxlt|gz<|DcXPDe)ilL8nE@jl__r(~VySLVhOMa6Fj<{!<4rx$zqb@SVg7V0LkHIPIt5qS0) zXiNs(qul1$PjnHxP}8=&P&&1dMEUuCxu55X*JmN0s;>&>zhU1#nTHg%S~qVu*oC9w zXU=_atx8+{aFFS&FzHf^vBKGNx!A0)C=C(n5dbn{IIZ{sC;5_{hQdp-fPbGZ!a8@TbR(2YmQ0A@R@Z!ONn(cS1SS zc~iH=SZYrS3Z4;=O&EO<-jiQlNf{j#^h>Nj8y(ocH&m#5I>Yvk5py49f17GHlW57y z)qsHv(^}ut70Ah3X*TdX?7NAwl0<2Z1eI4MdAxvjDkE&pu(vU{;bh<)y66M%4H-n; zlU>m7aXqrM2#Fb?aXy9>+00X>4fgde>zt6AaSo zZ4`B?GssJk1y3j#*Ao73C5C7P?cRi4f^!MFo;!6Q3puwrBa+N@+@Dign2x!~ zFD$|7!=Rnpo9Cxh?@{Hvu(8R+r&Kg|W%5JMOv>hTHcz~_XQthP2^%pNYTkp2>o99G zi*@#hU#aMJBWly*!FB2%R^16LfJNu3;sJ*ZL>a}EE4W$J#l<|GurZBr9;!ab*C}Si zLG54o<_&&6f8XPcHm*_~8c8Ljo<>SHg0Sq)(!pJ0qidafSEv}nehC+b>Ph`7Q4v@g z(M)Gyin18f+xm6-@Wsc$?Wko}${x5A>XzUK&ZTvW;b4rInL1K1ATnIUNTIdC@#yYv zO9MIW_OzASnan~O)N?|AQUZea9N=U=`K_VWc!_{w5OdQq4mA8)>Of;mxj{$)ItXMR z@ZPBWsd9>Ok%_nnvE6d@W@Fke-#XXT#}sPC5E|MkoJdZ4iGa-U><^I+?4HRA4-o%B zTxwv_q0io*v!TST=Sgq)Q=UzWY}L5Fw45k#uRlAiC9>)%HMEJc&3CsmeB+03z4%Bo zmm7y7`s?WO@PWwo4fOjpE(5G239skkc(%@5l-jr>)=JFOUQ@|IAijLSKmVE-eWuHf1bGSo zI>%QadjLEnotz+N1f2`}v+>QlAgcmfU^v2>7esmBHi_U}J?QHG%XRf(E)xfnUzJ$_ zzE7I-C+F3^&BFOkzLHgKk+av8POP~v9W2{J+B&YD>D_a0c#uB7#&6SD-{HQeV|UNk zZP{5-oAieBds)hVR3P{yK#IIryh2CU$&NGy5vbu4xH%qBqpw*@BLE@i7gr zCPw3kjfn>4t1iucIgox>LWEo1C4a2UB2sa|kz~Xis6o8hNBz{86NYC9m{` zzs>2Z`X7GDBchtJT_dV}4xG5n%Q5cH+N*}w>3FA~;55<-ss>tisxc(${}6l~D5Bpk z=QxFj>c&Q9Wo1EX1-SdBYY1`7`7JO>V^seuyOPMX!)FzSoQc;GQ#TOZ*AeIs&B2lM z_ft+hAqUJdJo)&v^EsB}WR>^K!n$CxkZ&tuJG^rcHo?h$16(ay>GIsPOS)$##l-FS zcpydyT8ryBZHnoJ8vrQJLov^{@w_o)@9PTNhkIlo5AJA$(x$ko9 zTFfYRwJWVNt^RCJ0^8f0Cq4}(6B%jAP)F4zQc$9_A(~-@PCAKPMG;oFX)j3#{E-(1MO&D{w4hA<4mRDmQZ{N z0|de!p(rb*IcdU~==06{n4AJI0GAGCjk(r$+o1sNrhaqU8>lm{e|;b~SQ6&fam&c3 z%B=5I$HAMldxzg1^=10RazHEUSHd~7I6h|B-xR!=_n_!Dkj(fP*n&~A(srX{7nZU}63bIFCw1QnY;}g1)410JY`60{Jhj~YoNr!GARTujuwGAr z^p666!?%XT8im|CHS@3x2>Aq9Yn;CZAOYQdkRGKbB)suE%F+T=7m(9$gq@CmXk3U0 zD}KO2LjjEOQz2Co*to9=(EtOK5TY$Q%FF0?{PyAf@wUM|tVbq8a5O*I^3f!nhJC$P} zOG97>dMYDQY?nG>s;V)T!ZIH;y-&VFMwThP73MGzvLCsEQI}l5$%e^T<}wUIL5}3v zC7M;@jAXD(HHVOy)O+94#a9DqlWFV*FCH|aF8knfP3TmcJIvNdaQKQC zBze>cOT-6cD6*O2xsKPo7{*)A2w?;fR)PQOWP`-JDGcI-vBfmsrNX>b*RaKkooJr_ zF>kCRXlZfe>tV?Fgl(OHiQ2%SL>>N;@+#>U787_*b-m=NSDDW4zgVrGf{ne5o%lLY z6IX9^zO1cS-xFc_?t;#l)hlHd2#R{O|DbvSLdf~UDi*dNK(3X zdRkLJmTreP{6yWt4Wsh(a*LEhgeMPRz~^b_4n8DoobymajKcs9NOH_|nI2#VODG~l z0+=iqP^*q7a1%?C>4c-s=kowl;n7r6BGJuAdOw@*NSH;cQe8x5%;k{|{fQ3WUaV@i zR%^^ZZhf~jk!@?N&DcON9pw>bmQ|C>q}-73p?YVF=YH99qN8ag--_{mo3KeSzs0fY zXqxEOY~lwG0*-7BQr{cO>Lcz;aQOWU<7p6nGPTj%h9p`!-q88d*pps)_B-Q6vP1nb zty>P0D6!9SDottMBx}j&)kOmoL5#f{| zX0(+rz&^yNc4%>cm+>W9t;@{H!U%*B*3_h0SY>tK-S`TmGiTX?qzps*b$udw14J3b zuF$#iHGJ!jwfJ^BT&PamFiz~y*P;RBAE#Q*3V+_0Ef2=)rrD9T+@Ep%>43N(vM3Oc zkl6q3W427m&|dFKfhLeP7>mGt8WiNjoJWDBXm=!B1e^?%bs!@@nQC3y88iV<&l2Oc zgA~`?vX)N#>(@a(NOoGeG77Dt)A&=E6OI=<1NnO`n|uv}9QQe7JX=~D`<|!P9`E+6 z_McK%K`?NNuroH}1Wzp)b8S?uG#&+-hiBA?D~9%|WU2(`BTa9h~#`W>T) z>JQ~a9KQaC~1tGGL}V z2$%-T2yp)S+%P9#Nw%>A^JS_WG680bkNHgoa`!ysa!W!b#7yq5=-$h;N)%TU*1UJ% zIGgg6ae zQ>iz79Iix!>5hQ`#^iYy(E#QO)(hJfOva&UeT^~5P7hZqCmHXU;c_!}QwxZ$@7Y$^ z&kPW1ty;3a>*S>_HXUm}hR_a>g#Tr}n|uw6%An=ILy~jEF4awq+bh3?ldcSS0Ue56 z3X!_kr3+6$xWv+_@2FQ{bMM8E`4?{<=tnu7E1LpuF-p!%g&_2Eu`wiOOB^)is=fED@fdSd6}@hEE1OHAB_^3Qvv9_1SrOmY&6Zq1a7P zmVmo*t4Ht66%d0AzS4FL(jipo@Aaf%ySKt&QX6emWX=7P>!)b4$MO0GOtyTVNIL4{ zeE3fOEo9{aW=&Wu=X_UczHb4)vcy5EO~h$`KfF_DNENL#$YT-`;SLjNY%i;|aot}Z z$EJ+Vd7e`43tm&Vytrw5Qt!_{JD`)RKqRS{jJt9m!DtIom>+t$3Xi4#rZKs7o~Hpp zwmPvjsDZt`c>@Bm&}C%;5MK2JOd+65**4wNUo9q~lR}KN#HO3Lir4PfhTU*cjfoU_ zd`CY}Tus#Q-ja1on^k9oaYM47-}|wq<4g{{77_l35~7A5DjJ;MUaoKKw?dVO#oBnW z53UyPPsgc7Yq3aK52fZ4(j#{*HQg&}wZ>_=k2>lgYillVL~=Xf+7gN1=` z2&E4(9zbssBT1|z2j4IMlDwJn&HPe9q^Ct>ez?$9ZC~0I4@ZZ&*3H%vGWOP%X$~Pt{IQ_BxaEBoqW03gN@u+O)tjyX&`5dJA>iA>yvX| z8isO_1IF8vwd)DFq>NA?9Vhs2K~jfbmem1G0~NJwOXtTU1-OpktNJ*^fhm>{ZV~bG z^MTYqn1V(yY-4v9Y=L@s=h18B&$96_WZH54)A)1m#2eUIB!>x+k!sLRA>CVATVYB( z#-vW<5L;gzTsh8Ms&1(*8Z+|Fw+jeJ`>)ap^>a)}7}cLWQ*@i~xtd3u{`YvNc2q64 zP(=5uUHXG`a>+pL<-%ihZ|JzyL!QZ7^)JqR2!GX45&tc4v&1dC}+aPoBnw)#fMvX0Tv<2j$>DIfAn+O-UUY{A~$N zBU)XODDqNqaVpW)R5yz;#a~ey6PaX59@O@2HfE{px9OW2%o3%Rj&>|QE)Ew>zoIe- zdVg~9BZO37q9K}FsO)&lA+#@V=CRs|hxC6=op+36LXROF00(q>U~OdPlzu~rN%(%x z*J}yYjPahMuDC4ApEu7fCTS0Ub*B3q=Xt;Rp=k|@vzvT&R5&_vRZm*m+8|*7P&~|4 zD^tNz^hGtCIG&SgUjL(!JZI-)*};Eno#6BtF3CH8g(M6q1G$XV4{*IiTfi2$4Z!-CFdw8F2CJW&k7OiEH+P7Q- z36{UDm+|hh$tz~E^$FZ9mCnD#ShJ{z|%;v@? z@%4vUJE?wcwu;J>R}>Ipe#JR+AP`Ko6PB-N$`GK1mMi-xV)8%>Bq|y=Rpr2s&<& z`bmTQhd{Ens%m@j4^dhf%3H=Dk`KAEygb*FMzMU5;LFEY z+`Cl{ccTmp4BWyQX>GMk8Le8HFXBUtW3yaf4q}7gN=6dt2iRzkhD{No8ARMTP3lwd zA(qHBj8xj%n0h_2(HpzegY6b%+~vrXKHd6Msc892jmMMfWR}ibJj(aQN0UcYquKY9 z%k=KN9bRnhw^H(c0z0T08j(XtXD`tnkLX+ivH;kl0u&fpYXS-oRTkJBm*z0Ci3A~NUlvbob7MS ze8TnwM<(R`zAlcy#{5hZcC8Jk-bCk}aLz)70MomXX>to&!JigazP9$~9qzNJ=-JMc zYCY6?rOc3!FG6Q}%=%`g2mA2YOLC{te^CNEUkzVJB6Ki!-bP7}cU$RN3>FtGd*CG& zgnbTnjY1^jEmvG+EbR)7BY# z%u?ba;bMV=Po%!ucWp}j8Yo^#s~cKBd^7*ck*4%1)_S(skYZRxqBG&~HjDb*_Ac3n zhbq#1*8R3l4L#vcX7BeQk_3|V)RAnId`d#eWr^3DdiBZ?HAUF8VmQ;}BZJG=g0A}q z!!=bDGBXQmre;x@;kJTE%(AOz__ReZz@QO2bqQe&64bQ`w{r$SSy|cMI0qphdT;ub zjqfFC_|`p2EXe0;+~&MrarUM(njaE|i(fmMND+}zIC5kXkP;*DC{gA_JuJe;jIkVA z9)#s4^==L&ruOePTqw3Z>|@AV#4gO+&fX{#&d7Y6*TIQ;$+n>SnubigNUk?Qob_bd z#N}thoZ*8Pk4nTVA88CEMaJi;zr{um8hhFQctf6p&wL%LEIgbfAGSF3NM-LH;R!&1 zSs1R)6)j1jB&=|gvws(u3-C}XKTW4LzG^ne(lPg!smkUoD%&L9en?q04;rT zMqOEVjK*&@I=JW6DD zW@%L8+DJ|hhw;XE7(QekCcS-|*WIa!UuKQB{Tl?h5%h0sim4@K_F^#+kV$#N(qOlc zlp%^h2o(7Xremp8OmPOxSUj>we5jpIIx~|d)Jm%(8`eL6SG`r`PHWv;!!eh7X(L7Z z+`IV&nyD$Dt0{6N$jwBlZ+(QY0;b*KdsL5n?lw^;7IAQD>%3)AS@dbQO z!g~GdopzHJ2(52lp7}EOThouiB6#(pUHC7_T+SvdjQojj{6i^r_>q|`_`K_+5#)NgNBgP|o{U?r^ z0YZV2F;XGRfjm>RfTbi|5l+Mk#}Zhq*VolWLUuJ74*DiPMf8=6Q1U5J>wM8zDgsl6 z_}ihq;-E4r%r8;adYu0-&PLS&E!ajUKHtZ$lCGmbBP37P@K(sM`?p19weml9;fpsG z(aI}-ZZ&Tp7iC^a9}?ehT9TFANxdcGT%paZqf=2B{r%(R&;Gu%u{!J5f^Ol^>aV{h zf}0uc;K(^v)zth2<1~{L6Fse~CYH}mmjyo3K++rx-miLkdI%(Eh^>h+rEWdT!4BP& zMTl-ixEj^D%-ra`r7Pq4Oitmm zkUgdF^&(=oMn4rI-hC9(|TuzUtE*)^GLbf2DTE2ph(+T$ar8^Zh}C z!o0k%%UoBYu+v{uhKvn@MCBSLUJmvp3q*AXLzeh5#QkBGURoVN!YGbibNZPM2L;7~ zC-4CxT;K6`7&B(2xpluhfhmPm{+<6SN5s^ZvNGAT@10Q0(~RIXzD;#9z?F5-}tJE zf4fl+-<8OAU>op~4Sa91z&O|maK#Hzk`OV{34c3H%!}7Q7(WshwL^mn-?Dg>wCJG4 z*NcUx`gZ$$+$DM;c`ut}*_-yrlb2kcx1(tk8_>TTDBD#TIfM#4bJ8fwGfm4p8g5Vj zB=zhINn~E?B(JBOsN++r~bXBZIq+1YAu_noW{szn4w%z5-auKL?J?Gt&SnX#Oe{p)OYwmRqIm zhL|@$V-ySfHGj9SmB)A$6_Mx=54zvP?AMPyNX`&hv^fREfom>TW;& zh+6LzO8H;gnep0}i*vS>B1Pv;u*uv)4-c}XuX8=={ukttD|^wjto;)49YuGR(kl%w zFDcvwZ38><=rRq;l12D%djW?*2ZVdu@z%|YJL__bAl8>d=)Z^PG^l&lB|-T!bPRrD zC#>fi*xn$MoPM2!9|?1yuAbfp&>Um-{r#G?FVR^VAXGU2U@Q^aS53UJOm3@hg&VAs zu844&lyI_%2G>s~>SwXXOsb|XQ-R$OM~Li+kE`u zVbQKs!L*&@&Q}Dp&m2PFXXRXsNq0BzQ{|+hPY;ZG0x}F5&;${F$1_ak_+`+z+uGV1 zVnNelpu9ET6{z$E+P75>d=xaSu&Uvc67VgGh?@4DKAu;y7m=TCH4)r2)G5HH`KSMC z_)V_Oi!Qwx4e=i3u}X}5L1#>r~z z^j$Y;by2>^lg%h~_xMbbz>3gxI}ACJT0n(^T7M8!q4EeT9H03Iq6XTS;=0|W*RSzh zd3pcuCQDRl~3oq9W!QS&=} zt*IA-m-I$l6Km|Po+psI*IZewQeH`Y(7e$0r|snR_QCaH2_M^@Lmi2C0@p2UX8GcN z_SM`VL}vJfb0F1mFVF_PhwPF7h)H26pP~lAQbb(e@x3ia%&7uXT)>(s>KnA2J^pN1 z0yXPr*Wsxw%g0N-?8v|Qz-i!NO)2HWj6urJoux{hB@chU*7_rw^5=?HtmV(n5~WKP z!F&1NoGpSg*(<+Ym!aBRcS4=`2Lu^T=XAZ9>oYSP`q&?nxZ97f|0|UZ_oi%O_D{GT zcCYme_m?NGyR@5f%^Fwntx4VpsTn!Kx*TLa@108C+iC_MGj;5)xhh!1{(MY0oA=t$ zcEN%+Bc$@}n~IIgP1aF-M6zC833PuZlL@)B2*9h)OGAbo$d6P+ko2lS^M(%{-piAn zL9ZZ`Uwe}Sk6cm4`tcopEE4pR{huE(Z>WFCngls71qm3#GEF9g0_ zaJY<(3cJcB&p>kw2SK02y0nNm#Nd8lRfqzWitS1#8LOR*&D--1CvP|tOTb$qh>Cvo zjs_Ux{ad+&!=|ip^4T?R$L4cZA3m$tU6SQq^+>#U_${t?OgJ`2iBp?{Mrk%}kv&nF zAuXqt%2Jf_d)9m~RGyB?xiW|D7XN3H)H2#d@_CO+Wh1oNagic!%MT!s-Xt19d&0W8 zz0eO;CX5ex1P?ve%e~ccb)x5{rl3(VcEe|&GLy~`NqHyEIuD9KyyQ9-4^`l$+^$qG7gH)eceVXcrH+LGvj>4ig zziUJ>*S^?2+#7Y95O-&tis=2=_dM$YS*`1`;YqttIO*3iId%{I4AH^|M!N0Y8RVt6 zZz*%%ead>W-PNEOy8Ty1g5jmr*hh)o)xq`O6EVcj_8zJ>>dy6iTL&4>g#VQMmVSTW zla<}|n11A_w$Ng7&#H&3le=+ihfn35-@hh3m#f`pytl6#SFt$lgx|RTGGG26cx`lN zD<1@4MkRlzB9H!JXWg^onr0*4wDzRL)49@B*MH;Jbqjfl?Z@g{L_E02Y)wfS3Sp1U zf2PgBjWfR+8?h7|zY~FB7ty`_Zsd!n4=AFIeRi~Pkr#-m{UOQc`-;%>F<}jI`hdec z*dm5?W;-jkmEMe={CC8xv~GV+NJxuBu06Dptjq$-4gNM0MVjeQffA=IxDl1N$j=0Z6 z#Gg0IlejRtPNQi&ZQ0Cu*|*y>E}A%u)!3h0H8pN*z0BD13uM>TsfPzIbf~(2tYN=> zo==|JP9c{R7PaNO@0mOLVmhC)D5)F&}vkJbab$P;79(+H`^QIL| z3Y^ZI$1STI%NpOsB!&ih?e4Ag*{;@>K0p+5Y2!%{V78z~{{+z%ai&gzJ5^r5%iP&f zu@GTlvI_T-MTi=qLj)AOQ3dC|j7o zLSB|&UL%jSfx+3?6(*;3NFRZr3l-43Cj(6vmi75xV*&h#aZf;80txRnWG@c>ppgh8 z&+X;N3SYg`njS?wQ9Y6w&$Fsm!~XCOO||}-ZgVzrvEP>ks?R{~T#7??>ZPZ4gjb1; zHk{v$4Owb7l1bnC8)xx9v`7S%&ro-i- z68}G~gV{f#<_f+;S2(dtb9A+m@@_r6{XUyg>)&nlUj#!_ZxMpJS5FAqw4&Mz@hWMm zD{IWOEH(4@!b8@dzqkF3N107i5^8v3`K@SOm2fsvwDw9xUc4%9UDG8JBn_K- zUsohSzdR-IyKi=)#o&w1&Roi48VC7#tnOklW#7u_UvNRsRa(iw3%)_4*U-L_TE_SG zZXeJ3hc~yiKPECA4^4TTKz8&E?z3k&BuThyk<_cwYcO9F$tc>@(=qp*tbwrTWnEXi zXtGlhUouYw)u(~m!w&Lh%lka!`TkV0j^A0Y+$W}%%sM+^W)+5U4;!&k-;;`EonvV` z-cjzzV~QX#$-VEss!S?f<*{Xnu9DvSqm1V&;(Mt{O0{QAC0X2Wz>Y0vz90x46NJ`; ze zf%weLkG=H%b1(WTNBGCyC*^5a1QkyCik=X zG@RD{a^;@7X^gW4ixU!h><`%weUidqaI-sncD8CVz+-SSes$Ex!84zbJ^uiEsO(Kl z{{^+@Ml+;gZaxRySsZ)+^5pLLl7GJHH!=CEqe5*`ZO+H>^e2s$_`HG$l4HPJJ~v&& z+jD6|WhuV+bT@3pooC{)`IY9D?suvpRaTR|lcz5?hKAP~PFJVWPC~cMJUsgXIoun@ zOMF&-QGTJT>@ng{<@!!c%SITz)pP9RyjS6{W>nLSr#l~iVPb3aAiM3W30WhcV{isY z*iBaNmc~MrmN;o^fA>kV&QRmS=k1!)^<>a#*3ids<%e#P1j-0+c1n>dKK*W#$v&r&!@5KH|jO79Z7K%IU(-%bTpVpkkiD)dJSvHMeiB2_ur3wGoCM21f5au z>li27F0_7^YGfAu<{3G87ArE=Q1fE9hO_XJ_#Gi`qKNJIwcRmc7fQkXwzLyR@h}a- z)s%*dAr~zpyGN(qJmk0dLYCB&zu(s9w>&&wZ#JG2yY!@`ZSO>hf0kT4gX1b!>FS?a zlQr>931jDleGj9rv|SgazJ~bSuiDru|Kinfwr*gExEhAVr2ipnyKWY$99`Gs$shM* z9eZ?t*3ApZ(l-R8)ofyX7LjdxM{Z}>?hh=U4>xn{Jt0$L5_MYnZ6O@;WjOjMlIq61 z&K&!6XmdE$yaG@EM}?2x!d_To`i>O~>KtdZiOhZ9o~f5yDN*LP-tyJ2n$Rl)`OmIGFB)hXaoU;xhe%L%7PkrvUIEmgE-;yW}s=tba!J*&lB1D!qo|37$HD z?U(`ZXn}^-%*>NUGrOSUVQ1zA=4A*O#YYL_(2_{M;Xs-|hh$wKvfv^! z_5cLwBSgc~Ktd*6Wjn}i-H!p8%mOb}aBIcpJ&eu2LUVQRSS!=iqrfQ-I$*ZeDy|7f zcBA-5$D0uXL!ym}aqYj=^J+v)TZvBTU8zv>TN5eVF9!|xihb#y{_N(JwM<+vp9 z*A-U*#!_AkCf@drMn+rGKv#EYXh^c*A|`KWoG(epiyMQ{YP-3)L1h983=@W|3%ON` ztAvQ{Km73|^sWPgaT3wj^&ey}eRow{5h2Nc_UEHO@QBuRk>qO&m-Is0QUqRWx%W)c zFQPXiMt}H=h^GxQ5<9ulpxQ%#j&>wsU;R)Z!WI-eKm$6zWl`s+h=2{PH}z1q}w6m zr=HDM9SM{qbm2=LGhJGhrdfx2yRXDv**8rT>6NgEv1bdHPlc?AaMipxd$Q{tD6Nxd z;5LocTQaVjWRR$S-`mvMq1JWq?1aiTY$92^s5iWKWbcH>(K@06hb`QVP5_0a{R(Gt z=Z{d{^jkU!lm24&^wrdf0JZeH7PKj&zliVAkMQP7ogC@DqS^IJ*g~Gv`n@^{aUpOy z+(zRm;ChuG&)j(3?r~vn*@Xs;YH%p@h*?6xW6%`Map#s>-!a+YUU?d?^K#inbmQ4- zm11R&VXe>V;iU`nX+|{x!NT{OeYI!f+wkOlYNl9+C~g{v%wyqP(AD!3-8-rJZY|tg zU-_+-gbD9zUtYublM7bDgu+x(cx6SpD}HSks2X2f{IzmnizTgm@?P=> zfdNAYHs2rMuJ>o-KyFB^_oRtI3L+ZNu5mC&TOR=CCeDRU7A zwFdh7(vdcRj%64({)di5tVjd^Q>MP!(!lGVChEbrT?NOc*WN0ZLB$(v^sG``OHdn1 zNVGpJ$60*!z&Fj!s>BrUoEqw|p2^XjVahWcD-E!a70`)&sO9^L?Yfj7f7M}t3703^ z!j_zIy!W$JTIvp1IQ8c@>Y^sX340WK_*M9>-oF&St%-q%MC(az2GwzfbB z1m%nYR@O~42niop-N|B=5GM%`$bOO>wl!dVfJiE1p+SyOlvY0m`OqJ%gA#5N+lMM7 zhrVx>j_tdAo8KyW&fC=dy{!xrUU$mz>KiE;)l~^kvq^F2%;WC`2N+WuCxxraUt zhZRtzM+LpH8hAzh87*vw2Yp&oQCGANCO3?EU3wH;CK|j> zEe$2NbF}C@-TjXG@t9_B{u^s>wfeY(n&vK=Cry8B`6u${g>=SM%FV{*gSFlyui1Ys z`)zj&2A?mEudGDQb8{-j<82{EG7a|LX0@&!|C$-eQ%W0LRij;*vle+W7(Xd{q;PyX zBc70U$LU#++O5+WDY>G}rape0!XuRz$pngPDxE(c|-Qec+Jl!6Kr^ep! ztKf*l@nK%)OmL*zs>C|9XmdBsDG*6Sm-8;5+C9u)dE+1$;>#WOdc|s88TifjW23J& zeG3rut;ZMSn;%bnt>|Gx-fmJfK319A0(Gn>tQR&l%tHYuAwHwkFBA-){ATjnYd%$b zk$h=^A`~Hz^7Z!9Hou0IT3bJ3LeD7)&!4P+1d>L|H#gQn!9w)#o94MomN6Tde_ zA5vqx(->+^!2&w;Y`E@%q3xuBvAB?!m0BuR8{gh|VmLM$MkOaY!Ohd`(Jwfi68gmP z%gw`E<#OewoY2TOj7~Tjeu-<#DgIgb_LI8#n5G0tmP+D*oOC_s!$jNpWZwSM%g?{b zI^De}pG6RHfdsbTRT4ml%7CWEv9>-2|5bmf?MxC0LD)5f7+e;0S(1ny>34cyrGcmc zxD?oPGqYz~`H!_Nax4kik<+Gt)Wu+hvj{ulmEApCgecw6sf4WwJHTCk+c6`;FEE$E zAGifb1IwOJ(%pK}^dQOt1a^2juODj}<`Z)KK2FIup|LV-%CbrlFMcCf6nWP--Fm&_ z4^?T^e1kM)_F{oyp-I`a{*xU%6AWTn=H6{loWwD4mny(1ZjWRHP1^; zI>sKa@iCA;Xt|-1wC*kqk|{X8W8ja|lB|69009@idhI8H$mAwJIX$&xG#4O3hPVof zaIGdeO1WF;#=q;ITv?ygklf~C@%Zz%m%)Ao_KRC5?cRsL;Nu#XwL!Yd2v-J>Beubq zQZ*vNFzNo|6Y90-|KsVaxnASEqf0Mgwpf>Kh_Aa&^OZj_RcPLWROMnLH} zG}7JO&HEhh_xJvL?+4uM{lu(UGqc=xxl_pk4{xJK-vkM>@$RqGV^Cb5E$kcx)Vx(q z(uyZaC*LO|zkPPNwAQFKX}PSpE5LEQToJI38cxA)KelL4JEXI*=|F)i`STA+bivX* zbsG*MSS}A|!6nU&%|aHvRZVrpi#PZ9ZzAogT?Bs~gzDz{?E%0#-JpJOMEgdM&yB5@ z=l1wB2EKGXmJ_Mt)+Jx+nB`XsT2FCsVY!tDjQ(7}UZ}Ul#|9%5k1&s$oP9E#TG42` zuIG>aceGMJ9NyI&fV&5N@5oRe0f0J=E1Che((f%A$Z5lDUB6eO&;H!q9?r&VU)93n zUX~1AoAJI!6TOi=uVe=w_QNR3qX{!!tFEc5tTGHy@fnUb4sB9*l%+Kg>=And95>~| z+kB|8q)QF1>|erqLT-4@nKTM+``uf*I*k!zY}bQVWW(NglL|VNYy6I(*&Loo7&GKgAWk)f&aNnfoTIYLKPKGrqCiOQ}RQW zd~R?6ztF9Sqj+u4#C(K|B{K(Lxlk9)W zxpJYIHMYesQvdc6BB?UXnX<0RbQukzE5S{pO2%VNPSS=T_w1CaTkP?Y0fv`4pac~9 z;F^U{5aox@&&%t$H$Co&go*;IL$>Kcg!k8f{~lWhT=mRnDcj6zdeA;{9nsX#Fo0N@ znu2iZe?R%K9y`03@}X{V1!K~e9#L{1PMBrnQ~ILuQe)GAMRQoq-#7MfUmzaqp=rZ z^Lp0w3%y~*Y^LnArI%x~p12XJ?Dp4~Nk2@v?qKgy26_6a#+93Uui_U`BqCnRV@a_K zN6l+a*NZ(_@&WTH{9d=A!(fRYHQYl|Um>~!T!bM#^ed`|`Y4Rp)6&MU(X`9jD!P!B z{$Q#s#N>S{f3MSK-BPyB?rx*Yw%|<~NxdCF1W|yuAG+7qjMsErkBY6le6kCGCRT-m zZ?%bBI*LUW`X(N8K-ryJ&#Os5+T-jA=?|B9WYl_K+u2g`LAwDi1BkOj(-h}UCKq$# z<*H}%(L1famUl$n6+1;XB~0#RdNtseyRP&TCZc&fCBsFo`I0&!fk>M619+3d+b5nhaDLG*VKXz~*1mQt<)k^a8dG^E6DRCBtPD>X&|2P{R&QC=>#wKA!2-=6iDrn{cjiMOnT+;vJVUx< z%bS9;f6gwbyie-4wtl*49qil0Lfpp|vjlxh7f`K!_U=pvfQ^7EzOFu*}&`Gd_fvY^^mCbmV+rDUqhe91)teG zrVl}GC^##Ssv>yErv!ekLh5v$^w8Dl!py@R%dE5aCE@wic1A*bvjjL)(DOFChfv!z zVyJJNHWX~#QHq~5}wO3;}Cshk{WbuDUiBC3@a)%f{g{Q1ww&rb1 zU~uMyJKf(Eeker8;95evz7ZRr^pxB@;TlTbY1+S0m+soZP-Nw7qCoJ1{&O zShoVa6IePprYydEU|DE3I_A)%8HRxeDD{ocBciy!%8UqFOLZ}Mfzp*Dox3}`JzV)t z9Vs(_3MrCIm{d*BV{_;@^@Dbac2ZZK`Nz|AHZyZ^MN1QvX&k+SKyVd!^StE7#}faj zg-`-()17N{?E^BBxSevqulIfk`=X4#{OEgov$%frVy3>uN$$Y*d_kquIj}w-+YO8*dW$j*?pK3`m9MQ`ngpUkCv>xsgCA zG{5};Cvzt*BasnV)Kn_3ZGZ3jc&0^&iD=-V{26ua>&DglHG%SnO{CsY@b6=MLd+Hy z3NUz}^{m6(oJNPHXDu{3rZ8$bQ@G!a8M|r1d45Y#I`X&R@IJpH(^9h$tbc%-1;1wF zb?!LkQWL5dBQ`)?wERUvw!G+hvRnN{+gMi|d-tVw!jOn=GG)4U40S*@Mgx`N*SHjl zl%LD7Io!=mlPp@_G7@8-K50F#RE+@dhq%pvR5V+JQ1U7`FYx)ck$IbwnL!dwU)4ZU ztX8k7abj1mtMEXk)ZM3Lh$F~76vZiEwe}XZR{6eL&OTL?k7(hW^gF>4oE*uz%}npRJBi3Hh|e>n4&)L>>{Y z7s4ZFNd{7j_9v>Me(MRGcZIIl{6NUE2H5SNokBe*2ZD0cWHRbCI&S>T!a~iAmp(A{`95MFeVfTbr~5MpMZR&&G=}D z=*-NF%k~(Wd!7*-qKVv{jskvr6GW3{mZjHg<7CQ&zSjNoUfihn*?#fKD7R&)P7dXJ z3^77_@(Jp1&v^dOM{uQl_@ub|-Hpo8qjFU7Wh7olYSZN|#lGJ8?#TFj=Q#kXRZ@lK zrH_)y0u>2F6O6xU^VzjIWo84;rTU$^wQe;40I*ttRxVHi^ygPSedw+~7_6w-yqk|R z^P%J|Ee?A+L7+C*>gW-gU75Y-`zu0A||5v>7iEx>NAJVzU5ck)Si>wTer)HJjZCQnpPaSz-qzLq)jRszo)wQNA2N(SImSu)N`mryR(hL@ngf*6 zYDyuasRrXB;iOvFV6Vw^AieG+mCAa&4xig_mL6cQw)~^iSgt(l`WE-o_<02UX&L!T z=p>wNhrEk)n{{@{1-Y#-&M* zXqDBObgeD^x|}W=0Me|{`)^^7VP~060}bPgyWSoQ0A8f)v2WHIg#a53@FM}>v@Uk1 zav0URL?VM}E4IzxeM`Xmzv5WKDVq%%MV1!wx%MdEpc>NRHQv1hV6y$Wz)6>khlLjE z%zdBmHNl|BuBjoU;RqxUmD?N2W0O`u?@`)N`xjMVPeHL?M8 z(38xh^ThLxG%D92pWZ&s zh*zmnR-Zz5a1!ci2bauI;Bmdd(dEe3Juf_m|b9Lg;Z1lJz&EtzK1RfP@=kc zZz+9^^Z4{I3>dW?VXYj7d_`il`BqQU)2~bAYSx}FQe#=m7K08397yy<#;w}Vl-2bg zl-r-wT21i>&-e)Nl2zu(i#Q!hN=33Wvu@AX#V&Sz4T&12{oo&7U9d47C>_Va$mRAlF+jL^*g(@ zRViL2eP>EmTxXk;!idjpb}09&9erFfY1UjcZ3^pX9fo`$Hf!2t3{R(uLgMzT%LTk&>)cN0Sq zOI^q8lk^+c_T+hxa6KFU=A7T6f{VtpT8JNP*K^xFMig02O!_9_<_8mq@RQkBY{!tyiIqE7}&vCU+UC@c2@6a1*&42}ZCr zA5fE3Ek0a!i6FrN-%ui(VSggqQ_+VFk%ujySpd4YAI2mwCi=@`pw0%G^6!x3@Wt}& z(ONNNN5ncybgGjBaijMFJ0C0QIM&zQ#Pl=|s zYATv$xiqv4geBOhy5IDoNz)0gUp=lVU@TQIVLeU>N&>nRz)JPLmNHS%1fe;2;8Wgq z<;0uvEcO-pqbH)JfMz9&JoB>tH`Lpu1BKnm z_lT(#*3QYxRMVA7iJu~R#Nel(c|7v?MvU z-z8qYT%|UR&m(M4ot}H8w(%S&Mo|D!hpE*;O}9A}E52+XY>8_{E{~_Z04~+V5I_2* z&xab9wE8#nS!heM)TWsdgAqeC3iLi2eM=14UZZ`SK$=z8Yr7Sp?Hxum;ZJ4Y^iid8 z!2io>_v-C$a!+eLf+XKR%Q50PGEe8~G{V_O%{SS49T8maUPPsY3qW9(VjBnz*@wR@ zIT4eKeVy&>3`pQz!;5ONEw~B~X!J_qOB+Z0?F4qy-y^yIlCQQh`Mdw`jv6;|mx2X{)>_cfW`_z;-u`r6k$Zm)wzA&zES={Np|NM#FnUxLR zwP(oWoHUoN_c+>-HjVW2cdJk|)i@Q;yYWd-sQ(`N1y`wpG&m~Yj}_zw&yNCEC;-Q9 zJK&3e+&EDYXf3_L*x5T4&w+N}ain|%>$(Da4VeV?u#8Gg5Vn|~-APAWirV%`9_S%y zyv+;h>M3O~@Bo7POD#2$_QdrRgW<%nO#V%MDV@&wVeg!326N?(MWxjp(WPphRcf*% zjv1cu@Y#2(+}kR#F&UPe=W|!=Z?Bzx6VKf;Owq2XDcM$^(>$5x{ha5_>1pE6v?=y$ z3{ANQoq+Q(b+2#dnKBT(X92mi=VD;#>-VBzb#5K&W1&X>y-iSmwWv@-_7)dK)kGVC z)nK}6>u{-q4z8+(pAsN(?*Hy`**?uvsn?Hh4Npi zK%3T3ibDC!J|~;S1gYwg4=9YH*g0em@^du5ebo}Kxol!#QA$?L)${r8^nDh%#WOwb z4o5WI>X_xfKMULz-j|04_PFiU7LzS!6I#Hy^q<-62>_$SESj%@#0zjWKp_Zi z%c2ND@d6Gcu=5_c{MKiBdkaC|5b%@tsct|*z@_Dn2?Z6>V{B*}ki?~MTltg4+~Ttj z!ex(4G&vs#HS_=W5DT+>S)l)> z2E4@I{rX3Kxko|w3Khpn(O+- zGk}ixWj8;5Cx8+Ow2iV(AalcZE1gT2P#~6or(ov?_`w~^pzebLZp4-ahz8l=co&H4 zEGCNmw4yEBX27gfkCugw|M(n(GqU`XyiFsR-mCtJx}KNs{O8WYa$k6=OzuGDBS zA_?=bmIKU)tnv03fsW|cBR`h`9R+GH6d})#D=Ru_Ps>>7O)#&oWU3xrgQM-B+@M1d z-arF4_AkgZa6kaNNlNA9A8&jeH6^{60;?BXrQjCWu6mUt}pRoG2?4J083}7J} zbwmpBJ>*tFM4C-h4h@$}l>1GAPzKoMvcSy+vU3LJLffb|tciLDQ*8t}Z1GS8PH?){G6RPL!sbS?J-nW% zR=VTH8 zbFs2GHk3O-I?}dbKyRxc2pM)_o{GGu^95RJR(Qu4D4v*T0bG3q$a~~wWnyAtfMAeN z0q3qJno)1AsQ)7D1?k8V%9A2@B6W$E@!bq@vEaSkN>W$;lA$q~rY}dk`;qi0;bXPp z2YYns>>kRqFhIYVlOz1{Jcw&aa+ zO>2Z?>Jfe{FrZ_Lf*XLl8xEbM!KoDA_&28p~Y*74cG~?a0u5a#6^;l5`S#| zXHa!l_OSPzmKPZ2XuZ% zzykwB%*t?M@qnr*W0g3&7DhJxIKFPo{0EMKD>+`dq@&w67r*0_^#S8tIF}sAu$3VF zftAXcd)%@&YQr#vK92-#imkKjJ6)~JV&WFb^Sfm3j=wO_7e?H_2Dc^&KW16eF}gbn z@PU9g!U0E>n|iM;5UMc9K(17hB)0ftCiZ`T?a@v059>WK9JbCyz_o)06hXJ!J`~s$OCb$#i0XizQI~bkj#s{nV0;J4Fo7f zS^mF!>fRoxo6W9=@|92%{*czbB)L82dY;o>J)Ik;S~$Yr#%TrB0_XCVW6tO$ z6sj`w_h8J=xwj(zs(M;VX~`?R(m$t@h1yCjUNg?niX%i^Q!qLKI~9I2TptJEem^1u z5ibM2Ex&*(L>zoay}WL8cuNKYQdJ=KSPl_N_g;UP^Fcm#K@+Vvmdq)p=uUYz+l-4C6Q}TWv>SdpjcM_QBZn86 zyQ!2U=`VqDw)u$D%YFQ8K!_*u+o5A+F8O_ie|fn#w$C6~5mYF!0!v)+-1RRgFn|z$ z5yF4~C7AnqR!c)kP`3F`iZdHVc zhO+#-fGxP5DXm^y(pG=gQuarL?Zk?vo%IalOx8|z+CEL}i^d|s^=ArP*Ff(P83YzT zUb=zS(XhanWwTBOIjIrgS&eaY4^91WJFqhRoIsmr{M6VDXlrPG#S;4t?%|+8tB!<-?0ogM?N`e$IVX`HKYrl9D96BBOUVR zz1IcCB~ITLsML+9hD@zDhihnH22hY+nKGSkI0jkZ7m~Ey-u|yc{%W|^#QM;;A#^jS(K$=-i<)E*iIOg0h1;jE&Q_tLB5&UFlFmL*pI>f2J`6UJN?j{oNE#Gw0@0T@JOc~nWY@%ce zE}K-!k0=b~Js+OPHC8!#AJ9XZ1NUKwON{g2Hc2gD*+}pQVDxb zslcgFqoxX*+0j`i~7O_Fl7DtK$>Rt?@*SL^P_?UBGLZkAzWdogy2t5jTB1Ce`Qz#L!reu=L zv<2lEO*f-sjL9bxT6tZ6p}2j5Bk4{r#3+1wO28wDK{Sy54985pvnrM)17{2>>qpv-R$0=B!_t zTm}9?4qa?;tkXV6G!|VUBG(0D-@&;F2d#FGE>Wit;lg9?_o z#Fq#e2E;CowzjypXi4CkWcRX<4`}agUrryJN@gVde#-Nk%~0k68JX2Vw`2_FHGgt&v>}?vrB6>$bOb&JY+_QhfGkzF2PC-NfF$oJB6;y22UvVD+~>h}rzaqw$liSD;U z$D6^Y&fK5bdB&quFv94E<#!V{2@+qWw_?3J&H?EZD=$G^0);0k7((Vke4nkt4VW{CtjO@>G^3{b`#_t12qFQ53xKQ8&`~;TWhzNlYhh4u7;Xdh&19WCAOW z?A!{&CL(Vh7W(vH^CPXbgK2~J?lrJluys9HS_O zG6Vb|j+#d3cSa^49Yt^SRVhGF>iK^>cWtyHAzABhHI>R1Dhw>wmUW>s{rNPVampA~j?9So%T{RAnTM<;M?6+eB0tm?tdt(7D6k?KFBVR{-BF_2Ljx zQ_-2ff7`r(5n~ucNx&JHS`P%EyJJz;%;TOYGXys{pUme)D1m6U5;-`wcx}$L|7{Q; zOXYx@JORxffI9+GpTZVhnHgRy9mtIP5Ka0DvxITY_YX5ne<)$(8PN~o{yF8!a@JD- zr4$-H1$q8m5*g{3UdN_WvC4;($ET8qqlRLfUh8W&r}+o5qkbp{NOJDcnrid${#h86 zTuTU@?$`Z{{f)V-@3j83wA^EvbNXk4^o$ZdK}&;AsWZHQykYleQKnk#zctj!0>?wx z>v2>@$LQzNr|dwHjEM_(%G|RPwhaSSKd2WiCSC*WFncBw6O)oZ9SY1~p8CJlZwt&g z4|g`uxTXDypFg)IO2{6;a%p&X_x9kd3_8n*XEgMqIBX-w^U5JvTSqEMD`#;gq3J_P zE~~5QL~59qyWj|cm$yB8@w&Fr*??=dO|tN7E#hdy$GxoXFI4p+-0k^Sw|;Eq6Z0i2=*a5P*$T{TEyEvO7}zr8#H{O1!R za4&)EqCHp0ow$)`LZRc)8W+#1f&!ti(6@(E$N5oZK81(=!us^0cdyM1AL@I4|31An zZh52$HY>>Y`Vq8F22xJ`C88=y(dP<}L*peU?wr}Z0s(O7v< z(+3?D`LmL#mwEmflwfLM=8$w#1|^D{5Z}787ncfgQV+63LQRnV=Iwi{Iz6sjV2*6L zpc9_@_~BPD&Fu~#vmREc9)7{0I5EBP-F{*feu?zL6QkbEY9(r!_$4P?+Q7Q*BbKulZ!qpC`g`cYJ>|@;dt1;sJOQN z&Rzd8hgCXayaL_JRc)ZU`=t+xu+a9)%%LVhF@;Ds)rHTn7wd&#aV2*}X&-VUF}P6X z%kqYz4usJzO6mKJ=*fMWK^^Ym+1vrjC&1WFf*=gwj|cofWbD6)w8ZtHB+$Fr1bep9 zRDqrlmVfi5R0tvS57@h*f02xd>|z`o+0Rx`?*+KM&K8d;ys=Ruv+p`uXBt-4{}%Dr z2hYDvWBoKioJVk5vy*q$r`|V$POnwc>+r20x`*#b1IsxR0V9`}g=p#ZKzs(Tt>g9Y z0w6~|Y}}E9Ec55}FyW(&(4S6vS2g6bbG%?;qf@)B8lADsFT6cQRo{2FoR23-dt;d- zV8-d_k?xP$cK6Q3MBcj#Sd(TptjE;0J{0ydHQJu;Hf>d&JgETN1eikEfD=Yz*sQ8D ziM`K%DU$#Aqz!lzhKUN;vp?{ZX+HoXg9l5rNQ2v3n2_OiT_+u+d^IJ)T)7g3lfG9{{K!?EJ{Y@3_E1jLR zCcqSb>_Xh@%Z&_g%8dE9K7(iyYu%r6N@rkEKR4I#vXRu$HgnZJJsld$^Lb&hvUd6f z)WGkb1pObT1fzMXRzP^)AW)-$1{3#VYH%LH$s;Q(t2xlRdc&9*O;x-2ShVXu^P1jw zqa+ip?*{Z@86sh9ly65jUTHeqzcKsPkguJhsO?4EqW4EoC>TA1{@PP;x2GU9IR))H zU$AsLX&##?M>baLlWVG`1K;iz+C!eS7t-m~){=A+r7+)`;c57IE`-oE?-JN~?vF+hxOie`@Li=-kU7@7 z!9lB*Tk1cK!KnY8*&w@S|7m=#)C)Jud-J~Sh#U>{W^qK6a=)=ZhnZ!oXabgg3zlL5 z1MQsslfC1Ic7^S-Y1$pnLkQH{yzRTj%Q?wz>(Tyt2s)SDI%*h;Y3zNt7uByUx0Cyc zF6g8+k?G~DjBxWS$<5TnG5JAfp(1r!+&&TKotwh9^gf2AC=7Y=XxVRiSqk&<$h<^& zB-|nO`7A2@5Z&)8NvR-(6cIN2=JFll%fP9e>5{Bl+$n=59B4vacK1f)qcqeede2Ws zNoAcOsd@+=g996W?Aq*8*q)pZMOl9``Cf86Ty?$ko@$A`f!>!cj=bBBZy)$2H9?^A z%VTeR)dsPOV!waPDz#C4iLQ@SThdS8EOBE+#&CAA;>~ri-7#7iMkvETTy{r6a~t|q z#|97C56Bp`cKbq63>0Q&DCDV8B7PYXM*p&?87VOnT$!LHaGFdE1iLf3bJA z_V%QlP+VZYhUee;3aiv9y!x-UG`xx8f1T>!*GT|Hp`lc3f zovie~00>QR>|Lw_?QV;S)6T?RN$q?)yj1~+4FLYQy;-fs^H|s(8*n_=q_LtDP1uOf z4SXK#juPaCyuj~5k-8O4ubDL6jbGKjSrwvw&~|&1aNt?%)D^r|WLyvgP)~Vp2cwHk zYW=p$i~tKYsxXZR+s3M&Ayt2R>(U9=@I9U?@|t`7n{-`*Z9>PB*=lg1(1kp=^?eWU z4n2)m2Z+3P-nl({yufN)?#H{qKPkfqc*gbGRiWVGVq$oHY4EJS-eC#Fl5QX9<32ebW{XY@NlzY_ zb{W&yh9jkTIquz8L=h>Zus+}P6WJ}ylGKXM3&)9UcG)7@KJ7uQ>iw%D-} z^|8J(sihy&@KZ>RS}8aJ2fq^oaT}bVm#XhN&j0 zqj;-|N!h>k4ELdvxlp+xw0#21jMn>A8bBJ`7tzQ5PbUT(cfj6X=e7SP&;_cYCIh%+ z;WuiclaHW>9p5j1Z8j2Hx98w^5vas42P7@}4FS8~qH}dQ1D7Cu`%4w&-*%=NvItYQ zo~XO#^4cbc0isS~InhIiXcyQ63X3$)K;8>*6WaL=6Y})}XE19U;wEP-AD+(;ewMru*B}dTs(3JYltkb>~j9p-)stDN_ci0XcRA)=Y#PnZ6}HM9e(T9x3bNi zM;@Zp`)oPuda4QeM)n1!m;zJZqWhen!`Xd~z^j8t6yDzAHA8X=b(@D6AHK$+x+uxy z&OSuqkUzTp(nh!{%vMG|2qDLNTqa<_jeb4Y)7;)Zh@PY3`pWxEb) zYfOQ`XIo-BLKwMkX^}6sB!s^%Ii&Ttistexq$6Y$IRtY9*ShA%BJZV_7+Ijh6W1Y} zeYU9{pvzA*Rb(dT{V6i^idG3BqV>)YB4jnqi3u7iRX{zA|5yhDDN_fv-uiFdb2z-< zQYTX@dkLmdGz;BM!Tqf8oyWA<((?CcAf6&nky!csRK;MRydgET3~;4B*s-IK2EA7A$D%moyk9{Mm{3^czQFrO&^T6XFWb5S z(6CYy4FgHM{7s!G)VDV(s<{m@IXYxrs-m>lw;EM;R>j~O=N6A6zkUVhcV9GuGOTv} z)AHy_{viOo8R7Z$xQ2%^lST~b&uJt|@?kGlNe(21_|_gy^Ao-b2Vl=_I9__6ed}sC zLWH448h4rO9!&`WS0WJJm)<)5oi*bCLk`lOKFLe4c;f%5RkPK2zv@DbMdK&% z$S(Rx0WmXh=}vmr*#DIdn^P~ogYMrfSYGk-2s6&UbR5s?lg1$twrY>VzlrJ|4a0~% zG57>>8zx@s9Q_RmQ+x0^pBG^MV)5|saB(uQa=*V}CnuaS)GYJ9Uv59*b1rmj3g7UF z;pgYvKQy5<`Oj39RLb@L_@B-b;6>9kzm1+3c&G8P*Ll0*-OOFHDK=)u;C=&Twx z8ETaAxe&+#=MXR*jO8gaG>T7&n;TdaL3gtiRUVq1!o)Vstb9nfNz5;zDk2=r)M6kj zOKq<69vC8R4wJ{ zsWEA6+waR-iK()@OT@)PMQ$%>LnGbXZQR>!H*l;`&G=+8o4WX{yR$qf?h#=@3<2fGn9z zLLNBLp+NL5lE~>iPw+h}Y(Atu`;cyrtAtrT;pf1KB1v z?{a{z?PhQMai`L~qO=v+*zGEt0Q=kuS4F_=ZS8%{R+lm3&~$3AOgBNzAr0bz#EzJN zsQR|W-dW?`+`@bS+z2mMvG~gP^r!n1D#2i3_EC|?dk`CKmO0-@!+0JYey_H>ZL7NP zA65HDC(acerg&k)DYha+=2CT-Vf;5SR4;aCvb9q5o}1tpb%_jL8@gl`9k8lna*0@Y zpkL$7r;6B}hY!%BX^pA0E2bgLbrAfb-<>P5a@%}$+AfSmkzZ10ky%uFH?nnti$k`= zKKl3PMyQ{Rp^^@c^3#3%2JrfqWXn1E(DNWS!k^_RmNB`BCNpX(LV~Ng1WbxOehp9f z=`2uhZ}z#T8e~=zJBK8LU+=Wm|HtoKmzSAyouz0(G+T@hnT|MY;)@CIomJ}{_DmFM z(%yWNsD%G~R@!iVM>tJc8A0P1<~Eym&lFiZ+NGiR|SvKaW@HoYE0*J4ZQf znwW7+Fzt!%OF85_NY+-dGP9HnUJ|jkddL}$_}NIda^QgA!^}KUXGj){yH*g0-s8Dz zD&@?^#YVVk|Ax3QtF)WJ@XE=98W6yOnFU1T_7Kv}_VFThd`cKAXsBP0Du@JS^d&Im zA#j!?L`MX1wbMZPzo^;yvZWpR)>K!Y9UW1dih^$CQ)5wl+Didm-xlw+Ys^QR(U|G4 z^S$yz74AZD`xEplI8%FmcuR&6F==jx?gDq2e*k7?Ef}z9GCH z3Bw(6m!ZbMZbu|to9rMbFJ)dukQ?x=si*)>5l&x2$aVQ=60FQT8KHKB);B%FUu3R5 z^DS3Z#%&2b$`AG)!EW!{&iAvvpASnrRs6C~(o6buy{q>ci-|&}v}-rLzHHfNFc9&( zeAbU2Zk!E@q>0ogVvuCXjOHh{f8O22zA-$ZBV_t6-`1yiFj=OXo}X*W%VHNJywUZp zC_VD=+7+PPCm+N|21fq>M)he7iylaloRwW4~D?JYvS(Wd8=Pd#WHuhwV{M(4E`aVA6>$>i1CTs90=p_olRSN&2ZQuwV&4nsVS2i8olsO~0P_YC@G2AMyd z`zA8Udc_$P+K}%Pzpz~TW|}ZfRViTTQ7G8>dw6hZm9245Q_aG-a^p-OuVhcaTqDq- zn^jL+{o@|gWxHKQI_{0mQPpYw5_O-1bV?tY$25`xWuBN-!0esJM{#F~kPEB}a56}3 zxy^RUPrlch-?NpTD@cxQ39gMqFQIw7lNPPalrm=c#o@2 z_2QhNPuEI^C}}h5+h^5--P2nchRW}OF=Aixp2^eNO<1m%ee5reO@r3exZ9c{Zz{Wq zJ-aTdjFavkwpd#ALH-Mu(|F^AM6x85`6Gi#mpa{sdMebq?~yIX#h=J34T*OtvXl=| zCaoF%gtJcUm z+vUP?294Oa2|2_xbDc^cWBNtZJKlSDYRb z-X7qAwcKGi&7ehIysMBn^L8rWBg(0gMO{9@Bj_tEX2Jvq^*fuJ$6A-R6E3B*(`5xS zs*~92!x}Tn9yR+$@jPdh4JR=UnF5RGzva7x7BBR?!6_yTo7d9&XklpLHU=XY9NWmv z>x|#CjdrX(tfVvrqKy`^2>F4lF+R!wEO%Vo7UQ`$ZB+*nu7HUz3vEzx7K8)M@ z-r%%TV?8JP(e@V|&=Dk(L=#ifAwntStVl&i-3{>IIlS!lPu1~7M@e91a-MCzsD_(w z|Im4%=oCc5XlQg)g;1R z3sujK<9;hh@ZYlzUxDLjw#kjdpbY_p-GaxbL)^sL;ek=YIA~p6WBPpWH?yNwA)FP9 zUr&5i}!iHX&$8+)_CU=LwK-?^fOcK)VIaba?c| zW81UgTSN8tQyuM9O}m%jVK39bxhE*s+hBLUoptvH4bRRgXxz5W`bEYrzfe1s`Rf7^ zm*xKFAr6TWoRLGBr1LzpA+7<6mR}oNTjF(fl(-(%T@@${oZ_G~Tsd($*6B4{SzAub z%wtiF6RD*Mnz)P)lU(Wl_(MmwMH$+B6S~WTCEe=U+XI&5I{5&}Tkp{74{Eo(KdfJu zxbS;lH{B&&FHeVIZ;%)7DUDW7R_XHXSUPRKD*Ft$;vLd27GOt;Hsu%Ld~%-&%t?|$ zHmf(*__N*_qM$jw_QI6w8&^3=n%ADts_-(8;pPcUSmG7kQJbMe+MR7n_0>1E-1SLv z7K7Z5Tk6e6Afu?Ek#h&V@ZjnhWDYWu^+E-LwanfiSUTsI>r3%x7vYtf;ZEfCEP6N@ zdN7`zbEADxo+|6OKVqM+_3P5U@OKN`bY`*Sxj{>MBLPN-A23$tjd+_H$cb2C*Y1zN`;wPPln=(W1Qg_!LKL3K!iE zd(Qy9T@bPQVG3*f>7Ri<{Ayv9cassqm%Tm<;$#(VC43>q`$7a3D`}&q2o-ovm2A3#e(%K|Rc4#4toJFkW{@k!@IH3&h-LX9kCFtuF;_@GjkR$Kr>{?}PJm~## zad#;3)oy`M&reFS8$0?_?I+Ww?8suoC$1`(vs3CN-oe0IO26EM4*TUjfN zfDPoNStZ7AfsM2p&ojs!?1?h+UfVzbk&Srf(qBYGIWOyxX%tu^>kV;BagGmDQ zLL-grb?r(Z|FafUsxrcqw#>uog24z(m=|A&tQ1ksCWOnroxNraU85|y47esa zReIeKgs^ybPkFCeg-UfzNf$~$Mmp^n5r8X;utWUm9|iM{#985tPK{+hSllQ4h$F(W1m>0@C2yal`@Ked ztLxv*CW6ha>vc6z$;JF9;Xl{~Egj6aVB5w%zhK*kdX&hE;Tfq`FCl&yOQ#upxNUCj zo=t)mM6koDncvNx_5XC5)naJR&qJqpS@k97@=}$IUdfN9uB1$akSOfp2By4)!YL#d z#QiyY*RRQEtIED3nV4QqZXL15*_MBCXW|GfXDs!otoGy&c#Z%kQxQPUx#$fMrs2pD zCwI3eB>#-*{x6Cj;cL0b<)oOEk+mh>cVrBsuSfX>2KFY&HJy!M$bktKRt=t?41?Q! zHX8ehnAUc(9+}Yl%^~Sp2P))VZ_@?QrfqB0l;EkzJ72fAI7GgU4ZNwGl`c-5wzy;h zoFaE{Xr5D>as}x@oh(!6TYnvoW0gF~EEb1X)v2Kc41f1#)jq2PBEZU=A!Wdjqs|7j z%FI8(yt4B}c)pU%OB8&Adk)lfw z)E0wV2k-1^A*ggbM~?KUeh99@!oN0O=k!)mRe9_5zeRk=^&Vf~7S3@dpC`-W zbNOjy`5TCnLuBbfG>}zU*~_a0jnkv36bB|*x^tnu0)}C5Plab zG2cF%=P*@mj4`mXQDf%Mb<;DFq_m`IJX1a=lf!0Mq_#ER#kBHeE z5(9LMj*Csnl`DbS!1a6Pes!|R)`d?DuSMZ1)1n68zfg{eGFT~<0euJA8BAqW0}IJ} z4qI+0z}%%|*VO)L`N)C^_onZ!=ufVuf)4D z^uZ^ZmCbC2WEv(>#l`n-EAdUiD2I}A^bpvuMr~G<<53yI`72ZtmJ7 zdyq)*z(mjNuqlaHn{NAy1Gni&2z-Yk0&=!BoQZ~k?Pb5*N*?B(7F?m<=mPd))>sZp zETr#2-&u)`M)y6Y*>}1=$Miq?S&)|}ITHBq$e)VYNsIJ>aSudI1nC_by(FXIb;Z5{MI1?C6|{fj7iYN;b)i4*F?K}tb+^$ zbw`NI`VMA zQ;w@L4Q2^CoPQs|dn%?dx_O)Iyb}ApJ(VkEnx9LreS$Ojl8J z2)Gb~71s%TZ1qf|=Ldw}nicS|!)Nl5jEGg;k!xRpUT4@|aImK82fD0R0%%<@);lR? z^mAF?Ky)K?ob2ZNe{tq;*V&EA8cqqxnK|E~xn?S0Z-+Om#b(rjul3?!TEKr&fR&$g zASBO7=no>2%dX(&3o~oWD$sr;_QqycR)$Wao??GEA-5+#xC#;br4EVFbNZ}l*UmoF zeP3r%>iKIstXIs}kvEZ&7`MFH6$hF#j7{|NVxzq2-yk+&^!eH9q(s%k+>~x)S=P)v z1Lg(R#B7uBzDjjLKOV{;{!bYXPYk2kp>_7z7WTG(ndl_nV93tSftH z*^|S=&H+!OkmtnfG1$}&xGHJ+Ia&*%ondWb#D5b%hbg+D?qKgkbWHwqhQw5SNh89m z|FgY(qUQ1fIrfPWR?*WYwjxFF&c?AyL{R-PLHss{^~EVtVmRC>C;H=JwF3fz5vA%# zP~Hn}E%;EVW7Qw18J|T2p(mDkx7BTx2`A!3{e=|bLa1LZ-pY658P8v-BUjJ<8DVHB z4bn5_!D6H|RG-QH3#3C9<%eM5Yc&J_;U@u=Ix_Ip!gN_*x*&7??4y8ZWMsGy!|NRu zo4k&{rl+S%K!j_E;la#{)o=o9*u)FTBI8&pGTa%D{wGlu?cKpl8a(8nNBLSHVU7bc zMGOdEgJQkp1ADOWI-WCX;zCF)%K+6#1>yPvefKw1dL-~3!=ar$;Qn^5#%lD7py%n< zu+xik0?YZYd34(RjoB z7n9Z1KxvuQm6Ibu&cX9zdC$bGKyJo62DyG7breXqjIb$`qe3wY6vF)!kG11=Cs9cx z7kY*n^%IrKZRlik5X9W55#6Ff{0O)airQE>nyBe158In^e*EiT@YCO^Lfp_r(N^QMTWuR$=vvzvPQ(Us@yFrVMBe(% zo%ZJ8UdSE)h8oGq)z<412=W1K&^M`TW0a7qcE%6F*)g5@@5@B;!480b1 zh~>XR*Yg4er$7D}+*gO!A(f;8O}q1h)gMik6X-(~dzDZYjzgK1gTP$}hE$FtM9`uT@!WO$JTa6q%R$hFz^mYH+ov4@@U=Yy1 zDl}D)3y$??U@4uQ4h|(J7sj;fi+7sY5SfO@2bSQ&pQ7TGW*&A*m z`N|I4H>YjBa}t1$=mzXLFj%j!H@Q6Jh;hSdFlb!t?0VY7`_M$i$rCfvS3FQwSzq}> zz#JPTG)l@h99cgmh>oSCnwFOxgQqTuJL7=2gMg;g)+&X!qr1*zzXFWdY7j0Qh4*yP zd>hPsN0>WFeTWfmZ7!rN-^ZgRyl_ITghyZu_JN8tkTZaqllzIO9S-PN?L33^HwAq! zj7fdt4tkB2yLX` zz^87~fim)_zN9PKzMtzGJ2gY6c;&CGSJvY<-aFfuL@>WcAm>Mgyn|bTl~UlRd@lgI z>(d-S1p(n&p;5R`3CLjF62F7Ydh!c$(G1=|KtgW<0(^TkJ5?{_6M9aSit7PkMHfQG zcazrqwic8t4AQ@Uva9&LCwD%5__xG%xMHa3X{!-65y>f9rtQABvO2-@?}p2b37evv zxrk&98x*8@z1iJ^aUt)agNXKAgUkn~$~r4euEh(i#j6{h351^Bx3PP3b!x6R2R99k zDDU0+SIO+avE62C`fdArp?qO{@yB+4!I$8v^?NC%RX^yi!+N+kiv6AaI(OmV zk5G-4{f>qs*&A;6)t_XgibQ}U+ua#5apPdjRGj~OYkkGQsOAc5LCEmg>amPY5GeAH z`qd(N6O$qT7hpx8o1!1G2PhLCg{b{EM?2ry1eItDnNAj;=2`%5RrA!ajSJ%jh!WhW zK~1EYKZ%`J<7e6Fwe=57KB=;vRgG6e4-a;5sdZ)J4a_7aD440tWGWzi2O2u|ZdB-%aq#R+t#Ysa7NtA7J z5eyX5^B?0a5XxFEZTy9gSJ`nL&1_bUy-gn|76Inwql=Ws$ItwBc)rHHFlu6xYQ)$m zla1pA8B26Sb6gP%RuElzeN^)_Wi#82^*ydW1)L6WJ)y(eWdPF74JO-Hl;n4U*YFfN z7&OrB?kM;s<+m8*G1a6EG3saxx%Q6Q-Pq&TQt5j&`#&JqbiXS9TWTSGTCV?d@&v9z z-wc)x-c%mEvJU)>?0d=e4*9;{NFk*h~OUIz=RY-iP z!EX^{nKgnt!NL&|#YS(f=v3 z7PfPOFU;0v_J_AHxDN1?-<|)HCbW^MQ+++)`R$`!yEvwQfXW&abW|ZX3;_SY{D25l zQ>FziWx`lF)-9EGOr@eXdz^q2`t=S8&gM+ZD)9!0{H}YKADqv}r_vGOi@-Xy40{{J zRHR6v$@_VZp?EbS^K#ARpOa4>7ZII8s2Ted^#N(dtwa<-S-pfg2KE|q#3I6TZ?Vq6 zd%(}-2CPU2>;``z-BcO|jTIR51TuaX=yXpCasslg?=W`sLZOu&a`w~v6f8)JjEpQP zDOsQn0ZgAEnCP;KkEuw+loD|RMc#fL4OdtODu1#-D;j5EN18?*65SYIhgV-m?+eCr zs;k1MB&AE+V-I+rY@uJHWH!r;D-@U%b7b=|_@#J@bZtDR#fqgIc|~D&K(x}L(*t^` z)NiJbc+uD1aToAIf>ANBLy6&_@DsHIbSwsJQJVr0FM5bMCa(&iXVH;hl%3GBL9XS1 z#9UL5avP0NhYZkI;&3JNgxrKL{`6v=WGt%7ksoT`Bmezf7tCpT>AGOLZ#HW21LS+b zS3C`~2*HR|%Qm*rzn9Pz&d zgDM(Rv#)E}m~ogD`|S68GSW1zYBABJc*uqAgBCXIW*09~w47yDUmU2h!^iZp3{Gfx z-VOD<$GjZ=yg+kF&OirkxBezWD~@5@o6#2-HsHqXCWP*XySKWmKFvl=L}Gpcn#9Xy zpJpT1cX4v!bu>c*-vAcPghL+c`oU)T9L>7eF32wz`WL+hNXqJaoiT6!g?hecaFJK3iL?Dl0#JBrMzvF45h^0_9#N7tEKtp*kz^M< zJR&hMt)|%Gn`_e;O_L^3mX1RwlwzYt6-N32X{7U_{63a~51!bdZYM28CMQ`TF6rIW z;N93DK9Or@fkt{=!oyBoUQtHMg3~|)+NghQ>~N-z{VYERpAHp{_3@i|Uo@Xruq}xS zs_-3?@-&Ubj1#u_MYiq$1hjNPE2%p`ZC=wbiDMnQW}DNy}fo%FpZ{ zmFr_t9F=7g;9>e`uq@7kZaV8u4oHOq{Z?X13Iy5k>@Po0c(z!_QyQoB;g>E&_K5$ZPn4PXEO3;+N>p)*QN3 ze|NV~D zHtVFQVn~;w<34-x>|lQln;t3rz|6h#PbV$933X}ro5Imf&o)w|<#!xuGKCY19dT`x z7`^Dns4x}_Q5aEi3JYAN)F=d&DEWzV%VZyqub8h! z>3_W!Md30jw0;zONPKhkiuJH z{LHKo&PUz?+6s_7hSlb1`o@(0m$~|nhwPnD%kU+2$eXX_OJmQzF*P9H#Et!O(Gg2$ z%8?>aX2M{gkh8^g_9AM`8wcXTm6tb zobG$V;CxmZA%c<;6RL%6Rfk#E>g?S`?O)MQ=YHng%JoWRi=0s@Tbv@EBMyaQw6Drn zP7-Nqy$7D;Vkre?J03DIV3>u%eg~~5mngwK|DEZWw||g1dbqB5ptgGaoS-QGuz4Q6 zh#TC%*@C({q~Ll%!2wqEmV(~U|7=VaY#5iN#(_QgKS~gtneUq(U!Y7BE;Vkc7{ie8 zWCR)gclFokbo)WM+9$1(E)mQ&GKw4yds;~xLib@zNohh^?=TPX0zE40dO1@yq(u~@ zZZ~?wJw!{IXom!M()#iE;8KA>eXk|93re536tbqllq8DqlGvr%D{o1sBvQI2_tlGa zUQpt625I!-cuv=4*L%_co^Eo20reDfe5w3H!PCUG*R($wigl__D$%UsisRMR`)5<5 zb2mdoXgjiqnLJTN~5|v;efxyBcX63kkqVHiijhCxu40_ zm9gQ-cuywy|IKc(?1|GM0n9mz0GZV8|K^9X^;XNMF zh~N4sVy%U>#7Gd3p+9brk_nKQPCp7XZ1!NTUJ(n}m4uLds|Z1o)$u_4-}`sser|Yu zH~w&y{c!cy=;4}h0YnD`A!WZmiR6GV*P~Jqi&65h=Rwc7(4adnX|CVryLDX*Lm&Ha zkA;IP@fM~W`K^i&5tO8u#WFHE`)8aDX@kT+KJ!XaE5_xQI&%r=k>IkP`p_t4vr8MF z_^=Tq(-p(sOOo;92C{TQxxS8e#}z#13d}+V;u4!jum*Sv!Kd#-Afej=w<@@Wuw$9{ zrXT7=s7~0ia;(I_Ydip{ZEF*KYYJ{6cpd;ws~?iQ#gyuQ+v+ZsFEqJK6ML3_dN||f zMnYuV9z2O3eM(H0h+1vhqCG1`^ZXp0#-4j9b7Y1!n;+<4sGn{mzwGEzN&sZ&_1BD= zx%RSdtCpW%r(Rl0f<7p# z7(r6Zltv;GQ|Ql?Yf=uBI-T~Pb^)>r70uDmh&!0*>7Lhw}bQ7Sp z)zYYAsIl#-#210z(22#`pr`2Ik>B-3fGaC9P67wE7LW$6bl^>RxOHuq==g8!E!93fCD>yJeXuwSZh(vYCl3APkt~MSsya}-q&z7kjRdH+;J642T^le<%+6{ zv}>)eUw3||*&}pE4LkYXORZYq&(2Zt%KLiHnNp7A8RuE8e%Bf{s^z6ll@Z^s4k(v+ zcGPbH2NIktOW+52U!!hdDAl23LSQ5rm88!`7$wc2U(-;xY(CA2ei7@7~vK%$3V8l(w>AUYCAN zsx(8Ape)9h>r#s8B6e`}_3WM)uP!x}{zN#Y$B+1Sdh*SQtae_c&eTxfucM@*kOLl( z*T@gAwSul-1uYyr9;p{#V=BmJU~m_4ToU^4(Vuvp8q~SXfo~mS!iFez^{Z~BF;w5+zaLiu zf!8AS)}ljq@<44pyV@arlGEsyfc|f`6ImzlDNt$AVU-j4s`IK(vh41qS0y7Gz3sSf z-x^tsPN=G+Nmoi5Qi~M{UvHv6_h$Q?!8<$7|01oQTLPT#-pBJz>pVV?#Ey-XWAp=T zup=PbL4M-}-gVcRa)S_*$0e)a6AvUanyiH3ky$REZjXYbL2sb*^|8!vk&OZ`b?gT# zCZc~yP}l~v3{#BpERaGob6+t`Wp1+s?y9w}qbjN@j2C#Wldr*oc`>B%TK zIzrrm4CmDBkS}~$(04-yXpk~Eh&I{*@aO|r%*pze%@|q1ODwxqSnj`aJ#WSng2IK_ ztB}GZu0Zq}5#ERJdvelE7gFnF{E43}VTmhBm;(BJQB~~6H*H(o9*{hq{%hc!pI-L*)uy#(~aVX>czG)=}(7~ueSQ$S6hgr zb7W(tdo~RTYHWRBI#o>Y2Jpt3g<+QuH=C$9KL;CUBfV=Iqbp8wV|d>}khud?wXHJ# zvbH_NBSU=R>$w#H(2WqaFRRp|Qq6(#Dhp~XvQHW<9tGUzche?+!T)9xAOytfWEUb} z(Qi;j3T$=zlK@fyz|*S{xcX|#7f83m+2_~;{mo4vKI@>o<7#}REp_gs`1gg{ z5uL9?QA)%NW4SH4+)y%d_rOo;O#r}<`_3l%EK@2D5u1CAtRPT8bI`8!N$AVIf{O(d zE}(6(cx+oFF&7NRvOmS6ob_Ol;#2m3w*VQu1sGXP>JXT$tZYC)05yUxwpd>50|2g% z+0LN4FvaJRG?go)4BlU_nFfT2E69G}pSija(#CHXH?};JzcZGOKM_jB^ytrcwLxs6 z=3F^$d@GFpVn*4yGJ#VS_w8$CakfTn@9%u&&W6Pv(>2%Wlj}ZNZ!EH&qvu<0xF$!g z6_Y;iDZ=O17`24Uf0u8E%eS+0%jo2P^pYn!3Dl%V&{b1&1=~PicoG|rL3LpNSC0`a zsLG{V-Um+tfcfAp$@cq4{QR-y;o;#iG&J16gmDDYv8)8#-cf3?8u$@IglC0b_`z8* z_LCR?#>=1<;JyFjN5K-y^;3al={1&PYFJJFg>Jz`+PLrVcyr8nGv=Q~k%}gZa>^WT*%+h0?fzXw5O+s&502K z-Zgcz)O?suLizZtixXL!3C|-zAzP{{Rr(pAAJo;B1$}8QivjOa*8vsu<&GpbU8&SmvR<@eEQXp)P+J zCeJ-pAS2>fDRAu4&fq~M`<+E!j^;;UA3SB{rxeb2bUJ%2TsgFqlHBWfwY4#4&VU>s6;k7!w}=0yuDBZs)DR2s^3$fdtMdJ*I5e zLMfAs4hMu)$;C?XKFLMlUma+ln(k85A^Bi=I!Eu2u^e3`q2-`*oBro z5yK}}8VIELoZ}lIRnneU{QgK(cfd8fFznb#r7kg_gncknnDZ%;a!~OdcQM)s<4p32 z$;bTfw~-v1wy)|j{_ISq_4lFCyt`8uKk8zk;i`bhCN$D;uUHg_Z1{Da>0e%^$8SKo z8^;+)<*7_H$BcGmPmVEn@{ciLjnZH{H{G`ibI3a{v4Ge%zSa$epU%gQo^-F^Dzb&**K`p3#j{~T1-Ce&4M z4aXyeW8ViE&6Mg${tFD#VH`@prM^9AJ_Kh&zUE_*r=@P~WPDp@1&DQ^fU`m#V|4$h z(Hm{33Yvd-JQU3GGIv(EVyD+(ob&lq+$Z2%nC_YED?9hjTV0g4hTH`+8@!ZLD!9jS zMg}J$e)IQi3!k&WV04-|*bX40n$95uw^HT?r$Sr`naddg3@ah?bk!??s~|OnXnO2{ z4QLhIJVUeD@E@-KR#@Zg5aa8H;OaOHWpHB%Sc9A;5Daw;h7TMiy z&()sC<9DM!OA+GMF87fSrk7VEQDR6T;i1jahnC_My>R)gZmP=q_o|VjSmme9kihHn zm)Q!tsm1;q7?H;C6CzzK6%#IKM)B7$73wLVv?BZ&4-AJ7H_Ij)FMYw*i&@@e_WymS zc>nzpzia`}_P-W_rS1Ih3<$*eFW(_h+{oejI)NCT@ZDeM%_yuRGfPK^z(Z-vM^9Bp z@-6}h-~*70&A@c(l!izJ2w7?X4Lqg`DCk&67%Y{ma;HEqsdIEDsaNIL#VKQd$!~Ra>xA4MY z0}FL&K`2m*R)s#`QZAm0O@8Zx=FKm{TZnfErqxEIfY+qKH$5;v|3ibs?6~rSM=3j6 z3x+p|>8UBO7_b? zSFOCNog~(k@~|@;UljcE{4{Z~QFyj1-(Maev7*7(p?A#D1ZI+E=g_kRT7?v5JwPZu zUQypF*kU{H2)2|TC#nurmcilM3u6}=B?pXT62>JJl_5^* zaBov~J;b03piRjSKL!jhO4D`U9TGQTty9Se43FlivdSjx^?1~#tlG*+KD_WFwJaTkYXLd3FyJ{P z<0vrfh9NqY4e{w?N6(wet9m$83oCvJAf8pCtpX5-j4hT3)Y-mb_)3nf*6mblm~ZkB ztBseOzA1Md^b)kFlxf}YVRN$hvu^E`>VH){cw_f@=zLoH&8G-KPJ#~)CcF4&=O?~5 zhOmtAfBO#;ZW~w5HEMdsh2f2DdeJi0QsUgT5$D**lf1%Tn(V$g zRrw+}&OKtXloo{D+I7vLlwQ4#4-^KlfZf86arX?eAS;={`{>K}Shvo4z( z7lrfBNf|#5;+w52oG28vyMPxB4TPU*NUAiZE14L{yhFf4C_~wtc#|>h_BR~@($f~z zAuaE(T!_||{VojtlcNaRFMcdMqYkMxR0gjZOc%)a&>$@qg9PA)umo>}q7`Vp*dPX+ zb~*xb*~|(u2$rZ~3Ji1ON4gw-DM(2;+qEBOANrMEe557A)#B*s_}UAt)x$0SHCB}0 zo`QX~VomTkMqz#j6^H8$ci>W^EB$kzgNX&A-u7QuH8h|H1J)-xW~_H!yAmaoV!fr> zRZp(NDpzJ}ttbAw*y)6F9`$#+PH)Y{N>=(pXlu#RG?~wX=&M#H-)o<97kuK??Zl7p zju4z(9-A26IIlyiy49f$qz86I_xclGU8Jv(h=!N^eFu~~JE3vLzDk)8|Inw#3cPCY z-rW=@z1icu=}N-zu|MvM`*8o4z@jt|VsMmX z!erRDF-4%>uB86r8SU=wUx)RJYDCi!$e8ET@}gAQkbQ(NEw3=ivFk2=cw*>zx9m%J zDeWHQnzW|P&pzMTD*53@SW}JmMbJ)a^P={+s%DGvrx2S9)-X~GLO6cajhNc^_6^BI zi5jsljnU;0t?Wg;`y%F|&qYTxys1tot7ofw#;j2y0V_XEY29nlg;8p$N;q-EcPBu0l31P>X=ju z=fu~7*#F}wy^cVB3$g=02DYuOt&)Goc9DIgsaMk8lG3gglvnWn<9PYtc> zmq@GrM4Y{LYF?1Q`4Kf zE{rFJi0yOx_Iq1DAKF)g!?WaKFkH~f4V_q686?{z&;;x4g8f<+g~te9tvag@4KvQ@ zkrp=O{rYD`pcpmn`X?Qt%YtwX+%Hm(BiU%D5vmv~fE%bjgE=WaySF2UK6w>=TllhME}M==?xIk;}VN?;x^b! zF>pLm5&-%GdG)}>tp;ls9|)v7HEj%meNRfX$TinKX0eItuy>XzK6{B2?^xHh_hE}e zM!he1K2`tL!0$vY>t8LJadXJa-6DICMt$f!JarS+o7li*i0_+5|HsUo&}yT1$u|iv zbNA2M*5+DP;-@)feNs=>>ygb&;CAM|(s(+uf~z#-xV1qeblkLh;C-j4>&8(Z|BelI zS=;h$>M#YYkDup$m`#30ysZ9v#eLDf?VH2&y4$i|)`6CzRZoFg3S7w9)`IidlIjwT z`HAaOPJHS$pq0+m#MMmD;p;mHZ{0cEE9-lW<#rlOzJAnHAVdG3sJ``g&~CE`RsClJ z31I}rtdz*6O0WC_O@9~l4q*9fE7ir{!&BB$7VaW9=XJ}MruWuwTmR!iFH9HOxzoY= zhB}<&W^QK5AVFutcM#({9wlBTMdp*37w!Ba>My%EaWmFb-q6%k6YqY$el@nXvYM?~ z8ssJ8Og{Yt|9RlR4B?dVRI?X3gL0O^`0`R`DXhtT%wl5nFYpFRyh9f7%_T=4cgghx z)@ESU#JLOAe*ezj!ra))M&0xmxzP?EEd6B|ovl`B*w>s-ROJmNt-_loUvHA5-%0KKJ2?Zo6H(074XV)ffcCcc$c@CRt_Qd#vt*`M$s?uWt}#?>J^^YxB`f`W{- zD_&QaJI-h*$n!qkSc_`{P!v~C!QH~-ow@Eo|09-GjGpuZu2gsrA{38z+ z3q8MOYNh=kWi1Npi8vyYGmG=AU34Mpkj3^r?MCz0T?-8^UuL70yB*6N9c*p#2;M|Z zW0X)Dg#aj!?mi?M!ZlN;qUWFv87=0YxSvokFG=Ng(fVB8tIB@(&Yelbs9>Ou; zh7@ywEdpGs;9#btgweTCRj+t~tec$Ed$6^m^DKE63i3@s$ekO*aiJDRU=JZx*M}1t zK02>j7r0RI_D33j5jA`ZRmefUdcd`eO&YxegDs!uTJ*t)aO$XjB?tG+%u?p%N>zy9 ztmg1f=lky?Bf^Rv*oCFBl<>*ZhOOW8bbF;{2BMzci#VcloRa&4!4!# z9HRn7APSI%{TAd>%}W49BsxvKY@Y<^Ei(p*dxy(-OYgc5ik^4v z%}jDm&KVi0zg&%w=RgNXp+jY4K3mw*#eDwyo#i#k&F^Mg3jF)t-FnxB>)4MwwuSo<0ZDZpK)pOm#c1z-KMhHSO(wEz|Dq99K_)j~|WJKN}f zVR~UfFY=)U(;Wx6+Yq-~?K=;F9$#`DR3UcwlJDM%$+p@y_5rt3r3iGG6wiq;!=n2u zEpX%vRDbM`G1Ag@?>fTWbD0{OTj;~|csPyF~m^IU{k zyV>Skgqd7X5XD}FQf#^5z2Bb>X~Xh^9WCI_atV>erqFG1)6tbcuhOzJ9~z)l_~B`N zYvr2>r^YBR_;cVujc{ENaL33V)W!*YH2a5fFBC%)0|Cc=oJ-U0uKaBx@_LDX!8=MS7!F{_w-P99mtJZmlv1n4w8zb{K{J5I`g{8RFpDTT8(C*?^6=3-ek2rbODli2}Hvb81-c{h309Bi}KOyy7$U>RZpS^(@J$N!fIrn9x=V z5PI=eVGn6pz!5?2CMR|JPCHm>7N{`BU5kWAw1DzGs?TxwF0e9?0##ko)Gy0!_Gm z^03yZKqhIX`&7LsD(Z5LyOoY+KO5noWSiGG+V0gJChW&2u7vCO38r)HBUgnlrkkI* zEK>2ZHmpsjx3JpqAtZ|kKt{X)Ia}+FT5UyNr^WPQL-)V_Q^>LKelS_I_E*&r)^hjgB9EU$5Y!z>dES=W*hn6Y7hzX4AYtlRCrVisNWvE zWC+xBH3HLLPhf}Sf!|4cc-wu0Wm6 zBVrEl8piC@xF5sdpcif*$r?-Z(fLK=*8_30Ni1@u%MP;C434g=@?}T#OKH3sTtEn` zMwc>pVspeL&j;6ufx?1B00EZ~!U5*iyI6pHG6ZJvI#P7~Dm$NdYzyV*!`xxZsJOE( z`+Ghg`sa%L2h;A|RT+F9J;$Bv2Y|882KMG^QkitV0s;{wr}#fDl+nmt5a4kWo(z)O z_8}?#BvgHw43kegS^tiUbl7@DvL$DO@m*1SHf@(O8ZGL3-|PKSv-A2356&y`gZpb; z-+5a-6>Vpkc9TxYb_yu2)B5cc5J0~`mMlQhC@fW6XmvA-V5C^X-l8$5Sg^(QJXE>8 zo3;NN(B`_SDIul5&;mA=;@C_yUNE(&)T>%y_ zY8Z*Qn&jlABIb~im+mXA{UT9MOR=h6X6xdtY>bAI0;4&mG4Zry>FzWJ{gGom}TR*Kt2BfVG(Gx*oUI8VQadmL|aiMCj&r? z-)!Wb?1X|wh%F;mwwar!EXM%g55FQ{qFr+p;B;a`{4{f?m|B{(>4(`2f@uau?LF344e2jqQ=uL>7Hc z3@_2D2x|nSfm2N=8gg_HV47vb_e6s=%f~0i-}$G#X%Ph@t}Y;2fCM267;{$;8iu&I zxIoqc@F6^rd{{qx@bboiozt$J%N-^UJUKzuGhE=((H~9nMvM!UDVDS@RC3^T81;S# z&ZD!`lx12O9%f`2;A65QtVALo!lug$?Kk%L;m)A%frGQ|SzF6Vs;f)i@hoL}7|%m7 zsmHR)*9*PF$4mILhoYXEt%4**NqYC+4ZJAmK&Uv{tI`%}aU%2;52r|Ud`MI3GR8dp zKYKzKL>Kz*!?n)VCnJ}3%AiU-JyQE+Ip*Z%MY)52)Q>`0Zg7rJOLY4%e#qR4I zgBq|+@<8=}cL!{j~)VBxELb51aK3KUYy0VV^qKS}4Aj;-Pp@FV0c zdB&8A*-D3&woKOZd!P}tX}74c`@;cH)839ak!#c*XD=TbRtZ$rUFwi7)cgNGxf+T9 zPVFezig-xjr%sQNmOskTmauvz${XnLhp3s7-c=Uzn-T?nFPVPzl|_WxizF0bN0$tw zqv?|~mMKxJ1OJsq6a?OdrR?0S2Pqdnczzr;{u$HhZSr2-1zzjLGQPl(3YW_2HrFev0luSRvW_~IW9P1^ShW|s`{O^i+#+?x zq(ttrru#8rREdO6y@X5knml>_rL5&uT*5x<9o%-uzmAc+-g6Gcyk*U9Wb5iIhhmD& zXVunM4lDUJo!7_APdiE!zVABvw1`)7c~d2954@qnz~Y-kx4XwU`Z`os{2bi(hQfar zbf+-Gilwb{fd*Zp)*sZL0imm{co60eq} z(SzgK#gCSrIl~Bf3{ODA0W0YUUjmuYk?}JC-2l5_a4z0A{8Sdc?QdJkhob=9PuXWD z-GIg*ZzeNp`Gc)|sA7ZOV)&1gFIJobCnTpc%HqB;m|1_f&;}g=ejsjUf&=)@izA=u zin~oPlD_r-d`UyQo=rJ&?>?*~5gSzN;AL7~Qp9gzg>$^@cQ-s9x@@o0b{sosugMt| zZA(@9y>>0+$6^z=ZQIRm<{_bfy?dt&t5zKLRub)^2_aqZAD2J7Jw`Lk*Vo`*-(U28 z8@@MeT|f)Kr12+wFmy_rW{KI1N@2R){mad$nNCDx@lE8{sr2Kk_YlY0M4n!g=D18kZ^5#9MXeFRfb*+`j1!w(*$R0l3!W+7*9dSI zK=a$B^gR;FfHQjl3oy2Z(h)p$z1jd9iGdNNMz18j==*;q_Z0%5W#|xKKxzppttlc< z_yg$|j8y23c+4s@9SN>|eahztmP}#im{}a)pUn;9puoL3kskFr(Vr}lUFC!i7F_B`|kGzh@G0Zz7)3`U?& zm^praekL1|1Z0YeiatI*lbAaIM(8Jo(@;l`r?W4V;-ajRMoMkHj(^kTD{aB>E{Sdm z+8r&Mpx{rTl5>P<6Cv2=xCT7Xp7m(gzkPubJB}zLtBSwhVMi>B6vWeX3RQ)?9Ec4t ztzLe`aU_xgeTNK3(!kcFUpUeS$b9c&jG}j1rDL3;&)WeY%NQcSay$E19fBK3NvQV$ zYf@V^;I=5aB@`=Z)WXf%6!KdeTg;3YUX@4;F9g~FyLd_9#D~Hj>b|F76n+LLXqDGB z%=@XOMGbILrnfpPW#TI4SLK&yPfZMW39*Aru0;syb z*yPVo#K1fXjG>?pM$=F@y&A=FG z`fNtRLhNo|xTVw~$r?M6u1H04UX5TfBZ~co`yqIQ22`feBl2v z_1^JR|8MyCIrbJITXy!|>qPdb$POVKn<$%;nZ1haBYP)gWP~DF2ie){2-$o6o_c@2 z-|z3A-aQ`g9*-BV*YkPb*L_{recy!ioABBHa zB1!s4NE90v7bj6Q_e0Z9<3AWMwra3Lp$q{GcxtC|82MHYgjU6kx*NvX;@x&A9zGS(xz672xd;ks zb?KjC$f)PHXvQi%KKw1f1a|fyjDCn^>Nz%YnkLU4p2rd!x-tYCA zn+iX?(6q*i(kU`BCftIQE~DK1v;WZe+}D(#fQz2e?bQ1{4|A4xq#G5guE@j}9VvBQ z`Qp}C&$e9=S0qwoz?||A#s3^a&|OU`N&%hM@wG8KGC!dQz#f&tYa9$Ze=OQA_B0#5 z+_;bb)}pI^fa#p>t!VmyYqI~K$Z3;rGE`L9I}IrFG=O|??<5TZA!r*#ML$vw*!Ndr zI5(0MK{gkJL7#I!=LUW(E*z);MHB*8pog9JQy?n;*}lbq=bN!zWSJ&HL@?I?7k0hZ zEAafr8Vs~pOpl#G`Ew$02!4XKELoYE!I#0s$7}V9t~`jbVH6mWE%+XIx(I#IIoB6! z5ln%2gQou+JINx*Ic7dZ$wVlhYHZK^d#v=85+SLi3E|y9;iM;c#>*I#6gr90LW2}x zcuQ=FpH{H*&6z>v{S7xh_V6GtnALmSZA3e~r_^rjnT#ZJm#e_o8#4V# zQ&gctFD7cEU;k>XdgsQcW=%!E1W595_mC*fiyQ4FSHb!{Q*H04V`WRKsYWq6!qKos7Yu*lsPAFxe@2$4 zgu+859ex)pJnI5|$e<&=oq03Ph(Sb3*U$(IETo_f0#h{K*NLVWX=9-L@r5&HTirEx zlYyN6;lMwDPp+P)9*G72Q+^Ty=$2wF6HoF@N*d~ca(JI+Pqn1CcUvKUeRUaNW@O76 zDoT~@T|PnVF;oceLHBkYIvsgoEoxeSrfrbV{-}icRwQ;lmBj=vGuI7N4mTD+-^oul zZmM8RrshT1)$2QHY8~G8#jdyL7`6WkH{w)d_b_R-Ra5!R2*yXxx7$efjT$b*ohD$< zVE}L45Mv@#^kKr+o2fXcE9+cRTLRcI;rUkF<@II@uJ^C5spHG$IltMpo`q#u&Iog- z-*A_=5Esc?NeQ=1$Q9v*p)QJwcv%Udw2D>y2>0A$M&E7rw~rLN3#p%uVK2E@Z+lh! z9o>YhB;5&V+3i7}Sv1w=wW&J4GQlu3U&l*l*{o+ABN8zjW z3H(<9lP%r-WfH>q$e9|>foBQZwUK%W`yAhC%h`*YBEYq-nbItF^uEhz-2oX6%9GfunXsh9QT z)1lRU@p(+~XGb!{ZDFo84XUet0p4@D(s4S(PiI~^&qStP?#y<&;sjuSjyGw2=vG68 zz?qf^!O7rfWtU@Twi%3@k&n%QoeCreaqOJgKt-wN=_*VcaRw$zl{Jg0OQ^TAoam8;f9}4*!gnS+vO$S>&FFI~#SvN*q%wnfHTFkBrsSEE1U)X3b~ukhwCi zyu4H)#FyTntppFzrH=O!BB}zjXmkq;nh!HKdq~Uyku$(RspWJ}k;CTRLTc0Gdm$$5 z&~b|g!ibc04|u3ER5W)GDT4t^MV#QFC1$-t)Z0O`j#m4^!U9xIGUmNtB$X44l!Wdi zVohB^Yk7K2IQNJ+AeFo%~v#c`u-=;;g zbW4e+@>Z5@vgSJMD7j=b)O^A>yCoPy2aJD}c^tc*k&;||x_(pDD%ZGXahJa6jlkDnYu_pVPDU;!jsR(__tCxY{^s^s^vMmr>w9rb^*LhesT+2c z{diEiv!41_&0G;vomhcXT)?aAy_t0dovj)6XA{UOOuxfx%ae(W zwaVU_yXlq8GV)8C?IV{>$7ip;CUnY>m&MzdZu=yGPtrmSzWGMU#ATed)fC4LoMIvig+rP1J|99C{VcHI=Z#GuqZXC!qZ}08_U@(XqlbhR zZTm$7mOa6f`(MZMJPf55x?1SG6r6@W*@#@v1$~KOH-XSPu&PTvO4RIZ$8Xbe(&9~N z=0&KK=qP%hUKD`vxRs8E?DNZ+x+m8`8FL6F)u? zBi+e6Kp#)143&-|-qHjMRJ3vT36^Mbuu@@*6G~{ix=USNS3E4ae4Sj~saeE%DNg@M zZ$>mZZnTBs@PhJch{_7hrxC`Y-;!Qi=z)+mlI%d=4I%tn12LNMjlSEf77bq4W)@sjMemyE$re&=+4fwSW;T%<%Fc{rK(dn#1zNHb+WZ|s28 z6e2nDb`P`OChrNZFILa-(@Wt-e47g-4_M(h$e=mC*o}>-2D>3v3gorG9i^g1?hG-J zGMdFF7OwWb?!^gOoRQqI`(B`MwFLd;;eVW%*TzVz;J=BkYD?Btv@7~XU76YJ>D~Q0 zT6K`_Z^jExK+Ds3@;{x(ik5h|C3kdkhFMZdB#G_6q30Lhx&DIu6SYF7H0$5fPRF4& zk}UBom$mk4B~_hk`_hB+=bbOFKvYW1!VOaJ>7n1vaypZCiyArCdA}!?@mFBL4qnQA z_&8~O?-e5=TH<$n_fC)zr!r@zg6Ha9B;ou1rN1ktZv4ekSAUbw+vZ-2T|A0BUPAu< z*4-bk%`fR{cCz%Vb!pctds$QMtiA4>^O#<)dJP@oI5hkus_-ZH0OoR+=euSR?L;~! zG&Q${M{)|=x1FRDezP{3n8<31MPsR&swY%j?b(D8!vv0Y5p+^ z3w5wFN=1gUi%nFuAcm>ZDWy`DPd?*;v{)WWgB!>o?~=^&uNnaa6aTU*`E0s$=Wj?msQBgB+mRH&cDxBnn&0Or3GN!3Ybh9!D&cTNuOi zOSiY5+~$22BzBMYDp%&cFHl1N?ls++&2ct^NxkxE^UTEeR@;qZc{Hkt*#BaA=@nUY z>aJ=_)GZh;2~p^4()D(2XCx7_Cno_P!9j)+{KgKUl~?2h{m1%}W0O5Tvj>g-=e%tB z0$8Z$CYw>+K3;|m^HBSx0};|czNH#jiEkI#7fwELR;c2|F*e)M(=Jh%?@n*P&|>3d*Y zCmAI?BDQb%eZo7WBa~|DnOlX@Y zO2W<79?A^6cmFW8ykkMCX!+aa+|u!ObKIk^j$J9)=~oM1wqHBDwLvw5747>o&!WpT zE2MP>hU&EvhvNS#I9(5Q*EvXwJEPDMLrb5XfBP=|WQu%9Zl6uq6tpqhy&d$ZtT1G7 zT04;TxO1R?+SRF0A4tVJ%yiin7L29`$`F7<=ccJ)rsx`> zJqajM8zL<_td#@)^P2-At%CzVtSd9(W~hiGmFFU0{Q^qx;C)bHMsyt+>`Oz#SGS&l z0g@?Q_-j=nhW7eF8$}yR*fE+4Ry6$B{Em7`5 zRr&zO`lY%)ybQETeJHJ;ZGRe+R>lgs-a#$br}Oxl@h(!Pkw&F% zmzhDtVueR4|*pV?I^UZohbRa@_UsrHLhE$sVN@^}1I>A9E_cOZd!SyUU&y6RG5 znK8AJGoK89jj$WL1{p-VP;mGslz7P~2{S!^9>IUBi<%lr>m3okB%X zprV?!D}jO@54jr@W=#F}2}fzX$}J=-ASJMl*4Z}ua+z^d?AU$5 zbHp@LsQ#A9WDf>a&TSRft2NE;_0Rb;XOA-C&4?(9Ph;Rij zR(|3k@ARAhs2@~RJX3^db1<_(XwP;@7^FQnCxiqAZ-vj24U?0T3;P{8L6Mpkc*wT4 z=Zb@BIlyu;rImw?0O62C^TgwaFdYV3=9~~O0B2^}BEeHYMlMZ+uqF5w3=EXXs(oE5 zg|vLlLBWdbVGBh$N;pm2Vnw?Dq%Y35`W}_nM%Vv;&LRO?T@^OMCFy(k2m5mFTjcH3 zo9+!?FpmHWcCBQx)5VIIZGBZngtT9|mnh0&g0o#ZWJ>Fzx0pkj>q+zd*VH(EN#VI17-stI99Upue*>ZYs z{F$#wZDtZRdBtF!ex_SfcaUtut1~aXGqQD0THC)m#t*{CMlyKXse8O3(Rv*ZE{&}UgF$2i1&z#_y@fE)NaS4%CKht7KijYg za+WW&_{^X-&6Y|Dz;$wykG`=WK=zf4FqDnERaY5LwaW$LRubjr*CP$PTk;nZ z6$Z|BGUvN_T}i)bAAn$K(&n&5n%Di=`S7van#r?_y`=||41enwVV%r5bazWsM@$WU0YrJZ*V0Nn1v zLu-eDy@b3U0>;TkfY2uT1Q$kn`G*c1JT>?5z66E6uHNcF ziKG5F)q;qHocjQc!c;0hA3+)o31DDz#ev`eI5tG1^f@GeCoPR(gH+c2f2;mEi|FLJR7OicYdA ztcF=K0aW|3TAwGpi;0~9?0WfDHwbOVsTQRvEGvdOppvg7vfvNXk;#$u&!h;>=2YPP z{EaixvR%_*)U$YPQ*o917Y1q$EAabMmEU;{Ud;jR7aIm5+JReOsbJ~L9YQbo%<8Y9 zWZj?h$3F3ojGv%>hiTJ^Ht%;c1dea$f&q<+NjT{P&{#Q147Ar=KiKkMYIKn7Pl6F8LW`UTz#H_hrFPsD%~qoXliiX}tSHcYCJkRoQ+~&LR4@ znE0xYf9BZ;+sA;h&jE|c52jMGlNgWh#Vu!FaqN`2xr>(qCKZ%O`b*f_z1V<2S7mr8)3C=etf;k;tu;geJ_)__)4Q2DD7!j$a#RY4s@#j^qE%k~GrM3kL@5;EqtZJO-_df>9X+Zd~{gP6NA5-5;h5x{XxKWU*}@D2cwn zYe`XFJ9xIQYWixWG_hM^x)iqHu$4V7%3%gX67kacgQ7! zvessa`;g^Nf`0K7tCj>b?(rP>fSIr@RIxPj={TsdqIsmBo8FZk9R!`%^+wKk$o;~c z#|8t{9!+3SanA;lm7OFn>h{L^kQU&YQstj20W$PNuLI5%Qs?cRw46q8VnJ{)qHJX0 z;$Kf&p!u=$OVHzwCrCm3IRSC|>oZ?`s;ccSn{)=i8o`Hg64T^4Y+6^AEEB$75_z+L z7W$3q$8<22v7!pxEN4&HBUKO123@~4vs zvp)Vi5t}+yRTQ}pczjsz9-mD-2!ygob8U0V!vmMxKq&a;UiTp>?pr2X_o8oghLI(UZ|N44YUFi znfv;shsSM*3A*l{Fx&6x-syA-`cg7fKJFdJ{{a1GT$Ju+4FpAF3u)=6<{q&VLCD+O zh6K0_Ow2gwh%{*(mHfnkDsgW+K!JdoP0(HcKeT9`Ef2{u+OP_6xy+!Lc^a~=5F@&{qF>l)((b_7gc3-5D6Lfr5QJqo08 zYOMD6W4*n-gM;x8Kvk^|f#;5YC`RE)V}Ls6Zt^V>u*Me*-A^25fz(!nLe9FQsm?Bz zTm{Bvf5z4jBU)`^MDy&_?Eqwl);`ElN}*Otog#v5i$LM|gI*x((O8ned7uY3YM7j) zj^Z0K6bOVEuxWF-ChTV7q9Rw%dRnY{Mc^IvdKg4mwOQjFRo}$YJP}+;?Ksr^+Y*TR_;Pi zBlT|0Pmz!8Cc2uF_xIuH8f8%lHUV^7Yke1dB9RGjG0}1sVp3Cu>XQ4)NBeCiM(K+>6H7j9?CteGKp_~K=We)mvGWpWJ&0XhD^ zkKWT;#Q>yDoL!HqQXlah;Qw~ybN*0=LF)eW{H33d(eqy0ZM8ZnO`SW%vd^zR*a^pK zKU7x;L>qk}HT^PPf_wPP8AxsC2k4g@=`_)KTd3KPin;TzEw9Y19MP-t^S!Odt~0Ek zFWdfxdDMX!v5J+PmpixL_GJj!_3b3a{+3&|HUm_*^EC3u2SLE-N!n>;sqo8#L-~lD zhANI7@EC5;!%WAm+16M?>Hh|6VOA zi8lQFXiErVYH*O$)CAosCnskQA?_vs0A3aViycvN2(k4JKpE{dxDQ!x_%1oWqs^f_ z)iMltB4*P~vV6*W1H!IFA!p@SNLNCLGtu{*HFj}aRH%Fg^Z-!i7BvT)%nu;3grd3s z$Z-$Y5-$n(j_iWuAYRsveo++=#Hu2692gih$&Tv{@F>MR(1yiZGAn zlB_kV$qdHyP|A2Cvc1r^m)?ouP+tjs#bwDK9m1YAS=qz-5c0zZ4wi0lKbvZHR-b&` zJiVAJaWBz9+ffX2n>X8=!$`cKKhL14 zx~`sR_dOiSwqR997W*gaEAfHE6d3?=?yp18pn~a~813yX1C4_y3tw;V2KD4yiUN3! zF^HpM$Im`1D*x4fCqr|rR6cqp^Xeg~+!)B|I!9Gqw*)*efqMz_=>Ufma-3c;eEUZf z{}oM*>x>xAAfFNCueS17{qh14cva^jg=flYFnp9y!-L}>D*9;Jd<2tBsvaKv4a4A*- zdW)Tu2g)q{gD2u>Tc2eYw z+05sv85T_VtH1Z-1bDb=Cj00lYj_z|Oc(Q#sq;03Y*etYOuvc>G?lV!yd~!Tn!XR$ z7)-OfzlP@RsA6Fx(cq4nz2bU)sBH53fklV<*J|4P2JQ|YZ4DfBt^(7Pi)&lcKJ7j= zn&EW@)Y*wmhC^L>+OP73Cnx=C>1)kYEf3xv^h#IkevFuB3%$`2wiwge)F^KN1NsOK zAbJZ6xVxdtac zGKdLlr!e>V7=txxGgyD2fCw3OMI;TP7GSmz0!^sK+_2Cn3LQmiNx@sb=EEVWdH?t% zJ-26AqC|1GU`od`A1#&0f$TNaGh~03Z}Fc{`8b!XRlXI}aGjk>VmB`_mQKRfcSnPg zhxq?h|Lo)ljsu$7ffUG;;tlTvt);)BZ=NuKNZ-c*@nde3?kPcuT}tFxhdyIuXOogQ&?!P}-PdNO=d|!H9&+HjjKVV~uyI5qA1YU6?bQbH{2TNOJooq29+@~QNg z3}4`sJ$bjkjj^q8ElZfF``#Dt#5B@Vv+}(?;>MyCb-bP(%Fnr+ORPvB-)gcTx3;!` z8JocDE-6x(1fIJXsnZUX6IOwBI?@1~c^(%Pb(Rc82Xxt(ia|YfO>F&N7#vs|+1*oe zk7R?$l|8coe&Ha70``Iej>0a5IHq4kZP8}^`iVT=@c?Duf&FKsz*}+en<}jHZm~^o z3La8ux-}z%4hpJhLI~dhx0Noabi+w#XF2f^*)m@IwjEEKy{jQ8aWV`vzV3<0@ESf4 zI=KWsn~ABApZU{*8aoAovV|}-Pf*i45E(o1Kp6OL;Kp(N9r*-^XE+2^r9YUQ^Ds>m zyUA%7qG(9cQsaQ-34Tj|fB$D}Bud-$v%ZAB&KSsz(K1!Yfgxtw;y-be0QtphT?G>j zruOV`Nm4^*iXJjyp_aSa>~-3!*~h4u7U=!k0eNNXX}=6ZWN8hnWQ zdx(DEu^PPV8|sS`_RRcbEb=GqZ9?f2AqlBW^4`3y&x-$Y?GS=aa#S6enwigHKV%Lm3||-d^FH z+;_;d#qmx40rkGk%BL}i&m7peDuDKKnW`-TtI&xIEKf9Ez(&YW8?57d|Ef%tAc-g( z6m?;D{yYq#&4Te5v^FS{J|h!)}?IGO=rayn`7>(<8pzTo^OhtS0wXugbPmM^0o? z*--P9JI+h8jCX+~Bv(@TIKdXmw$vt1>Zlybvy#(anOsaQ!fFbsi<}I83#4&n4DsnJ z{;_lwij8lS8AvZlr=fEkD}K~si;*rxw^4uBo+3WHzhfRQ_Nts2U!o=~orOyhNyFxP z?TIByVqv*HRp$ts|Wih56JVzP{~0*)d?( zFGXFJ(ZJ|{wAF4IWK`&<3k^L`R)ribjJw>vgO+REo-&n3W#T4D0tv9}RSn2ZN7V4K&bKC2`bcmGD47>{DI{Bm( zD)v2X*R#R0MQ>2c=S^*9jJ9Q0DQ{plS%z}As%d9lg@;D+t!y-^>n&z_^W{EB{_W~` za{z3@bwFKV0;UMvppS;&8`I6Dj>z@@tt@WAmVmOs+UZCoYbc6f6ta4triRA^)jpnI z0m0X9HB%Q0HArB1?LajB6%(DQIUd7o8OAgA6^S8lJLC6=y1I|L_U?I;4}lB|KI|cn z5zT-1n3O(E!ur+n@Eg@*$`MKed}FRrb-Z5po1Y7Oyu!o1y}kYY&J?OKP^)3Vtg&jN zYkJFb?EVWVY6K+o245N*eSCeVrl$cOcbkW4wLfM68&rcqioiyPOL{Pa>LQ24<}t%xx6xb>{}ZwG zA=)o)>@!}x4Ln$|&e&zB=Ui)mK43uWGCY!n@ohMaCOcA-!B3-%Pm8YWaGDa-v-Pd& zuop625KXfgHp5D?g`1ENN86A)L%VhH9re;r3H19svvlkHTS*SnOHT2{E~6ZbjTc1o zV3gltPU_SKG@X>CBj;#2okxy0wpVOcj;$`HK7|X9=={lheGHd$4{2$;hv8NrW)>ec zLi?)Eu*`L=Qt!JH*U*J!zxZjy=>1^Y3f)G4# zb|^1KheMoc zHF%(&-Ej>1P|suzZEpx43sO@D56P*1BW2|83y4n;!LD6ys&{Ki^z&I}D3T1Oc_1Y@ zK~0|Iw;4(dIXKM3_0tCb+N1BNL-od{_yatY*dL%+AX$TxA&UTBkb;U?IbY@*f?8f) z-pv)c&kFJF2*n2-?9owC!DO3Y-B+EiTf>(ofVtQ2*Z@5}&zn9*=}1Tgs!*fgnyd zCv?Yn;SWRC$2#Mo>b}Ygi(}dlC656M7WPKYhqNK9tJ~9^lI#$jC`b|q|_muI2gb* zcI!GcCixcdu|})oX+8mZmf($X?4k&QBEK<}#P$_&HJ=KA+wUqI{_Mo#WB-lo6nxBt z;iO?eXvhLJqF~+|w9@3_2CZdzA?=kRKnIb-w*+%dagP{)g!`YIzc~x?yJ7L8_UUOl zsHl$O$$C)^Nbvy8-9T$y61WJ$;F~b(to}D)$J>@Q5m5mKN`1pPVYz&=>7^RXik-$B zI);v~KBSe4dDlMqffAzV47NdNvf7TML)+g9GKp%2O3}3#-mkP*FtakqCWv2^*I+ED z!K>c=B}?_zhP|GBfaUT>a0Oe3!PI-Dla8ds!#6bj{>%cg(z}fA$B!9=Mvi}3EqxT* zEgmnowZ14Mj(b|xC7(g`J9San(2=_uLuEfqV};!|=eI}sWjFBb@)xB9W1cCXv2(x8 z&E@E{=Mo^5v1%Xff?Q|>ypN>1;M)9)zgyGwMXca?}5+W=^Z*} zLS+BJDHhlrMf2~v{-7oY0QmCJjn$aRiO0WL71SzKwfVK`w>j2<0Rvmw6AJ~v1SV2@ zt4OW=@fnL0@|sIq5xuoV>=lNCy3L`5M@Yy@h5~cqKx$>WDoOe6J(2JN<|^L)R2e2j z>cjQC9MaDbui-7M9eQ|6L|XsC!E*dl|8gzGPaI8J$60|qyYJ!3wr+*UuRgqzg*(+W zq8ZM#IzRhTJQ&p}2v?m6MBe>Y>Mb|n+qQdUFNt4Ql;1&h{hNC)IPyO0&SZ>s1#BS& zZT9j_xl5PxEKFwf^W+y5P1}Cu45^|*3;e3XzNXzF?!W=$Vk%U+J2jdD7$(JmH*)h7 z=qp$#e=JWk`vpC>H|ls{QOw|aL{tg#hphq3%c>ejgpZ%giflXo3kYqQCfo?z2^=Y; zp|cpj**i*SjRP&7>+u=Ez#mdUuiq|bOS(K2e` z7x)V8$|PuV{bpv5$-3sAHe+-RAAlykx+gVh@}L01gcAjkd}2n3s{!;2tY4aH?=fjX z-4d`*h9bK0=T+l^)0d0QC=AE@pS#Pf!bB`7IAj?NA{NaGR>Fn3n$}Dv1!Ho3WEY=| z30bL2+DcciwMoT^Npb$hyI?KG`L{p-X89=GOvJEk)$(F5)e2gxC`FN^vg>WAOTcv4 z=fi8uB{*rdN<=_u%tw_j>)@XzANsZ!2ksbEmXi1SQ=h28^jB$Z+kjycdgJ!6e(_JA zRSce#krv_`^OLKLFcu_ZFFsEl1|m@Muf?pM{!ha_cS@sL)ifJT>PmH1ADkq9-v*rv^l$xtQB)cm7u+uhTyhLh0aM>{{{OCh zHtYzxcbK4Yp!N-dUy2!#&2m#U>N$}Dos9_>SOzfRk@C0#!r@pejCI6_K(?FzOA>@>16Fk1Zh>_yI8aZ}DKf7glRu9~N?HUJ zoqhR9yl7sK*#t*|XSWiAVE;q0(5Gko);QR~`0)cNvfeDeQDQumkF>e(^!W5ywUI^S zaxwPj2~pwR{#C}-ygFfbcFQ58tDTB-m#5x%*z9eT8@HqFF_k9wo1Me;IzyvSxR%qT z!BQ_gfi3ZonMh~qdJV;N$!d2_ben4EgvmF*+P>y?0#5Vn4)t@Xq9_aU7R~P}RIA%=7&LEcq^+x*t3%SsgFeJ`4a&;EkN9G^ult0&z2n2OMr()XwJ1KffZu zGZMc+c;M2Nd`4FF%3dMnvB+*E>}#SmRPcK^JSOhL|&%i?F9D%N=63Id8NjB+kK z5N$Njzu4Kp*Ya~SYC9Y=1qvB>4k>B;jR6{+p{0n|&l?xc{iOKTghGOAPH*T>ut)-w zt!cZEGq7swa<`jFodk_dNQGWT%r>d$w7(Xm!WZs$=yxQT;+CwMjLhwBBv2que`$kX zIF{RmUgoM9V6IJ@EA!M{6clC8ucx}Q;qI}v6m9Q6d)@bz&p3Pd(MaUVH>DSHj#8Ai zTR*u-4IC$L{5y)YAj*V z%JxkA4Nhr&cKY=HrZeBZnfG5`zXnkk>~{n?k(BY)EmUiOAN7dU1qB8g)T_XnIW+Vb z=tzclA`xAdbzr!Mh#ko)f`piOv-IMD7VP0Wi0JTI$r|vs3(&CMm~H~K{+H6= zxd5XKuiYTd80767z`5mMHUZ+O@5a0+;W|s7KKAeX(TM}>j{$PFr+qXI$_?}4;$psq z;4f}7Fe}>La7y40BZ#Pad;48m!lr_82iuF{uMM@g+l6xbWUt>nU;Xt~FXE{wTHK?= zM3I!yF--4DnipZKJi;G7Q3`#kc~`_0>7>l&%fbHbtL98f(F+Q*56uvRi|VGu>Uqtd z;lC!%^zN*%T^Q0;aA(GNPiso~)I9ky$D3R%Y4z%kz<}0(QK;VfxTxmzKOOwL)2DW4 z>ALF&5#n39Gpy};z|e8RWz+;rf}fpDIWTC!tFS!zv$+|ANxEHV{(m7SfbzZx%`FR! zrRFW5#ep)kD-*VKVlMY45UbHpg4Cw!hqdz zns`Q(*pU-LHFXQdX*TH7T#rE6p>E%B;Qz651>l|o5*6wRh8p4{{(@8qsJUm)L!|)5 z>clBGd-@carVJro!8|9L{~s^scZ|k%HIqDtV!(ku!vLvB$E5vyLx)$~(BV;E$*V(C zI~ror+S|DwystM_N-H@5+gY8V&t?Koa}IcDm*uru1-U1U&Ua&}{vA=W%}7}aEeRf+H$ zr@YL;MNP*>+pcBGsA{};NH4^nnc3z=2fpqp_`2_di;e&Hb!h=xgZhQzu#5;7;=95% zAElsY!#!AL;@JIH5T*#k9qb>59K$x-7lsz0H|qfpJYb!=C06XeXH4T04=uW~y@Z*y~`X9i`RuL|v zrIax-z=fy|*tqm%1mliP(ErggRO=xaNFIZ7yltbSqa!y3q#x_emj;#>cP>s$^w!2_ z6J56-PbDQLg)^AM>X1oyd(mmsZk$e}6 zcNDb7!TfC?9z-&AJhOtZ!J7bvN2z438j}l*aP~Wo+8t?{pAAVNg(9hvG1CwJ5i_nw z&BNFz$Jpr3Ul33&d@z<;8%P3CH6oUf14PxIH&M0eu0!E}xFu>CF$P6Vgou!#-a9i% z`^MzlkbsncTBG8U42{bDk>JMU$^=Bop%>tes**8QfaTT6^q}@iqX*g7yu_*?*CGIz zf$+Iz6KJ^pInuzahOTLHSjIX?f#e8tfd~bGk5Y)P3A@{fS(6jbdccueyvLmSsg4Is zqB~!2^^A<%9;GnhFAtJN8znL3o#2kJhjw?XdS7#Qe7QlhI zI<*6-bz81*exlVy(?yqqPNwgNqHF)H$*09G$tUGKTp86*zxPB3H&b!;1{sTLS>=rO zy*(kEmrJ6Ui=O6DUnx_crbiU2)nddBsf~Y-Oo%)%_GDb5mE`_5Bv^Zo<%rb93?4I&2 zddk0vqt^Dj&k8#b;8KC|d&mtl-7CMfD=L(;`%dPO`raM2X}!<Xk;2Z8s|yjKu|*8Dp-)0oJ#1;@J5Q4Km+m67w)X10whC0oO*fr>6=5emrJ z3G-4g{;6NR;J{|acvd%nq`v}3_r0P$? zaYp=xBBq&ad}59&sB*H5a^TKaU9jUvh`d*>g!X(Xd31^KCXHP6LtTO=iEy992phs?9&yA#AQI7WGup7roo z>Kvtzm5^BiYQ0tkXyM;DTm{E_#!8wY>Wz`coJaJI*X}YK&{|-zfT9GOz!=cZ1s?VG zg^jHmam8f>m9M=}@~yMe)5eB|1a-V^q?B8q)4n?B z+KX6;N6wq{^hw!>oaz5zbNtgB!<#s@O0d$o-V*b+C}p5>Az$GAjQ)cxAKvi7d_;}x ztp1Bx7IHbw4mg}Ja;z%Tc1&67@PVubr>TgLkzNrm#@}lZ8?a8M?2iy)n0* z1Y3gv9(wkxt|`V8Bpl_&GY@5KD2)~VT2($;5E{k5{tFzA${2vtj%_3Z#0CwJ+*fKi zp8oq-WRTcSLmXJW<9Hk{sxyK#!aVzLyY^1OFFiMka&u=Q{GY7>@so#EBeY8$_EK$+ zrH~I9ga)pegUW~4L)q{BPHUhpV~5akQ~u^l!}Ym zV7pNzkUru#puv&~(iHk_4Z%+i96fM!H=UTnH%#>XOPoEOA0tf=2m+%1;Qo{UeI4)v zxWIrWjDM3ZICV0q85vu_@b*zWc=PT@ODKxS%HSE?q)9OSnQ_|wC;Aj29<~s(^3cjC zv5ZV|+7yMw!+D%|1mF1GDs8dkk!o?mOfakPGvr`z=V^NEgQ-@bPbt=lrC7_1GZFmdyRM9w#t}ut#LfgR<)*Zc>t&z@hILt-q>>0<$a} zjPoG~hGBqN$dMw3D(LP7Mq!Q8a&D1~v@Eu~M(~$q?f?tty9HqufEVJ)v;+7wdr&(? zs+CtSNY=ARM(m7+XnA2$5+m%6E0_&*S4NljcBfb(Qw=Gz4f&*cmg;-!tWDecIuin7 z|GWr(jY45eycyCvS3TL0-j*C6X?JYD@-w0fq21QAwnGBU9RGA)TP{G^ERFtDJOo$~ zpo!Ad1URFNj3BZ_eq~gpSlcTFG~8!TFfz=O*%Sw&SuWUF3g?du$Rh9{?wfr1WcY9O zg3uvVw0DHtr>{nUz@GoDN-IcLcb5sAn3fD3E#1}EeXiMsgs!j{2>7^NV1Dl7uybvT`c{|MR?a4?T;9odK(AWzC1g)7KgR9Iy186sJ?JCn%6z$k#Q>ZjF21 zFBC+9uAyF&B^b!of*%$<1E<|4{$Vt+MQX1(leUtrCeH46Yrg!gjQeN}92$(+raw#r zpdP?`pR;^)aRG!}y72wL=t<811e;{oP;~#^1wt8QOiF1%F<=eS*+$;t$Mqf(lXe3` z7PE5+vw>w>Vh_Ih6s}0TUK(oLP+yCU5A&u*GZgLN52u&H$LZ)hsm~~}!>o)~L!6Iu zciM46yyk=8aug)`{et8x99+g`=OiXRlwBQg$S?rJ0Xn&@ZgC8#jEoGTKqF`4j~66@ zow5qh@1&44A7g*&EDZ$=~NU=b`uzEfm-t!Ib0y0S_Di9RFfIW{{H5i5Jt1! z))46CtDe-$uFnOvwYBRAN3O50uFj%qUKzlgc|+iwVfGJpYAp7R3{fyV`Ua*sD+8re z85m-Tne2y7eZ6;i4eWM;C{tdUlEoYm)Y8zkE_a#(UWfow5m%rk#?tCi!e6fv+6kSE!3 z@XRmFcmhI1dbukWi*#2Hi7*q3od6Ls0mJ&X42ZeGdLHn?>hErBAPS*^QAx3Y@-=vz z#o%!QhUF-pi<|qmzKD!q56l)eg-G6pH{+l<@|T2Xz1K(=MELDc-B@O4KW1mZ<&S`R zb*6ct!re`XeRg0>2jzDv8dMNnavEI8R0BdyfL#=3 zMD-8+6Ab~yD6$J9>ka+bGstNRH|TES=j5tYfN671Qu3AqM=~W>l?mK5T*ACWmq=~Gmkam zW1XAUF~vJEg@2zppe${=jD|<)0QZi=t|6jAHeo`nJQkBhlUxFtChfcNJB>sr3DXzy7Hbk&2Ai%V` z{1VmIU9~r}*F%9>{->O^KqJuG=ztQ`XGQ{G37iQ2yDINgASM*D1Mj))@h5QpeFg;6 zyAiU*D&&8wy3dwxqOg<-)r!v`RpPYU31Mj)8ZFUo50V#y#DrjX^;bC~J&B9+CA(p= zp?Z7nQ=7LeG#P-Okd63h2XMGhRLpc;tRR>~px;{HNDv{QNPm2_?u`cnu)m))ufCI! zfQKseTx7k>?|>L`c6WW6nT22{P$(^^0(>V=Ab=5!$B z-OkShN|_P$uTDu;0hdT#`4Qf}uR0n0l)@tvXlM;S0kidiIvZ>QxLHTOzXwW!4tU~s zH-6|_gZq1X5C1+$LscgXbZf#?47C@+YxB3`$B!Sl^h&>u99Dk&0`^G=M(WZXIX(LY z2?2ybR|=J9=zRb}cQlYvJZGb^P&$!!V4)vdoHyXcMsm+WgXie~nX)0+Rr-$Nf~{EU zWopZFDz+|eT<64=tDo2`+Lh~X=unZE^{dSl14~7uQwByiKj4X+TF25fk?gP;Ps{GH zr35+A(a|(QD>ZOYOA~^0>Bhe>W6(;xCBEPNA@nOcS|?F=#Pq5TnZ;_1{q(Yjl1gJk zKW!rUh@t9rI{(Afs&ooB0zCW(%yOpy>lu+Bgk>?Y!M=1R(1#sWrIItS253F#xlkq;N?(>@$ANLqfCzM}y9w1geJ?>s<7= z)wO_uE6PQUZ;}6^i9S6+b^tR6@p<5LYc@J|l9BwMk{_t|oPan3gEUcYmql;kb;o+$sy8guBkj^6mAtx9t7slPzN7w)L zpQX(0qV4K0nw(dTs%=)gfRBspiMj$JI-2a|f5ZM3zZR=EHE&%$`WomMVOZ^tM@D}q z%CxPlZJmwPk^g@h3LLLjWZ-K45cs4Ph4LXF4T1x|=*(d`oF2dA2(xLVkiIRv{%_#F z_?O+iAPaWL$g^Rsy#`7+5EH@9IHz59E~zB>Tl?biyP@`NrjB8jFCSB)W}UO=&G#miW5n{t=N~a1D0MT+3)_a)Qv9U@)UzB$TT~8&34%9ZE0W3FNt4#iX zP#tis0;vr;Xe|IB<&FW}y9UZWIqP?K(bz%>gPuc1u@m5>m)eUdkkyo%uE6*%j9oM^ z4V{-vSTBQ8Yx`HdN}F=`y{Q;Cp;e&hIbkcq@BKU*ByCu28o8V02|2%lW{u(@n|(<= z$?TPdXN$GiVA~%*iIOkW_K`>_O5pm`FHSC)d=qI7&RYG7*R_6~CfPG5~g`coi9e#?vlJQWzYG9K-$t@GrvQ2;>T?#m`EI9+8k zhWq*Fe|lhm!@xpSbTkU!(yvKI)*v;YYXNjrh8!MvnROx&fp;9}?DpE8dHX@W07=$A zACc}AiUsInwzih9+T)M^8%Ca-QLG=rIYocqdHanuO=yXxyi^oiN;r$g+DG|@ZycUqD!F0aA048X*Pjr z*8qtgEi2bdVn6~n%8o*9KFMnjrhYbPyHb=E%0gr{Tg9lj`HknSQOk3onxePjC!z;f z+2gw9U5DwGN>MdqzYHQKt*PlJPudgU9on{_U?2x2zi1Ek0|MQk9UHO`7=jL3b$*Po75fF#MJe29^0 z)1~tEJI3DdE}@qaM7DzcpBW`n9R~dg00OTe4^pX~I|>E^OtZ!QMpM?n-P+sNs9&nX z4PS>gj1IjPV>KI+8tP*$c}!r9W7M@VYzO=!4Xtq*%YS zO^sg%E^#KP7xlwgOlEPU77Cp{yW+wbIIhTo?qz-lU(qmL@+ZE`lgwGO&|Gq~r zCzK)2=JyPLcqcOIb2jb2eH_LTnP&7MYG zJ;6?LiIM)?#OQBk@buOuvs2naYLGGp3Tw)E+<_3%i3M$)+JBZRo&71 ztF!KWu4jZtOyBsF;Fve_I;fMjY6=oCT#PVR46>zk{nVpU<1K&4xZJU>EJo4P>X9$F zJ-^+3fFrNERsn?f&iFHV!0`jttz)gpa#RrT08jFDA|5?7$Vl1M%?-%p5%R|X59}XV z`cN^7^yC`p0PbiX{TCQu0)?>Jp8;VsXpRKd*0%mN`L80st$JlsssTCOk>?K>q6RDH zG=+cKS=y(2KmvB8(%|O9?Lg2zJ1l6nj}eljiQB1QNNZ$97k{&fR$B26i7{%fnc7kD z57%3lzoZM!8SY9~y>7J}bS3Cd{H*reTY6qoV2kCAiE`U158wh@wSbWbklQchtpzX_ z8=b6-o(mq07bq5f^g;aRU|@1P+xQ>t2G`)|uZ|3|5JjK(8z(V(1f(Jtn2<}dNy~E$ zkPpMf!cR3v$>LG@3yK=n)nmvWoA5iOiXf>|eA(PcWS*t{K9@Pp^3HSXDnZ*xgSUP) ztTG9+NVCpnWiOL>^1<`02L$Y;EYx3)KIl)$+~Ij_EB$TGwf@1Sj+`IWjCk{j=ye&v zv!aA)Tf|euPE*CfSd_sB4V=0G$)JAclXv%hgH^nnQE_BH(we9or+57CU+cTR4LN9G zZP={X`r1z(tab_A7@{c*qatZccHh)WToD%$(K8B7fS#7cKTjREbsQ4lIW}gVv%k+$ zyWX`%o6XV?nmnx=n7+-AW27=)cr@4u+#W8FEiFs=Gbw+U|E#vPyhh&1y?&tT{KG?Py!9zDu%vyi1yUd~mv# zuwrv6o>=#Z)knI}CVpK|b5TIOb1V%KV-UlyD!)MeK zIHIm9J}ti2NL4@$^`zMa*N>0rXEp>;0|QD-pkMOuu2Y*Z{YO;ZccaQ%qY=GBMtq-z z1mrQ-{F3i}_ydIFd`e`h1OG;6mqXXG3*Jo= zG>6$<>mXq)I|YVY5dug}Vs_#vM_d$``&nOrrDXXmaMXMSQ6iMzDPbGH9$_?Z%kezy zUdU6#mW37A6Lfoi(Em>nNg$w)0VN1k%9DjGmMK{4r;$oLdk&Kr>MiozBK9o8 z|IhdLG%P<7DE?Hb%30bf)x6?mzUlRa>#qGSQk2YWd_JIE!;s)%I~5ru8ke%rxOVrz zuz7L7Tje=clBcMy1H)%5-V^QnIS0W4S=GgIDWD_1F8Hd7L@0-_b*Bybnu;mM@Nco{ zmEwenZr%5_QL?ee@T#cab+iHGutw$ymhut-F@f!H|S8srLp2We$t1{ zNAA1fC7u1NuE*lju+|B$-Bx1ddu{&Bz(coLkMX*p+(BaZnaRsJj6oX5gR<+meCBTH z9MSIeF5~!J$;stbx}Un`4_{a-V@EkE5!s0I`Kd02)jU651pU7I7Cj&QWlHJM!t9rq z#kSGtHP{o_I;Y$C$Q^tCPq7#;x%4ga)S>Ybx6BbJ&bRJxP$yI>~{ zdU}Su-_%>@yk%w|o3|nYVPw2&|HM>ZS9|1ngd z4td)z0mQ)k2@X2uMGa&fc6LBtK@z&OibO~XUB z?1ED&O$ucx$?M8?vb`gCtrf;c+A|gR{+(C%g9Dtg zIS8N-p_S{QdlqWs!b%;MBg=%pCmEfToRAWqN|fZh`!|O4OJS_^4VC%tXhoKsdm`rB ztI%+qM!eL8+M~501RkZg8l*2O%%zXcj#;`rSn9QZ#WOVqBkwV9G(PYLlV6-hUPs*4 z?1$Amaxk!Sb%(zaQry|AQegD?TTq}UuWOAM<*!$l<4#Jg4#KEMeL7Zehk^;&GCSQ; zJnm*4u8Oo8QLDsH%&&+UYy!0=f`&RX-%aeq?+_Tk4QbCIt5w;cSu99+yUV>cm(wNTYc*N~l< z!tp${OxKAWN5#TvpZP&qiTsV$BNRGiL!?d^43J9e=K@q;a#l`zPtOvV+;uVHfJ>rLaABRnuOoxt2g$?*LF zAvBAN0E_`M06lV7$)(j2IjfFr1TE(~Bv3>d*&t2BXQePIN}d$NA8C%YXv#%nzEQ$h0R7bHCgsy) zU?Of3MI+4!;;4aT_V5t1{WXEj6u52y<^ax!GLQ}p=FBQ^Rh4i0ByDbPB7t=55r85F z1_x`D>j{7Q1do}1+?C`i6$v-{Voy?>@FbY{g)8;(pQ5qX2mwPw;(cOnK%&x>qThJ& zHmy?U_`A3+4mCp(tI1$fT9^f9v#sq!cIFB`hF|hDvzzeI@De%^FpK}tN@?A{z8(ov z^So~H3cE}~us3~FOu|HTpLLZDlU@oX<#rM3@N0~-OpLM}F;IH7y@x`;(5|}JCHAeR zUXIQfHAJ!2(71~?ti_f?Z>1vkp}0`NHeYFGW~M|Mrxr0qy_Rs~uyH6e)(Nv=k>#)M z@DEYm-{kLi2p`fnD+tu?Uz1BO-kcp}M`zIxav|4&NB+$(p;Ww057$Uao4r!`RiFNB z*$foycj zHU(Pk6EhiKEc|QD=6srVxvmWnm*v% zzJ2qy$1|eTKVx0~^rhnSZb!BhVY=b)l;=^-_M0sqc^ewJmF)7)WV!>bxF1hj&F)WI zH6QOq+D#vKS5@*A;Wk4Vh!EZPc$O9mxkF99A{XoF3Wu@$1=h_$zwE&sg;j=4mJi`#K;Q`$sp^6PRi&djegcK1Z7hINqMrPdY0=KEKj^QlSF( z4Ddw}0OhSPutEW-DZtzFcE1)xS;Pp`!vL2QARB?pc?iwYyR?)EctPeUU~a(r=~pm` z!8+Igps5T9@us$(NhV0l9+jY>x}N?(6*&|v6V!US^}Bq`Oz^jlXL6JCU56pRG+NS? ze8&K7<0N9r0=eVCa-@FaM#?nv?y}!DYOd7QiOX^~x%*6kuuNJlj|<0Lk*`xNH5sYL z;=$jktXm!}-o?|$ifrxDk~Fjjla6tpxeFS8$pP^`1?s=y*mT2jih{rj8w*vUN5bEv zHq7Re=Bj=iud>1Mx5vEtHMNxO_j#Xa2tCELb@gC&)nloY$78%6=*-Omn&#F$CEomvJ5k+xU@g?GYoj@zI`(=G{k3nWt|kpS5+vNZF}vdT&hx@ z>Jh@ei0W|9R&t+jmqqPyv#scVKpS!!uI<*mR^Eq^T{`!zLU%S8Lr~J9sR7Ih} za7l%kuNQ04*>LRnUJLYKrZweoWauzt@A%Kv18I)?oP)w)SgZN!eM0FjKKZrB&9y)I zHS5;i%6RRU{bO=g)tSvGbhuWPiNnggmNZKOwymy`l!S6xm)N3_y&10Fo@up8$0n99 zww51VJy%ficvoS0q^TAh7w`AIEHJK0D}^41iw_@{ay+f7MuVSVMg_a4{mA!{?=xYs6xfMCmAY7QI;IWrd@Y14ARbf~(Y4FHi5U zca&SMhb2zuiwVP*ENSAlg4EQhESvplON6&(=6h*FTa=zU)(^AQ>kV|H5-Tj#9@I*> z!+h?XEbqnd=e;mrKzK)m@kZz`>U~-LkhhqA<>J4(TR?*{Gc!BGBfUxAFETf|-L(2< zr6S-%IHCiOqyRxjvm(bCIXGCW=J^$Y`Fx~l{sSp`ak{rwb(Axf>6D}q9=G4N=B$y~ z{?{~?d&|9R9~#XN3m5QASN_CgU`u_~MSry-wM~mZN6eHA-6F$Z^|!-$ zZEbWg8_2#R7b~H+@z)*k^#>J*v?kw+Sn^_~Uxsfw^xqDcz3wo3%V3)SQ^!ibqV;X# z*+eFOrO?>8qk}MWDbIw1Y(Mm<-ug@91Jdu8$|7OUH~gNFYlX6nUxIzdJ9LF=re>!7 zVzheiRIooL|1^kCF#6`Bl^262tuCe6-gP94U$RpyGyzj$s$-~q9s8Tuzi;X#r#H%b zj2FoTi`4e+b@yXy1Is)0AB~aeT@W*DyUl(jexcuR*#DR&t+YcgL)eAcO0vyqGcm%F zwp8c6#7eFo5mG*Y!#W&U9z5n0JXswOGZhp)f{YjAgoPU!_jgkX&tM`#K$XspOAo=p z&?QFr%A3%;qN4s=LvCIZO>GuOE)==e87)qXlW4V*cB>%t+$xWc?ZWhhvk8%*q|w(K zvI4zL^tqxM4HGo7G4_{_eFi4BsdZ(NuOnh(V^ewE@RnEm+Xgzyd_q0DF)U+wIT`9d zcs0&KH#6Jtgpuq|cqeQ%V=9whWDaIq2Yx`AzvU!wJeawLyARzz4)m&d7W;Y zudiq0!bwmv;>6;0_ZAY#rJT+Zmhkx1e&>~-*W$>d$T9N#akSC9+f+niQ52dO8yi^= z*!1&Ta&lEPOf5Wdb11UEe?Vkdc4A{{a7aN}K5Ung(EKxcVx8g@{rnZvqQB4*L-U;M zS6`V|^*f*a{2l$NVDFqrQ_3_2jo$iZT^g|)j&yjfOiRutIIwr`n zJr=ziAvhmLCgt=LM{`ZOV;p_e@>ooeE0ieE5^W!Dw%@sxR&W$!UW+saLUmESPHm+XX4 z2&@z57SzK0Vzv&mn@AEWK4e@=%o$XT&eOvbZ*gIcy(IkkW>_L z_~kENpH_^?DTjiD+au`J5wXEhl0lFPO~4%G@vdLME~05Xy#63&J|RM1Ke5>9v6u}@ zP`cx@io2Jc_5A{V=(&SdnM3-Sz4{pg`#+gBOtN+J^k34ge#blci*+P??DDhDdJoE? zWJy6QoYb_p)3!<8BY{1TI4%3zvPZ4?^pFo>(mcD&)zQQhLYJCCkd~KUfQOG|lw+(j z{jpoHbx!5u9W>f$cjZ@(^Khc<+E;I6Y0K>U84oaH;Gh6$Z|kd?xBWH4DmEcaDcwakP1FzL~zn*dtNO7zh+cwk+YOc7HH! z*{YPH-gTGF99JUrqAE=9jPnpHa&5)T=ziWSiy0Exj-B=Ypy}D*=;XPTiE$HFsU<0I z`qLjdXjtp*a`(b zSg*n1zk>JUB_t%Q^G4htNcTp(_*I5cMAN{CkXu}gE@JIXQAcWsEl5R0 zm98BV73BjDoU>SO(!W|<9xSYF9xUKL$C8}mr+Dd3~Jh-r%1J z3<`P$kvgY0_$1))P8C1KgF41u7D_XD{#K*u zv-2?qKkIRb$yT|^o&TSiG%wY?9m-f-x%V9GRl_D71%I!TI35zWjDM6T^!lG>z5qh- zGm^k3I{NU(Rj%@r~bs@r$vz2=5g|sb5j(vv(*nVRY`Uq|7cQ-{I(9E zjWS>fYp9z(?Y5ii3#GjFW6Ls}w<^BR&)?G(>dm}p;2Crn^dEyAm{;%(rmQ>j{c|G- zh5Lx%f##nIlbeB6TAt^fA6(~KlBln?7jZef^y}_Kw1e4Uf@M0m=Gc#6DseDupvBFH z-_rs%&O=k7Gr*T@u(PM+SGyT4!%BX}b7RBgT|Lb$OT}d)GUJl<^f%d=x_WpE2O6hC z`4`RlgKoLAmPn&C()cRk^0`g2_F& zrvHqam^NyEnuyh2Ak8GF)k&l^N}^p4Zwo`mpTLl1Ih*1@Wq)@*q9iBRR+fjlr?{LQ zw=v5wT&XSuEe(aQ%;Aj6+2UhhrlwG3$M?`RlhS1nb_mWRu9byJTq5oa(HBZ6OSg}g zrF&jMU7vuP*@`X?&x-qEziy~`w9hb58!;n4%#Y1GF=CKyo{x!vfw#_UX=pSsDaK)` zWWjCA@woDx?;LTBu}JDbC{+5W0JU2YJ`vZ|Y`uP+r!YqP}svk*G1f1<9kYZK?AZ{s2e8!D(34qB8wi4BWV2Z?#mJqEK%_(Qm}|A z{9I}Yc$#D1CFQm##HZv$HF>AJy#2`aHM3?~e@Gu1~R@e27X)zLK z`JyCdd!lQYI4*{loWFaqoLRsNg-HzuOJZp?X>cycgt`q4zg{;qH%~(yjoS?!TB!FS zC(3?!^=PDoz-o~85yBe+q_0W&fAZ_%In&d=a|;v*Bd@@!X=;)Vcq3A9LJ?R;B48Iv z6C!9W9`B@%iosX?Yz9uolJa!qP;>-)Ik{2LzPNvABJEas&AF^N@bVpbv)UmVnb%L| zH~FGRKEsP=?2c>Q)Nxc)%DLING?b(PfkOeIrBZz#cAn$CG9qHsZP1?nh36y1?qDeq zJd7Uj79+^TwqU>oI{=RTN6 z+T&4J4hVMl)kmo&A{f4*G$?)PB_K*a0F&ff+2hC>R6BA$sl+l;UL(C@m+y9{!GXM7 z@f&G5)nUBFso3LC?i3@`?%dmKzi~RWjod3Wk<_n#^}Ko@n$D;$-cQ<1m|lMBQ~Rr0 zRkIH)?_9GRr}`I!mwu~hO?}ar6II~X`1Q_r=}m|XQ-n5+k|4(?&EY@eBRwBw2y+?r zN_#BmgDRqRSt9kyqeW*5Z4-JcO#%-l@D_4u`?9DSWV90}G!o=xFevDA+B*%u3eHv7 z#8+1AR+gEulo!6Yd-J(JiIl-InJ6AcCRIeJRC#oq?t;R6*|F``I4);nrL7Gd%8D_H zk%EFGZUhNVherAa;TuAm{;n6%S!r})ro1H61e;noM(TeH<2ExAcXKq#w42At)$t6% z4+=u%SJxLCeJtlDQb>PG>H=uit<&^yF8d%Z?bg*eN_63VC(sBsXF7j48glNzCk)0_Rq@ zj$w4&g_!jLx@}i;(_?fO(c_rA5=!^h{7Ip;lDpRvj;DGqe8cod#YfG;#6r3O}b6{{VAKqR>qzhD1qvOHJj28^{i1v>* z-Mex(RM9uEL{-D0EkqD>Z}Nmhx2s*bTSL80TDfg;(_1vzc?mkpS25KL4jS=pMRjQ7bE-7?1EIb+V!~&!p zFP)bq%12Yr$tzq%wC>oO=@NCRU7N$S;>IBhm}J4DdB&#bQt`xzM9$Ww>tgolnf1j9 z38^K;1vRxz(&?P+f&v_|n8e+=*wne}xOM8znY8#TA0 zAjiY$w!S`tu+OBZnU)B0|BR4VG}CD%)oI;3`Syd%kcU=Gdxy5y{kiw1CmPXUS6Pzb zCF3}mh#~gFPIO*nb#`;Ms>SvzDRCqsJc7j zZwYFw=E^O04@l<{ww-AE#T*^0ApCen>Ec<2f8TpXY?zx|(`cOfEhFWo-rdzzSLeLj zl@+(y2pBV-8%{3epOIIXBS?rhx3VgHIY1TgQ~B>gE=^!X_$ph>3Ul~Ix$JZ6NxW0$ z*pRX>0S+U`Y!MD${#M6+n(4Kfp*@=IJ4G~+h@RU~nAQzqU<)j+k}$6ddCX+ z$JWb<+BEzehMeZkCdd%dWi&E6NK|wqF_U)TBxam{Arb2+$_Yu|_B2^;%O9xE! ziUNmAt>k2FAF0wa{{KWze850bUt^TkN(YfLGADX;bbjb-U+-ecI+2z$K>~={7@9!Q zp2}YR``a~K&!b&bKeCkHt>lS~c24=%oaLNh(Q(z~9z&lg@C=#QCg2#3$^BYmoyzIb zU)=@+$PNBQ8^po83U>Bu1sK{#8ev&1b(R6;2MY$D|E_!5*XfT7zbH7pU&%^KTY@;b zUz-r{J19dk6cB;vo9_VM*G6nND@VTE3_!ll%4OchsSvt?FxYAx)>qDV6naWk=L8Uo9#YHiR z>G_;#n%t}eF%|*^VM|bq) z93+HGzgI9}`et=g?O{kC-NP^yHA#rQFlqJUp^LKOrPIdFZt-)zt(Oz*rxaJm_`?TP z2C0&E&|oKt)0&faZ0vt3Mr5lM6;7kak+G&eN5+X|w zH%<~YOFgn$N`R1Wi1Og*7s|aBUt!({3HubthFpmE6$NJLPhExRrJ3g)qc60d=g^0)@f4%#&54clr$Z zM5XiM1j!HUD@-Z5vqZZ=s3@a$C!@qNRa4dM%538sxSRgp$ympxWMAlv;fV;(LdQvL zEhMJ3$;{KX@<{bdwTSfW8s6=-9k-V@+G^EgFVdr%1XP8x#W_T8*2HZdk7M=MDlk?4 zp{t!>tbQdQz!E$bBfoCYv9}O9Q>iH&UbzpQxa-EJypvZ+)Og9r5aq`wBjEOIU~!Mn zVf$vKuWP)oD>@MIP$&RaFEWW1mMFOmR`YcXy=;r~EAM6xzW z$g+SjvY~+dGbot;ZES4be1m&FvNa)${B;wSqA@Lw>Awje?=|NyaQG-;;E&YT*H>Ya z9NmRTy@2fRulPRI?wfSGe+>bbc9J(DVG{M-h3@eggPsLPe(>M)sX1dg8=QnlYCXm7 z-`DEj;|`7eXj)Oe^00@H6D4`v*>8X1DbMnbtdFSw3eE=_Tmy!w=wa=~Z(g@6g`9TC zf!<`f$N)E-mrVQwe}=DPYw$dHdHU0r;bpQuZ!nISnwkpuKT{O&fhB4|el>Co27`bM z=KmWE3XnsG^Sv*QUgBeTk11Q4-m0Qggz#I`L<dMhxL zGm5~W^>0sMY8R%m>!Rk4yIan+#p7|DW_7EB0-qV3i;BydlIQGp$9LD(@V7jrvb;2A zs>ED;6p*TxmtheNP2fD8o!gYz%-NW1)c@Trd|KeY@QclA{-m8pusy`&aPrykhD})4 ztHxyV35K7aroU$=T%RMXSXw!iuN;?LQ{&V_D-Fdfr0+Z>E86qi~-F{(fGdUWeBxfTX_$;)K&-L}+H-3Wx91?gV_IJ=& zokutvoYf=cS5}{%+jtVP|8d_Z*ns>_j2T3VRe?uX|URmNumvr;L{y7h^zP zTu4{SJL_I>x>kRhVmv&_J|XINOH3D}`UchDT1~4^`XQg~F)s8sjfD&54(3uxu-km} z!@=2~a{6kHo_mkR3>Sj9upEku}0I8*qViuy>nH9t4AMX-;_)cu*- zgu=snSTZ=z!*M!h#ikT~x8CKUW`?#|Dag*(#hGnSdUeJ3S%4+{LSKwSIudy-YlhI< z@NT>sbrbE({wp6&!wr%MQvn)u76oeUzzI5jMqsrTgGc(^DkvuKjxwFU6*e&;A%XoH zT<<^RKMd*lhypeV*z(|GEYSXhrXx^`hCdDAdGM@qkdPxL*)Ot;RI~^vTf+c0{}5o*5@3H0{cV-c8Aev|%DB-e<%RpWz$ugZcjokeENaA!9yE9_hH-Ne>o ztVh?Q(%>?Jq*OvOq}9}bb*ikpy@}t(bhpXUbUlEM8G)! z`{LvWu21mf*Al2{3P($sgkHVVg!f+>t+N`TLoBdE-pd5Jpv+U()h2<$EDqBT$F5fz>P{lg_F9teLRueX7RsYy*v`4AsQgh)Q3@C@Qd<|D z$}5|g+j(X+WR-(N`vqqy+v%_DEidZ#s#tn$@W*h-Na+bVy-pT7hvF8_nP&U7t71Qx z(Rn&HUD;SHHjf6YyZ8@NQn4cV#ns)=sJmW4SJ5a3J6+J=>(LB84K$O&GG3lPH!|An zo+36dt(4r2Q?A}Xq$YC3gYZk%JvdX}jb|y(!T)*y2SMx?|EeH0lo}!uy^GNu;BaJv zq}ptB;lb)1`yn>}`G^^a!Jp4)N@sy#N;JLneq-i6#@=OZs9SZg8(Wx5b+Bt~uq#`b zD_e+56a>TXV^fkSOnTBwzQOjHTv0C%E+K}vl~|X-#Yn3XN?Y@J+hW3B^CJVlQh4qY zTBI^&2eA{2%eiTy2D#-e)c@|Gz)Aits#-W7CvjL?IL|hZshelL3UrrbH1b_y62Gf| zziwmLSKQQNsvV_*%B(FVZR~=lu1f7Dtc1^2OPFz7^N%yw=)TaM&+2x5iq145n-9_x;04;qz%`3z*1}2;| zUXP8HJ!(V^zKZhn%l(z<_8*IlqM~Y)_vvmT;i7$z!namYcW@%Ye15`O)1ds}KljQC zz2ZRE;xV+u)Lg;(oZ!>-eD-(I9J|%ext0(Y4pMv;pOpGPL7T(NOjQ+MKaw0p8lOPs z-^$;v58I5qTrKs#nNzR86gA5F6r&vLl+tRwy?9?3=Gk&`wD}p6%psKrpO7$*shixO z*s+Cm<2c~Xm?lUomCkL>>CD5cQ|Ix|3Jb3OCaC)28*d*LBFCfJOHAzVaJSC)$%ZtY;oVy2EK9Di1?)=WN*rlN{PbA`S7eyy@8SoEpZ+4 ztEUo1dUnQ(tRdY7z&~*Bm!?HTU>AEM9%SH-1fvE2*DHh}^?Ca-2_l<=i9uTXs}0HX z5m^LQeEc}Dk`h15Bc=uk`DE?> zL=S+?K!6@-t{6W*GQ%BtapbdV=aj}+okF2xA18~;sm{Ym%=)aU+(!&yUMqvNQ9oEsGU zr>_RSl!kzi7X-LP!-|oiCvxA3={C-9L!?;O|6J?dHTPexw#%);Vphk-UQTeZ;*m0N zX~f6HC#7kO$j!L#{ywiP=4GG?Q4~jD##_92E;5wpNa%^p#{A6qwBk@<<8f5u`a-gM zdE&uoQ@Z8Dm-9R4l`+4&Ty%uiar_TO11*~2o_t&xRPTy@FSL&I()4?J1=j~vCWch} z$VW~qk5A9fh?O_g?d<89o!eTp89nEZ-UeD)V&ni~lpmYR*2Xv#4f=PbF&pf)TBl~@rlx=?-TCb8lRhxE<3C=l#*F-|YysaP3s~ecixbrY2lYcj5fo0iD_x zzr)h_T{62CMrZWCEYdhJHo6O^wYhahR(sP*l{{U3yD;%ELt{Bx6*q5*z-X4hNadi= zvqOquRBlqBUe)zA1KT2}H`iYqCrzv5(4by~JA$!abV84=4+lvQw0@Rj7zu zov*ey4Yg3e+@JkA+bA!kwWFYn6j3Mb=tFD+dHYQ(rYAjMky8auZq%$RL1V9}ORayV zEuov^(1=pRz<`>Bc7UO<1iHJu-Rz#dd9uD(s64dTG_yFjzq@YmvOj9s#J>K+jm>TZ z4Z{r6tev(KZu21n=^hjD4ih<-I+tUH>z&+wM|NUwf3>{wPEN_BlvcjSZ0eWi24of` zDqmUh%BJY6CmE|dBk9x6*A=IoPK!{WEeq;r*}|TCt;njY{0fJXoma3n5hsV&*B}k& zXNt=Iqv@N&@_gL4v%Sn^+t#XOExTo7d0ETLwr$(4Coi{boA15P_xJ9P?KzJA*i%RM z`CO;2D~#!oV8}+&qOCH0>HQv-DaY2vrUx2L1iTV>^vTH~&49T(4M+$4lMwJlef%#0 zm!ZT_NkklwAtc~P!I1$O0u4OM&+l>*JOvzxdBIQnZ8Xs3L`6pWWql&-%|){K&vb;O zD$nr)WKZ;efJ8e@9}J+4E(wH29H3lw!5NvD6eJ|ftB-98kU~6f_Jdfuj)b&C#P9L8 zb_1)mMdC?e#bYK6yld9}$THYdCIY^sS$0IUatU=3H>0aTiuWtMkHhI^f;B5&urD`{ z+spa2`~rR;}qBjOq|>k>+PW=gn$uYfc2eS^ zkpG#QRG6Ns`Orby&G})SUihBqqKvtuT2Ms`Gm+T%sC5&~yxc6G-W0=TZ#gZ_^TYkF zr**1#yc5!VMgPY)0edEo4c+I4+DB23`@P%8^O2e%$ahl(*z2>->(fprqK?@!0f<{d z7m5i9kEr0s$V5|H3>4E&pBFnf^DEHpAN zGn9-JebeKfFzJhX)`JPe5V|I+pDIObVrf7l+EobE^vp`Qdtc<@Q|M2A1lhQlkJDAw zzs|-Ge_opU@gB(8|1L=mHQN&QRlBVD2D5gnz3NDzHbr4(5cuAusgQRJ@xAeNUw4&Y zvBMQorGcFcc)ch~8UJiecB#xZit4^cH!p-DNbOgsgBGHr^f`upNo313>6Z)A zUEtN5Z+*QBrbpE_mu}^6pMyZKbV!<4?&B zH2fc5uV!YChla*>q9i!g_K=716|!h5E1eu!=CDm;+!juRw|$$b-hI?w^V@dK<&W$Y z_Pq~jiI3?C01!byIE+yHghNj~r6H$ZkeBUy7m=ie$s9|5Nb*0#A_xPzX!}==UQ^j9&lC>Z^7L zJ_?G0iV7r5P;hWC;9LMRh_`?2|D;Wr9E3w;a-PV@$p3->klcWO39tb`>J%kR5dkNn zt$BF3FaA#znLL2AC__3#hUUQNy^_Gg>una&9La~X00|xFX<2o5Ujm{fHt6&BxgZ=! zM00!e6FzBEK;!6~5>hQ8$67)!*TI?6C+~2NAjx_R!1n|sP@^CBGdqLv)V~TP3OdLM zR?Q6!+)bV|Ctn+_AGt5ghu+T?mOmH(C}}>RRsbSQ;odNZ`dL2yfVr6pn46D(9)Y(G zSS`R?|0<#?;m`xT?Wv@&F!)0+{|N8`0O*i`00$}+MaTEef8+PU@3FQ51uN{ zp6=Pf`jIJMn~mUHALHDZ;F6JVbi77naC>526i;<5SWIk3g3C9Hm77idPk;_lToRr` ziq~1ENtU`GwKRIDT=p5I1~cu_#}9N#PP&D;QH^LgRBgS|Y#lClkT5<&ZIu*?IYVZ) zhRf(mOk@|!f}Bs)-9x_|_NG+}y}Urmc=4*J@RXSWasN)e2*<~N^{Cg7~$91#}dXNOOFui1|;FBZ`aSje@aak*~HvH;^i14-%h(j`91?Ah!m*r&;?5sryHnI`zl0`~X z?zM6T@fLdgk;8Ori`xNgcJcd7~4aHN_;UBYKJFy`mjuAvB&a1x= zIV_+V#kkH}g*msWU^*3(J&Vfs#eb)*Ua8-7!$H1FM9wb7?^F_3_}lVL5Z)oz>AG)b zR2HlMK=z!IGBJ4BY$dLrJG`<{_N+!tK~fq9!HNbZD>J?2@I5B|{KMVV7UNI-x{B=G z;JQHx@-+#RoUi^9?5hp9?eN!YEXvFg(x`4~MrQErcVG_-GBR>gm6?cd9)z}{A}Voj zZ%>bi^wwu!V31?+yRrvDOF4d$z$Ebw{rMkTAq59;Q;|L=7U@4v)QJldlrE$Kj=To7 z-=G8q3n&`oJUs@aki$KMxQFiko!K~Xzzm{z!wQc4v)!*;3ZO0~A|I5IQQL|Fx->0- z1p=OS!G!el5gUpF`gLUYbWS5e4<{_qwjfT@>P4<7NzRd|w#xf`Mej8o)z^oGgZJDc z;BtGx*g*Ko0*_WWG%w2%5Jg0>YxCUyu4(m+bNh<2jC2njPRv&ZhoNkzdE1f6KQKsBe$Z66$QP+rQ?uw#YWWKELw-z<0;=Y=`r4cKNw4I#Y3?NAY5^71be*~1Iz9sA^c(#e5?^&BMnn{Plz!{!Nr^Bo z^gXF)uQ3mYZ@7~9`WEd>mJUg&c_gC@XTl*19y@*RpWu|<Xgc=*XU>r zt*pz0%B}@4BeF%}i{V)PLG_jFfL0$FO|*tTV*^~-L1LXnjgV&{-X0jL*JAi`20`ZA zQ}c3U1k{He@LkgW!UOA$R!$F!56?>*TEqQr=R+P@)7_-5YSNQgb~=@pF_KXgNIit= zI#~gNXC?Z>>vFkEQ3DIl$BXsDm=1UiH2LC1sYjr)Qv6s^&^9>r-MpQQ(R{KvoIDb- zNCXii9MHJpW`eE`x;IKjd9W>1cg(e#HXC{tXdpucO>zm1C_i10#T`?n?K8w1QWF@H znN^Qek&hf!gh)Grm~NU&;hmZI4E3FQ>d1!_z0jfVRl4%{^#PsW#N;dRCk zab+EiB~mzp?#tj>n1CQ^LYs4F(&EhQrN` zNHClwh#)}2?JaMgkr}{}otpRcccPiISB4XA)0K7$n;lGmaEAx3_Hf^jcWO#o2LColUsG%f~SE|V?_};(uK2G zJIw;`d!plF$W>VA@v62$2CwSoVp?o^W=g91(uU*q#8JU6t~_f)cbKkPiJI@CKgoE$ zPnF_(Bjw3kXv(wq`;MgeQo_H~0m3mNe(6U+U zA&!~~gLgRPgaxBPrBQ0a_QhOUo;|7uxkH!vI!fuutZ4ru|9 zi%h_($leD204a*+RbcB9IHYHfKiL05St59#EfO-wO`0u4n29lAAXF8zlwt zBBwH*ExUe`<%qsy_?ni!-}jY2JX)p=8L&V89c^t_OwxV{lS-E!1US<2K_5QCLcw-g zVNzAAm+*&2FUaIB()TW!@IhBkT6r3vG>P6*6np0A$~17yL0uN#EM1NN+A2mw9O>n|PO8ix0u znSzXH0k}hth9)K^ei1BN;&0>-o)S~D*!v~u1|9qct7%)?7rz?0mzubT z_)2M(>Bd)|TE8sd%x9emyd6&EZzN@vb*zL}j6G+BPX%l{2d6G5qZ50&)^*_Ha#8B5 zW6`3>yYbfNPZ1aIpAUepZ~2dy;`4{QOg3SrK*ZeLz!udhNohpRj(>_ zJ&)b5S{%Dq!Br&{`s5*fQu4ch+SfbEfNXM#ky%dUZi+t1Ln5cTZJ%>dP0}9Z?)l5% z37+(L!p87otv74AhZq9-5{v}Ix%b;!OL-7woY7>6+Jc%1%l`XvqUYi9OvO;#wcmER zXmL?M+m+}#`)B`RvjBy^fqvdgKQ3wg@UFY8`3kHNKBpkvC8KgZ69G+<*zAbshJ~HntsRU~) zdtJR;MW@{F(w0gL?XcvTFVVsiD)|&>$vY>%cdb%)O|mTPEb5Xnhy6nKRq8M+&3n#qTS80YmFQK)P=>QT}p;se#7gH=SY zN^)A}F%xW7@I7g12_5X;`I9`>`L%uHGrGa4;QE_Vk5ZfV)#WMGSR?(wsPX&#vG@1? zni=i==`W!l^c~nFwe9x!Rcc(&sI6S%eGpsosdNL&$Mb0lK?_ACEXg=_h%8j@i|T0s zLdQJYTEe6WudChamu_!*f;SXbPd;!CYm={_Yqq)S9n5$r_k9eHR5{)r~>; zzV58Q(;ffJD@}rx+t^wYr=qFq8!XMPuCA@?spurCC2X$E&3PZGsK{j0ft5Fs8Dzy6 zxwS1t&5mTBsOoc=cOTLG+|=S*GZ6Hw^4Zlr8+lr(y=mORIiarRkkf-K`EV#|;C~T` zD|ZbiZ|ad@-xTWv$<(juGZWJn2W*V@*JP%@dx7bPoI$*}j=(!e!aOSWCXp4$2NZQ4 zs76jP{xw>r1wbY9&sQwcf~RH5+3WVgQt0jLzU$dNYYk*WEKoWPI$=)(c*I};76{NV z*aCrUa#8i#+FB1dOEI*hD6~iL^())|kO2S>C>UcyeT1Kl|G5_cu6$OiHG;l1(}aS( zr8fZ>4LJ`m%tY?@{6YRv-@}8V{tfyG`hPJn7=Sc+&`k~x1IN$QMeJ#E{-P5Cn9|HD z$mP6$_4DeE6G&wFcwZ%R2bJ1`7`I_1_p3JzgnYs^H@?zU6*okULUllGaLIH!f&zeeX3z401w&s|)p9wbre zES|D!i5Tc+c*y41MqWzg0O~P050K3Us0xrJm2?2J1wtjjKR1pbQOKQ^s6x*F@6K8y z(m#>~v9YmvJ)A?Ig9Ah^D(d_9@BT)pxUYUk*82MTGBV-C)E;Lj+TiP=`aupM3`Zps zY=kLc`pxR3CYDl{)%L2o3Kzjf?|X$cI8R;S~dg&69?{e%Vm(y*J?J0tzd z7M9V+%G>-N)kDT(_yBxP)@?yPD7`Glq6U3>I1qb22z=QO@H7v6S^PWqs=rR2?TAwi z(GED=ekicnFlkE)qPYTnADRkD-VV|tt4g5K(yjBOt*q27;-7HAN<8cAM(gZUP5UsH?F(VzOn{+SIZ`E@iQyK z;*D024bFNE`HT%~jT{vT^F;G%ok*B{HoK6M1rsJbyREpBm_g!<^L2ug;*~YT&-k&6 zA*DQXayStoaMkYo{hIvoXrJ`VZC&ieD{*1t4P^x(@r=+h*@f9V3AOVJ1a2(&Q#^`^aXPEm2Ok)8R;Cv0qI9?Ig1hP)$pOK&|R z7gKSKrK_r`-)O?LQ-Yqxr>R+<#m<2jOGNKa?)QqwTEYwFLbfCCm5f0DeA}%!Tt9ol z%Oh_~OJ}40{xx~M@M226OW3(VSeU2h3*VY9?~<6{v>fB6SpK{^wWO4K*mqRV2d>+y z%C+0g8&*3Ulf3xd?`{noA9uZ~nyFk-s_(_P=>{R!+#?^J*`)tQ86S)S^Jf43`hh{j z`tD5XSI>}3h6m$_ysrKI1tbfg-GKqRM6jTN#4q!Mq5c;W5%B`r+CpPRxmC(q-$efx z`!xLcyyb)dI6F`r4tl2FzeDPVL&L%*CnoyOX|O;7s*8y@cxGZ&FmS02NRip}NWclM z2{hTR!npXQ(_n#CR#ti{V1fVOJ|rYWMncs6@2ZzncSQ4%9UIJ#PN zt!+OJ22USpT*mDKfvQOP1LA=_n)Rx5;jlXNZJIX~mbyyGXZ3mJtS*k1S1cck*X%{m zch$#Upi+{>(AXRw9`XM*-f1$dJtmU!)OL?gA9k17K8e+VM+WA_p2pg64gaiojcgT%WI&(+9KuUTKEn+P)|u>%iiv z+Ok4AbMm9kz1a>#Sh#vCN+(K5d_R&F=PH=>pyo&*L8a#S=*$Wiig zN+`*gVLUrN-}@l!7vVzc2?;X#K+21fV?}m#wS>h~eaD~TUKrw^?cr4#?v?GI(i$9+ znCq1rRhRtpb!}7N zzCe5mt9ncdR%ZhyI}PcC94zPoo$T4H-wPfclg#T%S&)5ZU3ErKRasCqR6+jtQC8$J z)n?>LrrZh1G>>4?8aMVPf0l>Y_Gy2rR=8fF`UC;}ky>bbYz(o-eO)(2<%(1zyGkd! z_Rg0AGudCRiPh>!`EA`@0l|40xfKDi8Igr$74=maooT=PDT?DmO!De|q{21aBn{oH z9L!&P?{TviX|l(89ZkWjB*3e%M6>pKv-XViq5YZQ&yy5ZoMe8!6nOmEeKaj>X$a!Q zWU;BkRfiVh@?cVzb~Pi#j6fp^ZK24H%%}-yCa6(>`NA zMP{00s9-Q^E@BO{-|UEr{*{1@fxf@r>yQHl%II5L%b0li(yBR!qIrum&@j+Sg3Q8r z$88z@a5x=vDsZYpWccm4RDHiN>5PJ;f*RMBF71p$!&9X5(Jw8Ti@E=P^2aLI*?McH z=>rP3Cm){UOxL*`nPVWC#rF2~?0~=oRX^4ZbtQ+q_wDJ{Z43?*zcxYIQ8_L_iH;^7 ze><;-XX_)$ElLc0jKZ&I`Ecn;8TqeK&COgGMyrM7eQ7(^u4He9&T$5&E!IiJmPO@0 z^1siHeq;~djaKv5`7*!@5t}7i6k;0DWuI7rl6D>I>Gs9660&0xNYvRv8FJKaCKhCE z8c;3AM{4HkLAGYA04-A!iMXjtJ+#t47Hog_t_-zF66O#7{xb`1&;IwvnUJ{1>IEgU z01vw;1v+eUk?Jt>xwrS@1#{l}#&L(*r+SYQ>_b%dQlO<88{>*D_8+Rvs?0X2bA|Sy zViD82yWbK2FP{eCjoJsyQ2T|3FdQr~!E`y})<&?k~XCE|K9afW8={VBiR7WIiY%V*SAKzc!tCA~^6R4t!)&k%PTG0MAsw z-dPN_dQz69)D=Ms|*%fmHDQO9;ahJ&( z4ZFVvC=*DEN*}+G@ql;>ezy0su|L4n6vn3CetA!kRdZ;n);hcs{#{tLH!SRpVdY}? zw)Z)vaICz?%ZcK-F|^xHe-HVYC>Jd^G&s;p&I1fph9iK$?U)b+{7e)S6uyce!oii4 zm%={54iSZ)SXktrWp~4Osr>^im=KXI{0NzUq2S;D+%;}huFF7!u&ok%G91pi!=<}$ zJjGZ~0?zyfijMS_MJK-AHG0WaCgou!gXBPqvc zj-cbNC-XxKO-o9-@*x_gVP7(Y%qTC5YON@24QR~jXsjq{O(-dCmYRPH?cPe3Hc9&B z{5ZJq6Qg_oTp9znLhwtTwALNJb1PC*l4stPe}{<|;p@E#K1>o{w<~SvC5k z?QK}`GRfpp#qqcp30k6Kp_59mD!XXGJ5%zq^P=lW_@6>zA2^9$Bv5WJ%eLxdxRY}q zo1N#T^RljA!Sa8Cc$p=8nayvTBPZB?Q|+kGbHU<(THa$_Gse|&6q1M6x8?P5srVHZ zU6acZ!xkbQ5F`HWx2kS{qNJpfzMsyR$n^c-+d+emhdf98bcV_iQYQ{Dov#z7>tz+9 z_yMD~&(-Y{xP~G+vA!rrF&M1&uXx$t5r~b+qH)QcENgpWrrOqh?>|x3`(4Kt{zi8` zg|4W0kN>=7KiiFCq}-nP^492%TH**Cm@wfVHRT;|EpuY~+3hi$Bp>-hxaPEIwb`1V ze=h5H510V4;@vC-3ydcQ28ck6($tmatY&WN?+H=-4zwM{*Ddep)wM z)C0^O^Y+g-3Xa6;M4Z7piH$wQ;x|k}5S2edYB_3a-Z#(Lp*W&b6HX+xQ_{7w#xq(v zUQ97o({H;we?5Ao-{;i)_4fiY{1;s% z6fuS>U901i_BSwLmRtVbf2Evc$Qv9c#-({BHf|@brfKNqf&9UUPQjq!Y2hVn-$tar z#mtNfjTL1FR2alt6ps7J%c=GalJE2|;ah%uB40%a@bCZwk3jujh8QQ~rYD|z7yaj> z4pDEn8o2Fu%TBioeU_gHOgRz~5cU}RhROHBwk?|Z~mMF+f*wA)n9!zG?OzNik zTrNWD$olFoT0#}+Nwx*4@x?`%wFSKDvvPW4V%qb%T2uQDGQFUI`H65ps>vxPCSd1) z?<WL3Kqc`6V zx24UG7^CqAhTGc=Tsvh(N*50;7t9!j=A5Em1+3K77~Q|y{8G58TS&9>;sfL>Tx=pf zYKudk&GV+w@}@Di6{k(IvS@_(Rerb@yskOSr1rjcp+3C@N_h(H-Xndx?H2NRmp>U? zV#Lws%<^7#KW}z!-iYo_*LJKXND!DCvq96M$X7o#z*FCTj%35L=t=TbtFTaa6a=sxmnM_y1@BUTx~b&Z@eHY7Sp+_ zOZC$_7(XQ!;}~Kjsf$!YBnni26O7*^>gXL9N3C35=3!-m1#@JQf+v=O*N25ChK0BD zVrBATRRH5xRV4`-n_}8M%K9T(Y1A8HdkPX`yH9QY z(G$*LcAUf^wxkLgbpcgoPePS39xGY;=ytxRejcfvc3G*~S*?<#nRXRb8A$x(H&cu@ z?M*6Bx2ORV{FHtlc`~yeN2&FJ>|2)MlEir7oOdS$B zF#jZbovfX1M)JnN&Y|GVw)xrceF&J;X>t^qCp*L-az1_nt%jUzD6ek$6Z(I;nFx*y zK`$u{4IF~SR?pnv_rqncm8>U%Z5=ESFm?VDsmM9~P*ER)04@vwH?T|u9Nt3TF01L; ztZde-&VU%&l;hOrt7QL$*22&DZsa>mk_VMKP8=={jCr@;T*4)GB>5M=EljdaB4ycJ z!dYG5xm;ZqnjU8Arw2W-|E|qVW|B3Wd8^s>)uQa3!&aG4zOCrLHQoH_52#SL{}7=> zHMrA`=d`(yKj~vo>oA3M1 zZ69m5+q2<*`T&wKGAc1s{|fzb(?$uqWG>!c$mrng8su;=Xmh;x)DnSMi-Tj#G!^IOg_*)=xX|;SRCCLG9pomQ@Z_vXNGgtwFhvH2bWjH#i}pEbuXdL3aAHJ#8XEk zW5+~eheTtiL}Mo&I*T`DMIUNAts0X!`Xs_1Wmm7|bKI~YumIQRvtYOhx85k(J3L*3 zdmr5+pjC*5op{ez`#UTA zmXzMcI$=1!F2Q{72-WG6T|w~r2tvCv#kRVciGglUX-i=8Y@Uw*hA+QxtMHDJk)Lc0 z{Gzrr-Xtl*=Mo0mLZ;jz8rza0%6xMg+dQTM`lLZPrLRC=(;-t3yDv z$29SmYT_?hkQ0_zJG^rnT&`XaPX^R7A@nlvw|{2@&9IM0WGWQ3I$`FXwK|qn`dME5 zg^})_x!$o++=baZ=H7kF-;v$mkg%IXd!1Qgtk5@I;-?}?mx5};Q@N}5td8=*ze}jC z3w-#1>|N;k2e+bvBRtmhfy?#TRu{_E=Ty_-m&%k{; z@V~+Y!05pd@ULF2SCW@U#`1G~bX3_?#M#+dR#tjgasc!nkiqMUKnAkG1cDEpD{A}$ z&m8oh)awfNsLcOXoe+1XRd&_FEgu*o2%;XqhQ6z^VGk9-S8p|Fu*bd;QPCT2iBMQL*Q!%U4Fs?0qxEyzYP{0$O^X*l&!=W4n}JIpNEr` z5i0djvo*-y>TBaUSTSaYN7I52R|W}oROAWSCv;~Sb?0o>=4{sj8;OvhkSUbQR0zu! zXNRz0`+coSetNZe?+&GE*xn_7+M##U&mCKAGN#goc%EHr!w~R-F^n8+x}~My5^>;^C$dBL=?H z96c&}2)wXRwtN>GiLWW^`L@`XhhOqe+%XL2UY@=3tIC^iAE%uzx|pjwA0NXPFRh-o z&;|TSdTs3l1qJ*Gb_F)dRh7Dsr$b_xry{hy=Y2yWXqHX!o2MxJ6H^R_$afnrSvNj{ z`%_a{-d-r|6R9_AIMwXZJ`+%>AKYfoAKa2ZX20RNs4)_Cq_%}5()FrH4t`NyN2opt znR6YoT-oMefL~d3x83^1*bCCq8W!!RvoL$#C`|U!Sd3L)j8k7gt|&b*(2;^_XtOhP zvHd7Zdv9FOBbf4D`>}tPRB!*F*8Gj*r-1s$m4p2FV0tA{C8T)L0qGb6A#4BJ6vRsh zUjy^N0dmxd87#wf)k=r-vQp2ps@ zACFEaI6W{ms+0h6v%7GxI@UTkIV0aA)MOtS@`&SH1P$|+mh#fm^3#>K(9*Y;ZhPD6 zs-Pril1NUITb9Hqna3ifo%o&SJEnXElPARG@p-Ii%*`sw%WI0Oi!KZAYD$3dh&qbf77jC?E&j{?Nv^;8^-NT}HZldr?pyIQOtluCsS0nu1)FVYdhn&1! zaGXnC%I6(E5_Dx8Peu1DqGVKtMkZW3LV8vKK1&v@HExHu_u!?^zc1Yz6;pb>(T*?lVemCb1elOP5aoCB)c%%qGGFpAZGRhgtg)i%knC zD>#lYTNV(1GnMnzQi2Lq0{fSUAOtNgF8+qpHZUMbq45XfGg23T$?=UA3lyWEr0k7V z1f+JSf2{N03GV>N_h#W9lqGQQOWe+gfm4{bsT?H-?0E+{*lekr(jOP;_p$^in0!H4 zyrGP4F}nNci3hmEMyChnTLk6=4L$r;E{3NUx%Ev06qupZ1Da5{q-Xhv3=K4JWOnE@kRB9|3+%?vT#aLN7A zDJc3uiAFDh-`=vkn%%cuW>WBdh~Aois>eWKSyz5eMQ>bJc3N^82IQ|4QjmXw#yun zp@oWgtF&9sSB?}OY1o4`=?ihKDXD=Il$2VGE*XubrQO9|E!{CO>Gi?2xs9nu8+!a6 z^O&tLWD$LYc3dQafl|K(@DaWcLp18LKJx1^Z(NLxe&tk>WmVcSwt(am347KZJSiJG zDWf-k2!Qwp#oSN&FXqRMAMF7HkgGI9~tlo`!XI5hD1Y5;T_&NIpr#xP+WAyXY z*|hjA-XAU&=}OJ_Avbim9RHVH8Zf@N<~SC@f8{lNTwFu2=L344&u}Rf0eGOEQOKfd zz+HgK`M2vD76c*-5(DSRkB3bN6=l!nL^Q2)@EeZ_I`^LQas0k){8CdGZ8Waer_nA^ zm5Tnh8kxe2VuViBMJg#odoL>SUQ0l3UX2t9&wjI@=HxJcqf3xtjCYc+rEEig-;`L{xt#0k?k+D8!ons&v$a`VMAW4D z`2}XB0nPDhY{?q6aq1k&s!a*XY^qA^8ofFrG>7FS>3FHU={oHMsqLdX6MGAlcbR!} z-1AFI;|#AKOYOn;ZkVI(d~nfV;&3R)KGdT=@1N*?rv-0#R|Pj5Us-Aj7i zbwb0aVjM>rvFQz1sEN9HZC zO>RB_10B=~^}PDhz6zzKEs2L0taa2{7{7%)k9`tCgIQa=S|ZM;_gt` z3&k`wpsi~!cH32OxPHXiT{yrnHCM{<$m=g_}aPLTN-l!~5PcvQC$k#3^ zG%idz%*)oOE4ok>v|3ZP5lp5MHCgLes(#;TPfB7o-~$%P3pY0l+uK#O{(SQM{wXx7 zPQ)3U19H)@rty*(o^s|VF>-&49<%W2aEpQTLlGOq*fH{Z28q+ ztse4FLznKBh;jwX^S#|UK<`Pjs}jd&R6v#4tIcagJA1RW)=fwHOG$Tb2%ElS&}U=_ z3kiPbx7KAX0kFw~aR@VW9#d?QS)?D0!e@RknE5;{yp}b0gP-H4_z!^JRV1e#K_v^A zTN*I@mgTMQmr>7@4uqgc?G)Pbii_tR)`mP@_ zFvy(wg@E18m#Y4UG{Jy%4;FP)ZLzdZG$c9n*)I!DCkUGA!s& z0*)2zt$+SH%xM?JnLkqKqGfDjb)fAbd~xnB8&T(wG;XyEWWR1sRK9!qhrJ~jHRl7( zn`wDuxi!(_8S~DP{YVz|I{UG?JpGGRQS4MLbjS2wU;-V=6K&M(W;?|@9{wRQjkY$2 z3e4?S6d+I84+5c~ zmG@!#hv?|mMHJ#`^RuwNj_h;m!P0lX{(P#FJm9 zRGI59b?-OIlByy>+kc+7pBQ3gLXq-RcTE>U;|_+I(A^W0Q-+JudRk z0%W6oW2$o6UTqask#S++ZO969qM{2baxxk!y&}LGOF#BxHMSJ0A~L3^CDs~N4wu<^ z0C-rF`nCSJf3aWFTUeAYVow=~zCwr}&6`chZlght;Tt>INL*^nDDicBUJ12E6>@7v zH%dq)V+aV0;Uq;8j4TMH1Mx{u%Dbr#6q@rq74!306m?#Jf%$<+e-Zsw_$RG!Ikk{C zO-fq_Mtgax!8!Bj6z33q{{rLGnqsnuA97}g%6-p?% zII3h&vV_z{)UP#xIs4c^@!Zhyuz=ekZykMM9}z-aFojQb_8rbr6mcX1p8AhErC}~C z3d4HJ0*yzrOTC`{MMqlptB4q|aUN+v9UHUZj&xli{ITZR4CVj!hY&l}dRmI@&vMo^cnh};aVQKV91AR3dkeDym*`-xK-&j? z%fk==`H4#Ig8-j4KwMqj6%*{=_G+ZH|7cMWRZ+wNli2^5kv|xqo1o#g_)|;s_$f$B zgM)Lhe1ZkP&69{g1M?)r?!C(Ya!R@&Pk<5+LX+ehhFAKByW}K3+)u2L-y|1!4dK%A zThjiq99_jL=V?E2pPo-YD*c;yj^W}le&2;^FO}!@tIve>P!2y)y0FH=1UpJ5_X;<= z<_}uSTk0z3?`QaG>5GC6UqvC6C46DG_Pp@Kj_{`+cxR<~V{Olii>}0e6*huuS7x&^ zFxyUTd9y2IacRaXD{*x&Y%)}1_>1B0h!QT&yrzL+@rBe1v5O#9?nZ|NP<^Z_tLt4j zkLNa0>=&{7FPfw(hl<*s3S8bi+DlFaMTPr|#aUbfWI+zyH!Q}I(mjOo7i7LI5AGkY z&=IfXb!#2*wwV|e72B2ad5lqSauePY8J(5lokY%Sdi%WXyUWXFt6HY5nuVSzlI^K2 zg_91Ix+&Vt#^+(Yj@&Xho2%{5y}8KE_Z8LJX`Q5OhmU=&j7wIf6l8VOeKPhRJx4d3 zT}HIp`@~~K(J20`ca6;;LTsuH+LK*)l%iOHG=kpVBE%L8f8X=beyMu#etFKu+iz-| zSeSm5txZi?X=MQ|Ee$1yyH`5}#R@e;(ji)w6>>-db#xbpW2d%S;N$(a*w6Tw?p9L| zGx}K8zE)n!=Bu!|hD3UQY`8E7dX1blzdSnx#@>2hUX}70c-sqSYj-pC<7NZPWQ^p% z66}H$ftdiWl$xLvT!yocl3*(?%He1~O`_|5FG5wF`jMDEL$8zVO-1?Gzv6e?Zcnf% zlaU!dD|Qg{232|gX>;+UKt12ha_igM8A;ckMvOwSueBkNCKRKCu4? z#|=J_$jj4{r~#=I0`NhfG5`$pe&~d_07&38THm02`u+(>N8+{sG{)?oXtL`k329*n zh4TrkAM7?pd7Rqm$#x$F*L%YyvGaxQrO#W^njrNt+XU3PW@vF-?iLxL!SgZ((|m@@ z5DaO7>CLo0u&h4Dv^s3jBJ*^)8SWKQo+;NRgxLjNJUuTn@&4+~iQspCcNd(54g=0% zj4p;I0(nD)CNexYF$8uyjSiI~3d_M#CVhqQ-z&HrSs58Lbi%Dx*n1DKwt(^2(8aYt zP`wgH)GS&RrRs_&L5$wmkEol)%Z%K==%yU?JzPIpRUh$}E;;S|#Fo6iV0uYa--a{X zA~9#+bOX3SJc83gunsD%J>H)Q zz)3Vy7^pHOit8*eVWK39deLuw1#A%IvgJq2&d3OPH=4Tc^J!^`(`v1c=Fxqkk}lsy zij*h%aa-ZwF79aQ0?&J98HYbd!6{L|LAiU2>4-fBMUN#<0PTY4kGdLIP-MYC7!0JK;ALPC9}Bc{EY}XRev(&sY~$4UM1ALE*gZ`@`>9yRBqvW|qHaR(KA^ zLuEz=giJ`f)J0$>jT}?nI84%Wr>kXBOiy#Hj*3Jwe=9P_*qu# zS;opViJNUxkcD)bj={#*h~RB|^J?q53q?4AxSseo`{aA$hFAZf5{*|>!?fDD2ne9iJm=wS?J^{DL@T(xygCmhs zBs7~}6pZoeY&%GL!y)@TpF@krFN6@(GZOl1OG!xyj0jYNWT7zu4ouZF-0ZMWpd3hi zj+Kar2yrm{A0jb;$1K=s1cv|b0~Zl^8vBVrBK}|v!NJfdp^!u%V9tffVSSSj1;c+u z09J5-C8q`j1u21bdcWLnZyWz-(0m7b4z(q5xF9Nn8)khp~;?Pt*!)7<6fepSf*h4 zGCV9bN4_$`y~*WX`u}M9%BZ-yrrE*Wogl&8U4na%1PBhnHMqOGh2TB}4Q|0*g2Uh% z++BmicX-}=*J2I-&M?gG-Q88y)y@kF^VK(YSV!hk<>!d6V?xF%)?UwHvr0k=<94f0 z;D(3(v7$?!Ox3?XpOj$qTr6}p+ZAVp|GETg6tVa_cHU!5T2!ACatHT-rz7eqGGgqw zI(Hp_;#yQgMQUcI!$8Ur!$sjw!^Xf zM`UVvVR@lXd461dWL9coVpLdu-m9Z#gj2I>MeO#I|GRL0i_BiQx+><8_V3AFydoE) z#|2RfcToZY7~{DnPm!w$45>#M!c>5*{lw7&gaI*wft?v;YXp((gQ9&nQ}qxke=l|7 z5W#rXg`)%aBxFYIOaIVd>Btb##zhMw<0ba=4o!ctN;c=eSHJY@Bdx4HTwtnDy2c<} zbB9z{x4QMcwPf3J%c62|`g`41+t5szQBy8&tFJI)5gjN5h3#h>%^%_1WEP7; zP;n$u7|0faH1@eod@^dhS~w_XVJC1X77+<7!1zYWcOPc=AVCp7aC2d0|H2AotH1l( zpEE}@*^zvIfo6l8L-JSo@FnQm?L2aDx5sOxnV+3ZK%?$SdUTK$Q3FQL4p{_ed>8nh zN88th)g=r_0QsiyI2Xb4#B21*KX%8&c*uDsBda_8v$(CW*-2g9-4SR}A#X@Nu-K;S z8x(c0AulvLGITIG8_W_K&;!3j0d+6p8*k8+PY4SRJYXUglO$jV!p*4Xy7Rp;M$OI_ z6k@TF!NI1MmhmhBE^2DntPTluOT#;OT3H~9;|Gq8j$qvN*37J&Etks_~4& z`iO{tje}LsRQ;>Dp6yQ&4@JKavtTlryxOSx12prE! z(D07+Fgj9FedFWkgtfszK|Q^_8|an}cnAQDnC1%zcoD%j*VomEak)hhFs5NiFg`^H z<(r!V1o#}dZyObjDQ}z6HUel%wp7Rjl+P$RTjYHxYWXpL2Ixxh$PnE3#?pn?`srE| z)b{b3Cg^L$naP#seXWjjPYOIEDFd%%^=Pz)v0X)Iof7D$eAs&lJgFMj$kOX{bKbD0 z!yxrj_5O7Mc|jxctjq54y?$=Lc}i@Xs#Kq4@7S1l4aHwKQ5OteRe{60l3OJ1El)pl z*`1gAVX2C6zuB)_Nj8bSc{ikn_hKJ2co+EtSz!sNf*-;fWN72~m6)WnLZR7C)0ud< zXxa*YwuA~-OIAbwGfR#wieM;0J{6`WFNd zbTdZl*`2u>eop}|Avd#J6SJA0zwNiptnxY*WvjHc_NLUYFD2ijjqLF(yzH#u z{}phH5QfBmyKPKn)BkIRM>lV~B7O*hk@@7K4dQm*VD<$X7;!SR)2oJ2D5wZ|fEWC1 zaB5^?qX=1tvJ}Y5YKsgDtBk76YAVSJNsCF_zpF9%6Hi1X;@K7#q?MMvnvoPh3O7k( zGy2zKJquI~GEZ~tu zO`?c_VkG9fk%Al_t!bL2L*ojm1Tno@tf`4l78L7(7!TW^xu*DFVDm<2s1R$8Rql!L z=O2U~c1kbpl1FRvsfmKCRPUZ`LzVMC___EGtvsdP<{%NLPnHwW`th7Ph3;px2Vt$g z4=~u|Xd1OR-%am+Ozr%f<(+DulKjB0Ma2mg2gSy%2Y|Q%IQzd;@z$RbB&Q~$=zRoo z-x~nlBZt1<)+P*`b5)624_l7^1?bwGCKR_|Q19R%qKgXv%U&A}T8 z9CIK;mBXmSOHlFSGiwF7iJ1^VL{<9?rmk*hOd7RXjR3~ZfGoJubI{T@|B3Gk%;B0K zcg9dqrl?wo`JnirKTo(QL6GC|>UMS?L`>QZ1#Jm{Uo)S-d;s;qXOavuYQ?x)4Y zo&L=6RJ%&O-%h?h=2^}&8J_)rvp>jn^s~7LwpXR<%3R2DS)t0TVfv9`BPQKDqz_~? zBdUPW%b}lk#B}}p^PC?Zls7l6w`k>_*9ft&IN*Z9e$|$CG*tc${umIK5KTEQfn`xy zVqOHcX3V#wud*%$o6}bH{AF|?g@h$a;nFFl%uW5y>U1#EoR4TXVJCcke%8;)>i3Ga5#J_Cu=*jicjZa8TWcU<;u~ zgk_IM-DU&)&RorYn z+&olnj|f)!aYFIHYSf0z`-j9s&uA{4`T19iy##vaQ6anRF03Rn7#I5#A|w8(iz<87 zVHD>6U)Q?ZAG1bTP|rPV&CIgOvogwKIH0P^N~zf>Xu0&&?OOKxYD@;6FGuQ;woIjI ziA&|A`S*9>w8qiczvAxdId6i3DcUZ?@>G9`oyk19LEUwKBJ|mekr{m-1206=l>uiH zl>F;jSz(}#&)aFrd6auM4I5;ZzS&HjVG*$lZK)Q^t;QOl%r`5?@rRE1S2$5g*n%}) zzu?&*nqV#e?%mXOX`z5c>R9V<+rOEm&+RH_F+Uzrvv|PnQkxOYtEQay_glrj=p6#LxN8CM>TW=LHLFJ74t`0bXD|2Wb^FfE2wh z24ngEa+C}O=iBa*w?-d<8(?qwYNJ~qp;i$2{p}}jCEzdvP?gUYkbD>Ub z4A1Nhb6b0To^zI#rD=bPL>#P@l3^d9q+ch=wDi%El1ofLU*E%qJ7tR74eVdJYx--7 z3I<6^NlEQfh9Dx;mzI_W1_svFayk_E1Dzi(P$#3BcVR}rzhT;d#PDyu)wCQ4n8N?Q zs$_b7e!xY**K1Ud$;iT875wyT@85>=k?>ZkcKDO|yS5(mg)rvdC@e0hxks2p*2LCT zJ2*z9O^lp1r4BFo?VX*%O*gi)c^GH}WLct~4mS@16i6JWc^{1vKRWN)Wwah!yKc$d z;n7zabm(<_TRc0Oiw(QqS2P#JXh!x*PY810(kl_1i3?;ZKFlHsE;MtcQ`7*eOBtQ8 z_3dr)4?=Vlu7RQ1@z~>f;{A%^vx?%2QsP6OJ}=6_S%l5k_S!5nZL#3ZjG89JO7+eD ziOH=j`B~@Yipk>G>E78%urr1vxXX|;(q$Ec{Q7&3{zS>YU}9rPknXB( zjNNdt?ARm0-o&k=4*q%z$DC{LG0{j5Wo=tee)f|u%kxTwg_k#MxL}yH-~gRRk#sZN zXtg}|Onp6MUMB(9r;Wayn&nRHr5vRUxilJuJo^_oK~_(rrn9s2vM+L`pkTgAh8K$~ z9Ti)jogH?ngpin(zw9Kh#;TVC;_K^c=6&0$rSlH^d`W@P!&91v!3u_l$2Y6=XHrwr zAh$NhB*WG~?CVbI0nPw}a_&z`jyFnGS#7*mj7Dhcb@~zCH26MLCjW1XCldo}M_wh_ zJ(+sIQN}RgDQ*-eie;0K#PI|ee$`!XvF5{?4&Q(x%%=thkrCWnTZKXH4bFWyPY69vt_xH-0x_+1n|KZ zhqGl#AtAor|6(rZkrdZ8t5hKU%t=zg3?vdk{NH)BVPeD)nS()I&1;5VIL@QS%!65s z&J_SZon!?#JJPO5&}|^gyrXilyPKOqtJ~P}^5Zg~w*Xdxf@=VdV;Uo zL8wjkYaLTlQ#>|vh;R^5)}Z{%Tg=yV#cu=u#@H$|GI(1S+1nn#sMH?=ecErMzS*^i6&!JH<{|o^hSrz26ZGenQHh z5S5Ssq%EXxyE}p679DIMJJAC~Ucx633*edqZ7C|+S@aGem`xlU zz4OH5r%japDH)L-et5S?EHTMNK7-7kZzmT1u=ueAsZQP=u`TCu7MiV+kFemMqNN0A9xKFk>!?-m|h!B7^y-y0*kC4muiqzZ%{iv>_OenQE;ZudJXcG_X76tNbe4fxyO1n@?~^8s8O1Z1Rl9 z_*c>lE1ZHhK~C7SZECuE=o4vGMS*-MQzyYhuDhcHv#66x5;^qkW3b2zWyq(xaHSP> zzmf=cq&ZlrXW{d<$_u`)#U##XVqgrxWksrKb*f$fXo+csOR_3T{{sW5Lsci8HI4aF zcwCRyL*k;*H&LRKqobYVW-4y{HxQfAO3IxJa?$F3+9D{3hsR2~6W-O%ABn0ySNCZc z6=n>Y2af4>DqM}<5R@@y?tgz-*wWGhSm!r1{Ob-z&~3DXbF=%~@a!QJZx;n@ih98)#2Fx*mU!_Q~>mYbh!=jDj{Wkj}vj2&{k^tUACKfo- z0Q=eMe)dud^B@b_Cp*n$#m-E7wpeUW4*oEJ&>Dx~C(wPs-)$w@eXl-bRk7_;ve{O( zS)aAtCNSjb8+CPwyLZo^d}TF0J)JdR!5=^FK$f+$B0AFS9q0T=vNtC%9($E#vnQZL zz&~HQ=uVtol{4wpX@~<-OkFpE ze?ku4!I`}wtmj}v=>33zfbH#Vdq*(<+9@t6OVoQzbF4;^&&4=*DGBs_LBG1!wVo&7 zOc}he|H2nJBSX7dj5ARaiKlnXoF&4?IY>UFb$t~NMD7RMC14dH3>27@loY^l6{FWd z#0!&?laaA8-EVj*A{hAR;o#svpwO~dFvaq@z&P000S{ZAaKaZ^+cl{*kMB2MJ9TQw0;hAeP z2ord7<5#x&PPW-x-}HZEuV9;pno)-r9};_(S}lz*5lKxbKcDB}EvjpIKJLB)aYsj6 zHsjlO?06C~^}-3}Hw&?^pq7DrqvphY9B&>P%J04y*@Z%_!mV~6oQfljizBfH9^_D9 zjdS@PA5-d+VEe!rKSTTK=?6nY2f+vv^o3^`B&(^_ZjZJ+v1nu2Y(CxM?zVehpaO4r zaCp3=s(N_;1vF;JiLfus87(tf&4VY-&JvIrdSz+8=8(i5D`WGmiFp6SCS)G+T~j?V zLE}5_z|hcsDI>#2dAVrCWUOpjUeBI_8k0V{nBI?yT$+hB^QyJe>Zp#jrOgiTz}sxF z+TX>3G6vxw67+Rqb>b^ArNO0(HWM9Issv|{G&~tkn|$r_mSh=)38a#5_0Ss z@m#7H)0)5M)O&`M_^1X4nutaZf zr?Pzo_GoIVs@A%l=&-S|A&S9JkpnuZA~YZ~3IeJkM#>-@mUY@m}iU z1Z!Qcfw^c$kDp8EGdRq*Gt9R!%(pnDO!xQk5zq01wc8ktn;J~n2^HLZl}S$s5{?QW zYWfrqIUxsH0+b0rFjrRESsS;!_ZN9+h(Vg>Lxz0=Zpq@q0c=T<)(1<19>(kC>AvfV zdXveNIcUq`S8Jl)YlvS{= zu1G9ofGfG)kH$oobqI*?MC7KT=X&Kg4sXSvmBMH*aL3M7U(+H;Q8OeGo~LE*rJ$Xm zSsY^+Tc(;G5uo9r|NU*Uht%1LwVcJ8b?x8vddf7)E}o|h4dFvEF~ZpIxGWo-WD`=3 z3BH@rRYqd8^iSP}?DX4tPFoK*`_<148fZV@bk5=Zbp6 zljR|vkS1~T;Bf}QP>xUqALPXc;04(3joex&D5St4YYV+$)F*6jt9=*%8d4wpM_CbnUy+T-}Bq^TEc=t z+H(}_O0F(;4hVQh?VJ747S+kz;e|Na*+EZ-%?m=ftUAJwH4HLXDz@*rL=UGHF5P3} zU$11H)!IDiFyO&~{(IBKD!^^!kwR#;A@PlJDsXui4*VQhGYNklPJMZm5~>AC_A|e-EZk0Rve9vq%OMNl>gI+ z5eFhyKB5B|oJSKQ20|OP0{UP~vEXSgv-H~&0Why)r$>Q%GhJ~2wHtOr zuX|#@|o z^)Mu0%kY0!$^xKtqC?qu(=G(=v8*qC1UMxjZ~};UC!pwxS}b=1yIep$uyOjn^tbU= zp446l{j#!6w#G^MtGo>}rbwiH-Mon_K^@bX&J)~+(BffjZ;9-P!<`${R&bA>of zC|ApD=>~r?A$JkkCZ@#r+hpC!cDi(-o_in-H++G*xCC*zOY8P~mUiUF%d1_2?ScYY znnK#$i3xqZv_@-R17p>`+O{N|3Kcvj@ralz~1!G*8al4aA1{4Q>=uYEo^jnS2Lyd$3|YIP9yb_ z`_ly<9c~|decLyDOS))jYV0Z=-qYHu(b5t1qx{aLW++kd zT*0PJl7Md9g}ujy>0@h#^(c}fYxcX_%WkDWw^}W3#+$|IVxSU-eWN z6XN=*_u-mg(sik?EiP7uh9IBF@i#9s2odBxuo0sSc-h5!AMl3+K#lMzNZwMRLwaaP zNDM3(z(}vJ|M@~)>mG^$`#mDN11;*$9_XT;^$Ua=i3my;mH5)0{|>qX6ikQ}E+`gw zF4Wr?uA<|GhcF<7{{N3Oghil)(V-8J@d=HA+RrUpWxd>*ub*yA3$H}Zn+QKzkUdnyF7)s;ZEm#yUYi7p?^&O?5s* z@#lYem!L`jWZ9hIzk9z}DH?0aH}OI#LArtCbF(vo%Zq`&95a(pEk#9O%aRHhvI`ei zrsYoZMIrb^=>iJknC(e0Y{~U^vAD=Px!cTtr9XlhlsPWYKi9QWS%gcoq-8c9H^RyP znsocuKxRrEKhvR-`qg-7bNKf?o{bYRliTMAXnt(V zfBE4Uz0kp39fSvm)}*7t#*j_Y zd{7TxlDD?<({Pa z9cydLz7x_jO^p5Qu+oegvPSnJcz7t0j)@!*X`d(z@UNgCDl5znRN`EUPZ@f2JXPl8 z*}bMfvluH=R#5?$bG*E?6rc-xetESwp|7vsMT77yFxS(@<_OT?0aZ9c8wnv{lg~XT zEV$eIJ@H%V%?|73=^2P_sivj|I8I=S9qsQ2paURr#;m;TS~@WFgl|@C#=yV;$PSvO zz-IztpzPdS3>FFg7MKg!>{Jb=wH(3TJ=TXSn(QF}7pAd`pbr5eY~ggijn!^6W9 zh=MvC0G~rA3#^Wiap3q|bG^+C)XQ{H3zF8hRP&<7>fANx7a(q_TyfBt8RYk|iRT*QPcel0-@ktY0~HR%aBl*q96Y?od+B!%<4Z@S`^0!h$u1r$G(Zh1`seEs7;B8o6`XGf3wMczIMv zz-I1}=J`>qHUDF<9~wiXwv(CK+rNHDYF1i|wlA9K$a$SN((z{5M)+4U=}MHario6OH4Gp&T1hx)7X&W>?G$E7a(X}tPWvcWP* zG-FlT&%e{td-AfrNlVn997fVt+KeWsp|rUoEUl>|q@bYix0$N7@rM2V@;}_7g8t$H z8N7;XVfVSc;f?yb!o`94iC=7M3dct>fEgier`J99@yO2MA)ND`pqBR8ayx>s)9Y$G z@QqL#AQ&Xxq3=&JPp}Wi$V`;5T63zFa;i=l|J+n7R#46?qNb>1 zq@keWRq|^o=}VHQO#Jgvk+_PIcSy{j51wu#kBR(STqgO}W6^zrm{4F@jLhTR#ukgg z*GgV)z}?l<*1W;1KPq#+3P$#HrQ`4AF3Zx|Siw1nyTs^07&Z0&0)j}$BK7IJ%h!>; zkGcvd$EdYq+|4!^8CC_E)x=lCOmWU5BC&1pG3$vtvCk|Ej48^aAL@x1yex z)WEtK{wCL>IRWS0e@Dydp59}XnHdsAwPOl8g_B-z{o-v~O zJuYMX9*`fG^x+>^0GR7J-Ub)p4g4nT?v}@d7K4G|16<=}oFPyj*xXtF7wR2GWqE-V zBw{f0$q-aaK-?D(2IemJ5ApD@`td2A=t>%+pRUnPR#?nEVNj$d93D_h+ERSWQ}neb zteXZr9&@IqBjF@pVfw~afZli--dg+lOIBbM*8WwE_+g~D0#Ec)j7-lQFhe6D1fC>< zOtwKE2cug8a6_ZUI!zK3DGpXFP%q@K2fSa$4H6>)CMt5;yAb2vc&3|*1W-ME4hY&Z z&;u>+)ZF6^p5)6_9M#=T_-_1BDtR^c$7=3)cQ-{>XJvOsg}R0)=f;?!f3fjy=<}M6 zHIwHt^=Kd6;&V=L$@Z{`jByUF*X>J1dL`_4Gu9fgBZK_3x-VscdZ?!sRm5zUC2J5b zs9nN1KuEar%0Y>6>tz8QpKe$wZ$W zpgL5+`{(leeI_!KzbTf4T~|cF`{FB2=830adNQRG>c6dC-bI#kz3{vYa{=zRcuFUwsg|^N0d~(J!O9?!C z+a6%>hK#Wf-n$fCaewm()6NTzyISPN;O@0XpC$hTxmLd1v#@s`9f@w_h^m1^H$Y-* zAt;>Fe2|&X8mekZnn|h2iHQjb$v-qSlO`fB%e8Xb{l7fy!quhF-kZZMnTGOb3x#nm z^$s_(NemX8cL)a%wtzoT6UP>8>=ViSY!)Yp>5el3>8q*LSYLUTpY>=tH+W4jU?S5f&f`g0L<|=I)gYG z08iEi0loPt0E2$luDBo;8it!}5cdU9MWb=`EobHtt9bk4hwJ88rg$9gCz3h~s{uepTR;@J&H6k*V2TE!H*5z`9z);|d zMMp*fIwNvQV~k&0T=&Xc&oizXp6!?qsHHzsd`kmewVQyqNIu}<3DoppRJsv|>rtf*OsNT~`C?Zr@-@rxi4{}3ABNWaBdfgq zjp|YpoL^ReyezZ%jBLr|_eGG^{B7p@)rx~9ElO?Z zZT3q9y$D-8j)sOlZXh!HiLd@5LaMn4T!c%AV|BA5i>v$5=AP6#+nLff$6I(XUH_OH z+ld)};rGzaadBxN;UTy0o+>0Tc;+S_Ra$bk9r0KtSn-1)BR99O#>-14e|0Q##m%vfn z@908t6I5N{Q%H4dQ$!GHD`6fW|I3(@_wsxEZ0(ZNo}N%xlM|W{7})^@RaIE}v$6n8 zjWRk*O}$f40Q{ix%*>5P^4HQ{K{7_4nWh!?WGk|9ysTek7|r_5{9Zr-v{UP3wulKB z?g(=XxM90x?-D3K^nnE`Sb~|L5z3+hd1q#3q@<-Q4BCmCwxHr4yYSOOSKBdR#}2T-2A?PV1_+j8fJfz zioXLV;Iz!_hJ^gsUrM&~CYu`~S=v4%{JGcfh4|w}R|ryKKnEPKH-JCwzfFX+a+?<( z07?^$3C*Syqx8Sow7sH}t}oP#jDl8E1;F$xeUKy|86XUJk&RsVX#Ff@<<-Z(*e3|E zQ-}|GpL<0Ndf~~`$MwxV_{bbt(wU%WK3TdZL{uaNw#K}0>0QSZO-O*iwY&V% z_~bEL6#f|3(RNjx*iD$A++ky-&F*gC;vw~MWKhHSja2O=W?LZL_uw0R0i)WKK*#7^ zVe~|>+>b2BKe{IiHfQJvSpO*!=rdbb7CdP2OgG;R+ru5Lb>()vsOD|tu5oX;&N(2- z+;8@4yyy?db{A3cn_+nkOdBx#sZqFABV+aLKSMO^pHfTnsFo;{J0?zaSGWPXC$bcGrotrMndVu7_b zx-nwUu<^k!SF}E}Z&QCqhHGg3?Hkx$@x5hP={k}Jiz| z7!VU@&lvW(O=zd`Kfg9d59fMAPBVo4o(LBXj*h&q_b1CVt1P*7fCdc!O693lb#>nX zdIAGzp`D!_2Y{~xKtN)`6Tp}PxP~2U;KIZJ0v?#jnqH%s4?))e-69Tpo<-e1 zg91mMZ0D4AR}PDB#_Q8O4WSUTcbBz}biFj;0h)3LBsj>5_j`LR3Bx%UK$(pK1$19% zqdx+4%Q`wl0I2gVO7TvX+F)QI>zaf6sQWWB>X>5wJa3xTSFsz{#I?5kxiyolw&Bte z9En`0FLTvp){8uRX=7}^vPreruQ5Jj+#a~Bb5wL@{B;kC&Y8SUkIrF&AEFc3hNnHi zOP;xrBsb=WrR08d;Rv932Mu{M+zAW>oHR%w{3PQ5fdb5s!9YZnfU(lT!a|@d{gVr{ zrU0RV2JXfYg-U^9=}N#7BZ|w(quRHQ$oQZK?_2lJNasn%IiH{Dikd0fR4tz$X6%zB zkG52UQrP~jIKe#LVzuTg2xz~ z`H3S$`?J8{e(-kzV&mE;cOvLqV(j+BmCJJPWmeW;G69ShfR|tuZWf{Z%_^8r0sqO% z*I0QgrCr6_`xkKTKDxW#0_bQ(Vd3*Lm9ZXv_RwKI`m{xdSP5NMK83Hh5_m*^8$)HS zQtL9aBQP$ztRt_vrK!(F0FKB;XryET@%8;{$o8W1WnG=qv<1A!JHjJR1pe{ysa0q3 zr-y-q32(iKdhfRbo-SqAwsiN{ax>_9zaDzK1C@x9kZ_!akRjfOngQ-kEfLha7^H>G zhf8p|eT=)*M<_={r7lv+6f}Zeq&1m@!vmB_J$4tdR$2#e4w9|p%UZ5Sik)G zlL;kiVQ$`|Mud`kcyLht<3|;3qT*k9!J6}3TMiz;coxugXbaE?2rxJzdE@+zz2~st z-Q_ve_p(}kN-Vtk`nTfU&?egT0}usW&8;pQn{uL13lCAB&J0C8{l12vyf}+NTc&k< zPh&H1Amc`TN$A;duv=-`*xCwq5QCWxBjPfD^DYh#4-O^=^rN(ufXtil6}YKUfz##Y z6;Wz&2^6fCs_b@dvP`B~Cm^Nd6Bmp}?nr ztz_kYtCxV{4Ejw;4v0imG*sxC?|CX7@Dm@kf__ebODn4FdB@+2-{Hqz*7=;E)sHkgGIL$eEJsGNE=8e36%c0a`LN)I|ykigiRX92^)y zaCfH>@b~5S<}YRFPP*^T=Av0*{ZF^s60+4qNp}C<;OemZX`DQ z5fjL+b*;HDylrS=9TbrZSkuYmukG$2uMurxq}~FWK^P)!=*REfE+!6No4(&At9%PL z7QBPt%aq(F{o5KjeKwm&yv(3foxCQhmzWQyo2MagxB}1Hd$zfa&wM9mBo#ax@U8Clnv$HNmNYq|>45Q_g%zjs;`8&)9wo9_Us^&{Rx8Eh)u&Zx zTxGPV?zKxJ8s=yd%V^q3_Hv}MQ8P&E$T!8Y;^+uPVm@W-LtLT+D;tc4P2S|U^KiV+@9S%Vhv%w zZ&@kmQ5Ab?E^O)DUW>1H2uG4{Lw-ev!Zes8Qu4Y#`9=knkaKFMY3$HL-w_0{T z3{JC$o#r`MmW$&%f0uc|cPuG*r+MVl7Dfu$y2By?#$Ss7jwwvm!SdpNv%mEJc>}~k zgRicxC=jmaDs<;7bP-6zg}|LC0jCr(?LhDApccT71Gio8q4DW>xNr-%!2y zWI$39xAz9h1DssUdc+&=oFVr9JqhG(WUv^{Tr3_P%xAxfDgXv1oCsL;A^_br(3`Lt zvmK0BTn3vzgxZvs3Q}C(Q>zpMp)g-(Cu&&lS8(lW)D7`(Y?148PkK2T?U>H$*b1ha zw3xaOzZBrTXU)Dw8dC!a6GV%0ooEUcY}d}0VaQa-l9;3 z2Ux&#`j&0pgJK=TY}SzgJ@#a4B(#sG`dke44uJpIqiXxlqzCZ0*B`RtBu6BfzkKVoEb^NiKd<|7eb%Xet5vFZU6 zpY~TE)^;!ONDYVYRV1m2rA_YfI>;8GEa|Z`T2H*@-A@%i{_8pVd~hT8AYAa!R@jK4 z-uAa?>teii@15I+MctRS3ysIUi2~8dW(pCZwx{=f13*zUC>Zeo5m$eHnX4SJn1F?S z7#tjidabK(7|ux4W)~IpH?Y$&S8&lwYE8}j5%n`EhFV#2sEg!mo#y_LV(3fZzgf-k z_&*R?2E8DL!MX4biS>*9yqo=|0Z&sRVKW~{jNArcsO;4$O~WmZeksP~1x_X~>S&vB zTyI60NUONHlsgbdF61`K7U1{1lUft-Cx(b`mq1JpwW0)k`FQqj$dt2oXH7NihtVgW z^a-uc0(d=!*PqOcc#Lj-eU+Oy6VcVG*7`b;CI;bzaIr&X=P1^bcXj}t?h76sQYqtQ z?Paa1({2m#yUYAs^$Kqw6ll4G&5*6q5J zH=(vf9Pc6o%cf$Sj=x(GuyAp78*i?8zcPR+>evH&4$rTw1%KTLvV5DgV*?0eC}DHJ z00RKM0Q)O+a30E?x0C~>XhNsDV@H-bM*TDFyUS_5dP&#gEBADml14yjc`aJ@8T1BV z!9qktM7sKb&OH`r>H!t!f5cWLD+xLs_Z#aJR%rl$(qHoe$yAr=hAU)a>NK^#{Fd0~ z0#9o$SXeIrhIXW>V*HsQd5Rftu|9cGdq53W8Bt{&p$KUhy8G&lq?SU6c0 zX#x{73_7&jPXqfE{jGu`?s1#J_^NX!AeP^`a$ zpRVm>9fx}RR{oT58gF48W;x9wUdK%HSOq9*4Wp%da{*R`uLw zkNeU4Lp8iF;dA9*Pd9doD)TB$N_GxSj84j}j##T~3bx4!@76bhC$q*SP)zmrJadVj zQpALObh$@KKEM{iSzmf`V`u>02yz+k_MWfDqNJs1bp)e+U?x;EN_5b^%M1&ewc}AkTJv3#x9He_UY-5 z=3eyIoaL3PUG!)Xr;b=ikEvtl-3BkbbZlt7Mm743Y~XO)1m#f|lNu4}^XO5kK(smP zxGGu9cVbi=a``Ow$V{?L5rstBOY)b%1PmzfB;dIVRa6cXA2Q;YVnRzor>u*SZ{sdH zV3>zji?j0He7U)X*R#j$+bqq0A8MO$5Mjf?(H|qk0$@=pKSKJA5~T4{`ze|}%6-S= z+dMtxwHwl+O;6wUZm}sUF7l=|4gA2|ntjxK{d7GV^JN)S&n!uGZiOvvm7e*6hK=-P!q`Q{*k#4v{=rJ4Tu42f7JR+H`3_*OxV7e z$QUQ~2VL;Q>X^bBtyxo?((ThDf#N2Az>EJj24IR26(GaFj~O5njoCwI8&CG(9GB!H zKC3y@bt+ae3^6TN6T3sgdQ^keG<=Q;U|S_g%LNQ~e@LGx9 z>)jG_w#C^tzs(`3r%c+es`hyrY^Bf4@^j)h;}&5|D8`_$R7TIVc^;%lNrsLxCrlz= zi>0yz1*P)o{@c>6ka3C~^`!_EsNF$7WT54|@Ev8Uy;rBl^CQitSKkHfiSsYIloR?R z%=9TGN4f}kzjY}8r7J$KEN}|(URc6Z*o3C*lt2)R#y%j&aSJhgpyY0<<}YjGY%GuZ zWM$^2VX#@zI={>6kbAVz;J6%xwv4ajp3XZxHfwV5Q*BRq*1=k51pM3dxK1zlCc4%k zt#BPeoX7G^|9wr^3_;qXhBHi@gREkG7+WIWU+ZYG%KgmW@2Yd{Y2N?ks`It%@7inC zRikZdgYA5wQfu7nx8>c}m;3nF`$xXlo6gtg`PY}V*N3l<6umj3o{Y%~y50e_4>8jY zG4)fSXvsgI{$f{|YH?_r%$l>8z(w^WwO!GT176Iz?AF^0Mv^iZq}<=cI-z{OA>7v0 z9sMnCjI}+>X~+*p6Zmao7PoePcy1Ha6kdAxEmmQ2DWB_U8A=cz#iv=^)F3!+k|ZN@ zw1`ts%(Q_rp|+-6;&#(`+8}&4`9lUlBb{8m?7NH%;U!u@U!l4q|JNI~*Z7Bj802~C z=$5nrMU>#rb|HSx58c}c6E#4}Y;hfm_VqElnOthHVj6}*%{Wc1GwaeLF$On02}?CV5q)cF?%Ng}`ZM^FRsm^3;iKZA%x z*nbg`h#&##DV2}ifiRXyFvMhzw%@+NW00*>=<<2kh>rRVq@2VCdF|41F=l#=u<>>A{09BuwI^XQP_wQ^i9>gsYT*tuQAvhcLC6wmov;2~KLQCU@ z%fnM#l7ETFdqwix5*D_KROE#|NT(|OUuSt=+j@`J^reN3MZ?Qine(qI? zA&NBu;SwJZrZO3cL$}GmZwVrn7VE{q5vK1(_%@OA;qmsY)3O7Bt}5ex=n3z@1`bjW ztZx8+hUJEas3W5zi+Ou_>A*th;SeHih<*m^N zP?@Gz%WSIaufeKf47SuoA~LMs5wn6e%b>7|(ZkVwC&g&wX{%^@({HnwdHaWLnXvi% z(eO6;r7q=uOzUaRbHgUQSwwB6jc&|Or2FRHW1c{5@4@bcgORd9ChzHd@<1Ie%nWbr zjx!y#kJy+NiS)E!Rp&gv(bR^P?u!bh*q3%OgAtqy8%8EZWQ7rDh2c79dEI~X{s~hEv*-E-|9Qa7 zfK8nnAMfbtls8*vsm;RaYTPlzEq$imMz3cokIQ!X1r0?skPbmtR~K0<|Ml4jKwW{u zAGGyvC-c9Y@zY5RSVs@UpsK?skQX2y#D}_0PqYxB3P{oXbzha)JMW{sZTT;19AMg{ zh35x7-j~Cc0-42DS_Y!KZ-FA-d`t$sOsfaU46(z+ynnAWsowqswIpZ=Jt8W?TjJvn zAY(V|+JuYN0zI2?uf2&f{b`)Vwy+=$JIpd-fZ8gj8Id9xCSyE_A;2bKTZd~)SNGb6 z8rcy}RD^qD*s2O`#C^g|>xAFyVsryVAD%6Z*K&2=k5%$Pk(9&m&m9&D!RUgM`Cj_% z#52t-bVX6Z`(<o)nkTav#sxT!S0pq$bEocs~P5?%yb<)FJ2fu4H2oF@Ji0CJReD zrmWA7tWXV5Y1n%mHLMKu_YN54OsKoB{W`TL*==_=AmsPfKL6>uq3a*h?krl>rd9fd z4?Ahm;nNIM&!m;BHTJkFeF_82Cp#>eOaUUor55tvixKyEGA!kZ7k6zLQ9pi=h`wsJ z{yPPH%ePw4)~YV_o_phBMUNL+++SD2z(DYa1|1*R;%e1X{Ky_ z0wuRBA-B@yG=@4^l`H|TEF8;GsoMkAR=#iO=e}i045M*zEdrC148+7{#LmNtmukIC zJn+n%OF={gwq>7-ER9PQZ!LklgMqDwZTmU_2Z-b}5woRpqkk|6sQYVGuU$~V1HODl zyDr7~t-M8@t=a$nb?@L5uXcDa5zHQN<5!WUW6CUolR5UeXkp0t&@$}|BRoGT#!p6O zel7$n>yAx+(d4Hc_;rU*uA4&Me*J+L$>euu zzq^<85jEB?vc3a5>7zwvl5(vYiCTccL=X|s1wryFSByFX z-(@NtrS4Pbe5v-+ETWI^$`6mZqVPq!u@#pogY-1elhE6q(A#C4Ujry_Ms z3-T$-@{G`(P`Lj`C|TYPPl{}>2&1S6korlaRw$QY4sel!g zjcJOdsK>y3q;zDVgq5Wd4`I=D$0rc?O<31<%!tAfQ}`v0w7-k!E25)lC2y=J?qa3q zt*9gG76Un?91aV0UAl<{ z@>0b#6BvBW#VTYZIUBBig^$pjN5(8DKuW`Q;;LL^59%0v3@Zs8!Y=*|A8C!HrwwIP zZ7(hb2Ul!GQAE+|Too$5mgZ1r1DaUY47NtGXS}kwUPK1N)>4uco<;=3SK^aF+sLj2 zAd_j>HWrbUGO+T$W#6xvyXW$EUOz0TZB2hBMaZwk)`q#ViVsw)ByIZyn^#3yP2{L2 z?F6OqdB7lZ(4>s@MviJLPs)m59A}%&Nr#2NbUB3W3o1y;-e{R^H&vS2etMMC!Ee&R zDIekphb)h=WLuag&tAWy7t%tLgfS^FXcWR0@Q}AUo8P#j(!szr!jnQyzh5(g=H)H% z`NBZZ9uc)%l~(mi%!RW{A%Q``wh^C#oRU*kRZLo5R$Q9$hYA9B@U~3!l*XmBW6bXN ziXA+4iHZbum~f@CEOoqcRaHvwWOvEE1pFW(IrT`WHVJRtBj_o4Izd;#Hf>|K1dadt1%m(g%PUWx!h(p|_qWS44#SgPl5dG=#lD|@k=I44J1QLnJDyUHfeMQ&&{QlX z9U6XpB(V)GEpPsq#?`AKT;%i;gi_WDeD*X16+=vP z@J9#g7$O3Awtks#nRH#FH~$!yUA6)7%nK&%JXfoOUyqFue{~!ZI@Y%Hr9Zdga$<;) zQ>6!)n35Y*@l8k?b1AmXO@Crb6tn$MZXCEd<=|2Rx-p36dC#@c0-a`VSQs3pa6c3* zHiUp<-!Fo0Jrf9y%D6=|f+nD8?aP*gS)Fqd-fDLTJdEKWj`7v`jpx)UYzPI@b+wUt z0@EGde0$8P(unJ}@~5hGSGsxak=-jhNx(i9VQ){}@E4q^_eq+@C z#v}5LROOqX$~P*RZ*4F25|h1vuqQvY$Gaf%Vj6%uQ(aNAY;f7 zJg5;zEQjoJ4oU->?WelVdgEI>Gj!p9)ail!z5F+;3E?%g`YoXOK+4nh zY3N|m8&Y$)`MZYOMK%lK02*M>6EHG_7v9?v`qw8Z{7*%lUNbp$VTi&ah}a2$FcA7Vp5H`~2I zJG;Hf{b~-=AP!;(1*Kji!v6i{Om7}7SGNQ|>d8To2x^E(bxKd`8 zI0Rm_HXj3ZoFsf2ogvFAR=S*urOryiI9a^R;`mM4BWPRu$g)NGDG2N&2d;Lx=(^~k0XH+>|f_& zHBF%>s8|JpQSJ@RkQDXgsoj2ZGn9SesdvV za5Bf>HAewIeI0m{W$5Gjvx`mKfVhAeWdS$r7^&~ZbLS}w-Ul2kD4?2)QLf}wBNsk9 zAa!h9;G#0qHf-_LBbtdq6Bn!UI&SW9;CS=bsW+wzGw_4qI+f_6l-LlL(1@1Mc(2;f ztk(Eht#N6tL2Irtb*>SYz2T6((VV@p6!@uYkg9KJXK&DDYan22fV;+@^E}z2A#urW zQDiDNS@dJlNKqH`yO}>sZx*dEw0pH!h_o{LJ?@oJAsex2Ao%Lq*)Imk@mA?(G;q?a z30Q;J;ecli_%wQ`9iR**UQEFQ6`XCJm$0aLJ7a)kZ?wCYLL9-N5d&X7(29bd;waLk zHNJ0sAgV+`AU~?7ec@S#&y$e|K4MqJ=fOS^;tR#0$L2g)O_Gct3CO9M1s=avgG91; zfbc9-CWA84p;pQKt4FG4BkiAnB2NdEQ*5S$EpC;FVtigD2TgXh&s~o%p>0Imb zPce#e6ToTz)B`H}`XQD>R9;L9HqR#7jBC`QzpspzT_k1Vg_~d?i#vh~-aSKH*$^3V z?`+=+Cckfm1flB zBQg2-irx)G8W-!!vh>dx4D{(<6(*8M|4xvxL1 zMa^x!t*2q5=#Xo_1NJLep)lJOKPDeA-XG7@-*yIFZ_o>I zGd^m2j#rV8;+WPyF$5BnceG?7k#}w?hwf@m!ipeD-=2S50lA|m}`5@fbqzm@n&wf^j{8&}jp#MnCFXzYIOEC#O z&B6y%!UuL(aIkT|6R8yX$n$n05P%{a&^Rg`MAR11zr!Rz*pnab=5lXHKtMoc(&D6# z0Ccm5i$W$*_(djsQe(nw(0n4EN&jaHIcjQEfT4FKC)$KRpQDhz$(@yAq9tqvZAPy# ziX~TZe-n!R&<5 z{YNRwwegjz!!5U9OtYrnMLLE0D8}53qtKq^41~yCHcqO(I{BQ6b@Cs_hfD^OCd^p& zCfNAFU{P^s7v&_NDxraE0FGYNyrF13vEpt2LqtA4J~dPe9H1@X$j2hY@+TJX;<$B3 zwfgU40h*WmP{`?dl$QvQ&R6vs&y^ouD?g;I)FY2|{m>GmlkVj>bF^1ccvd-bGAtjk z9{I1&W~&8`9t%syt8yi}Vf<0O_qG~+;4+!Ms_iDG>pJ>C`%g}do-d6xIj^~`eSW<- z{_{ndoMwc%oUY2$&UoNNYeWay1=z->f@*Q1G>qln)Z85ANeE$)c2rI{{SFi&ME|2# zIiuh1{>T8;!J)sP``P;2>oYA#VWS7Ay2NBjHJmEvkIQ4u$zAeE0X_+Gfu@lr!7K73 z`4Ja4pZpsmB7fg6;r1px*nYHa*UPd<@uf{hzQ7#m=F!Y~qY~_yrWij}^6hPJ*ch5) ze3Az428coe@Bw@REFB^Pp(t$uJrIttAL|Uj6%kRP|6jZS?2d>E2$$9s+$#hQqv+A| zFt0y&QMtgu7O5ahUZ^U^%X-4HcD5ilT@^~If86atR;NBxLHz*5L`_|wv1Y{nXM6)- za)4Y-CEG?Oww06{X@;$n=`}M2|5QPcFe%3(T+9Z4BVD!)UX>5(mE=Xp8iFqz6riey zApET3lCi=tz^BVekYUDs95AJWVKz&^nypVR2=pYSlQsQ z5(LoN*#)reflsQ;*bB{qV!$PhK@t9~Rv0*H9;rK|HXk+ZAS4O04q)|MsOyYO@o)v5 z=(*V78el-SQNRcP7LbaNx6_YP(gS?>{lCMU{zEgR;pu@;jH1iU_6A9TCP1nbz&Etq zW$+gK@NE;#wv$=>*YO~oGAr+mBF~v0vbHY*|4dA>)gR0B>gnX#`MOme9tX9lt91`* zTL2{jY-qat_WANOCSHPHfyaqylHMtEr_Jja(T*~#6?+NT4Ka4e)Q1qz`E=j3uW^|c zYEb-5-~DOrPMd8jXhQ6D2xpXQ^2fjEI@mlumm_~>(eRHP{1dSxLd0;>EROwq^!&f> z&NjX+|1{G5TnCV)p?9(ba33Aev^q3!=>2>B_txcGWe%35x(+qJZLHKRs-US-l9}&9 zTM7xAK4ymi&OeybIb+vk3H<;L4ko(pDzrnqdoNr+@aLINLE~%a<(*QIeP1H(*5FFkOWdDuF(e{uICe7c69WZ%DS3xzJ7Z0l` zFF>$|N+>B1Y6`-Z6$TC>ZvvN;BG|A&g5p&~g#{P4!aPIwLKkapC2*x6_qcYOLu$E9 zcx}nBKI!ACF*6X&VOK0D55y+6g)N++XM)8p7I)O2(?^aQk>o|G`xWT;V0~boHly1% z*YO6$XmYT~A-7^-k77*BH<)@Hj>k^m&q>>_69TJSxWY6X-D@!qb0F28c4O3K)35`E z0vCU$@0U+Z&rPV^G=2C!7ibZjDiTAj=}Dab-WR&1~S;ORs5ZOsFs>iE-^v}SvvY;qVPeyX|kYsG20 zu8<yJmg)f9UZCR?97IDhY=o@bZAoWZ@;sH*X${OYTmHDw zuIaMbpJ5f?3H;`Cjy`u?>9Tj_YB6LRYK`Plw@+?%t5MdF2b5awNLr6`K&hOeVZF_s zn9=)hE-esBkbNfiJ0M5^W5+^^t6^~j7@?5OLjcV54?!K^jR1(Dd#}&!-{vhckODAp za~3AycJLpCP?*>TP`%Tg(d~i^#Fl<=#jL1;@ed}pc?{sjJ)&hS+=40DX{XWC)3@&t z`INFST9k6uAK;E8D7>2Fa}BtbI&D=cIOymXMulXgA97{>!~UU9pdwX=@hqOi_r4+{ z(jSN`33<=1E-&W^kru)qJ)T{^^UPr2m>wWtHHJpb1C$nE{??!jU^Y*dCnMv4VGCWT zY1F{eR5CK`OhAD+M;6v1t=n0q$XLet!GWGw4Z<%9AD4cAnJ5qstjAQc8W=NGr%`Nt+n^f#7-_g!I^z zjJa_o$~Z~B49_&nY);6K41*<_I_Sa)T`J2w&u#WOnT+^)ba%FivcZ;HC~#zD!KK>m z{PBQ?OW`9ERVjqb-0K6AG>UPu4v=}>V}gzw6mXfeh8%jJDiIt`MG)y0-$Wh-U(ID( zSOPiJvHfr|yokGAbwxq+2c^7*20BA=h1W=%zwrg3t5Y{NZg2A| zleTMrmpg8Uh}!cVo(?hPk#(r6_cSh{IUy-q&kQsyHT1#yMvA1}8TRpwB9sqE^+aS@69GF*79kf2tnew3B&t}T*E}wr0q-}6$*Rgi z_T~h!HJBH+_#bseY(n%kpT<}W4=4?9HQ;?S0U2f-r!};D(h~(`;6W(t`-34Z_~9C= zs{Zx_KxqR+rart0o^<^yw|^53#02y-0A7TGuvClFYDUMb!u@KZ5Nm~VMOce4L~mg% zWBRNb^?uY5<6USV#ERwtJHc?nPQ+_6#DV8s`2BhBvZ{`nrZLpLBkSs1*H6bJ14M1L$f%^p>^D9wd=E#DBKUi=v zXMUj5?g=WKaLd0`3*sPaZOQ7VrBS=00B1_ORALO*VWTBt)b$w6)k{o&46J@G~307&~~1dhtTU&vZIV| zko<(3>|}j4b_(OvpfQqcHc-^{?GEuI=3>c^D`mow1vT7~1s``qsS#|3>nsF2JyCS9 z;CMwJp0DZ~#b#_KhUaJ9D=8sBF#k!jkJjt@x0$76Kr2bFb-g!{4(}mn!6sS|c#jIR zgKDz^#>q|vyZNWA7|3kY@~m`}qUs=ZzQgN=_k8;$; z0Uw8s1F>*QzEm0*b7`5T(s4I_OfGS#S6SW-mbJ6hb4c2%*P0QDCjoBg8~!h=eX$*R z=zlg>iUvr25v$Ql@M*W6HP$@4P`Y-lRSfWb0f#XWpWDk)_Zv*}N+1kU8c*I-7Eh3q z@E$w&i#LbArlSV$dC8!b0$tamyHB~OhIWOIPx0}|!GSY$X>>681G$szkp3heM zm`Z!th|4eC5m7}yD$?bVnCKXv%p+iGF>33p={w)_Tv7P^l6R3-g!2M3P3H=;ie zXA5hKP!>nVOK5Aoepg4e6|)sH{eO(4xS=?76+9c)#qoaXMr4jsU~z@zVFx*UTLDi&;ZFJnU1Pm~Ts4d!s%v9~WEnYz}j(s{+ zM2?viNS&7}Xed~Mem}}Yx+Yxnc_pePX$@ztNwlkg$#bmR?yraj33xbE!f=oaaE;Jm z>qOOLxhcdA?gvJgu+C1OOfFmCt%lCK#3JPOAKWWNMxP$XBE-PADEUyYF+F}k@Qe1x z!~Vl@GO?U-5IKq>aUttnH-QN4fiRQ`Pv>QP- zX5jCgT0d3}TFZHBuryN4afw$u?O#VZ`)2XyVqK+ZTqIxSAG>LD5@3XfjF`c*M3_0}zwzEcd+(Yik zVTEB94hc>RhP*rzwLkURrQm|B7!RaqSXOojJO$fb*dOw%>iGF&0(6!;4DQ^}oZXY6 zd(iC^v8ntBUosi}O?D|hz!WAbcPgV3U>$RKo@7!pD<~F5x0}%NvG^)@BKtzV?P_xm zW1~(G{8Fz$r$W`R8u{gi z7oMKvNGV2$Vgjqq)nh>c+f9|-$e94QbjGcigMW-0*>C*^o77TmY}e`S?eDkkw`kO8 zms;reO2XnGD6p__FOAhiGL{g5q>6@zdHLz)7)tHaJNj&EvRy?qC@RAuWN~!=vy8qE zlqmR0fPdl$puJVqs;9YJpC67b{~dnG&7E;EGr2ydoH*3v_`0(0GE)CIes!QG=b{u_ z`QSqHa;%z)eO&Vj`ujOI!z?<^B4Dj)EWw$XGzk@LcckgCT28!Vvo|ow=d3! z_+p4y>lF2M3x`t8z{+q2 z_pIOUFfje>Aa?E(-Pw#Gtd*>}f<`DVd6}gv-=%Vo6V!o1G*o8}%RsG6Bm^>u1!$P*mL` zF8AtFn;W;;Wye;$Zqi?-w*Nn$mrd{272x;sW{?y%dV2lQTaQ1dVk-6Jke$7 zE6X>45Ip$8fBqQhU-BO#^ziiD;mNzi%YvEq;~JqH&A57s7PqxYW8xi#^od2Xh(xoH zg|`_EpVh#zFny_EClC8VTcawMh%a$|BT905v(ntUXuzywtNimg=O1)k8dQc(umg}@ zJL>+P%Baf)n7qow(Wl+q+_nQ+3BV2>@4|wM^WGyBzE@r%62j!bMXNPH;d)Uxq~)@M z?tka=(jmg|8CH;8x*=G6L>z+h=#!c7tY!)m2V#Z-a@1WKyZf&^QuA0sEhMX$TSROF zOt%Eh9ehd%!R!viwMV zxksbxg0XU^aP`5`f=0xt)h~;e7-MYpMU8$+OghiTaAj+8L`tO+jQIc*({MOyG@MOY zx`+64Q6g$3&+8=6v>{bZi*j#r-(x=7<|np^hGGkAUL;Aj0jf;A--O3&rCnlAC~0hN z-Yo_!s}kgzw1y4do{Umtl{mdW<6DU($KoUDp=Ho7q5Zo&ssbDq={z0uFer0>T8cYp z$rUGy^5}8bR)`b?x`pGwJ5{MVSf7SCz%5q7ATGxX_b?_{V1DA-G3lq@kV#WeEUH*{ za>rfjb$j()ZB=3nHgGdG_*j*oTe>}JicRJj^Fu_uiB^@q#kEdWML}f0%eMWHdmDNYTKq6@ z*bp(kg80HqsSB8(Rf9OKiWWUGjK>>{*A1UrPs@r7d{;9GF+Jhykj9D96b{&R6`fJO z%Nf47G2ELuFD5jQx7lCu-NvSItD3uRz+t@AuU?f zyKLuDnEtMk2)SS_WbybSZrbTI=itl(nCr0V?_eDMs~`vDemKn}ea`U_bTT~-bMdx~ zm$A;jO+anW9W1s)$XL>ci%4&;efS#w2}gnOe{-1Wcqo6-7O^yw2@xe@9%UqC^`L3^ zX@8h=!UoyZZ*_ym~3<`l(1C4=<**5K}^;K_ONx6jjo;42>1dA^vxcVyI`PrJS-3qmP``P%J*ZI!2xt}Gdy%l|bC5p|TK)9q0f z>k4^vV%Rm82Z;`MN>}(ae&JlrA)O|h+k1SnL<=k%s{ToYv#NF9H(3xquUv=}xLlf1 z^kL%j7Ld&=H0bt)7Z!U>L3vlF%K}x0o{jJ>Nj8WZAV>pLlfQ@K4F}B~aD@NyXwa)C z<66ubyEu}1QN5dj%8Nev=y#;(>Y%;Vzyeg+saiIr7#-#~xJyCvxL&D#yr!H;h1tpTXs2y{O>nHs#JQAYSx5y{HR(KD3=(}lOqW|ftohnjK*I@_9#XteLo5K? zYIB*q=LOA{5Fd zPE=3P@OZwuB_e2gX|S&8zPHwH{6xxNb-Qbpx%2~SEfyt{WV3~l?r{3j5o!HSYX=N) znpXbyqv1^`CN-ia@9wvU-hQX*7L^Jzh?}@mt!nfnO?uDS=;b1IsaX5lb&t#WmGvTI zZk6*_v6`$$n9-~P#PjDkl5ZQy8VG4I1g7{1IUxlS-!p1?KNlgQlwD1SY^-^s`Uj%w;cYcBN#bGStUi~=yoi*>Xa*I*^ir*L9#a< zJW!%1=qkwjNl%9q{_?il?atUtF{0KCYs)In8@`%~)mbRE^i`;n9#+6!3C8=*j>yLYzByPc-s5T$yvGpwVE}o&*?u936U&FS=MbsQ% z-;J|xm(<+Uhkk;9ab<;uG^l)rE<`eZdeP%;f~*il)NtvD0~_9GXJozLgj|R?>+eyW z+el>YJ(23==}AarN6`;VxLCo?*NfrJAU>|Qi-Ynw*-u(mr>dLOKp{zjdN-eMqBa1G*eL5+!zEDq4;}m!|=_Do*KPuAnzR zC!I=frO!Eu@83U^mc{Vo!^`lx!n2ap0_boP6f!|9v*<%}_bUpq zlu%mWUhcma>Typ%8EIgK9vt^-{yD|`&s5vxNdN=PTIM%5b71q*(We1apAU@qkl#|L zQ1S@K^tp0%ess6W4eVv6vtwpVRapo&tA14(wK*v)mO&0V%c!=~)W8#_OK77heSEQ6 zhK8xQVuw7c>#NI$f?ahxkH^T3wqi?|d%pX_`BQ0YHV|Vy0_1WZn~iCLapARP&YbW2 zCtQU_fWzWnbteGuGXL_6^?e@OyF8i_Uvvdc_c2i8>L4M^AOHlU z_IQ?&a*{=d%3tv3p;XkfVAp+_+^MR=Fs19Yd3(U)WQ^`0{^Ns+2_U4~|3=Z=n=pjQ zwe^B84w4C==ST!#9o=LfwI89LKQKafq4b<;zoJrNOXE)HZnHRI%uc^SZEL1;gBiT| zd}e>^YIUZ4^NIWcaRe~W#_zz=UyFyLkSSeYAOmn-;-n^<<$|5^wA}F@Um7KwnLJm} z>PtZ`xq?2*|0&FKQE90;65z*2o&*f|RRBQ=E~Oi>llH8MLju?crVQod=VF-Cs04zL zWK&}cNxp7!nPkNLI<9Vg!fNa;D#+ab+yTd@2dnqI5-OcniQSX6Pm!kR|BW3Pi?;KC zXw6#>a;&O@FbYJTGk^#w8w}69fpc!$%66CpVB}0++k%0-z$GrZKb5oa+$AOPxef7^ zyn8~yfOuj^!F-mFuDhK<_i=CITGaYMXUqLZUR4K5L9|>RrJOdenc3GhcO@de-U&~z z_waL1sy)uQ)3f90&x<@u&Y4MgX&JQ3g9MUD@;Z*Qt%j&t^z%fawv zr;v>S_t3`Hv#aQr`StYr5`{Dmhr`WV`lS|m*Nd)yzc}a!@%CUU#*0Q6=QEoPWs^i~ z6KFV%J#8F*-H&NzJwFyLh0s^xGSkaX*!7U*Jq~Cbv&!VqYfj~I9v;QP?KIfvpK8bJ zW_?7jpEVhY?|e28@Twj5+3d9bT<-5!=g0<+PeQ6`sk1ySZ&69hwu(h&TQDxa9&P1N zpI*hnY5x2)(f--~+w1V!#sKH8twZ4#N`^f>PDx>{eGCL%J)$h%x69J=)M`CmcOy4F z9YD!a&X@YvdQyGIa2a?zzIFeQmF5U1HKB)2|C7;#jWVcgIl3gW4L%WOXe{4dgnfLN zNaKAyGposUdu_2>p)*2|(kH*{dj2(8vJ?pu75Da#IQP3;>>1_De(lZjo0x;Rb?T4p z-&!5_XhGzwotA5@P+&x8!%U}tFC+V5v&fx^h&897n9ND~#vl)uqtn*! z&KOD zOr=p);&l6*@OhQJw&p51BGTX6t~DC%>+ncPMhD9-8ZnwlAxW=(_#=N|p=OLS%RskB zvf?~FVJWFD9DHpW7PfTG6|TPCXT=?f9u)cqI5C0;)pQwKU5^KcN&DUGS9~1~Ff`#YSOnrV^uFxTn;;-2PMhvtc3?ZBo}UW|5C8 z-l`3<@A!JrH@C=-GQZ_24gmd=az~)y9~%kLF{)A2`@H1p29$d=FOk6@mvg%fOVDR3 zGW-)MWW2}^bPeo2S6Is%r=zYq2ICU&=>9o?>P(szL()dNbh%%nR>3Sg#*WD^-;9+z zmxaRSSxYp=s+9!pJQY_q_~>@S8-ZnE<;_{pcH!RuAocUPO~d*k-!x`}e68j;*5fk}f!EIy)nFi*&`clNRf7NhVBsped=tyUqw)w&^ld}SiC z2wbtP9Dis&Xfl7AsW*H2v&MilKju6P7+U4zKUYpsMDgV9sA0wV>l*{xj7A|gy8Zkv zde(sy2!C857NPTDixxN)u)83^14f2xpAW+Q3?45Jj)0Sq^N|!}3;Y}OC3(0ES!W7` zkveV0?=a684VQz=sfpyq%|C9}yM0p2vec5boJ^b$*@i47fqJ4~ z{?El{2$+#{)_@&AZv47!%v|-4H|X`%h7>%!uk|~BR+E(;4adQ0GUz3JB+kywf`~C6 zDy0gRV9Y#sbU4%pYCA4&W7dF?SiC_)$i_jHc+L{jxd*BWjGEGg=}*j!*oh61e)ko) z$WX924_6bjo=7(*Tb_w2*LULP1Ny*H93pVSp2;W(FP8CTCoqGD@o#@l{% zyP4kcRr1LX0jfdX=v-(<{<}6bnB}h{mA8JE;Q8-HHN@T9Sn9!@2;&Ol!!pug><9dw z_*e~C+JlIaE%H$sL&#Jrq_dKA3X4k%(%TM%)Jh7TxgYjP&Q7*(o-XCEa{(K6=<-(U zpJI&RLdZVqX#BnNSE`<8lo#LLfHIh?`!}PYzfYcDTQUGa^Zk7UsPz}-z-Mib)7@Jc zlR=3tB*rNwUx&Z3*GZPgGb6o%Z*$c0ittf9J`c+cmx)~lO?2#B3nr5tmF7%3!sA#G zCFb!ZJTmoW=pS{+)ek5ESJ0XF!Ei)H$JK=OVvTl(s4DGm9E}>i2AlXbZyu>Z+Oj~S zo^0)OHQ4S@0b_q%U)P6Fbn zJ6?zp>IlF-q@Wm8hwZqUTwLK(`!gHC#umZPF~>_?ZK5A`%CyE6NEkOv0^O|>$kQ_M zgGkVAcrS=Gu3JGI-cW9tJFBg>?F6Yc`5frd?wxk-mP?xpGZ6)|vZo;Y1vCU zgU>Az@te|G?Jel(cf85;z=;_>fbi#eWFnNB{%)H1+ivyQsQtX71{Mw>H=Uv-lfH>O zoJlv=Z2Vbo>Kto0{-YXfklJO4YC$MW{$ztLT=pVSw-M^FO}kJy-{Nl8Xee71Xp?D6+O_$u_sk(FfE# zOP)MO(CgE&92;atV8X{A;-)Kz#)HA7e^}HJWhq0%9c4`3h>2hL6%|w;5m_QtDqU3QyZd!X*-N2nX&N-q6vR zj>8&oyR0)a9=rH*e@JcK7eAT3^K{jlxRzSon{TVzE%RlPc8Zq2AxyegB`w3}@#YaY z&iRyb4i5M+^$#c0ZVw`wB`K8RWUc`E_A)#(b@pL=)%ZCyep<@RbV6Q8!+zNmdPSak zpm1Wk^pdePLQUD%W-GsZk7~Wud+#w@3ivIV9diwGw1J?ibd0>m?NP|9zer*?!Qt61 zuX9Er@EYO9=30KBt#p#}TW_-t|N5_9N>TYZK|%Df#L>;B%sfyFDxt}65QVB#1Vz-$ zOMSK@y&kuH3hnBy-SG_2rt(rWBFxmwj&s3uE<5AZXK~Ar?K3mx78<;nkvhbkAnRsx zrO%)v@^7d;3jrJ5^&~qxT+LK9{1^Lcv?fDCFx^`7(gp(FtUi6eo0WWa_*>*1X{0AL zkxu%yU===c9^9JPD~b#>*5l@H!PIYTkNYPIU#Pd4V?JqR4iu^NPKII;TIr0Uvg7p^ z&^ya^8??>3wp~|BZKBz)X9LZo(f;Zxoyu~i@W*Iiw027-A!>n)+<#wtKeraQZFN9x zzJ!!4vs1f;LLdSSczH3N7-j-gkRx1%9 zWo5wOzXp#BI$qGM|J9n(`%>$0*=gNONTnEw5NqlWmJ7$bZ}{_z;&3=;%hyK8@M3?i zyQh4!)AJcnWkZ&%z6wq`O}p!LJ!a*LC~HkG2JPe825!c!gmt*pG^=$yYipgxgbihDF z2%r~1_owwk$mupIDTGnN!dE(bh*N0~smvbS$yuRH6+iDr%IDoZd7?RxYC`q~7 z^A-GVyt7bw53!-#V|%NJgH{1!A^_lltsK>BJwQ#A#~WYKCY?xBD2KX89S>TK77W_t zEbg?Hy|pW+`0G_!J@PMo~T8F&_;4+Peqm!>D2zBEKuic%zp47Sr z0gkSqd^BjOJynkI{q))q;0=uX$i3`&)qpowqV#5$)&CID%&bqZIJVJjyVPbz|0t2X z-gh+@=IiF}i1LldwJC zhwe+Kfdb*{M#~QQ&iCw6c>+G~-!@XI%ipCjgfY>l2aa2T5#P9z%bn)~13MF?02M;4 zma-1{VdR$JHw1G87mIsABkh=S>khsO8_VUJ9V4^d@HBA!cdH5;VlrFkY5aJyeV-Tp zr4@2mlyp{CUW?hI+POi68=nh33%y_#0Xo*6=a{i1OQ16yi&hwkmKh0`sh*^-!5vQQ zGug;8kHzD9c`l|OtB*W-!5WcHtb*m!z1ai5EUatmQhNCw&Rhfpl|~aO=>a!d4aO06 zF8lb3I5pjGP{(4Hnhq7q&?A5ZOh#{hEUR0FfFO<!NEw$CeoV>+vWY7{ThzzP6F5AvBzO~64kCm=Pb*d zD|pUriI_z=xBS7s2~>zzz^^&(kYfT#9=d!RCKhDklD-QHK`0z7lAsLjLh?SH>a-=c}HQGNhNYz1}==09ot!@lPV_BB_+0h74;J|ux zPejU%`CH?sQdQzOM^(7nJoEyBmO(i-SC9a-S6vQGd@r(rTRpMq;VY14TzzJ3VaF8X z)5ix3r#naCYxb)*$H4AILjIeV+Br^O8F}iD^;#n&h`cB(O(qJEi>KzL_Y%)HzvcXG z;C-lAVxn{shI{Hbog2Fg0^uVz5KaT`k6KDUz=Qbywqe<>H8cWYq%H633BPzDhfE(r zf4ghj%&CtM8y|KQeh7Pfi;Em$7cnaD5JcMd*S~Fb77qKc@%5jGhDLyEsWR?9SGEC4 z=6uLX(xWrPQ6U@}FjlVyCTbhJE=34*MsoohLaIB>fJ_A9i`3X{*tWS87e{I~;R|b} zsJr}~u2qW5(JoJKz)3QtL;kp&07Gnni|>!)D8bT~lij|1L|C2-;^p{MgjCB^5aJ9O zSe;!WFGi0^Cxj9T|i0)!lDIW^8F3wD8hwE_9=m4vl&=~2X%I8muB`k9?VXe z?x(vNibiJGh2CVLO0FM!VjWCn?D1g(-)h-JJ>@>E&gz zA5V=))02UAiirclBBG9i{on82!sq65#VA=1$8%N=fO&>Ie7^^pkq(z#26PA_MR8%^ z@+hXLqeZd?vkYB_UDzwe(w{HmJ0=cTEQZ{_PhMuV;&P@kd7fv>oh2-JXkerijI@sk z{Ni|=(f+QaVxbfKzP=mz`^*Vrwt`TuEAZLoOY6Z?YZUOpb@|-Y>8qRPyL*3ZAl*@n z@@20lRe%!^T^CJ3gNjJeK*-(jJv!Nj#tqlf8(^%6Mu`5>X|WO;qdQt3Rg=@n4YY!a zqF#2Qyn695m0fX2vC&?*Ps^wJDpqzHiX$_fa69TAuTEyY49)bVll0uGSQ-jkig4vr z=sbBc@t2c0SsaQA9TKOM1%Z~?&na_sjRJ3HpkPVOn3WQwYM?`%Y>q&{xuy zFp!I0#gEw!5ZM41za0-b#-xVp_P#&397~@g6aY_EjnZ;LSj0jIhjpQbdl39#8`xRy z5~~%72Urj>r|I%FUz{PZZcv$#t9@#%aXp` z4M$k+QB#Eu^sp}eP7Uk03Ok!57C?XE{SG~C&ml?~>3`>U$xF!w;ro1NvqDUQe>+w? z2Q)`O&kgjx9e%HFg$?>6H7LH=+bl*`CSM<%Vf6WB`Qg&i) zQoY;pC=r1#2rbfIztJMSEa~4|wGWe8DO}eL(%o&YpyQ~G6fPO$YA7+V%Txen$lTG#?MJ!Iq(Q>lRDWyhIPj77^Z5*G!lub@iwCy>Z z%$eLSHH*5p9hzU92_pF)XkAlBzg6po#hz+b3$~b(DCATw^_8fIg>EsfXMgh5>$~7VUe!PWi;-te0>8U zkm+U(Y7iyc`sw!7+zCeFfM=!II?nb!2LRx}J#!*&qY05f%`T>3)uG+=9jK7LU#r8F zb+}z3vQG_mWw#s6Wth>YX9AmJT=!p!^Izd`4zbxk`!Mw~s_1-a121Hx0D&T8MZo&H zM?by?FAPNfzxDV-&_H?}P3IFV*_!?r0s&I;cn~pNN?u-Gz~;M=_s`Fe3kHt9B>dO( z!pUsI;JAa2l|RgXT~;gU(`W;%%tE)jk0{xOb0>Fx{CVl&^Lv9;lTqCJ)HV(ab1wJE zNwZt17k5Ss4y`dO5DM%7R8qhwuFw_O4ggpJo3)*nfk?C@5dCBn7w#W_4`I@4RcG;g zCg=oze>$z?@dtmGiev`nB`M>}`hf{2W2IBTY>teb3vVH6thJf>tL}a+1ux5wPn6dG zn!fHyMmss@v@YAe0W_IP;@2-2DJFxT7Q0912a{=>fQ+dhP!tKYdfKmag#45%3=a24 z{YLcDX~#J167y>b@1M1%%1@MhJY;uat^{^j-9^7;)V7AI3|bG?XD}Ckw!rKJr+!c7 zALIBLb#8pq!!sT&x7o3X2}@P}JHIN#^8LK)0-pWR=Lbw7qLo^s`ky}})h9jO4tEGk z@%E%*bN>Ez+8=+M{qfSS)rr$O73G1emz49(VQG_ypxGgcPQG)GJRcb`;2IMb!6cgreVG{) zCmh6KA=sxF2aHU&K9D!x_HUSJAf$t&(=l_q>{co|b(_9z`R$(VW@LURt-|8(a(EH6*!$L{@*Jl@CT0=1(|DOFh+2KO7((Zw*VpYz<2|gsv6kL=P!q_%Y$Bu*6=(Hy$y@zyxn6e7 z2TDmx1L?m#{~B_f#rlV956oA?{2 z%s#!eHQB_B@;-sy;aQxSaRjntfOWyUVRdEY7D$^GZ-4ykw!Y7v`oE|&P&f$P-Q59_ z1{fN2fauHi{rMIU(t28{H%A9RQP?qaE`c!SEf1|iD#H4@w_EGm6Pl@~<#l>7(35F+ zL)2$0B>_#;@d;I3l-ZNDZbtR@{W-Z?_xtjSN{2&pi0J@(sJ5n47UPTW_)eF?86FxP z@nWH_c57#i&7=#i^bifA70c3W>$jCls_}hgZ&g#Liy#Xc`!DsVCp*b0J_QYVMFz}k zfO!k1gNp%G25NeG4DeP01=yzZ0=~|AZ z5Vn87I#722L^2HA4>^8Sn}nTGFbyUY-s*4)Ldf%bJBI&rcE+naj=9I!^GNd93CpJK z+a8zx)X6=wqJ)Bn^0NJtd61^$`+5apJz%;Ioo8!nyK|Wg_>}tZ2~JvN|F_r&9av$7 z4Y5(8KmZg&kkb~h_g7cEes3?p4XIMGgfh=0R6rS8M-}pg@`o}m6$cplbnXT3W~GKU zO8u_AB#=dbx;;PT-ix1i|*QbIbO!4!OEXXyO4LX#a!usi1OHM!^0I2E5R~v@s|u z5{J~r2NAU%{s>1rD*Ek1^dkIzomGBOf&p_9xieI{n3&$AhEuU}btSsSezF7Nn3)Eo zC8Yu5cS~{CT|_%iH}vinL^?`re$H;qN%Vdux-KlrIe&0|7k}l4I}L|l({(z^NbO?Q z(^L;e*0zn`S;41LQeq=GI}E6{>EJ&al;86qK2DaZm!o4Iis<#KU70m_!CF|U4bd}~SjqIv2!d`se z02!)CgfuH5lHMnDJ+&P9$@m_lz5t72tFlxLgdH}G!{iDNwial_>ZFd?M!?XNHn7j{ z!C40mMJ63*l#;AO`Hm06SBMWjKpADwtn_r`;hsUmy&2JC|CI2kf2i;dh z(tQq3DnsU?399EuvYX6kvtqSWE*pkDeY}#4mmNtK(VnOYx-5He%?cc?$YS%1fyURm z3@;3Il5k_C?iST&L{E0mSYJ(n9sho;{$;8UBF8Hqa?;keF}xxy3dTMHb22$%)YAbW zPnEF@Gr4!aY!0J+*mGb3n}^bsWmOhJk2XdcLXk$9QLMgC)y~mNu%@L%zerrXMZXLy z#WC5tMQ*{Wz(9~LlN5}|(HxwnkhEgT^~d;%BV41A)1m&7!(kwXD_I!T9pFx@RJagY)a>5^_iLQ*=Vn@zW*NJ)1{h)8$0fJkjpx?|Jb z^(}nw{l@*rafah4?q{!Ot~q}-nOEXv;dGz>ver&);I7ts-&I;1i}B7=KA z{FB&ec69U@3{>C2`Vm1wcwzg!hIfT*RmW<;(E{dx2J|rO=Tk*$g%0iaNjkw5iA?+= zf&nN+?=W52hWYeopg#5*r))OqWe#>&-rosQD!WErx|%g!OqwA`X6r8a__>bPmPWz5 zYY2%9U2MbY&}fwCw>=3e1?z21?WJd%O-V?TSoI_jd&27&*0ni> zQD!Yz(DAa4lAW16z|ZlPO8t#e7V{7M0Bra_Erau*8FD+E-rflrAZSCX{jUU{V!pZ@ zjD}0t)cvLF>|vcd%C8CG?eL#cBej500RzY5*FI3f3$^7EQXJ*ftlVN-mjzz;4}Q_G z3Em2jd3+0cci?n#g0o{qNCT9j4pZaX9@dF<*=##glFnlQ)bSq>a)RxWJ0sK*^P-`oj4?GvS>Q3$@Ws_GmUb7i*=f{ z*xL7g>^Ds);L6F7)FrR)F=IDsW)~*DD|H;Z^S~Ytb+GnbOPGnv_A|$d(hVo(L+jy8 zFSmaCUWK_MmFbNu{YNYaZ;xR8M+VOtE4C7&X?Z?VCCKRA#~FT<(9|jwZ|$1Yy0qj} zP8$px3dYffLAjbyu&kiB2a9Yyt**S&s_x-iXZT0vHJ?=RsO{V^A=C8Vcg*>N#%HK^ zSk86?rS5^UeW75FjSEcMF+G&1goo$9{3`k({%K`V*&rwFw*KG(HbI6`=iEOAVH}|l zaQtmHduE{D{EcpwKOh>z+hM$bC55l#T*zsiRL2BA`fO$Y7K{tqGmX1|cX^%N?6@-M ziF@e@{SWIZvz!`&Rif2tr)HoBOxWPM$pa5k63-_%nv4rYiE#%>yJ9(UUN(MLX=3PMQPKXb^9h!0arII&Kt(9IlzQd3Y7TpK>06_v3E0g<= zQ#g=6w$5p`GK?x#a6{ZKHntdM2pkyhs(UFp9i(QwV#c-f6oVCHM;zUuZjY8+q4_*7 z%v|2*54bRzBLNF$d~zi9 zkatL*o9@Y~C#RkSqX~2^=+@`CkmZ1LHsqQ~dDKgt0bDRDtSvq}QK5hslP5r3YV(5t z6Q+?^)U?~-iU>qg-iOovU8E9Rx8?1MM#1+*X}y&LJHewxQ7UNlQ{97~{r^71JF#up|k z00gA$j}>5gMeDb_3Ewh)1Tuzn5(lj3ZzAP8;SDiY+CaKRY6M=EsDIXzC`3-RAffo@ zTf5(wlNPtY3gel7vcyY-0xMP{FPO9rxf*8&Th=c1N{Q)tPwvk2mKci9t~KKM#SGIs zzk8cc#_hZUJ7s~$wK@ja`Hx^xKy(TN*>n&+i)w+K_Q=g)r?8@EFwvst;8Key0B!~0 zrhGjHc(z0Fhe9NKr#^pj@6X4UAD~M!t_utz>l|ejR5{}&qPLq=n4}dI(Sf99qMo>n z{(coT;^)Xx+7_ai0Pj%2qcm?i8Z)P0CTR%?N?0Fw*@HT+jMkj?-9YDaByX%G0>wKk z(zMXHQZ6%elUhH0q2|_&qYpoBoCdW@9mhStr(uhxX zZV;~)f(&h!p}+27a_UFcz8+L;z<^+MXeQ|Xp!4KTPy-TMPjvuRk;g6LWPc>v_s~3g~H1S zoCt*U?2+fK)*Q)Jl+8RcjhT=-y%y zx;tPJvJtYDiAP8}T_Pp_M?*(Lb08Diap2V9#EKeMt}KeuI{mUxi9 z5m@+^yOr-Pz)^Ubhbvs4KZ2UgnDx@bjf;;};k$Pdvy`SlPRLV~12z>BG$pXRzrRQ= zEShiFAj*R-sgdZtk47>YWQG8 zgH7F%xWft(Z$rzkkd+WDnV5>={-X&9CCLs9LWLH*OD@x?WpVWW;rU;~zU;3Y2x+KLXwWmbsCc}GL;uG-Z!nbKSw^fc8rkg)fy)*?*e`O3qpgd#i6%gVGwuu;>ee`eMIk5u~L$ z%8HMuFnbY?Zv~C4#Rw^%{CS7{$N9H|nW{7%ZjPbXHoXXP7@nBqI0m)o!S$=&vQnaegIeRq7$B|caaCh+BC^lmqhzLB>__Ibn1f1^k?1Ug^X!7v3?mi}xr ziHsCm()m%wN{)TH)RNuyR|&z#*$(0#;ff`lS4CZ;{ZpNKsxdn%x01wLL>S1;>k1(Dx`0PS zIXnF8e-TrCb)hZ)$ABN*c&5ti-x25z#jZw$P6xdMUM1UtUNb4tKj=*%= zeMux7v3f2==2K1SKbjGy`X~d=Dm)K%jvN4Op-|t;-M{64r2F^z{ZINC+28-v zt~Lki=MEwBb;~wiKbo^#1k1lv!cGJduxkVV`}0uj=O!39C}Q!16qv-XNClkf5G?Pu z&xzh3==`=O!($>;e6CS}CT-SJ_`Q$8;+Ke|S#ROzKYXa&FXo8;GpFUBt%>NcdI=a} zdQPexBZTpcq4(cjW@wkcS;=1(+vfO_YR;Hn+5ENGBJV|-72+WywbLgKE}Im6$5f_I z1Q{e5c{jJgNuOy2Ik4?5d24%XjDAwtz2{T0sadB=Gvu+P-WIdMkf9A?IFv#YCMxOg zwybo1#>Hu>R<%a?Q4!~?Emki2$H&EzBbx$*28Hsij2(G+p6^IuN-=&(i8=%j;epR`Ly?LDks+7r{ObRzAE5Rb@{!TpQHdr|^TSURdgMNBCkz}BfL6gktb4p1 zn$5(IPXal{+?bivksRj383O)`ck!rZNHr6O#QpG5aO7DvmrMTHs8BlOzBu}K-xX2= z;nL2Q3qB$}9lHLn>MlUNCU~LQ@dQ8EJyQC$0ySX_k_o?QwyXEZc?IQ{@ID z|IYD=RwF!6g9L;!VzkMfz@;g5($MAJaMAeK!8hyCX6ZhK{` zQ#LCMR2;Xa|4vK{CK6jxY#J;7LQKmxdptIz4S&Z7so*)Sd;a>i6^lxAW-FJCE27M= zeKaV@$jYpiYf-dRP?OK?M<9U&)o*qypw0Ov=`dTvBm@2h-yvcjN_B`dl~UM^!KcRD zVq5;dmFI9f6dwvbO=Q(2ZZqY8^SaoZQ2^oCPnQuN75v%C0;*I%O1g=XX~;zL+kWH9 zWaTXVcH7CM$z6Bb`6|fT)TyizJ(BFP(sQQ1f^X~*p+iTrw!@K%jgIRRpB+#S7i%(q ziYn%wcUU}>L^;2Vc`5&fm1G=pX3m_q8sm`XYE?cj6% z>bSH%q zomR)0VQk%%L#L7NhQi7jxDBV40p3fs5g)!jQ;)5To{i_fQSg;2TqbbJ6=OGLh#htD z!`*=0G?P&?nhBVwzNQjww!FBrv*DwhgZ#eS3`+R@i$eHkCd$y8aC74t5p-izgd7fp zCiz5WO*nGe9MP*~#5V}!UgD%y6Xk|W3k$wSIi1b*d#iI6OibR2h1QRt zE7`ycT}Oo`;5#^;sEh!3>B_j(Z*l?Z@sWm6)9Z`t5NHI(Q?W$I8AxV}fg?XajSn;h z*E&`}uQx8H2D1jQv)D5fW(0qRILm!3ucNDGjnYfzvn*oY%Rsk^hUKq$O9n}xMH{y_r9H)Yq1u>*Di<)nY6V0!Q2v0X`K3ot#$YhIy160ijZ1$)NevE z{f0<9E473gG#OgNq0hc2gOH-F;Edb_A`~wbt7k!^w^+%=!c- z?w0=;?4-GHcO%gJZA9OmadK>?Y(yt-l4fi%O{lDjzzBg57Sg_EcitFzCs=P!0=w5j zEJxzlRmx<0jyJ>p`R-MP`JG(qr$xWgG;SNcdV|9Q;oCFE{li7~>pS|GvZceZy6#-< zQ@N1Ql8j6@j6NT>V*I3D;}+vU@tb`vw=wpCW-g70&q=-P3I^_3L)Q z&vD}{M3%25Te`PHN6SiEo0Boq>Jtxb#+;`f91kW8+|B_qa1wz?wH^ zy2J6x3Z>&FeXBJWQ9>ha`?Ej!#=hs;PU^e4zjn@t zQ>Lds&s{!pgOK_7Vt;jfcJZ;@+thK1Uz6|%HujNgTS;9W zon%TR%DC3layfHA|+$+1Z0a-(UK-zttaG z+BC(vv~OLP<%>I8vo?EQSHST)=1Ivd;%-Z!8c72#`XRnqtHxPPsVJGlJm zIr$y*adgQ0!?2#u4OCQ^L7UbZODHi?x$YUGXLB}@*z z7uuXpOmZ&Q2B!(%!@3zC>V2zL$0$bojr_cp*aR12;dgzrfWQ5E^O|M!;oA{XAlIJC z*QL@h8eD|3%r>Nud}#*p)C$uEU>o+zY^kuEQYH_mv*>Hbf*7)$Xo;qXij@qIy zm{H7^P@4XBv0(|+rw}fGdGvQ4F82lr{-pfld0E1ZYtQeNoOTkYkf8?Isx)J6d z%J>zzUU3!nw{njPXguROThybx4pc*6xo^4 zwi%VSnb@`&{Fv%)Y71H9k9|ny(w_pWUIbOW2(0P~s_F`?lE`Mp@Ju7Rb|06mqt6QQ#(1R`gO=heXRZ_ zyf{}8x?MfXsTpVq*EemFuIe%=b1!LgFBx-#=s}8YK=>x8qZ1*(Xo5mJ#6r0P=#ayR zp6)yV-(a_1GiLiBNNSV5ZoNAhV7Dh1Jduvdj=Mpvb?Who3+zS_!+a_O4MOu`4Q@PZ_iYK9!J)8aFHP;Pdx2?MO;YT|17H|Sg3Y!~V_NE89#UEw$L z^A{8bkyUDP-yJO)`rzx;a4_HC+84?SE{xlzLhm_qRvm8ZD#xjL3w);-doN{5(IVf0 zDN3E%?a84HXteK0*BY+v(n70mp`U%LV2$lUi}9M(v$lvMOq@$>9UQqcyJM zo0dVC=SMdS$K5i1=Vk-ZrL$c;0T>$*=$BR-7h68PV`;%1!hzxyD7V3UNt zdD1W?@sY&ZOkE7tr7e06gKB>pTybjVv)i4oyN_K!&CLof(W|IgNM>E(Ucq^t-H!It z>vpWR?X`U?Xeth&MOOErOASpRp~Ew|PqV=(i*ba$`yf3L(&&3U+saZegF|s*w#GKg z`*`xa-r$JtBU9{xo^OivE;XdV5Fg205=qWtlkWRctII+yq`qj4F@~Jq zJEJ=_Hf+*j>^FxI+NJNC$G#ayn_2GLu~wUy_}geYl)k2hAmec(ENTsCwH^H zCnCi3N0UL~mLJ&@H_28U6P|63n$cr;v!bOxTW82_T1Lw(K>LQCi-AXQ_!Att=FNiF zbaC+j=pQ&u$EoxhZxu%jiisbbFQEP3&!1!O^5H$4rSbEn@cStEyr0O7`1^d)>ELh* zb$AtX>&Eeqm5QAC)S&8`5G`UT{%hb-MJU9-DoLvy97XTsaQwTh66sHl%}BICjX?xk zTTQ~Fpxh?8S%4k0lJkASJXjps__O`apzw8vVx!llvzNl3?K6&x8(vJhYq_?gn=wVDZ$y(fg6j`|#0h?^d+0?eX2rqkli@ z1DiOu$0zZ(4R7Q>eS5czPhYvbmN()XE$r`j*LZonRj(}6?sRfJsW#H8B;4-OwA_^% zSZ#r!l+DWTRJJ_b7)ZN?iDU3`+P~6hq##f~8N;ttuVSd$sM_LF*oV#=mTQ}`&GM$S z_B)-2vEA#4vaLrS+Q-85Yl!{kNK>Ndn%hH-;I-&{|KoxE1JdDL<>GbT!A4X|Hs7B3 z;#X8pMCwiKqyAeN0KXLxFx^r>7n)pYMQOS*!4vq577%)=Q)?~m5M50wo{e+cm1DII zjrF;GMQ_FyllXi`;BU7a+6poyUnU}Xn{pf)%+UYd6^QjU;dDUO^UY~uMiy~)>~c2c zN-BwS)qm?h((bjTvRO^DafM?9?t~6J#B(hS{=~nMZIK#L^$&C;ka&ZThVmrSoelyz z9%}frt!#fK2AVrqUX1nMvM45gX3Y|``v;V?0w#?NbwT2uCxuP^ z0pwSkk0$|e4OlWD_p$60C*b7x&lO3Dr5hCl=rB`gBKilGh6YjzJ@^e?@eZ}=vD+K~ zU3Y!ijK}F};y7wdqwBti|4qs52ZwU43J;MwzZJFLZyAtu{_Bwvr`g~hv45opRLPh*9Ha^`j9|U4z<|PrU@U+7E6>; z`rY>&X3$lE(>ZRt#gW>-vjr?v2F<{FcK1r?0+xmN-gxBMR#`?9yGh6LVV_ci>+zrb zSW^pyEP`$7rx*uNd>t}Q=c}xJfwuC({+ejmX6H&S4+Y29Yw2))lcMIm1!AR7*TjIS zO^U-ZXbf+gFFzq~gndGfuP;A8YISuO-Sd23jQZiQ!_(FJbQ0V(R7-8`{&Qt@LpmNM zT9ETW>C3W(53jYzJsywG^KwfoSGiiP2M^|5E<-J2R~@9STUf+XeLpTK|TAy`6=90>X{ ztx5(v%;Hmfp*vMGWb6B={+7amZu$UEnC)Tl)2|np=Ocwb1Le>pTS_7OO0vA{_4{ku zW}F&_(VLU-Q%9NFVnNn40k-9fyaEVujqUu|MF{X7d1#btSq|i|V<@$lvR*%kA6FAu5 z(ct{)^~~03_3)O3-fwrk-^#5i**+YPMVvv3;#ZA#N0`^fBqx$aLj`vo@2=fP2=xTD zmmvb8%Q}l|Hl8tMTi1Fc-j1|~i&68&PgKu+7v0(?Ce`xIT=u?CrCv;1N2&8hJ@pm z5$ovC%H9lIcp5SMT)tD5}JX#xbxxWFJd z%g6xx#TJ1lU=N;_fn3a#^t`ydZMMi)_Wyv+FoUv#jX#OE*=Y(G_EcDgA#mit;vYc8 zV@(JOw}BT%^u09(j>PW7m7xvc%MPCgjap+ISg-3Y_WtF53QaetY4@F!-h8hO$8%NU z5BnmQDs0aaoSrQ-xh+*15A-9-dbu4mnfIUQxwbX47XNj3SlXVQ83_M2x|>wCH{N}I z<2hmxdknm^wz^x#<29+TDVwo&<_^Oz^A@P)^qO4+o3`pBr!9b{V{f$bw5?Q7NV8;r zp>=EM)ZqQZC%fjR8oPGSNw3nMST>rPX>mdoCPOV0z~3PEZ4~(aG6c=M!jeh_Yp<=7 z`*?pSt6E}B7!UkBuWrkpYLzTh2?|A-Ki6*dxUO$)Yje57(u8r8 z^JU9PzSx&Kye?ipgLBAs>XzveZgo32SuVe2O%)WSJs`_q${^9ZpojQVO>d>+u+DWv zH9IYix9Y|aVJ3B$wL`9T>fIACfh|Oe>2`@y7H7 zH}#l_DfSq&n_-w98xzR4)})wUIKQMZ>QokOu48%pMm!Xy61JS~5HXZR4(?b(C2{-P zYbSsn4M!;^dmW~feI^O2M)HVmi}~?MrKF6@{m-Doq1$NKIzYxIf9kYKuQ7zVAAImD zd;2y9JCfi3YNCmr<$GlMM3dYpJ;X2i3^SE?MX-K&;akQu;|iwv;Pvd}{Yq_fyi8Qc z+IMM&9wGGX^ZOV|-CFFk3wkviYq{+Bm-DtsI}?LVQs!}7Iy^s)N53Gn-s|w$EjGzj za|DG(QF2mbb%-7Ifk!GUD%kk=wwPf^XyH*WDTo z^eVDZ2}9OOKHTfLM(+uIC5!huhG}0#h%_Fe32^ILT)a~MZrclOQPb~DMb|K%!f|~T z9-!nwj!hjexwfgCeLtDZ+A8dT{m>+O$5X0bWpchs6x2=zclmNp1urAQ`!AK_ar?n` zo5#i7%g2g`17C8#1HIkqG@*dr&qNH!vS4f3PB9y4m4ttIJl^Wjc{i@86r6soyv9F% zv44%Bv;O5?>K8;YofI61#VvP_z1Y;?G==nnA2?zQl5CHL`1pvqVwv56J z3Y|3P$t>D5qeUEKBNCj?e5=;%*LyuSpNNMynbfYFqBjbDdm(rH?vt2pb}S*yDop z;Wo-r2593NIF5KQ4_-c%B=Iefw#bcRc z)o(@RLsQNNG|#tJysm%E&^BMX+blV)chE#^4erj3DLyGIlNX%vc2371+1aa9|2zhQ{p?fyUVo3fJ4m=`+b1; z>C%TWnsgy&c*`^tE4xJRE62bltB=pFNXDx@L8o6S$XuHjV3dT1#vs&}&rN`K%f^DO zFu0Fpz>tYOt#Q+YXvLh&=C>dKY#U;zSf;x4wHh6Z!1YZMlijc6GT-dHyPI{;+SK?e zv)<@z*_cwdzSZqwEDDn4t3ThFQH%gP*cW6?Z-2?dywY)@uRrISa=efLBDxpaTqd_d z`SijX)xLL|sh@t?3teEN5VZSArRI4<=z^I3Tt@{(%~NN)vVSWk%X;z0adH$n?#?N; zdRrx=)k#v8A++}goQ_;4{=?Pw`siAQ%|u{)nvgSvP%);(1L4lI6td(U*Aod)b>`|V z_dQR1luW#Q-mjlrN9gj{@jA>Zyl*BhB_7G5-X`JnT}|*S1K?4v2_mhLVS_ww**uk~ z?L_cO-gsU%=tM_uos!Z5yOUQczOdKJ#0BOf`)Ko!Vs^cv$mL7~&Y0S;o!G`_5CTpg z2O%-I(oNV=Pbyp)CVu~lzm4H_fL;w3?7rVx^Tx3POR5rOvIVn+U0!f8 zoS#%eo<>GR;&D22jzkUun-r7Wb0dq_>)Lr^30yS4K&sX2^CS46TNn59_ER(+L`wq( ztmjenw!;ZzU=n@5LTt#b|8N=y%DYg57s=g$zV}3lLF*V}c3f6@f*p<}DKj8;+6`L0 z=mglFdWo7y@XBT}L}h-4yJ@$^h#nDr%z%f2Z3=bpfUgE5jLY$hoRFt_;VSUhfF_pR z7Js|D5y)u#is>O}7M3j7Dfq~YniCUdhVA!ti{^02!T39;c^2FHgo3(*+Br&|u)j z<`)o1e63IZ#y$>F2La}<>Vkm-Ls+rV^gKt#JX*j!pm1>oyL|E?VqEypf-^!2jDR}% z&dwmwXNPN2h_J7g+%_o^OelSk8Sg(vJm9{teO~n`g)IQVCBl+#+m%8{@@2#f9 z&c?H?gu&S%9jyIJR&`oo-s|bbAWEIOnRYuyb?=^$2+&G^p{L;amheg&JKP(Z-<3m z(W^e;D6L8(x#I6bN%t+5w@r%gN6@=v-R=IuQ#HalV2iP2Ws|tuj~`6+uoS6;b0~KO zQKNk9DeSy;&rAHpxpZ;kHMqP|`3Yb7;N}9dkIb@`Ez^0vJ+a9`DfXBH2P;GgxM;q2 zT&zj;^=?2GMf30)!NvJmxXcdGm0|AC;D05VbRDzP+*u-kMG4#gyHR}c&ipYF?#%~y z=yu!RS~QptPjgQo8N^1j6vzE~vyp|2gQ*Zt%&;YkssIs2E00uzl4A;}aTeu0;m9y{ z%7t9=mLF0hgfW}nsihdzRnvo^vZ=w2he?@sX?~6N+sq9UT&sb zHBVX(=mlxsV(*BQpMInZKHLI`BhM1{J`uhbsq;D+h^CQlGFK!#7pCsMzODCcZ~?_0om`73x)c}kb?eo|86 z#pNU6ms`ExJ@phF248-#wV{A-WqE||h?0I`WIDG`M~-y$RtUgY3O4JguJ@Pm5m9)` zbPwki4P~!{&);~q$@UGGWi~S{SDB?BP`+6ZI_%L@F8annlV5<8kknXe0$CO|07aaDeJ&f-ur0}M&KyHT9eKtC-Uu$P?7J457T1B+X7J8_2Y@$sC*xgvNPX269{hs* zOddPSK3r?#ElP&AdgYz6)IL|#5F{5O9hxlRt?*a&BLO(_a`2RCEpVj-9f;9V`lXHM8_VT&) zGuQhva^B2B{7PHM`{6)w&iGQ7q&&ruE`}-MMbfGDpD)VTexwyZJ4Cjmm?~)3J1X2x zA1bv)$DfNJacQ@};r_=ZhR6ozV7eLHtMlW(Go->EGsDs~%bI<+)BfC0raF!IICz!o zG`MW8GtEtbL_t_~=JIEBEWrx9zZp#9d|;tHC_aKy4$-~@7q5g4R!7Idlu&8=kc&9y z-bsXZj&8(arA}la|1n2^am~7-o%)E6gjn^(8UPCCDr_g$bT6IMtkt^`$4R!7vs-;0 zR=b-o91Ln7K;$P)3<6Lpx}64oD8tCCFI|9no(R2SM3U_!bG2DI9>sQe^~|l^>tZZ0 z72<#6vagV2Pn4iS)@XXr~uo1Tr(?THw zp;TPK2&p7k^yQ;q%+xC#91Uq*kP{q@t!u;YE8~A_@gm3RN?ukBD0!LqkElKH#UyW; z;A_;6rJfcuDrLS&3Csh$1S#0WyDAm=q^)3w^V-fW@F#vkfLl-eo7M5iQsv5(l@yk| zh5f57#HDJi?y3K7G76X;Y*1qKJHKZ!_S_%edl2!wecTJM0n%dzX~yZY&@D ziTfziYjg%ypl|5(a5`3^OMc!H6)OKf_wg2q+vN||6Y&cQLSAUpzgA$!knL6u4M~|GFf(wNtt0teMnidcB@KBfB5mP==q{lla~ESH^l}+TyqS~;7^!BAI7~p zJIA~%9=QwGfPp|%Dq2M6`TAD<9a!6a-~Updz*#wEJPSi*?SX(x^$;#p~?VQCXIGx-(H0#Ey&# zMjQl7PV|*9YQL+^bceuFa6Et#_hnyEQ#@eXd!Xx1@yp^b055KCjN~%;Q)Bz-c_+Wt zmj~OzaB&P59`xY$-zr@;B{yH1eENGoKS76##3HYB=@-}9Q*AU7b+<0X%Xx#lqv|mQ z^Y$F4+K{39m|qkYDx<>|9!?K;$5x87{ZwjQRw;di%N&iqyyPoRNzf} z5iGaJMdiK2iqZ`+-s&snPw&m8#x_l&28M6W^=+5gSZ?~zACl3PnrOhKa8Xcfuit#> z>eTEij{BBGU|)XizM;cmL)v=4fpcbXAmpb1HA zO6EMoC8}0arWY&_MCN$1v?6Z(v^ENALLR_im!@+Y)_a&K2@R|M_DaF{`qugr48w9g zjmtDO-;oGAot@9_KZ(NcSmFuXZEAm0`A4xf3dx|8sLhvPnKa1eYRA;6&f;>Bseht7imWRimo z5%eJ+a*zhOGW^H%1A?SR^YVA()Thme-P+(7{) zg~#^0TOc}YjYXW5BDF#(WLOewi-Zp01zmhrWc|W(s`SP0M5#N{54$k!zuIZr&4q^W z7KnNL-cAmojrbTxTB1%KO4AoSt}XR~6l}z14Wg+0>(Zvd&y8R4Y>DL{C@&6FQ>M5+ zq?{H?{X$(ljq)R4j`p#5UF#}q?m+wC1Y?VMsc<%kVGc z%;Htf?mVk%^vxGmJiO=y$A*Z%SO1jo%l=yX`kzDl9zUwrTf%Dj%0`LETrA_g>MGj9 zt$YE`>X{hc?pJ5U&C5=T8aywcldr}|Uu32@?U&F8Fn|?Fbiv?}R_HW3n>ns3m!su; zy9ed>r$-vM+lzj9Y&M|8D+I+gE)Ws&G%>yL_&Jdch>i`CjMkB2qrQzmyJXBdFJjx{ zSJPev9ph|_tf{UKOc;>^DcAh&u%MPs+*1^h!RO0)mKX6EpG5^{!IZbtlZYK)4=h?B z8wMb|XHQ*Ryf(#K44fwjxKOc}H;w{$Pr8#O5pq(|EHi??!dc#-r=Bf??W0drX3(%eQG~-cFVB>WiZJP`*!fJlFG-l;j)*8>dYPd2_c))hdLX z@~p;4xHK#{AmsABIWvaieg==NPV z9#n@H;)C$mc~tK1?t7h9aIBF548SjdHCYPz@c(!-$l$Q4L5V0g5ei_4$BTPK@tu%@ zoIekbG4O5ZK`Lp+jO~e*qScRX#WsaWnShd5qTu>Uv$Ti;cMi{2Xq;R5JO4R5_vl2d z#Uv$Y6H-K>++-5b^z5A1oAfcXm8hBP)p4nX)p5@KJ}_4a&E>!5++OHs_?Er+4z}XX z=zYxVNAe)RclbkC;*aLdgY#t?dbIhe>&G#=G-u}&o^XV!l-H8zo($%@`YzR-X+36R zN@g>^0u_;&$C&??|J5dVrY>8< zneA7rm;lsw78_^cH~Mw<1#k-*dUkr1Sqc)L;hIc(zCeTK;J{5xvk>$Iwy3JoOZ|IY zmps<6sl+b9@)OU~O$8kA?cFT6FM-H~2eQT|$(qmkCninHigWt7XCfWzD2_`EKHR)BF5wC3(2pa`THtnbaY_aW5McC5Vd2 zD3z}0KzX=&U2(y-k!AV&7B!=(a@?WhAtheF`Mvz{&x1_M zH;y%fc@j30dFjU{vF|=I`7c?5663GpIUxjN?j(7+Lk&&K?bmkLe)gcJBi4SgbJrxxi0{E!z55OLTW(n)W z7h}_|3I^V(?3MPH2v4xn&LfLJ9Hla17AKe&rInw&Q9#GseRLkd))vqPQp(5JKbC4& zGXP#FlYcY7Z!6RNA7R9f&}2JPb;LajXPNP(pGs^1?Vs~5XX2MSxmfpZL9)S%c)T(2 z?Y>N8?Bxc#YG@!rSdl$@1vf12Dj!Wz1xnT5MGs49m0!k5?QS1A*vG<$m~_W z0a{vV#tZ-0LFtQX*?OLIb<00EW-Qow`&DkRJDp$?#R;vRPKiQu-s`CU%zAsTkyi#y zs)=u3iA~$`)O1+XI{wr$Cz%u*tl{GO6cs>>0CPB#Lo@yX74rq`xAhKYlNkBa!zo&| zI%$yON2fXK!U}M6b={zSYQWBve;+YlYBu&@68{fJKP0Axk7A>G8tuX5boB)oAaJ@r zz=lAn0oI@|jG#I7pCrM~IliT%hF1jdkMPy5nE^G&$0s$Ys_LT`2Y}RH!2y#Sc#o{c zzoX>#e-KzD}-p0^V4P!9p*ugyUl9tM!aI5bO-L{7Lf5eO1D<-jY1PVP{( zMORUWoXj)~2&cIpiyhaXR!MC(y;s5)OVf-CzeTG&+Ejcf~VXyvguanr68P3t7W3wpP z=hu0j_;f=KtHCP$AvZi(#a{m(Ro@*?_5Z$qj=i^RvP1T4`ZNHwc`+42heO=d0AieGuGn-T#Xy?j5 zt!$!qc4zuab|qwU5)b4so!^G&>MIifbCxZ*9f4J}u&~Os4!ClT!C}wChF8(&%ezy7 z%llj!1VSbe8hTPdz~TSdrLBpXQW%SU07d0-=;isJJfJvZG4x!bQ3tq(MS;Xh6t^Gv zToS;6r4aA|T&qffX)qe-j*Y8hAdHJ{5MMC71@10I*~n}RU0W3u2Y@+*1Bu{a|2b2~ zR~^oYVMxbFY^!{D(~erHXPM6E828O)_2H(3%?&BO=XF*5 z>DDUu<2bhLSZXqIby|#;Vh(QV zfRO~f+2WzXy2u6R=z^n6#)K}&qzOXy1zuKkq}UUGBGJTjKlHoYhrZVAQ?hLcc}Xzo z2V!d@M>Glws|CWT08nwAr)$1{`xXU|2I&B%qcai(cR&C^QBe`_qnt~94atCPg4Mq6 z3$0oB=p|kS>9(BkcWs4HcR_u(5-y-&Ho^1}-N8V;VFARe zjCrf>SKi|Wk^^+HN**(?rDG5Kl3%FLN`2#s!d$<%VaUE;Uv6Qwg72YQAQ|1k1fSzK zu6o~}Iz^|hq{1$Sb;3q50CmGfIgAz#U;{A`Pp3RR5HTTn@?g>wl{KHnnMye3Xn5_L zHD|3KJ9gXTJ#=O&zhf7s9R1bo^oZy#;(X!rU;_8dSwmKyoUAT_xV%Y|d3%l2L{F|U zNRygHCQ8^mkF-PQLtuh+nR^uf0ncxQR}OrkirapDB#A92KGt7s>+b};cxPf3s8eTE z3A?VF5fdDEf|>5>y!R}W!{VEcvJEC;tW^4(>t$~u-q%-pvRD%j!G2F^O}~eEl%+n` zDvCmbH#{Me<67VuOK}gAIi?G2?lqsMLdGQ#t*7{woEqKo&_8$rRUR2_wP2yP{yts(d8<`#J5X_Z91d#q$(y>EHxucxDW6w zOLfAiw~GrqOFZG(o_R|jpXWM#kF!#nIAL6jS);IYCCwSvOmS(RwRpzW#?!4~5K8qS zjMz*rIbee$R~N5%c2R#ZPa>hB6E{de*!x7ify@#ZZB@&ktfLxv$bRNuuXDc+o7G~x zWpWNyPFbjJGdk7A!sgMN81FCi#rgUe1yLwBU zAm>0^s7o*Y?+YDiaG<`kKKM^Ld8{|jj~S6+hSL3j5>&J-*JA;g^5?H^O!C47H>4FL z$q}Hy%XRvD8!QO~%*b`jrYd4OA=RtfHjP=}rIbNM!SKHc>gYo0% zII|lOlYPU-lY%2HQ{Oa{`|rg2@^p>zpL21G<5D%+PshX!zEIONq{|ahm1&jvF}va^qoWXwVA}gLq^{=wJnv_>hhRe9*EFeJ zR)N{+!ccjda+a+16`*+&Zk^Nj#6cm$Xa-s{Z(J*KcV0ZJ7Au-Wa) zG*BM+e!qtR@*%AMv(^_!#-@j_aY6D&F%kj#I!WhG6~K>*wgU4J0Ny;>kFqgeDw`Jh z@_s!>*fVBXUkq)v$7@GUp1L-aGl_AYVr+JrSroT zYDj*}_^T%*D|ecnXz-f7dZ<=7iLz}|)r(+|8fV?IAuZR9$fr(gA}iY-`XEpKL6de= zvwu24Ly2%i?_|LaQ9a1uYS;a)Dj=2rg%T0I3vnT-zL}gqwaxU)NE6ZdnW*BdRQ}v) zk}|`G^e|KF(*tfgE{$aSX)1++IuYTFMgqiYNv%~Sp)KN?BX78KbJ+CF21@bHd$f<8 z9+wAByGEx+Kb(8m;b{1VA3>QlO=r~Dko5{N<$*+`h*h&`4w4=4xK%r`OR=B-$QuHg zj+K|KL)eaIU)k;>CFr4m$woQVTDHq3J^V}XPn!X@ZexWc25rBdLD9wF6JB-6hfCnq z_}&GKxR@IhutmR@^rOD`CUBH`FCv@**FWR6K)Z8X8GLVtT z5<_j=B>M_6dR=5Pc$P`Jxcsi7|7LgDC+gn!6RtUHZO(xz{u zaE2WVJ+q(|Z*2jeohw#>*VTxm9#I|xd0do#C$Ulvh+Szt>Bi8m zJrycg7z{u0IUW?HNPr`c`PHvNVS+H}AeiwSAaOQdCz7F-+rgUva!0OA56f2sT-5SC zK0hp#E14hQcx=dkFdBeDdm=JEFf;H~z{Owh@yCGsK|v1c;< z2X##L^~!XLb?=w8n;BZuN`mMX!VB*HmBJNzNmITKNvWz z(40={g79x~7nGKWCQeEGGdd6Igty1vy!Yr5Y8E4;I$=IB=Tbn}GxcL3X)oWj~jOW$mX6uVv;*78pLd0V>bE37QH5-SstsYBUh1@*t}@dGb(%khCy6x`^P%nl1_5$`6!b!^);)MU z7zqOgk7xlppp-P^&w_s-WZ{K29bn2*kTJ^wSdPO`3$5rGG2B=q(QozM*rcf9)foIF z9p#U}Y5U*L*1aO$R0IY=-i$JM35r)=8kUn`VNyYqJIT2}(lB2l0X=#cVn37}y>lNF zEDgv42*bufg9gqwOc~5!PCVNFwWuHnFES-k68~1gtDA0;zwZsJ#i#PzGszdtBg`Au zb9dPrX4FvOZP%36cy1Qr)MS_kzbn{y196%j7@76#>xV=sIxh`4)<*%H%+@?JinuVU zPpQg{NMS>|**-qIc}XhE@a52AI#06}I$NHhq*+9=r$W1NOAO!L2Puxt>Y>Ts|4_O4 z?`K3pQ3DNKIk@Z-ap@AQy4Ln7!c17avx#4;hK*+pJE zPgRNJ_j18O9Y4Pfl>Ea`@E}zoFaY*JmBRnp}Nk3b7(q#`9IO}CVU=FSwtU18HlL24AW$YmI{0pcbgq8HCuF!lIMjJf+ z=lgnI4)qz`)BH(#S0$e5{gASn=xTj#de%`Jwc3|}fMi0V0CCfNl-+@lGLws>_JixZ z)&t5QfTEG3n}M&sVrF{y_;2lSk#brRbGF*|JO#9?lP%eZOkf)Eb43y@6Y6SW`;PQS zdiNRv>85**1NS87G{ZmOE)Li5>IM0S(FxL9wRiqx!=;2y$|fNyVQSU5M)}zNKwk5- zLFLFtug7CCvBroLnCw9S$YlhbWe5@3&ocn`aIxV)Twh17ct+7jOM( zZJLX`f;JC_VpqX<2L~_Y!sA>oJYmr*jVf*thmSg{nTDC>J$# z-YxK?3(Mf&$`DHwD!xJcP%l}EUhH8LpBCJ@tJ^+^yC-vmPzr|9DI6AR%~J=aIyKPi zM442Z=z`8ZnICANl4~LjvG% zK>GsrtpiwD1%_iFH3;*>V(MVX3-@mSf3sU2e1KjfQ$Z-3Lhx_bV-voAO|K3iC+Z(Z zX^Z0vJaFK9IKmY#&kj;Q0n!FcYY+ZkgY6Ytxe>{P2ByJdK)kVqpQS-DYid*=y6*Cr zQl`5s$$>4p6_vlpB}T`}rkj^Rn7c00M4?I7T{03Y;nJ%c z)j@_}uqWDjFHP$7uwH~opbxR?Fi1mdDLwy*&nKnpv8HE}TO6!2{sA|K#Nuo-8UKTI zrAEzfady>k*JYcRBtCEHd0mD?#DWeG#R)6CE&=AnVb$$4m&v^Tk=-gZBpa@W+K_*8;ENDZ)Pz8V#VEM6< zz}1MvBV7!?3}sYGWm9~LkKVnJUT*rYhvH;ZnsmFaNXQQUv?&;-m`{eV*vMEsx~& z+4!+L?G4=>mzs^^{Qc2_5y_r0BTb8*FR$#TU6(%%9|{Ha2IO5Y`nBPP#rx*oH)}IN z3&u4Ex3<53hHgxfiTd!T=e6R(e>PT7xJ4wSB8EhJ9CfD=Oy6g;G(U8Cs9`%un(POU zKUMa?ap!L}JJ{+(VQ_t>{^Jh=@0u48S}NjR*VeX{ToDkr>xgL8twu5;3Q52-L19f1 zU}eic4WJDU3|x;zV2LiQ2#9SRD{a7Ay9-DgP=Z_iw(!o6vIWhfFlc-CUz4f%ghHwF zxw@!IIGADpr)u&oLiQw62FQpGz#Bjt0Y3H{2!_FM@Vl_?KLa4F6j+wh@z7x917P2- zBJeP%eGhU1D4DR;WGQ&FD`Ck~piZ_X*8}`<`4Tb}T+Zl5ZOFO*&`2+Bt1OtL;dbw4 z;h{Y@fD~yIGgb}&MD^Wdwed(}_EDIv7nrET1(+4kO5;Z(1w^Q#4PjeJamz)$; zFT?gS7c6S-6~mpQ(RRhlqSpNKf1GVdfMSwzPwJV$P$wd< zz1If82>)ys_&^M-(4VvKL7Oly3%w24AShE~R7pjO`pb+4pZfEEk-VYj!$07~Qid$l zm^I4!{ZJye1jMA6{own!N>HoVLJvW~_FoLd$9$>X9TQa6qT(%dr5NN-DksvDhU}?y%D3dN7=|W8*vcJt}7~D+C$Vz0so0VoUqY)6&y32ST_EJMnrAc_PGOnX*AcXXE z`lay~+bQ)cer5(JG#nuob(RY0*mF};;LOoO&xeFNhjT?iN%=?Jev1RKZg_JbmCO9i zO9f<1=o;X-deQ4stS~UMOXI@DCr3$v)k)wLknvf+bHyCnfY7}FVXdo-HkX+yV`BBM z;De9cg!q`&BD5l>oas}@>b0eC;vQ#vxIg>CL~ z2aY`n`tTw}z!Y3*g*X2fyMXw~tH3=y5YY{3cY2NgF9`}XMJ54kRs!@JVCZHD&_s zrmL%vR5b5yo7v3{vKG0W(!{B8CXa_jTGM1D_br1A*3WoJmc-*9s`}A6XS`MF60)nV zz*5Vi--m1E?Y^QA_ghJbeKAZUX*}a-{vG%HzHhyqg8d|a&*Xi9%A7k-T%zB6M|62x zQ~6kzzW>B%I6-@I;{)f-CyQ05)Bn~TJOv|>QWTsbo^S%@KN|LOiID;pcdG0ri3FzChy#Vi7?SfnWFoX+BmY2_1-?Lc!0qGQFb9K}m zAEW%`ZhkU#&!iSJSI~9eMT`hPa^4zYEjFw}T54`@%Eu#azY_XjsZ2P0Ei59#^~F8U z+#jf&-W&u?B1hQh!-jFh)Rdi zCJU=l01;4uYoFIKbd4iN*?h@8&y((?=;Fqw9q;to--r$!o)>tXobD2KV84-YHr8Y` zj)sc}dGT*p*%IoCk zkZ^vB-%{#`q2nbvkQN@M9AQJJ)r?^Dgqgm#_A zbXnTB!{2;0xQ~BoLC^j}kXba*HCyjIh~LwUq=b~UidOA;sSIxzj3tM(Omg7I;fUz~ z4c|@J*1K0`Z)?xm%r;AhOU1G|re4k2l_-;9@g5vR%1Fa|(XU+Dprk#fj`Dy*29Ja% zN$6n`JDBR7^MUyw@KuElnh=gOR@dVB{=E3NXCR6!c>6zo|ts7vV4 zqb*zumfv;+V1tt}5g8*uYluapDIcQ}af6}@+C=4zx+QUF#6f{tq^Tb%`?%5dM!gqK zjX%mq%HBJS4qUTegAH@tf@@4X$b`KsQBi|)xK~?Cr&t}Zsy(Q$i4ZarW=I`n+2Zmd z)wE8+1Z87Z@^7YKFLNit9pX^V^E*__l@jP_>^ z_{aJISR{qgmy9T zPl^B6)8qC(ia~UTi?M58*$b*d;a(HDdmVp54XF*mK2Gp2LGTvV3D7q@-je{H{?GU) z?wIsNPhhPriDdb&kacqABmrZ-^)Ir+a_Hl*`D8!G;Wz{y)UUED%_zH zEE<;=-NxAPjUzuA;d{?CUa$Z5mrtQn%xF7-_@L=wxE(AzeyGo@^3)~zC_dArdqH>+ zksCh7E%>}PAgnjr05F?_uIK}f+~n@8RJ`0#P2UGHK9xSFDVL{TFDVwgi1Sr>d3moy z3!r9r;U?KqVuU>)6xB%d@H}cK7f6(4aZ}B}1Abs(apiOK#r>Um5hA#%$+D}>cl9)tK21+2YNs)jvKRJkkw1)iMFNKEuUCSvJ21>9i7P1&W zR#cj#Xj7BGBKYvzmw(~RR}f_=TX5^=PZ9+-DCly^bPHlGPgOWj)=EQ=&C3c(bgchQ z4-GTCO&rVqshH0lxVTGLY2k-TA?gB3uVHHIDy4MV{3u>xyUfbFPF{I2d9v;Xi4t~^ zrFjcZCw^&-p6J}$X8_vRPEO2wHnao14Mkq<}erk~L5eCk~>T5Z8*!Fdx$xY)lyS2An0V;%<86c z1)@qsW5r0 zv*+v98$l{p!045U+UG)b^beAb`W1cG zBuFGhU4jih))B?+7W22xmsIQq{ccs)Z_F(08SJ%D(=t%WxGtdv*_=pD8V8NXp2=R` zykOYLOb1h`n2GcW#8~0^?=K#jGVaG3p1u#5x zz(xTo4k+zsYRygQk$R#TCg9IcOH;!;jeh=gd)U<}X}G?xZ`@2K$>!+TaWqm=7oPWF z_#{4~3NkQbEyiR|B`!qIy7u6v2rLaR-vHrR7XP(3=`&2xqtQDdq4&s!*KK+x*EOZk z4*#(pi$7Ik1z8ZgjIw+}v>}_ITT{jtHP^oVfUX6F_wt);oSA|P5_At{u;U zks1ngs2(7A1=RtJA^?12ZGsyx4&ulF6*MN%Wt1CdRZ3-%YmWQhm#KFH*|$vM+YexT z8&LEG@M6X&1en}Y%(KP#v~7zaK_I_@0Mo+a42AO|0ZKQ2>kH}}e-L6rOYY5CK7Gb} zIj6v{ZKuXV(_D1@o7S8v*eZbq0LKFg;~UU1=ypNb@(3_I{o9rnfOIFzbb*`|7n5jx zMXexDr9B6b#pwZaJkj=Mm=~3bsF`8e>ugpDYv+qEbATB zq|pcve@yXee=AmYHtt$~vvQ^xp8wX_v-_RO*PDyBzg3q_q2?7NKn?Owf z#wAJE)IeQ~eMSe}EWfzz*6C`t%!12p8nCgj$Jrl+7t?J;u~V9rpW7O+s9dg3)sWZ7RkOR_BV>FjXJ!+eBx>o+%) z6Xl{6;WU|d+XQqH-)$m9xK<$YXB`<0fFNK3M@x;8e8rqdV~D;mG;q+_;TWiW+mB_`##RZ9Q3t@ z@+wAoWfV?}e7khL!|`wU^nSHTQ|azGstjt0tBQ{UVu@DKUOYmk;2SGR_vz|i*|=wX zvx7PVVFIf+TRU&WHq#~hj})3dX^8xNP(WhvCW|a_Jvx)YjqxqQ?qww6m0-pLqLZSU zjXK);JvlMrVfFxV!R6Z$jW;M`*MvA4|F(d5DS4p%1^OLL0zex8kB%1>jx1KI-nOiI zqSONj1PRepy=_!r5{y~>@afWar>&=|rM3BTC!_z*NKU`}H(e}#f;%~jy)Q-UO;tbL zr%KjLVli*!?*06Z&nl4URCq^z@j7h2Ynn{bx5~`L>E}w)X@213t^lF6$Je&dfJ^qzt4UwW^!^4; z%ri7f)mVi8`t~-~pDmlXZs%)<|Mtq1z(yT%$%UjF{qyiAQ;x^a`3BBMqmL^)&m_;^ zR0^!*u*iASkmxAwg4CwS+iBd)C$$OLD;@-p(XnyA3BLY%h zoqRL*yw?&w?*>X8xp#MQdJ4UotnAdYg!y-Muml^{y?D=Vrth>|A;$LJz#>b}`lT1J{%8l5@8g|j_-x9$FD)+-G!>Wt1N|UUdgfmHPQf znVEy3Usb+flb%2g|JAvqzK9#yW#n{=fjVq6vCTb zrqtP#Y)KtAl|g&6_>z^C_36{6pF?ZiUP4)x*eDdGQoqkyWXm^S8-ytFhu z6ef?@y+H-h6$6`Xk}uy2;IY$CQJwHsTz_}{Nc{)$0{ajOLnys*nIVJ1_`0ALCRSEf z`1tq%dlQhL!?^K(=M#94pFJsFR)>&&C3k|`v#MUr+yEfn3WVdPZL#a zEy%U@w`RHQl+91E7l?-!EZ&gkK)ob)TuhR2;`7&MlRN79?7aU5T)Tz#|ouTAo+#3d?^*tK>DfF|~Va#N?lEH6V)S7o%5P$gzDuPz%^on+-E481b zvi*Ex`sP>8m_4kB`NiWZQC?UYBVx#`I(}kGCu8bvb^#la&=U{rq+4 zokyzW*38+<@Mr_iZ>FPGPelXa1=rXD-?pSvN9DSw=;>}rF<&mEdahZgo;52gXK@Ft z^ClIb$Wfvgf&ab7*o;9qXpyd=Y{=&3%Z1}VK3R8-anTDLB_LaqiQ?L|-yQO4B%7kP zeL(NbfYu=-!$pn`3XGOTcw167*jjYl%!!he5k!zGPN(+KIPq(@BKPTXi^}x*pTV0e zdwBz9d`ZfrZ~WB|x8XS|k+@e%E2_&~I%V5XPyuyW9Fr#gX1IE%i9abj+Xq5MSCu>E z%EMK@w#)^UqcUWOdQIsRaKD`S?$@zmm1)$E@wq4~W9#yir->ToYu|p=RDGoyB*`Ic zoEG=7DTF^4&b;vBtaem9=d^9^Ln-PD+hq@FQz+$_V>7~UZT3$<7~yhIR5ZV7DITn; zd-r-*2AJgv%3=orj{^x3q2);c5#-`J9HYc?Y{i59wh4fcQUlW_0ejO7mJ+e?^A$vY z3{LEIWDFsrd%*im5)6tNDU_kcoM!z(>Afk)=BKU7TE*ihnch$3Y##-|WjzdO&$7=C zSEC+UDUQhsp`gzWwcloUfAMBrJF5>`h}A8Sn`z*^krC&4&!2ar?$+s9_xA(%=I8EZ_bo(|jkEEmE&bso?y%2%B)M@;h*mrSQMDC`2Z zY>(BgQxX2YrgG9_;m#U)(v5@L>npg4`T6>H1v1|hoPMS(0m}$Wdr*y&jZ)_w^(tGE zLS(OBD|b!qTW285XFR4g1L&xNZg*kp&mb?Pj4_uE#%?8sa&vXXL0(kfsM0n)zQAEI zZG%!$Qi8rON2J9EI6uMi8B!~3#?Ck65IBDqJGP@B7-Jgr+7YW}-^l6@%$PRRUJP49}F-UH1&=>}e^Kz(;=9e*z zjM6sT{MXXMVDz_@x@j6h#p%y364PRs(?+>9Ri6L);~YreV$+v? znc(gOS>SpOMX<@ucq8*3T3znGM=5!*N#kNoZgW>yI0Vk8f6pj;&rd)mx9|CgaDNZi z=Sk|boJ4`y*X@~|KVjkP^B_V}pFmN?>BrO1)5GD=KXxzVXBN) zC$7-8WH;zt^DpGPv3^RbAg?qk=5H*=eM}yo=jJ3`rfXDU$EEK)(N9Wz?sdUeNU)^k|?CJ}9F{_%K_d4o?uPCUu%(!q4F`&;@>cl!0 zZJJG`uC3_(J|)I$IybO@YgB!>CE>Hqv%-wryjN9vBsaoWDq`*pkR_p3GF8=Y8PWU^ z*-mRVyH-VR=^$C1@}PewN5b=f-{xVHO@j_&*-wR7`^MhmO2}cm_|9TyC=X1*iErp!OZ#Aty{U!1VZh@zSkBcXm*O_~D-zN%nLCLw~U8_Jv^<-7bxb^_z$j)9I9_I*2 z7L@KF0Rm@HY*|^^R)?{t;7dYeZ`=T@F`8yTZZbOb1uz&ZvM@9Er7#b5K8ubzRKs@6 z1(HyHWM6SEIMX5Sdjgw75cC&GcW|`SO7AOj{XDEUgbz1iJ-!PTxjNCXMtqv6S07m? zWz;=idt)1$;r_La)Jo0$K?gJ@;=FSgz}HQ}QQ=$L;cI8K7b4(?8jV{*@AQQ<`V6IL zI|$#d5bxKoGk?22nHoIf=f`nBzrOR^S*&dW%VC8q>1SSqYWSDS ze)GU?EE~O}-9Drt*LL|tKBn|Lk-y^hgo)6E1{zR7> zWZ4rFwxf((l)lW)rja9VXr7L9QfIpIGpTk(%Q$<{R&2CT^u_x-%c*h(5 z$Oz?;ZRf>Nu|`6~s;jztV^mD$N}TR~B|jW6ifAXGB;n z*P6nVeo8hLhgI1_m`5MCT{%x@eg7_{F1BPz*qWo3hx9tXx>A_O><(rEp;R)Xu(H3_S#*aqwG`zq--I4gi8a=w0jO zu!Zj#Lz20HNj^p&w7Wq-FiNSENX4v7OM#7AcHsgxG1#N;6Ki1TP$c71CIM-k(Dp=g zQiOdj{hoD@Bap_s*b>sN{VpZS^pVpH``#GNt)7$Rg;<}mF{0l`DxZI>Z^HafT%SGx zxTO$)3eP{&MP}q;3}4zmHL-PEOn(`9Ty@)0=q2cEyifZC*MExra=4lQ?g^LUJLylB zteuDB?HWz7P&9zb{UmIG-+ywK84;WX*j+9IAZl&kdiVZAbXPlmuIsO}nzN(oaNbBM z z{z$?+DyoL=Og-t;ni-1r#RJ}JO+v7wZr7QVfZ#d<8c5_OPAB`yf{kF8VK1qwsvxcA zb~M>b$nQn|i}7)B?{5<@Ky;mzs<9j$32OPe*dtb5&3LG)1PyUXUbf-s8*%du+20t( zEj0UX@RMe|Kmwu5ud5kn2^H{~#jaN4nvvYs07Gy8OJO8}{vaa!Bv9s^@%-xcknTKkrJ3bC_z1 z@8uV-JvN~g*~0uha7hCw2KK=*!W@C4A=gqJ z?{NNmBSDAjz;~Y}@F@y}&(&pUddBztntfK#HQ`{iex3v#KQ}jDzNDk?*++wz z-3iFt*Xmy<5}gj-hYWrP`^mp+=k616e3_ybb&Q){O4v=Va4>>F>lBmDvo+1jfG`Mk zKD*ZV!#G6ww%_`#nshFPrs2wco;%v!+v^plGa@JP{X4%l zx-I);V#+oqwJmUs$L)@OF#S}exXEYF+HD#+|K*-{H(P`=$z36jMYHI~S`?+B1`1fJFGbz{#Soo~?tuK0 zhkwI9l-*Z@*C+JWY4r`}$|xF_E30Vn#=2)6XqCeU8}}ieArr!uW4`7#%cov^3lyJy6iA0q+G3!d-9`_P5qEzuUP{ErY8(Bx}%5%Q|n4 zCchxpwDP(uDX+kGZtDt#Pxdu46Cb$1nxG+VWHW7xnJywSs>*K|p7Xf#furG3we0Ja z>O4@4$$C0RXt^-|fjxlyHC}@6%ii7H4TvCR6_vjvj>kX(zq8Tl_~_jQ z8y6RcL?Xc|!{C5`Ho&aIkUZSdK&DMA4vYDB2*XC7qo3SOhim3k7}8#)EOuYk$> z&-cZHlNT=Vc}ZdMovmC^(7ccT+%f*6FGQU;9ktV!_7VFeEa-f~FQ~Qwuc^Q6tCXF> z@Jb|#bum=h27MPaTJ*I?_-s$*ykcba;_ph4RL5TbJT~bvGhGy-C0z@EqRKh8D7+oD z1n%t8w;?}{GJn^?SL?f++~MVcu9Y+QPL6(TZLj}Y-~6`xvmtDRtx0?h?w#|SWp5=| zdd95nI+fcS>$iLYa!j%r)O~IT47|^55Pg`l+FZtF77ks_R2&)j#M2mk(?`#_cr3_B+|rlFe2gr}^Ex@ODOerWuq?&QQ$WJxN>jB|wNkr+-iFDVPBHsKCAb+=1OCgZoTl|Yq=bg1D_C#qpSt9 zs5n>2jIH-p%tNXBwkidIik&ioqe|q;cRJ25Hxw@;nsxmsK-k7Ep@qq2%>)KJknNJk z6*R{E1Cij}(`Up+<&ij+;eZ`W0=(F=r+<6#DXFNaf}AD>k$r`RfLPmXQU3E9v`-l9 zsO#tBV+-+>kimvS9E*wK__~(Czm*kb5VnC04r&DvNHf7rmm6!-jp^=J%d;fnFRF4jS_zo?vrnc_Z{7Y=s0vEUPXrF72pG4PJ0Fu#i~<>4n}}SV18RrVq`SeTP*p& zxweRi(D;4`-eKp(k?`gz%ww^T4P>@prVF7VAxpZ%3OuYzJ^Suy24|;lwKjJkm_{6R zngD^n#_4YhJOHajsi>(Bz#^IUy*{Q(PW|Jlk;w%WEVMUX(=``Kag&!y+kwkoux{u@|8the3UZWs{{GlywDdm`BGPpSbDvrcqGb25HamR)m52p){sZ6 z;1f2-m*(QcZcYX7t%)nSHy6L+19DmLB4u;oQ<-nl2f377#%5odYi7aoXY5D~@U;el{O^&$q1N+Z~`i52eld zDa=26Sz~uOnSQRHkin`r`t3O(_}32GgD@VT>T&Q9nD0S=s()M>8><1PycQ20;2^J6 z-2~sNgQ!~^kDRt?X*YL|TN+4YRmD)6J4|d#{;rFaha{Uh_$Xf8vuM?eQinP~;Ize# z|JMCN(3nC%s8CkZz4rhj8y4oOWI=6s(PYYYegKF0vsd04=M?)fF`Gz>hmO7{x|YZS zf7APENA@?EX9!)N{U9>gu1zyxC-Pw=Rabvf2d2J;_;w*OeQ)CAK>x(*T|kzlTnL)t z9&amX2$*KvTKuRP@rhD}^g-7>zcFd5U<=6d^b?|@n z-kMyD&{72niAGX%6YpAGp5zo2u>c)BFfPNgmv)biLQl8f6mOg0qB+0~TkW!O2asp; z5FGS<>{g9bR?iLKG*im~+6uTZNP^-IGzdiJKc%~-&V&4-tjF*<;a<0+q!HAt_uj*> z&h_IO!zrCw;}goyUX*CffO;pqBAkQzuos5Lg;tX_hflT+Konj{aLW^k14%}L=cEoT zuZehxMriE5^(w2&^V6mhIcAUM5P$qaQ;@4T9@8p)`D$)Lpagkp1ep zhmia8HqHsE7az}Gj5oGs{1$lO_v|}a1Zr9PKHzci$e6(es1DIRd3g*mmB*GXd37A% zHM?WqH>JMH7@EZ}L!VTwom8EeRQ-(6RDsXj^!S?)-Q7C?@x1`y27n^ZrD6swU+B$+dU1%5Hk}~Z5xL0M5|a%* z{yy^gW-slG6Vi|L@t)IGA#>qV6SNN_IU|n$n*BWyVHEQ2v8qBUP2pIt5vJL*`6Wr1qa(>HS z$BdPYX)z!0I5M($Et1>w4QN84R=w&e%x{B^oPT!gM^daLYd{32kkf-M>UQyO$Ijr1 z``^-8PFOQ^%qHf&jWv4}XucU45;5y=+)=z%A^Sof;m_09TX!eKB$u$>I9?~dEWlAR z=jZzxhiz3vqR2D&0wQhTVKlXAo)A{3Y};p2KfcB+J!-qs5s<3CVk#RLIS|tz#c1UZnsS8n?Q&DgbG^iwg@ui?rh4 z!{&FnNf^EEJ+@tXACX8W9CMAiwXVLtUY1*$KOI_ReBb+(s`8jia!hE<^GUTap<9#F zlMZxB`gRIokBWD{`x!*5fK!%Lbv2CP2gf?EG!B^dNCDqfj|cNLJ3l`M??uot8)?fStrYFpeX(2@gX>z_x*Zq0<1Q?o6+=r#!xX*VRYmjqG zzBFa?r=eud_gsq8dqMoX$h=vKDD{0lD`giuFIDQKOCu{{q)=W#UWC4`pq(VT$YmD) z^u*8oi}lK%)n<>mM*t1Bq{B~J{RL_@>}VK%pce*a`xho>dbBlINBs!)f3YmAo>lr} z?SCd9r0k*wn5-U`R{|s^ER^fBVWBj^kSiV^2j_h`wFCjX?=mhjY|2Iq75VtF2sYy{ zld-1?%cGQ#5fbG)5ZLG)2DB_B|A`smsih4S%WbLrdk8$|JU%NLWkJ(~IrKc-&mfpj z!x{hgyjaf9hdJ8UQ_bUg6>cIPKN#0>Q|_)R7~tVCyDJwLJI-$eC&hw)*h&0DAzk6S zFKN?P#Gew;Xf_PTf4{9P(GaAwl8G!E^o(}CS8okd(~)puMbf6%H`oLyDWGq%+5Oe) zJlxbOMxbJFbS?@AX6OKDpp|K_Wk5;4R)gP^RXiQ=b?|BcF4ih-Ag!BrXvzV-~mhw8#>?w8fTM3`QNvKRz=+eQ`fE zx*VGIDkXx^*mdxFH7}Lo`Sz!<SrZ%J9BpH|)t5&vm^q z6hV2ndbx?23L1z=l@Vm56gO7Oe>C`vDGU^qRHbO=Z|}f zTt_yb%|6ab54>tAr5vz8Ok1g_nu6a7F1kpH*p0FB9B(LV7 zt~OR65$Nr)$F(;RnCv>8ef5c(J0y>&Iwto!gSglKF!kN>RQ~V(=UCZ_%!*`HR<_I| zA%sfE&L(?gC1i$B_I9jLW=2Mmy*bEER%B#kZ@=sG{(K*gU;nfZ_kF+a*Xz2T>(X?5 z7A8rc{Y=Zh+EOkNpXdb_J!TYn^&cK~G77FP*mK*j27pu?4|Q(;TytOe+`qHVn1FeE zZ!cE>UYf!r;A2JaQ(tfRD|+HM7Q{ctFjuDBw_kznJbh#UBp2<+eqMi(zW5{D@t&S= z(mRXO(+FOJ8iMV-nXLW2vbS%)0@|ykrNxe`!vq*Imd6+^_0WA=%oNqU@ojpJsBI^h z_?HGMmVljvY4XKIGe)sKfPJ}FM0C%gonI*Iv3d+D)3p9?onS^-6o7~w??QNfFS&4I z|VH^Wh{_gV$s}n+`D%y@M;g0BHr;?q)1nKI{Nh0 zPpRHra)&Xabv$|T(cz7)ZHCPjEeKtujTMXa_>A+OC1fg`NA&S0ntl! zvBZ)n!lIni9|@sRc?lQIczR=c-s_oD2Dkbs)hnS2+iO$@bG0S>&F@y4J-ER+A2C{? zbRz{{@R6W0W8QSO#O?*(auy77?SN7P(KhSW;3lJw5&Q?OO`SV$-i{> zt^=X55|B#329yR}q-q!mxfEYySnELTveL?pQ!Kz_y8DMg<-z7U=ZF~q10ohNTi0`~ z+j>r{JxtHak6ee4p(S$amUbHH9~-$Q4}*2;#V+^lR&# z$LeHht>RtWFABh%!DjQ9@fu-*6Sv1?r;v%ln?INjDz6QFle4JwQ?tw|K=je{;_(&h1e&&Gz&iN0z5w449aciKivV!jn6Dc{Xch5c5F zlk<0}G_)7CjaG3r#df-f#c!0FhkTmh=zU<6e{5+LvaQH0ony#d5c*nW#D?hJLQh+t zk!6~K#gdb52!)QV{HbO57~ZvzXn_({PpaOmx!+_;k!;jjU~?Ip78Kzf=@!$lVb6bP zeo>}-S+%0jy|dsgfB;gr`z>{&7%GSVZV{+LUFws3j`$;Gq99xpN}WVXDeIB1#c48y^GU$7#|{w35S95(5=nY!QTq zl6^r|tl91B8ppB7r$L3#$;*V}7!nyED`AM#@^HP4mk2eb_;s+z%=(eH(WY8-0X_G5 z{CYF#6VVK#C+=?}d12^SL-wd+Z&nKO<!*;96wd6{XfE3&8Y$zmLCsGiqB3{k3fQSKv+I~Z`KmUiBE zf2h5$7!gMycRN49X^6ZxYqpJrj|sPq2>WKRUw zjlN%BH!dYn<*D2opDl;rI=UWH^Hc}7h(A)JMHKX6@hJtzD}M234(ITg1N0w%SM1j(m6|lp&m5Ib8DBBQY{N zxE8g>>HU1mWp6ZFgfJt(Ej^mhnWTbkaCDPDsiz{X2TyyFi$kwVLHTX@@VjZ%9^|~U z$kC8oN@qd=S?Xg-zL%s0(NVJxtR5&&?0a6h*d-7WR$v$BQ_lJz{&$S+`_BFX!+FF- ztMA+NR_`ozNCkwD>f>l5^;?>gzRewX%}+ikwv{J_SqZCO9QyNEsH~x1EpeF~f8%a5C17qQM*(88M2d|e>c$RY`=Ybb zN!2|_k9mcB752O3ziyX|Ns#obTpc(RVLQo3_LyQr%C0CoJZ(~8oF>Ly9I(v^)c$jm z8A#~*_lv+GBWJtb_ChSteSRobRskejUysZZeM@a&pVV6koBdB zW*OSycw2xvaCUC(RkDlS#Oc5oiQwbHn+Q+fCmg;m2Cq~fM22S{6WU-w>4IM5q4yt= z`AmcT#^L%s4%YbN_`lMVio)~izs(l(#hm|+zRS**4N;(As(ZOrsd};opdbcU;#91G z^4#_y#oS9ti4JPfmw(DndjKFE%RI;2{10W$h{gtGxmVm#=uk`p9m7^){T!)bE~uHpry%KohU>{Kv(Af8GIel0fin=kASRXp|QF-JeK zwxj%Ac7`HEK`gh^<0#_MiZ|i+rfet~+H>jovbd`IVj6HxO`8j5Su?#KGxv8|ve%cV z`1c=h1!>OrzYn}zBxIy+ZWySUkWc^9#EFtoNs69AT{;OT%S%ws)QQy7o9MFg!e&lz zLRq`2Hb*VBXScblZMAXxCw9Yy?s3%vx?k3EWhM&)+L?*Sa!T11Qu8M<4;@V7iG6o> zc5EkWg!KJz&7TtCSSCD!GbaGDWW0>qWdAiF;N~R|6#N0kcQ}g5r@P{LBg4Z}rCuKH z|DEH^A%IMBtMiRr#^>+AGWo!44RJEQK|gIy4tJo-o2G)g&CP9ZYl{Ve4gL+>%LTIc zF(2S8C<|26U?2rGE?TSDpbo6t`}_N#UCPHS*`6xsn)l-^ve?%AHE%#jH%TZcWG@l8h!TT zv-CI0@eM5m=G5S)_~$o9YN)c-Y$qf%s}8RZOk1y0|s)f^879A;u>rF8wUW zIDjSw-pP&Ai}aXc8GUgD?A!oW+;OFUMh^y*tnA{~UFkwdhS4+7*$`C*bYP zZ9g3Oe*U|Nbx1}xF{Yb3nVlezEY0Ex8(AogMGnuPDLj zt=+dAK*W+-W`tUSe0Ad@$RIdjG5x)>aL2P`y?)QTg&!?r<`W}X_xJHH84@C*lO32# z3wzF1IIk=KAfRO&o(nL!d}6wPvuTqMNO_sK9Up(DPjw}+SVQWS2(oWN@F z#7{4=bJ=FL@e99ww|hbA^4x0Vox^U(ROFzdU$58OgCSquAE_yPI_ZpcJZYtuFX?r|_}mS9M2YJL zEpD+vRi<2kz?y}Zz%x<<)GdMM!oaAF=C-w&V%j6KGIs=qXS{9oKF>sItk~(R4UK2L z#e}_%na*QBJ19)DBZ>fc7qp^hr+f7nlg*u-d1QGzz$l?><79R){lXFk_0iy>gDIFG z<|%Iabx6o7-JKMK4v(5qW8m=8LC?Iik-#TG@rnqVo`p?@Kew8ZD%=VLd+K#ebgNFYr@$eq zV*FiKJbM(+_w0d!@VHI$B~!&@oPk&|;!yt0$Ujo(B z8r1jHnE&WiLUhh!&mz1wUnDLe_8d2gein<59#JG6uNt-#eR^H&=+Dv+hg$I~M&%lv z>mN~?r_qn)w0=42oDP1x9aUu7)fp9ggHv{xMKONROfqI?dTIVhjdvp`&ph3uMhcF8sjH($ ztWHngVmBxKM+9pfr^sb6XPo5_Fq{6%$9}Jt9)U>u?h6sQ{mBb__Z&PG5e(bYy(gzH zxt=o~*L{J-if>5mjz?6l4O%16dHfl!CYgy1Z)8!uBH54}dFA$axeUwQ&l?9j?foLf zKYrO((^sE!UAOM9A~H7;A1c^+-km2dGM3cugO4C1CL`1<^BVFOr=Z&)mWFCu{MjfW zFRj*=SwXG!iYh@?Q%7&2Fz4t9MRd}M#0rmoIUSD>6SpMy%kg6McI|x+&qD3W(2i?U zRd%vXC7yIQ+uQ70X3f0v?j+Je>tF`SFOT2tl zyo6L04T@EcYf^D@c462ZnkLEZo3|(xX3n6!Xb5f`m#qcJ#l||Q7NeRbC_UxLE(za7 zklBiqPm}sqmX#PYKk!ld67eo~G+(QpFECX*&>ow>CrE5uZ=8}D2d)X=$CK#WgFN2U1mWU zMWYt{s$U{XbH0mGU_LcPVX&{zEVa3>P(w6!mdu>G)SOE3Yl+sPF2W;a{YKj4jkMVtX{$Hlc5lR=y-^lyWuv3LBFrOZ zs^@~CtDT~&?W3!0t8)14IHNk(xY`;x@rI<5j@E{sXVfyK{-@{}#oY1p)&uJ|TblI0 z3k7?1?NUB>S2s zmKr3_G5vgrKyLBpB;=2%)AGKt*QtM%Pw-lwO!N&^NSnv@0WA`6C(x}deuFWlTaJb14rkVwGsT$UH}*X4b1 z+x|S&#f>O5aA+SUOD-GC=k*2%mf8I~XrbusIW)U>0Mpm0f=St1sN=@fFf5~-$-gSY_)r^)YE9&JZk}y?s2G<`VHfjPk z_12@_Z6&LfMibmkl^2^TO`9r{gKR}eb&KgM4TNm!j7L4kN_L`*y5ySTNP@V3lO^}j z3#SX&NZF2hb(S1t8*LFay*CL`Q6Ni>B2A_wyF^8LiQC150Q}P?*Q=r zMWW+YV>>ak-@meZ=4!wPELaK#&`UbD(D8%(4Z_<`ep4kF3|tMkz8^bQXRFm^&h+#- zVN7lGRj-y~9<&!a|d;RM}G(hi?zGq&SgZ8YUqIK7Sn+`N`yB z>B|>hmzS9qpEL#R&qQo551(w8Mt=xt1yaimiZj!!rlOO&FIi%)jFMan!KG8=Cr;;o z2!Vu&wPI{axwG2aeUF)Gd9zv>_i&fR{Cqc74g3ppfy#%DB6qCJ`twzozse)gKEms| zhLhSjcn8RwV{%nGkyijDHJt4f`^Ze4!y@+oQCHi^DXFP|LE}C2n-hYts`W02-jxj^ zg?^?7jL^V>;Q{?xo?F|tAXHCl_Ka^V^x6{F7G-vDflAa4TSj_U!PUy;TH!0%F@J0} zW1Riib361Re(9OqzG`9~ax*%%yEQ|^NIk(LckF)3e1e(u%J(=^77fww>e)BoU!s+Z zxNGI>P2WmcQCOQt#}=hBMp-eN4IfT1rK(5-fQ43=`26b zJ5*sLM>;b~T8WM&lxth5yD1r8DC@|_NfJtd-=b4Ok2GT5rI#ptfKilKZt_2;y}qXV z*qw9!y}qpx3J;!Qq7K3i{;>|7_?VNUJ;N{VeC5+FWR~u`A8rVsZKpn`3VY}TBFp8* z#%HgU5NP7_%4r`&uA9*buM75SKdJH3FbZ0DD}&`Xq^*!3dgzIn_Ko0#{oepkT#OJp zLnW9H-~|(fi1~kX33xOmo=W%{R6L{B$4!cvzRJBXF1${9IQx+#mv@80E9bg2r}W?H zcR%|jB~w<;II;}#KR=m9)%%X+yRj-`E3I^teQ^Nm{oT^)*$3^&R>VW@qA zvB-#L)j$+#_+=?Zvt#^Nu(i*t%1h?p46wn!@YJJkk@26#$Q}nRD=Rw_F+M&{iI8;P zn69uMF+RO$j%sUe{#I!G43&&@;lbZ2zx&kXc9munTLiUvPJu|Dw_2SF zimM!aFNofZPH^(7C~-0ElIaw<9K>@@@ncBE(p7V@0(#G+;i!kiiS56lg$0BU>B>{9 z9tcxW7HSv!H@{1b^Rf`DYB707ECa)GCIq`RL*AO{H{U-BGcE1njyk;@RT9kIkO4|> zQo-$q8HO`FY8bpb=WwM;=Ppb$T?Mn428z@do_CSPM;Zxp$keeq-X2uLa_EK^P?48J zA`q5dz8^KN`4(OCJic1S<(==i`y+ScE@e5$EbkGbpDTfnh~ekQot2T`-enM=ug=cS zuC9_5R+nKNcMqEs{{B;X@FB*Vns6Bf7Gs-CU|>j^Y`3pLwG$gmtJ?mAbjdglbLKcu z{qqAKTw>3iU7QLYmQ|)cwnE}>l{Dv@bK8sTHKbGA7j?KRq>-q#;QvOY-u};MO<}G2 z6)ASSZO1*j+b;WwbGa3_I4uYE(@!MozL7F)&TDGf0UPdnN zV;w~7TWyn>ys35B_-NeaLz{`J=V!fjFJJ6_SXq`&Co#BOW%;sZPojMNsjH`OJ&VqO z__F8nwqi8+DV-hjdV-yb%%-kO82@}T1}5J9#%J}0TNM9Ru` z=vt}uN`%7R02XrRob7Dsn(!X&?0GnE-arYPqk|&F>XE=o2D=f~dPZ#-GYyal6zQyN zq8n=M`;qOexMDTdBL8Py_yHpmni?Bz=0gyRFir$C!5`=`?-?+O+YVmu`*%wQN{b2> z`iZ6M^)!aXdpc+1EbnE;4ZJz!*&exRrsPp+OeJtj<1+W@^}jOw#TRKCbjlcvH3dF? z(&^<25w;Xn3F-S1?i8mU*z`+K|9W&HmzLwr=9G6*Z-lvjR~0ILNi^UrTj08*W5q%B zyOcF7n*XEdjpS?mbJ@**H7nY6ym>?~si-9Ni^i6@88G-$>AYhq{2KD5*qpP zfu!ZeEnFBZAbMDhZ8HZqWST4yS12is?IEBB8w&`cay(2no_PhZok{I#J5 zo9Srzkm!rvGOFAI4eY+9MI9qT$gJ*%D}V;F?Z=NF=TVS&5f8DR_$UxmhK4|9Y67U% z7#s7|bN^|~K|#k`Mo@ldW5xMwxGpvM^VxROzMALmGZ2zfBnw;b$b?1K%0*t`d#3#( z3h)L#lNIf(?egt9@!jL&x#q8uQg$aW1X;-TXNE>{L%PpxpWz=+X2vSpP@Ub^`*h2$ z;g1KpPTbX+O(_c;1Z6J$l!EI&KKawvM)oJpSxjeRzC3SQz`Dt-tq^tAD?FlmATxos z^6dGs+RGZB9}E5z4VXgbcsOj~uY1qAJq|*Cf8?#{y*ZR@9aqR8ZtU_|^<80-59X8h z)?)8Fhg2WK3gLO3PtV54uyDP8ox^iz9HC&1k*(M-32_OOKFgl^ZpZ;12b__qPTXil z--$gp+p)ickyMAfi$l9jaSnc~x|OHk6awo-iu*=8%STxvB8~ex{^vJ^&;VuQVIm?T zL_=}mXz(LJoG<{-@k6c(2`DrWV^93DKnf@5Yfx!JFF?qA@RNWFXVHSvcj0;(tI(~& z>Et)poAn~1)jdu(slsmn<{HndPQzXIz(luGo7}SU;vR<3?A?tQBlnLxVmXr48*y(X zSMNVF_h6h6tu^G~`u%X9Q=_b$5=>uGAz)@jFa#Ul!Q1LY2x4`;Ki=q_u>SZ> z-C96-UY!~>NFW*yh#9Rk?Q4YN&3Q4|ykjn_(QmZU9~wKwWtf>)@YN;(?6isnK_V9J zBt$#X8F`+Et)dh!7y&S+LyOhFyiYug!)IWjE{mQAzapFD&Zeaw3oZ;u-t<$tUUp8(*))GF6ca?yA={H6{5wGA zu~}$7-fU;Z<`=dqVlj?$EFGT;L)9s7Ki1J4C%*NbpMNF8v`(F0*BKGjeRuTumjgjB z*T-*3C7LZUtXHy^jN0E9OMiH~MVoNmmVCK%KH99xJh$UGfztkcs*=F^!vw3`%CU=a zl;lMvZv;!*XIpq8g^>8|V7od{hdJ zPTTx=6WvA+MU#}<`1i0p(>9*D0(v<`h5zk7u(RkoTtSf4X?Obux&9a$+NpQK`VUG8 z%CXy;CSX#`4a{IFOp~{4ezE(9=)|rY6a*(*ebO)t?3V`lo$J{-PDt=6Jje-y)AeWx zvDn^zuiLlCu-+RKM+cObfkqdGaXDK(B3<|xXdpF#X%Y-tXc;36>%MWl*GF%2->PHK zf~_x9DfB_h_%%lBZU{Hc>-6ME(#VObX5J%l5BG2fg#993O)AOSqLWSba;_|XiAthp4eeOf%Y&OU7 z2jaYal+swJv)UsA{mE}pSH#21-qW(N{qG&QdENeBzl5{s>x+QQNNGoSZ`XfibIR7tu6e?t5>f;N4WL_h}RG{(KsIc zP>`n}#`SP@f_Vqg+Cz$QU6o%NqjKefqA2|nnpxl1?>~Ng&B&6wv*4z2yNBLpcKZW8 zA@4zDB_)Vl8n1{(2&Q6_M%sX*#qzT(zPlS6D8%aG;=UmtVFrfeHIOZBq|n`Zddkbo zyMoLCUb%miaBK|nq`7L@%5lKNTLa&8)Nzu|XL;=4x2P}eeu%i4^U4!HubZm414;JMvN?Sa%ymuYGP|zi7tT*ftUOv{3^=X0QCnuc@^)$P^`ePLK4?zSs~qKe4g{s%sB|qk;nhzVNEyp?v$}k5WKi09J@AXV=ILBirg7ZKYsLG ztOw@nzaGUn=nV>3^AR)}4HNcGrp`_v{cVHn4FdWOvOY$Asm&?skI0wDrH=E_v#hQj zEpXd<=zKQE4qhC8h|i9?G69R`A{+bWe;ezkuUM73Y+Eepo!4xl$H&KLpZ2y&ry9z7!e7gSihzGvp%cwqI2w~$J#)4ZbACM;$@z|W1Vgu9j zcNkFCX4rvgGBCwNmV~^{9-{hypXO@#3pdbh^>W8QYYPmbA_eK!(|s{HNTGQOk@e0X z9)w6e0zqR-B2=+~R!mFW^jn1*fu8H~bzR^6`af|Lm;BP!Fn(lA8J&=wf4A3v;YOLZ z+eb`M_#f5qmG-fV_L|Dz$_QuA>_BQAb&$M_NE{IrM_y=>t13zP- zxI;+h1|w+z6wkeoCaZx^S=>5HILGXDO1jwA8XFjU4qePJ7a=X4-dgObcyp|@M|A6R zW;335EEWaS0B`s{1MGWXg+gMwuLfX-w}j9pLI3mRgC5Z5j;otnTe&9#3g9ShYE-ns z=OhWj44^)CC=ojM7Kg&<1I~kCTtQB5=g*ir1npoG1Q_Dn!rsjOPu2`RAmXX?5&}W5 z3SvS+-#9fARA0I@6GLM{0^Q;iAYJ#d(K4m3&NTURDI6hk-R78r%rCPkez3|&HRh)N zwy?4T8(8C0%C6R`tiIl#fgY}_T@O2U3tJQGY1kNNv`&OH-s*2Kv?ck}z3}1D$dIM>-0`zu zInZ%BQ#%qsB=I)%cS#U3yBbbTPG)4Zky--yV~(O=l1TYy3$pGn2yBpP$R;TN_>ogW z3*-0SdyMTr7o&5vOi}ebL=e-ly&M~#xHq>a4UQ?^1{n|%(EMm?I|o$dQBVXW5*!B% zaSE=>jsJ63!5UR0C@1#~TI0l7e8-~DNY(_q;-<{UrJ03Z@;jE9eHTN_k>vz$dZ}7O zV7I#|Zp2J}x0{AETtk#Nw2XucA+}eVL45jti%qm-X8;Eq=0`$ChOKibFB@#aj2S68 zGRq9w3;MVW448@Jk}(X{efY;&kdxU!Ge4YojwQ6t1SwM6E%33_N)RS1R5+Ix9# zxL+e+ycnJEVPm@>PxLom^7{R|1DRVNf7y$XV=aY2-Z#ETEKy#DlWK4;*!^!A2hw97{J5jEw6w0Su4S{Ngan9>4%D;pg28xqdP1kW@r)W5)3zDT=@d$} zwXdPM?C5FG@zc6>e-4&&>ptt;>|K)|Msu06W?c~ywGPR9T185g_QJjU`Pcv6s$cfl zS^Sw*Enwc4F0=<;iQ{pl{szgTjIb5$HX+`!S=y9`I?u)vE@XM9Za6Ra-}mM&l-^?u zr~}jB4YzgR6GV6n4QW2R>}$y$?yMah`pMGU`7O|ANz;0aH{|1ou8u8Axoq(GunktkHxYz|y9Ljk(cx z|2siI%uRIxN_2m6Zc&MU>HSCyNDsB)AiL4S!!itGhuk`eKsK?MKzGCx2%yso7^sD|&4Id8D%x6x}*{Vx~+k zRd?!ij+JZdYlo?f+Ijm1VjLEb}(p>mfJ zA~ij>-d#qoq?joI0-;b1URPcO_Z@mQO6Y@up~msR^KdfQD~0v~1$w0DiGQ2J(jU2> zyxVHgngr#^$;r>K+7pmL!_)vqaOwdoPV*t5grGb;JX{J+M;J&%wf{&3u{gqNX$GbV zusXbY8YCzNEjzCosO3N|*g=oM5JL^eg5{GlrpT_aad<$)4E8lW54RS3uPEql`JTf7 zAO!-$`&_>4cfNAV2ml%HPW;BF=||ki98K5c`m9(ibg}62-^n`Km+Pp zC5M3EU=vW!yx4dK@lTo9n~gP`?9)IH$a4@}CQLtsn?8DPD_lJg;Zo!%XYOc>e>Std zG!)$0!to|7QnK#--M5JcY_)w1CVMfbX^5@kpxB(K)l1<5t@Wb5y`$#l<4T?7R!!cv@2&%zm8IbxV_UTv*J=9#gjn zI7iUXvh*`&CF@1xYkD3X+gb+a_dT<7UtYT-UY-o>81zfFM$l>4Wq!sO%J9}cA%+OW zRRw-Dut~5bdnzVip<#&k&ogc$wd6*CD;M98#ph^MgaFla6Anb~Dr{ME=j=SB!?1?S z*W;aoGE#)w97ewAeE0PxgPVP-01xl0mL#oj>kA5fLp3)Fu;<`m@Hm}KNC$S%8tU0l zr^4QK7%+F<=|&$7vp-KkRQ(blO`?R%Tmf$E=|~WXL!APJN`MCl`V^k6;v6FU|7y&Og?zWBT* zhZj6rZ!iA$$npNQ(WR{1<2tWr6GKlJKgV$W8O|q3uuw^TXgSIEmadjk>3{{b|XGh0Fq{kD7&IZfo5Zs6kkaUBt!Oi+DrtIN(AI?m|kl{N;KY9SC$F zIgRKM2eBQHK2+H{xHXVh344ePm@B}T4&spb&%N4~$}e{k1G%E(3sC zSo6EAEPPX`8Wa>1kmi9buTMYA94q~=%!NoqQ+Qp%v0gr?8h=@%=I+CKj&StwbTkfJ zUN)zRDU!B+qwMJ^_cAi5Mo$?xA?ahe|Wr2V`pRdZ84u?peC8_zaNsjGfpZ8S5T}=;r#{y@jbzWj-K{9$Ai|8<~az~{|d&;dX{}kiVIJ5&0{Zb zG>lOV{Is8n*|j6{RTXu>g1f(Ub|La@X2e_Elk4u{@D0jqD2Gw|c-Je_PAaD!QA?fe zZN40Vw4pTGy-dp|6MNHmGH&W?jggT3xN-7SAcf$+r~7^m(!d^#UofA>!DlMM;? z>Z%V?cVcsJieTp<0xv7b`XNRDM1*?v-Y+4R%6-r;yu-JMo#KwDaXaDZ2^VWNFF3e? z$s`1o4|E#fB*UkL%J<$PQzniX+2S*E1SmGKR9?+5?1W#M%j1sr_V(_!cP7FSNv0^R z=yS|}#&1Xc6D`_eA5IjAS{n%P@nyv0yuKI;HBh$6yrim=TA zl7J}3gk3jpC$zAzC_uvTIm5TLxw(8(Z63$cD~J;hT^8QObdlq6UV)6c_fpMZ>wa^t z$aiH#{2x&xy{f{+Q4MbmvwYJDrq-n?YPQSMTH3{6xFpD!*F#&KYWLgGyeV7PIqbY`K*<7LH4td| zdwJC}-Zr1BAtUwu`N>W)-6=$m`oGA9Q*s1@9qQ@RtL9jw05rhQ78o#(2wXIaZm%SMpM83x%uhi#uiWFn zkP;P7N7@pLDuTYir`5F6*Zfmj>@5Zqkmc+tDKo_|@RJ33`OhSN z*}d&k3NXukGD}7*LW;x~7#Kj9GO6W1?Mx=^R5a2EHbUifro z-{>Pkm%Zs)qvm+xJMDbE_FKtLievvwW_13an-4T)mX=Ri@paP-YFdguNW|J4O^Ti* z)8b)XRIX#GAIG{wu-!uO29P_swB1BiY$@Am;xzE!zn6wSc!bpy**&}>z8AXoP@453 zjh~PBJa7ArgyX^Ds$+k7l|z^Hv1;2FA_}>{Dj)6H0_1KtuT$btTYco|K3wXSM|*Lg zP@NTLQChRm83Muydw~AmANvhJJjBJ4CHs6Y*9P3()DR4vG6B%)Pl(t@*QtRb{>O_g z`S8TL72HKIT*;o`d=ozY$P5dq{8LD=ehtBIa;-8rcmSlZ(Yh8R|VcOu|;fAWXcXQ{kAu`Z`z%ck!k8t{+*^Zrwzj z5w{kv{?hUyUhY_?;~<18X1cjhREd`ueWZ~3@_dd>>iL~RPa#CojfPiO`-X<7|7Afz zk1l|wM{r|_z56iJ$^x*ermPlR%WhxrvkRY9(2GuE&uYM_ccB5g>e~udT~p|1;Xis# zot~buV(lD2t7`x>Y1ukWfOqa({n1*j4nl_m#;0N4lUf!P2&kpgQ>vWpk03CCEkQ5T zNGZ~k1jhPEbDha_ndp1x>C+@RJ_6`*8WMd2cU;fQpYg@pMe3O8>%w%O$Z|xKx+3CY zSGhSSSbWx^D-@y}>r4OK*S6Bh&)B$qOHi6{rhfhcDY&RXa!BN&2QIA**XM3-7D^7s z#s2^anh(B^R#iz?Q@kNW@>O*S$a2!fP|`c@f`e6Dg?*t+p^p6-14D|DOeI;n zlHxC$svNAxW>+JbG)umf3&ANkEV{aq8E|rZlM~zLgP`;eQ0JRlta|*;oi5NQB40|I zp}27@9U$mx44B242?3krxFi~2ow@#uRb0x*X(MOaDVWm%=O-li+?o&(VcBbcB|Gz~ z;R9mafbn2syL8YgkT}1y8KTZW8^PR|9a4X_C@>I=;&yuvId4(yXETk_QlKN5ZZFJV zTYb4)94)Y>Jh5Q5z3-+!uQ#-N;gS)~|x5`kUfhm?~fP9Ep8sFg#UmE}OSb>Zz&_y0dAV2bv zFo{h72nje`aV*_aLjk|l!F~>2P(Z-9ksCPZtjtWX%j2Q8{LgzWluq|(8rI|ldnzE_Kx{@D*)IUU*Z+lsdA&C^@ z+2fV03lmE46lz^p!NCqPhhA(hkUQdJA=#b)tfM{J&Ho?11OVVac|PzqIu7pS9*EU8 zvO7;6B3|Z-HsIli_t{ol&T6#r@G$r8|NF7EYPA(VIgHZ4&alRG zMQ5&@Pmbsay7!w0&py@1e}>dcfwsQsC=kAZ1r*F1Q(rRk48jrP)p3%JnZg}`LJR>x zIa9Gp?=G6szG0*>Is0l0e$KI_(Ajb8xMJ4_aWKH)%HpalhmdT5y?nTkoO|ADhvmf% z2-QGm1xGs&;i8Qu_*mo{D)q;ow?DG0wVP)M-c)k%-4xiO=}lZ;*P!ii&-0o7cA8#n zxYY(diaRNkF}-QR(FT@mzC7){XP>4lN<7vV)4G{kdi5cGmw6MyeZNsn=2-W#v@l6W zk+U`II6AwCCA#<-@N93!99%7%R49b+JIm{bBoyd`6r_zzmx2QO_H7yJhr;quK*FHU z5R51&f-j)Jxeh)d4TQc5B#VB?gDf!ythewRtsF#zGJv}fs&FD17Ad12cp8WvY%~QK zw>yl>1YvLmLh#G0S~>Z@>%VVid?3aqWnI8#7!eQ*$Xt)w!7~o=mmIkuC8t20 zo3v5|2u77UB3=vkFeGE!Gv6_{^v@G*D?6)$`XafYf!Z9iqb^iVWal2ZJU90Cf&-y# zf=KBG|IeJjlG+eDVoAURxUNUIVxpo|&`V%mLQcZt9^W*`CJrE?dW_t5j-M7yGSc&` z6@7Jux7U-tGKIf&O`vs+uXUYU-?_bnuheFYajvltmeLy%5vjU_M*Bx0H^*wmMQy)_ zAwb;_23y(6K#{DSJP%JtU+4PIoR23*m0RY$8L1%kznn^^ljN{L$VIV3@g@11hDEPO z%$7_Rd&$8pzGL@S$ZoxW0vSIlcg0+?`x)g!rnq9APktc?;rmr-HoYS-=p{uitW~Aq zyohw%*l>~z;X@2xmE*x-^LpD51(|b^8HMgp<;Q-AKka=jv&@Tw2Fd5^oX;c0r>T`4 zs;=00IN1OKqnQ%C-4+`XEwp;F>v`AVn5FKUpwg*QF>HHtTF{q!y{bi3$a?1wL%1~g z;sk}ABrKNKz1YCRs_JU(Xk-t-;m~eD5)L-SWlt6dYr)Oe@Wa*o`+u>t9QP{l&XqSp zv-V08_}pn=UAB|a_-!(TM$P~i`2)#IfzBB7U$Z_tJpnul3a+|fdJ2&}GES{7gpN4| zyg)dXI?W-sYABH|Aq@|%#(UL0)bVV2;F*)Xt@Lnd-XbSHJ;uOW&$Al6{m6SM=f{BZ z?Ht-NC0_G5gYN5fZw*}dPMYUas&wVt((dtvk_CM+mbH5~V-+%ET4c1m8b!7gG!aQA zH~;V^bcN~S(6e8!IUkIVlIFQl&NDxHNaW4AMVe!w9DeT2MwlUwlIHzLvYdG3uHCrU zpEqN@S1UN6O;N`VvJ)lDpz)2n$$^L0`hPa}YuJ^?hXuF1{`%2eX1udl@yrYrZEsJF zgNb~jtR6=7UEuQ!;DRaH@t}2IG#~IQh$36SIjiz0W^#KIo-yR*WIGvWg zlS5Jg11~84l2k==F;Blaij-Kc5(PNQY5G=~I49CYr&E9Qva8GC=nZxpO9;T2_C4A= z!28RCiw5uW>`#hy>1G>CNnds)HRY*#>nRbIwr^t%mFNrpL70#sSXt^tIaRmC`~e_P znJ~4ujSvGtgu2QL(Rc_M<(u&PdTC4O^3bMMS9-X`lk{B$%ea;vY7aDh z%04m+vFeNXaog>>?QX}9ojv7}AI`4tjC|f3S;#9ohCHS?^h#qE?zuIm+EFdx8jK~L z?nmRHNw^V7aXEMjGHfHhaZAo)rJp`!e;P=6KfDrdmZ-flA@lubw^Umw)R2u?P=e!XT^C^jWv@xHdEwx%X8>9D)$bHvam`PQ2` zU#L+NcJT_qA#N3NYE05gM_au2OUnG!zg2Ig==F)7Y|8dY)p;+N{1C=jY)rw4S(Wo5 z$tBkY#h<5>n9b$yx%SJ+7aQnN5tZZ*p0b?aFS6nw^ka1Km}cHLKmL3L!I1wx^F3?* ze)Bt%2h0ux_V8kjv>_H_Mmp+7@#$vBq%S3JNg~9S=5_Z)%g?@*XVVDZxF^h^DwE&+ z=6(s;c6w$X1-jmxYC8Z@$7c|N3=IMV zLPE~PRlqCbg$S4505ur#f|M5m{-G{H(4xV}^y&4rbn!qjPG4a@L2RJnIl!BlDJ+q` zK@E|(n7Ft&>C=4{X&fEPhJHVp&v!DDJp>J7iLGKk#f3|rwm+78TYPU*ZgA7s_JO~j zwhe|y*Q55aHn+WmiU+P^ZA_I;Bf>IfbNMy;8iAtE19vu6(U&s$7f@Lm@^YjMisO)l zF8{Vqaha&)xPv4*>Op(R__Iu)W6q8$Tw*n8Gh}- zR~ir07IJ&E)Z{jTOn(Ipad{MsTqV=r5DXt*j#rzV`%K6@H_va32R}2RvX(e;Fq)d0 zKduGnJ=4N-;d{xWf8hif?C^m*?veL}a*HP~mA<<3-lIQEa3u@S`dcKNUl8R~mUSg! zn5LWoUHIjBTID2r$YtM3h_7+=OcSG@OcmIsG$aKRx81SQPAIu%;Q_Gyg zi??R+4casYJ1thCbR1X~y=W8i_nOOV1S+07u3_kay+36f2W@@x*#`~o+t*Dr z`3rRFpONW#HvFm93yMTy=x@+JP{uu*Q1D7#$H!PHT0M~SKipRK%MRK2SLr=A3iC@P_;<}c9HpEIz_B$0y3D+?BxXs(U}1CFjlSW+3mPG<(=2(j!%gYE|S*h zzpt;|#21gbD|_W#@_i{%G!J9eF~x)56pv2N`5wJx)&(7qKrZlj43mKYXR`#c3Yj_UFbwt({gZ zzD3vb6C}K6)y~!&8%7KrT41egW^Vq?@(y0r!U*yY2+9?JF&+sU!UNrEmJ_1p*@#-!C$xFni z1iJddmkGB?2RuO3Azn!a2zM|n{!7P((&l$OImkWqx-Vs1GG za(wnWa1uf=NFKe1VW4RIhkb?93+A5})O3QcbBK{9t|J*EY1ZC#;4ICxUF3$EHj?nR>(BF^0%J+uE{9> z6;-Nvzg6PQ0$<|4*)Mk=MEbS=xOhjW6Hms!bF<@@=yI#};SZ)?We%AcX6fo`Z*Q<( zk)ir<{{uB~3ph?JdXfUKp&!oTTCOp4)K4vvt>s7iYxI^P4txoCcRHfU8<)^*MEM!v_B;UtB%e! z_gys!Lhy3!^AmPa*A`>vhSJx|ACMT(n{v%OIY}(*BJOH_@zAuiD6SHLO0RI7wjim$ zL_j-0cc|;}@V3tpzM+qlZ;-BmojG~1z4qsa)3GzZ=d&PNbN4x?R#WK;wFsy(%m85jUX{dOGzs!AR*;|NH@|c-Mj~X z&wcLwy#I*;&dm3mz1LoA?Y#vZ;@WP`G-W2FZ`{g$7A9UL22Y&5p!CCK`T2bCvyMq1 z141~m2iWT_5jpV$0ognz9bjsDcMR2drLhEgF>rG+;ru~|jELNy{Cs@NoI7@}xA(Mgw z0k2O6jf3~WT2p;9GlqZZOfW!hRg)*XT{AGDQa%ZTU-YYae`vq`#({2<~Lh~@UPG9sP&%A=XlMwdL{K!JUk@M^%sEXbSIy!Y z6gVTQ^kWpt?iw(XV+TwXCA)hu4}QiS2DrJpiUCwtVc6t%zCs2rBR|6UwiFt;%@AC! zwi?NP?}cCj+|y=KgcC(ifvHb|7$)6U#uOA8aaM@jphW-sG15bC^33?6?!l5H`l4}h z^3!ygTkfLn&$h$fnGP4VC6ht#UJ6s485otrSBJrG6?k}^hO00nWWh7s=d)!QlF6!E z6r`$FB^WM3l8qcxD4|nyDw(br^=%^+CP7P3LY`WEEcB#O+^buFbD>ar!tl(9GFm%0 z$e=qr+f2JTRi8&~rn}1l)I!EDV3A_agDm??`!UKCFh30q?e-=xGRj56YF_dCNTb>T zEC$`Vd_|DLF;}2UBJllKXX-jubk+B1Wuo=LlIzr@JngN;arx=8 zH2HawJ&j5Lmw}~Z@AtCA6M}L*tsdE~lil;>Z?`AD>HAVA^k5RL&aKJUwYA$TzyWVXd2J^t2u zdP+YD2-Vz~Z>jvdi4`+ZT1h2d{C9H`%5QMmy|UGL4>zb2G?`kPv|{7V*Z8I_HlO?Y z@8VF!9FY<4qjZ;-$9De4INfQp+PPQ`D^u&`%k-b^`~A7af6o{U%DT^F{MBs39`#;F z0Xl>-ve9bi-q`+ywlfhQ>q%ouY3RwrfXGj@Flluf)yWRjplO3Q&Fd5N9L0wUrakSG z-Bz()hud{$yPt1(LC&(f=xbQudGbW^C_M^%-gg2b9UlBWD=5#lw4Z`;vQ70ngr`4s zbT(H!#|$;4lcEA{xSRMfG47H(L4X{=omvC-%}PQjaS0%B5P?EMj+u(}%F!{7(g6qr z7FzzG&Tlaw`^#eHepq2Zs9?u*T{{;cjlp`OqdIW9dEWg-B4Ln=77)(}r)x3kQ4uSI zaw_yc%e%w{ZOP1bKV!ntQ*`FB5nIG&3N-25jE6S8SJu3hkprcV4)e{7&~;gvO0B<2 z^O=1Qkz!EoyE<&ieEsI*)&%Cd7n8cyi{>&0lt|1R6mwY&D7-*p5{aZs6U@P_|0X|i zmeBj9uu+6jOpJv^o;hh{Wwo$HskEd-ot3z*uFk>9#4fY77mX`dgMCG?Emk3hl=@?_ zZ4SCXEllOsl3X<4Ds;|fsTy#e1B&vV%k>G3{fj3=yuS- zYcX@l@2+<*D&;+ib*TgluoWcF|MuD)4S|6}`5gn9iNSvlAWkHhX?zCp>W!yIcE7$5 z@z{TjhM1><#!xymL0rUl4p*h2E{1XhJC11wIOSaN;inHq z7a4^iF|lG^3z%lj-vUEJ;mf)r)fp zv0;Uao2&j2SquB@23VP->}j3cKM~hzB$^o-@>he-4XxUhuyxh9aL= z0$N(PO?|n+WZfY@!n8YE#A2|@G{4MU_nz}=E}`m`?^|`d<)ps;0e$U`awriHkoo?-YLWV(|DCSo@edg$!EL0?Kstd*i zIy^4t+e`H}W3Nh`X8sLx!nSxFf3e@6qwpU1DS2{KCLMG z?+L_1VA4@Rl_9qm<82p5!1PfB@Q467nrJ+h$7y3kWzE8I-73uVP)vY_*yXS zu|l#~iU@6fD2_ct6;B=4yid5P{^YngAhI`)c2y0prZ{Y4w9{S7g);qRAB~ z73WbHzP$I)9Ym~Aq7&#=2qkK`ZyN4&F_>H91dctr>dn_;=i}oQH89{tzxV3p%iI`^ z68=9!G(~)t8k!n<7PkRtmVW0;U7I8vr@FhU3aa%YF1@43_469bh`)cm-F8Iw){4|# z6K!#e{T?6h>FO>wtP@#vjCPopXGTLz##;(=kjPP!2=v9B282pTvq?(i>vNJ%sL3;T zjikLGs($MIt)Hs5*7E3FIzRu5rzxsrD`SaAb)-{cn|JLbr-~ z_cserFnNP6Heh#36>nX1YAuD~Q@UZjY@c^T?WL``j?`iI!KaHqoU&#gm;5qCcg+o7 zK^u5YY^#Dr+!NeR;2y_;I-pIw2j0}Ohl;fMqwanOQdo<4_yiaww!~J)0go7u({-h& zRIo3;m4!T{wEd~tPb&Y!GT%%T6NFc{^$%;69R2z6fnw66X+_P&)b;z5Rj>l|f}cx- z()J-UZB(fj%rD<^UNqchReLuK!pUQJEAJEVMmcA99!EIIV) zK+#3hAUiVgLH);S^qxMQp2hDIXj((=_Aj*v#*AOEGa}lotlD!4|2tHScX+M}ga6g# zcj$UsRRkWQivWoU0}z)Qus0?qzEy$_ zF}0YFSvT=)co?4kf9Egz{TH+0k2@b4ntd-%;>5gYS=C`1>*47}|kw0_ev}_L)MS$!@3qC8nhfimg%bNZH z=1Q6m4IoPM#4p0Lsu8rLYI>s0fK-6iy+i9nCX@p(lItJ6OPQE=rzaf|VmWBkHrT>CSE9s%-Z-dH5+1dm>HObz;l20`vQ{wV^N6kzM zk?}?K^`s}HB%~npI4coBHdV53A44Nv6`hua-J@#2R^h;lS0KC5 zC8OB>=^y$}nCyuR1zZL~fJs9q0JRWKlFnn43{+&NA5|!n|JAcvFjogIiwTpKx~r6I zzk9(tF=H9Pff++0@geK9x4VDaAtKCSCw>*-*0Dc)D~Z)Btr|XjkAbHL$H;P(GE~eJ z8KSb~aP;l#oG;5Pt@=(4=D7V$=y~)}+8V2$Rq(~skCMkbsE@y+tTWcmR-A&EPD&2$ ztFO8S>fK`n)D-4jV>B)(Gm=wkfEqxl8U$Y1<)58DKcH~(PJsP4lWElK#obR_?(|mc!*R&MxxW}`G-j?%9;C@?@3ly7fnns(dJt{`v)e>mflx= zw%ICF0bLql0~;F~VR+QRF^x&JDx{REzlN;{pfox7G$eIC5nq?n`KmKA;-9%I$3$~A z?D0I&5t5U3UKG6sn=|Q-e0KUs&V*h$k764dQf(!Lpril({oCDs{;A$)h^n}(%}9mq z^jxbaWAnpI5oxJGYz-Ba!NIL@mbe^za)*TJ;_di(k_;$6)fwl>JiK<{Z2i`?n5Fko zqSp_;0J~zwdGW%ENumQh0TFG&Lk;U*Uwr~XjP;J-kpThj>KZzpbqsiMbkl;?$ zfBO!eiW(|Hj7IGHH6LlJ*UnTUQK%_E6|LH!(0<=4MWz46f!+s?kDotSmjeRXho(o)XW><8N&4&sOcN>JKrzfBr`A@vW>F zPyd-lVB_S`{A9QH$7HjB9GOhH6#;;!kfTQ**T^&%0`Ru>OB>p|K@DUO`16a43q3tO zAFNm~%&!;?32a4V|H1d2Kf;R6#AHyM@=`D{h8l48PXY<9zDE#QL-?(~38DN0HwlV( z;B*dT@u`0c|e50E)3D_q`zu>1aZYgbv6a6X^W{%{199O>QIk}ZAeO4jR*dZJAu!w2Up$F>j{PGtB3;nt zM9TMCNmBAuN(v@P#;wPx9}96&RUHcSy)0B7b#f6Rq9%v8_KuDsSvLl!zq}_WLVdTQ zlo~wWJ%-_XuCSLT?Y0tWX`AT4pKJYZc|-JG^P(5t}V3O{@IkySy5a*HdWyLfppw zmVY;*UG%!ZB8rh#bpP}?WT`#<>jFGeLnMDwpwP?F zmz?(Y57Sqtr&LL1+akf|!jQf zc=Y>ES5vK0fM~@^rmlvHL967muN(}f$kfJY>Z!>HC)bL8&$u0@n!bFX*H5_tOV*BR zjvjMdBinxmjRYXt+s>nyPndAC_CN@~vN7N^u2H!y+o78CH2QAg{}L4;xm4!7tr*P1d}#Q*w4(TEqg!PqRB;NK;3}=YeA0ouD6cZG->DB9-glc zV;jzLQ9WHW-7Ax_S;bCWs^%4vu2z)NCPN4&P8k*ykMy9o|CCy}lkE@n{xw`Cz1S>vDEOLC2 z%5C%pm?}U-Dzbht_r=avPmj`oIFja2=pGmemV#(m`SYjDxW(&v+s(Vn6I4m1%k!}8 zYrl;_pY3sfaGY(pI2XQR#a$u4gVIA@OfXD}j}}Sux?NpK?I#;=Iv&ENx5&K&|3%83 zTry%FU3D43Sx~35aXj{Sa;)UHrBiZzi~=TX?LO3nii}>1;tmKBZ+1ZMO7`Elx^~lD zQ22Aeu>3=cgIrSKoI?Bp0_s~Ug_S$i3%ws(ve`e5bTw%eH)k|cOEwuMNq9!pkFuEa zF8-WLvsTIv8o=RBf?EpqjaSwu&%RWbHu$QXQ}F!!N=p{zzBLvDrj4Lu03m_wV?DPNP_4jf+7&Q8Qbf|fpGyk<|45U3Pj>!ElO{$} zSt=kI%Cp`>24TWI%t`67G5Wn47z(n|4C3EXj?|X^|21{ryxwbv2&Lg(b07 zdZwLE1VfIlCY@8cjHt<|K4c`KL`KBURhe%^vo)IJ<_cCCkDu92tP?PjZT=K|FZjYe z@#Kqo-q6IPQo%@5!(N$w-PG&so3af)y11_;8|74j1JNpDdSz1g245^KE#MzRyh3+J zl>!6fg~6b|t-`_3!!?j^oewW?fZUfQ=6la4Gp|U{BL80IiNf0%UGFeZZL9vyZuaa9 zmKq7bA7Qh)D-gHkweGX0K;5lA(Z!av&FnSMw3yIz)A%~ zxzhkSoU{4aTU+OmRnSJoyhBnHu1vH?SSl_Y=GLZ~)nurz)&4eN6n}j0*JCo`xa>&2 z{yuhvHmuq_P3fh>!p`|&OIy})zB;Crjsf;A$hri4n#&qm%i-%3A-WmrK?V+v@yl{g zSSND8I9RO(9fJ%|=lsgPPXfBFL3dJ%-^1%B2<&#t_%>)P1i~M^%ns$3K%t!TIsLge zR%sLlz03(n3(~-tZ|3oF5JJUj7ZR zfYcg1PZvfSl*DTZV91ny4zAc1!iu$KZw*dk87Bv7jXn?|MV_FA-LpD`yl6P`;UpzZ|J(Avi_j}iO#R3f>TPKa`+po?JzL+; z#zi&!CutDhJ*a`#fV%;OEgBL4oyy5kTr6BqpQk${N;AHUb4;X;92sscA3fd&h>w|* zBJIf7etv7reB)>lFM7hZ1B$N#551E{>~4w6f^v436&`1&|{p_dDa83>Fmj7JbWU_eac zA{_ryI1ytI7aLM)INBO2{D_D*dbKww573>3-BI5G|EXq)j${t)27@!#0I-aq1mTyD zkIy3#sP^ln`pXQ#BqO8*gNcQ87)&VaTn~IKJo%GqIvEh9C1*<(kn6t@P-L!IpVA$a z0mos%25j>Q;H90%Hc z{b%s-!eSKc=PPs?2OMsKmOg$=6%5w2RLmiTDVcM^D^dmDz%71DzEaWB(ViT z^(xbz11P^gfs{uGs>xVxN$$qhCgXo9!CESi%1;6R2BMb`#1;+@FRVm?*qWQ8PkyPQ zQZb%}BDQ!Ht@g+_4U`S#maPNJOCC2QyR|7c8J7%l$m%E4tJg-g9oPj6@oCtq3$JWQ zJ`)~oQ<2lBBqUttV|i{oKBe(ARIdeqpkK687I^>!N#*c&0{U+&D)AdC z>k&jO9l_6Ew}Ya<;U0P4>GsTjudsjm2T|*dBP|lyjR*upV8+LZpk*-E<*vj7l+2Ph zERVnd8)1Sb5Agz(Iws5+91{X5Tp-Ujx^7umykY+*L;?#Ax6}k>fLs)QV`F2sxGyD_ z)Y-l9Y=z2}M&7g`4FLo9jHy~$)9 zI}a0*70nHl%i3o=KaATipst&S#jS7fM&YNXqCR;P3FX9`(tp9}))GD5W{3PQYwN zg?&{2E$TIp60PV&4^!xS4dqnhCm)f_CfYR+LUFQKz{vrhrzjMl8gN)bD_j@81p*hZ z6ofJq2Ec{5T#zg#z@R{G0-Yt`!{>K%E}2;Mgnb<0ZhuQ(D1v|6*P1K)=(IB1bfl}lv}vv@i$jf0rC`r8wFsA9 z`Ze`&fWQft(0R}$41YhUnkke}16DTM%(wai zJdITmqEG1<8PPi2T!Ev)ZOrqT zO5CW$$MbjfO6bL*yX`b72}Ow-D?0}VFc#E!b@g>IGxwC2QPWVL>`i`1PJWc|yuzTd z_U+##ke?=}C#JGRc6OICva)uzc6{NtH|`}RAQpLZadDqrj*pFXlq|4=C?)yi!Gi}g znOSkP;+ZKaKq%S=(@Z)sa5*!J+D6}2g+H6uY;G@hwo<5uB(bHYBulS*#9&l-wSriH zof;u`Ddtug^KFbskn*Dvv+Q>M51_(w4KNn;1eJuab9)dvk0rhgERIq@5pt)bGs;IF zxt;tck=2DkU7#b+YFVpVIG zbuY?LeaEuJZIp8Aa(`xjQtAhFH)DrY7-MZG{nQP_wk@ZAUVeI~V8`v3TN8Xbt9Hk2 z%8kQwSIbrx9Sh+;Tr@tm3J_RG$ZyW$DE!T>tq`jur{B6d2zBe`UXw zb$SRAh_*t0S3*8jG6esR$)ZFz*a1wZk&}}HN*~~t8HG@gJVarWUiMD`CILqj`5mb< zBjNtQ^%ca{>~$}&ibdgfkb<;Qg&qcGR#Yzp^n@}XWJ#%20tb8qx}F_|JEurZJ(3*4 zjS8qhWUnTU=q*;b6)lPKZjz>Fvd-LWBx#hqg~N->%TxM4NIx0wZfq1WSNa}WKR!N= zRqqeiU?p~~b3JzD8tQyo_AaI)YH3t~NVEr6$4M>oJ?1)P_j>xng8@?{+#5p%CT&gE z>&`$H8!B?3!tdK2IiR}42M2B=-V_0RyYs##^Rit2tv1QoqVU3(&p$ZVM+eA7=m)Er zqwyb==E=oetfUzuY-sr5$c6TI0FQ7A?K1@H?EC@}9sqT10w7pd`d?#Z=-z<<5RIA; z8#b2^{^I&tMcOnu18=Ewc{RUNwl;^&8L>?RR@dFfuDiG^-cfFCQcd@g0_p3_qdz#? zmLwnCFU;~~tHeq^Mepm+IXK8`_F;SRu*UwkIgq>x->Q;AgLljeFKsPBh_&vrMpO}7!;n9-nI21<&$T6NFbEN?)j@ysq6aq^qhe^1l&WbQ) zVa^cB)dHRapfB$eFA^|7aDHj~q1A#cX+qR*n4OIMZQqOuL{CcW2XjGn zHy4i6$B!ADC3H%U%KCmR@xCf3Q|w)O^Gdet!H*>rxkO&6Ihjw9&Odso%$%ft2{?4z zFM5?|jTOsYdqP)3Y$C7gfX~U6N;t|GIbdIx(`z|#ZbECBydpiohUHcGw)vibXa|9{y4RH;$;QbBTOop=&- zkQiWOx_eVEUc3N56f&ePVFsMZVe8-$yGJ+8>OAakWDY@^(&%w1<9^rqq4jW_@g`r7@;O&bIO;OT6X5 z9j(II3h3hf2U(W4%y@7jA|mJ=G?so!3?0Nk0t4=Hy~^}|93^l=i3iBVL`DUyLR?@l z2zXEbrI2(&9S7Kp3BWiFp-%Po_6`gvFF*%n!LX;OyZ3QDC^!#uZ~VXd!PKY+!Kirk z0&ENJdwYHQABO!Wr+{<{YU_Wdw{D}n$))tT_xjCN7RalCkx#hQ3-M|%szIB1B3;xY zEe{4);h@H=fJSOL!w0#KXLEz>HQL9E7dW)kct|`F9yG%YkMbU0XpprOL)_WF#XM+I zBqig|22;exfBf;7GY5~C<)wl^0I3|z9XPPs?@3z5YZ1$0j!~CaG8xNi_+6IlJDaI9 z536x#v(9UAphGg~C!ChNA`V`MRzp&rOX7#1(WoY+aOFPzpoMbxY~`M5YHITPu6V;r z4TAB3d(YF4>VoP{mXBYlH$=t@;lbg-ch;PRXRiR^3f}9wH`OVJ69xqS(%K_SwdtOE z>$ut5Grs0T=s4VRFEqG*Fp24rn9+76isUNt4+xmfhrgYnwKcAgMqynMvDX?$OF~cp%ooNdGSfW z&5WLz8A=@f^-*Nd89tcb-~%b21C1Q(a#*-kRiTO{wF|Es+||%rgh|rosG-+?ON7Fr zn-!TQNbGvMub{M9HlcRhs7v&Fl&~eHt0L2q3RvvsA1kO3VO6g z3f$$Qvf#+ohePk2^j21E5ahlEP~65J-}}*Dz}1mXff!Ik14ft>^^ugwzSzis$9YR5 z&#ht{w3{>?anILz(~o4n(A>ER^HT|sF{QW+ShyBgms9Gb)U0gxrKHpdh|?8$|Mmyv ztKnBG^0Mgu6}i}{DUu)ARNB0s9@P7Z=`k76h9k?S{hu$ z*2tmNIIQnd!`6?jrr=}f7pD(yCmJ%{5qu5o3IZ#xq4g5Tc%+AxuM?rIy@K$=GA?*a zt+~eLw#CJ0_0*NNvO;kDyI!um+-IK)IcC}XB}UesUdr^F&aqxXwwNbpsX`** zEaiNIcCv_w`2Ask+(v0-YmoZ;Jt$ZBKR-y#v9aHI2r4q%{|)5&tN9yv8Q`!%fV~2e zD41@yKLPxGNjl^L6c8Hx2~0$Y5^lYVkHyDq&%mE5CmAN4;)EyNKPZaeN7n{QMCO%-RHd6A~D3>l7dWM6Fm%7-g+0g{LsuE zdPO^==C#U^RC*sh(j|0UF(|UAm^>2RvbMk}ggCuyWV_oQ4k)R&k`S+f_fL580BZ~Q zcryC$)(viUlfWHt_lnu?A$eN!&U|sD{U1Qev11AiAG1m`4EHofi%v~`a5^pLdhO}* zfho?f_e|W_!Q>TLGH)w&{w>9nTbL-jR_0gr6^%YeK3{7qTce79q)4U?#8dv6UBqd!O09n~kZhAOhIl5S8ft)}+J27?tDlvdOl5N-)tzBM=SFx8T0l@RV{)z8?%=6ufmN1Jyz^4$aX7SQWG_nKgaGm zXiO4u4LKgd4!Q2oUyeRt1Yd&59vJ*U{@WbMYWJE`DC2}chGMx{vP)A&;FivW(EF|wl%&~5=l z!G}DrAt2mN57?;qK>Yl#rWKb1v@19imhJ6v0XJ_UQ^P0Gz$GU5)3_~7 zbv1v@tO(2s38yJ84b-mfQTYNMnXE#H2e)yGd5U|*tX`GJhR~oorL_OAbcE~c)7Jbn zg}s&p)gq)mJu?>RT&tJnh(#1%E3d|gV7XzNd(lc$L&;K$ErCn<&`Io}$`|sSdal4<{g=7oft!1A%w+vS`es%TW>Y5i?L^}IfC@2-!XqQbj z`uzgu;=A`V#eIyFq--$d>h!M!O1tTUR(!MSZ~N9rb0PhSEbq|6)uv~S;JjfvN!jYZ z=ME!9KV>!bba`dXY-ZC_iABTlm*GzS0@g85JR<8lwyESCJg)D`dDL|Y6`(B(Kkx9k zcQ^vh834(Jl}ng+Y?C(NR_Q#`wTz7JTSvcJ4Q9yFosQ{#ZfVv&jG|nVFii8NT@v3+ z0iEPB)hBJ7c;?JeVGdR(TCnRC-!<7`2)bsH=o`F%c+t>dD*o zz~ABkz5APr-KpY#0q6x{vjG~vUT{2B({Mur?rA`3Pg}0x5RtZ&*|zrY#!QC3W$K+x z-L&CsIs(~sfhjvd$4M;TGOluj0Uq+{hs|oeEI-ytkzp1xj$Mx^_a~OUKR#}At!qXt z#&~f5DD%wik*PniyG)NnZ z`tEM+^2sWBkB{wa{Mhgpk>AoOU@1EHI&1d5DfB&(SikDJ-xfz9Y_{I%jW>6h{PIEU z1vvyK?%<$H2~T=2E%JGB83F7kFty5FITO7L5w|k}@op(IM>hupww7;cKmTO~nAF)S zHNSgHJh#O_{>%|?a-k2uoZQ%rnI>KB58_6v-y@5~)lvZs2%Fcf7El+kSKZac1t8Tw zP#jdjg8(@R`ej+nTQh*_fz2PFQfq5#06IkP;!g@GbxagKFn@5qvv^(0jy;>tzAN@| zM0pjrY9T;t9L8*}o?A6K?NXf|9sm5k0=oKRlb1uE$`lHs`xJFZYS`br>}Aj49H1lW zEG|7UlftC;f0zZ}b|yJww)W3!n?yfKNQ?%TWMRA(xvW@WuR&sbL=4qLdCfO6 z@?)>m?^4_ciF7EGOrQ*b!UOLF7MzwXu;%L?4kem2-GC`jS}vaFVy@e_U6abf;;4lQ zTZ6%|>w-|~0`rQ?_>0e&xeQlNcD9ScBkixwcrx6aSSn@{U;6CVqG_e2y?C}=u*0>* zJCe>t@;iTAeagagw&_({)OcHT!HaZFH;yf1!PG!a+mc{Rag`i?#w$F*3fpktl`wyf z54{$kLW`Nf)2mqkOirgxoS&3j*=LRup#4;;q45K(cDffwNwRh)SoH>>wu<--0@w2u zq_Mi0mqm<)Ys1h=l8pi6t`y)%wMo?{9~ATescU%Sue{|Pg6AYo~$ z0c4_nJaNjqg^12&jvw}%!hbCHm|9pH;(zwhOBjUP$D^EMIX~dlptBq<=NSJ0aj}ZO z?E=&A#Uo;+S%SUZVc<+6g3D)_lPPE!X3&XIomMSZI=u^n2ddKPCOC?nt*m5Ky`Fj- zv#WBjJr2vGL#++0<*VJY7GS%E?9IPjI8%W z_IIKhI7mO(Pk&~6^0YNk`*u5|n(rkE;cpgVLPdtfS;H7T2#$W=14Z>GYJsH_kwF*t zkJ{io+Vj7%igWORxQyps zQS*t0xWAgXkMhl^2;33M(%h5@xQSjC)Co$KLOUHemLb5KHUB^>*lDcCb z@@bf6)T<)Tzg2gP07p8oo8xT$YMAG4>9LAEI6Zk6L()ZW4TI23EohGN0vGmr3E`XtLpDNFG3Xny%FMk97j_d#2feU__BDB@oBm4!{deF?44)1PZx|V zUVI>MyQD>#tV*a_WiGsQ-_z%@+||Kh-R}iGdzwZ}d6e($)+Up_AD50*la0L3&D&aA z>7QlW#%XfKGeqBY$)4k6_4HI<9{;diyPb!D`y#y<2SYV0e-QuMb~oVxiQ^trtD|K) zcSM6NlZTnXt81x%NG>jrNJ{t}H(I2$fpC{-r@Rqyo_&A&U~K^_ z7OS8qmEx!1>s_1tZm<%XS7SmAGUm8~oRe56eBA`PU81m~j|$fT?Y9zEV{6!EmA*m9 z8d_ANZvr6wO>0)Fnz!1t2vO~JnJup-FS0JuDQZD7Q`{o!IQD){n4YV&X?;fotERd^%_ zaP|g`^=@6CBHH2tS(?1g`-@k9_KjIPKY>-*oDIm|8QAU@?0;91 z*1sH++92#q7)KXDi-ll?Q5reNmBc%`+izgqEcV%P8}MrU%Hls?O`+NkpOli5tje`p zl-fTF8Zzb_vf=Lvooe#i__QIF=a`XavPZZq3(~4f^Gfl4vq|gw6O*%@qu&@A~fB(2id(ejZ z{)wwOBLe4$Ec}1`eV}5%gfW8tpPmjuo-^9|x0BTf1OiOYPXRr+9-x7n02%!|^gS<@ zhs!S;P1UD#ji^w5RiVYBqDL=Dsh>NIMJ*@E!w!=Y>GILi+ojfuh)D*^o;+vL&?4;5 zvI&`-{{R||K|}0&(PlDOUIfM+w?olz+i^jj|MywMQN

r2e$SfszJcalP>1C5OmGCI6~R@iMI3}q)RlV&o9;OujaL|?Tri`%IYLBO#4eGo zsC=$Pvn|8a!_jDyqM0*=sw1(O-V+(lc4JM-te^k-yekb%%a-ZM67_m>RXpD^E1J+C z{njk{_0Pun0-8R^>!mkJV$}S3Q9M!A9byuZ)cGG++Y$lj+ zAYz_9w=KZI*|8TYsnYR5_}4MvGNJXv*=tx}lPOu|J2JatxvRIVJR-A_FESoh|&! zGW+x|x2+!MRL?BcrrA(*`kJUOLnq_O?u?kp(fb7~Ni~SammXZ&z)%zKC9TnGc{TfA z%vEYdNY?@iVq8&97 z5;HPR0Ye{$pAUO!R+<|mW=cS(z8cGTP{lVs$|oL}m-po5HmSPHDF%YDx4clc_6kncUr7LW;0YgC*H+DwHl#dgP&Gk4B_Wy+{ux8<_27J{y+I2u6fWdeHT*FJ z{D^VW{gkgmZv1IgGdO?;rX4jhY}lDMktU_x{$M)v1^ zqS+Z5$ap$CwK-A4^7CdUtaYnU98D)MB4kn!Nc8WYfb!*TP((BtgI@` zTqH3GkWw$nV$x54aa;x@9W4?S1D9IV1N7J;6FM9)e=Xcu&j4}g2Jczj0dWuzR&rfH zFes==M)l054iVxg_O-cOkMnD^y^_{`1+KFt5J-tx~+P|(v1Mae%V2xz3=Aq z)5UEktIi~z5nl}3rcCj=_u{syS-N@6UiFVJe~Du-^j5?Xg-UTY>Z5%;CY@Dy;VP234OT*uA$-!yXg27Vx>aWjH{jsvG5W}KX-ZU z@+Zr*A$)2=d;*8f4fEiHsUsgZ5C0x zHS1U|J+q{l*f=<+Tdn%vEXz7*IElA>XKNe!iN@H%HFM_e!g$-0EJh`9cnDKkv1|Z( z;O?Ydifz7sSIf$!4YV>RNMyR@bO0}7x^H96OzaI%O;i2b7rwu~5a-4pb-Z5wnD<$ z4Pm@o(ihdY_z|>@=RK5@ya%55g>KCZ%I4bnFU#Uj+=iGz&!h;D20s9`IP~koidQ#< zuX_lkv)C5(!$YlalRzkaGylZ}=QqT_amb}bg7Y+=>B(&>2AHVO<_H>q)ehq)hc5Wv z+3bbp9{w?31*=x9r@Of@pGZe#@tLm5wqdOc27tLj#Z_Ey(fBiGZt}}>Z-M|b*1N>G zJ=B6;vv%>tvpp#!wNk7KFf9`NaADFfuxjkzLxFE9_JXSE9&P=?+02qW>=xL<1NL5G0#nb}zyS8W zHWH3k;aoxsKiWG(rSad%K`!*Z$%2ktPj$(cfj{5euLdFlk!qIMeJFoZYjM8f%{V#| zcz%Q-Vm4!(z?~tB2|922&3f_C5W~vLd;YggU~)o3P1=7pL*Rz^#{;xEEOyA=DZUsO zVT|&z-(WuR{oj)|rn;%v*jn&`V3u$T=z#UwLU87riuK&R|g9r{>M?i+P}BVIo_|b*QuF=dbbpE>qCk08->y)r=xZz?iV( zAM(?krO70j@~Y*aA->!U-c&v2Zl*IYk7>P}xdxll-rTmyOd;K5{r5@PeA4o#WjpB~ zXXLb@Rto5EWp-<|Q7e_n#l}2Z+k5Gyvvz(;`8lS8DIA|j@231ysCKyT9lIR{ZH3O` zB&90qLdsp+iwL|@!5nbiR;OQ6u3*}bO1fBg^r#2rwM;h(yoIeXjr*Rn97gM|(czJW ztXOz3uf0y4MfxP64BoI&8lNioTlrvFI(&NzGg05_p$$_OL~V#LI;OFd>ZNA=)G{;m zocp)&St@I)A+QcF^QDq@vu8KV;id&JM0RqxHpd9xqi+fFiv;Jop1rk!IXRjWJ4k@7 zjqW$2HAJAe#;kGw=_v4>X;~Z0q;WcYEY(24wsFB{nFDHx4+&IW95VKOqg!beij(^& ztaufBAV_~1z7EBvOZv5=efVok(0~y{7S`QUB&5JHE$oJ5Piz_N<6TX|ZpUGO*z#D~t(P|yGd=2N>NuxSonEnA z>7QU}vh1lKi5gtibtW$s8PY&anHib_QB?g%dbMpg_OsoiVZ4vXko;y@%tg}rvS}f0 z`>`K+J&PuRZ)0;terK53x{5yIqGBh_<{f?1(*wc{6}Qeh=w0!v4X|jo?PTt^efE8e z0#F#4wk=&5psleL>_qQ14J%V7B^Q4X70{XXSP#2yF!xW;_7z}f%JqNfSOP7wws`WF zg)+6+Dst}HU^>;69di9!+xU9F6OWyYJ~###A&zQ!bZp>o2gpTHj$cshDQHtP{y&pb zI09}Em~b%noEUnyiOd<2@en$z_IO1qJ6$`Lv$O+gVCG_~dIS_|RUy}tM`%b( z&vMjv2RtuHD%a!ctm+%E#I1uRyX|lmqhK{n&7^0HC>>pg#aQ?%N5@7|@PkeDs69~ObxO?L!>F_Cf`p9bH*Ax|yAhQVq|N?6P?%V3s_ zkOLiU<9MCtizhA#rOsIhxO?8Vgg>>M@TrMxtQy&?Cvzl;hx)W z=KlbhX)r^C=EvqYdg8a2Mv$xn5n1mmG>J-Q^AL0Mkb)juy+LGpwOdHnqAvz#!w$Ky z87m5ML%|9ZvZ7gH-&0$8$58bS8x}#)M>XaDEn|iBM`hy6H}dw{aco2^vzAu84K1IV zKM6GygTCXrGNXDYke&ACp2}SYRTwvZDiuhNiKtLRM{qr@G|b5!fWm)1VdMuEMxbP^ zDUU~CdP6WC^BGo~{LXN1Hs?Y4|7g1IKq}k!e~!J0?3JvLEh}3{X7-t=uaf6<_xW9lWYoqcy(K7Ix%gT!z z-2A?wi44z2V;5CsDOI1S#P znzw8=BOGxVw)0+N-y7Yv;rg>TcN4ymtvjd}O(WI$z2lCLMLD2l1Xp*a$-6AdBD5qC zVG`kI^e^f&`Hwdv?|5x3f_D03QPm0{BO$XPAQeV@P8{ws1C~*lTMHRF?0!mQ&BIH5 za?V%HKDgIhn!-tt%V;&=hUV4$DtzOm;K_Mv@!|ZinkskG{<0CKdvkpTfDwr04!Zon zNl&5T^}S5>*{(|l^AR_#(Il9*JsTTZ!ZCH%_qXw;rrtorxj6{uxF^XYmleew*C2c0 zZuLG1IIJEGkGpQhIxd(5=}1quYpG=9Cuj~GbMkJmdH4`D%RD zjq--)J;nR4xff=>vuDzB zZQNINWQFBPF+T;0_#dC+?yI}>%cJjnPqd4QiRQ(`NFq<(``+dVeDSIc83`I@Hlim~ z7wjM0o-sok!s~xr8@e+nJ<)%!>IK`MtA9uT7;wN0(p#7f3K&+Y}0aDy#*XABfD!Pq66zb|kL^WMpkL9)?M@ z-o{WN>seq>6E@{&#@goe=~-dpl$$%5HjMc2s5?F%tR$uJ;$-3w#JK>OUnZPnazr0L zuaQA|I2xR!#iAj7(pmrnISV!bgBVrsbi@D9^F0y@qe!~u^trHfzv~tAr?YFWE?}al zk@j8RTZqi)L`EantokrY=U-qQVi74R-Hf8aK*v-7EFzzQ)gbtJLhfV|=UQN4oVaY; zTVRAk=@sFraaP1Y8zYN>@;>=oj|+6n7kX7MI6&e+LpK9bpBg_lQn7m|&}Qk7IbZkd zHroK$5#bh(WE-KuT0%^`Nh&1`-Yn|e*Z^M5c^|NG1ioJQ3J~APlILJ40d+;@%7W%F zBfu%W;1MoZ2sX<119L;f^yDNE(W9C!X3+*kew3&X$Z!d%P>dg7Z3#4Gp<`d4=xAuT z0&XuD!+c_)GPMyL5CG-^<_Z`=04j~wGBB&GpQ0~`gR6vJN4{~l^9|5J8#Ov9 zj1M-!ZIO-3@mNU?kD zn31Mk%tW@ULK)=I$cA}|Ep+GWhr%cdUJ>KtKRw0|_QKI%3(9lZJPZm>>n~;Xq^uRG zDDeVEy6nPY_miSh2JxO*xT^b(SXw0lOjB!i*4d1haUxXF?YU~!*V1JMP;P?_Qxd|@ z7*umAetxZ(Ou-jpLf3iv=W_+;*vlaBTuFODO`(x*&w0`_k}f{H=ajE6U}jpyP+vSM zb7u*L{{oZKdgPQ^ghx=f3`?fCRXxn|;CmZcB>`@u$FJp;?-NBp?(>f6dS6nMq6()6 z5qJ0r^iTk>%9aY~oTMU_>GBk*{sAE-+Qm@Ee6_c=gHNao$wj|G%MD{rpO*u0*l^Ax zY=+2t4sDzA5D!9?NMMjCqxM1kO>gUv)4*a@GCbq(2w;0YzJgy&BqL9#^!HB-8d!Uy zavNODTHjcT&Sj+unjE~80YtL#x}o@>vng9>DL)WhIUV?*NR0 z7mGO1(~Y0KCzO{y7mz9(?_upbB_1Xk>}^V1s29 zN)OyujE?l7ZUH-%ObLtCh%Tj3pG&6~U%V=S+udi%PU{{Y1(5482}mK=hhr*G+2UBk z(JX$lj%Txe*YA>mhz;C2s&8XblAl@R@3ZVZ?+QCuXt`Q#!3TYOS1Hl2@8NnTet*`# z|FWN;9LWfro`#MHx^7lL+i%anq8=wvVcw6=arZQ)e8%MP=#}Ie#=+U%d{$CA?&m5j zCdlx+pFtJ=z22{ShuFv5UfdHVU5{@43%jilvkmK2_p-Z|czw2CGsz&b7-sk*9<-gN?5Yc7-1L3{}(BZ=3$9sRKGD^lxyQM`^1zjU*BLJ=mTp7XQ z!`*hs|MDCc&qB)H(=z?f`(VF6*cWCE(l(EC3@1nGpPo7cG3`>Dcm3>axA(1_-Bmrj z1YsT^Y1`^+@LYq~QFPGu+Hy7c5_QCd96Pj!H2yOdY-7{i4k*tWskIu8J z8>`Sb&*SsIqaf;8!L9M;?_aa*v*9EW{)jPljn%{tCABP^3U}`6L?RwM>#Lf5{09r? ztzDX4{@(LXq?#}lC&Ec%FF@?<)+`M zBEi%bMlXQC{AAJQ^>y+JuK!|_SiZ!u^k`5&mfqQ8?utd-Oc@$qRUQg-94XG@<~TV@50ByUkn{&6{LZ8njNhDjX6w-2V@5g*o*o#l`Ihlj)(t`Y@(`7bXzyW>RR{Hud_#Q%$7#4sfHPt8weZQ=|Bl6#VlG`nuOe2z%$O^eQYWHZ-;IPuW4H`U8Nv#93q zB3kQ9*Laobf9s^_7VzApa5nxPtCY|8pq}KSO{mmuA+HKQy6^YS9$=qZlLND|v1oZc zI32xCpqdgk<7aUOVl1RbCY?6dO9P5WD%=gffJ4$9G-We&*17-Ctl4^1R3!tKjCfD- zT~c}|ZP?N$;z8yErTa9&=w`LB2+_u55n85hCFzK{y0IzS)}+GH@4rd~b1g8%EWgG; zc?C@Az6ZkUD!VWQqX1<0;X7v4v$v7pZ`#i`YIb*nTkonW`12W)B(_OA9YMxDp4Pyh z*%2$S*|Er;LADs$1HOUYt@D9vr zvKE6*cjC4(dZn;=~k}*?S+Y*Kcfk;{f8mFhxWNzghME^&oLK!ip60wUk%@b0(vC}G?=03~mH6XCY4k_~ zr)FgV`NLSaMK+GrLVwh(*M-Gr;@CY&P z>&FTpW&|geg65mOH)`tmGwkY-DI8QwuekRnNLW}F6-_# zB|u=c*dDU#&{piD0gm32pRyJ_+zlb^d6x-?NP!aU3+6!XNsYOA@jJvYQFeg&yu}gY zFMEaI98Bou_2kw_;z!UFCz+T-2i}k8Nvz~>8_dzl+_Gn!N%U+Ybq%{&@$giViT!X6 zF~1EPfgf%ijo&`8wjjUxdj8ZIc5EAP*Sl8=9m0W2%{GcvA9Kn|Eq`<^I8UF)y#&zNYeDl!6>~PJqRFBuY05N7DCf2 zsHUcN{s1R;EJz*`Q6!LCs7SZ|1uZVQ3s!o!t|0!2emx5eRB{BUcL?+UBgYvk3 z(kyw^xQc@-1K(EWgq>*}0&D(!9}&i+DKBqTGJ*tb5}O{|!-FAJ)!nxrml0^v^|vQE ze@P(Dj*co2A(X{IdPGF&M48?g_=tH4dwe2aQn`N#b-!oKCIE<%YxUS^^X`NarE>=~ zizI+z9QY)50Nz0$JHq92H^jG~lO^P@jvE`3wWZ~yOj+SWQ8)%W1M*rKhaVMA*Nu)M zclIjwG69k{N5$Gw=Hp0lPQ=Ihk9&(>9uJ_VJr-)@A#*e__`%n};mQRp`SPJ45Z+Qq z+V8uGmCxG1k_~KmI-m7%3Y-v9+f=!H-NC+qr0aQ_^a-pk`+?LAaC|cfV5f*)We|le zga%W_I-MIz^|;MSi%_O-d1wf2|L_(Y{QvWqsbUSr?MRUNvIix6orHzdq(azQTJ938 zLSU^Rn2M&DZ`E4{UtJDov^Lg@h(JcL(WsA@VPbp|1c4mZlZej(K?wer=hTQlr>Edq zKgbb4P|(h}EIjWQ>^l$VSXB?1l@K{ZLr1ErGU^B+dV^56qLY);GVtd>2YHZPT(&Z_ zG5nU0%eDTF>1-^dd>BCf+G91cWC zo3_#6`!jFTP`l^;{y_Oia*dM@ZAeTcTLRrY=c%bc&|m3f=x}%Uq?k_mHZ&%#8azkK z4yZ;wPA(v?n*Z9g11Yh?lN6}?yRwk*2G2MD9>UARW4^_my)US%zaIzdwf|-Bo$EwQ zcE434j3;PLPKvuVFO;kirK?BlZA-bVdR}d2b`}92Bc^V9~Aiz{W9@gRwH-q z^7eRPR8f&F5NcT9LXqy9Lo1MN-EzH~E$P1<1hCda0Z0r3^7y@7+TAfhk+U>PMXT*^ z4*X#Ozl)CceiU8$@~@L>C6YF>Y8moLSC|A{@H;3?C+a^6nyS{b=abGQkIyu}HS)ZV zDRP&9?cm~3$-DIUZ)N1y{c&3rx*sDMmD^w5AK)BOBJC~JQ=lql0FaVv&vr{$a#Yfi z{*-5orz_18&Z)IJvl#bt!DtNpwmZ>x2^_tR|K5}6oR7vwF;97Ma>EH}iwX-1D=WeG z3Ot=HDCku8SV2H*wmCL21A%ns@=+25wjE9f+1uY&7s##UgPz zIe}{?9Yd|p&@8sSRC?u`;{C9H_O}y5ZdRv!4{$``Pk4AqKdEC&O%Unt-K6EcU zVbY>gjiAlFuN7l%AFPX^J;jMJD3V8{S!3kVN@F1rkJaClFqL1_-9{2g%3B@(N5E@oihWtW*zUQ*=~BR5=&(lvVlON5z)vIXQfOI_Ko+*sFI0 zBF`4ThrPn;XC5qPmUGR>NCmbMM_}Csb9Ua#lMnAiV87A_>?7~kLQr$4k*bxHeL+^h zfEPSWF^W(3uZh;sQ7et}DTQ8_Uths1%+K$M#et5bBZd(nrY9zX-_T|!+;jShfLfEv zfx|yZ0sau&gT%QYQoT2t8a-I5cG>)2Sv)Br2Zj0Q4LWwf&F>jW-&4e$OjWslKs-o) zi-{fW&xhe)Z|}J`m-Gk01_7#xi314o)@~_TcQWdzcE}jLr?}yzG_0rF?v0vtqw-P- z9vk!-vrh+$={+q9jTyE8dEL%>;~Xet-57}OeV#N#Ecy$s-UC3|@+#^3zJ*Q9^yxj%30dkZC= zrj3plL`B`K*L*H~Qw*Uut5vMkncnt;5jB!>Y6;J>sKist3=eaqbie#?N`KPE=+Y~4 zJc1O5pkQ)T-ccGRw)STnZqeMU4xC$%J_?e#|FtOByQ}EiCXc=NQOEamR1W|az-e)f ztA5$sfie&9)yhX%6|x9m#Kdu9`AUIDJ(P5iFXkiu|3-z|BL__2!U3M&+dw&6U`}L6 z2LX&NP_sbvQg#RlgBvIg;{-4w{)&>jD&L?skoZwazZf76I!ux&&Ufd5m zp4uE;o0Dn?uV5qN52E9heLr{)UTB$DODK2YjOucvn;*}NTi|uHW*wiY-`8zSYhtcF zx6rAPc`U|%x_EJaSeyP2uF8sBt32?Y3^jm%h4o=0!L9&|U<`aX2=LRWI^V^XL2ZrM zm{|V(I02sg#4t9tBJ~HL`H4K^Wu>4K#a#jMH84~UbOQiR)Kdl~UPxqLt{E;G?BBK9 zTkMLK`(GPnM?wgUX^NpjX^N@9r@JEp6Z;l7%@FQy4ZIk}7?9%P;z9^L+m54~vn4WO z*!2z@I+9##^`Sz@xoLXqL*>|_FOM+bg1scTz5Vw$Jn`1G@t=%$wD#kLnqS7q5rio( zYEI!{YHQ(ekwr1)BOwERKA|tyza>e8r+1%NuE!_jC)=8q$G&fU7W!xq9p~o#=X7&~ zB^7xDqgZ&+eJ#DpPNh)3==XhtqwTG7rmYq6tz-(}5phvZ18}=nCyd*0K5a0Ypm_~& z-6+PtiCnU>dasiAy=<*#NT-CAG)bAo$BdVPU6r3|ZDWd4*jP4!%IC*9wDla%-r1p$ zeJvnq--O2=Pf(1)6hhA-egEa;v7l;aS(m&^+L1u61q<0J>Z&U#Dk@4&rjS_b9HwC4 z^F7-ql)u+XG)4W%;`imRX4U`h|H>D;AnFV!7toUK$drFv-d<{#CR!2=0{0rK2p2p= zH=_Pm7y4$vhKLEV50*po(kn;gi(i8i62DmaTNC^p8R{;GMFs_{%FQ;pnr-Xv8pBDj z!2Jr^UG{i$EDvDLN=QI(PK~Sq!OU>S9)fMNz?&rKb{t0nus@<C?~@mn2$Uf58j0sabgX=`j$lJ_EL8^&glW! z%uv+bxB8afWwoE$mlsT?l5wbcC5H~o@mh4WIYmLNi#2d62#n+kd(7t(U z7~DcW?noZAVaj@(*jxIpEEz9ZuMk0x>y%`M^XzUiIkO5!a-nIDYshkS?%hsnzV|NZ z`U&arG}@KA3>v~63j;L0F--9V8<9Fjd|Dqf6+hLy^Bd{W8c8Y4m{DQgU@_WY8#hm~ zn5AmbQQ&kcL=xNunP<#70Mc}+M8zYZfp}RUiaM*w>jF)dLlhtSx(WqN3G6;ypSn7PHUp zznV@1rUVxRcp4FiO9k}PgrK!V$C3lF^s`UC zq8qt%$dcyhCc^5TP$1r=Jlr~N?hY{=XOc8B zir`D2h;(|8_?C=Wr^S-ZwekG-LLzm7`Q0FU@(*Kq3Fe`~@NWF%@&)D#KlY>bB&QK# zZ4HTQ&gV(sB{AnQ+_DO)R5i}z#Fs1Xl6W&@eX@FFCYVd7ny zQlnj^Zv_odG_56RBf1xQH}`(UhVB@kI{U@1DILw?h^`!eZUNNK=spCfA&re52+qG+y$BnDC)CD?oo9wm@L>s2+w2y zQ>u><11TEx7vu~ToCjZC2RclA2Z%SyD3LyXd}g`OnD6PwylBkjncLO%I&bYV{` z@;x>eF&PQ3L36xZyxgO~W9N$mjJI6u#?KuGZK}0a z?i`6dWDPxcVCXGOExnF8ekvxY>qKrgK0SVvpdV21BJ=h0@(1`tc~4CxiscwaHyF@f zB|R%G(~ekVH|2Z&sqF<(?tt`RXV+Jtbt)o4>~nD(W*fl4X`OVaG-%EI|E7Hj-4|%Q z_V@P>yP|Hdj_e+yqedzBw^&GPjPNnK?59ak*c`f%ygWLCS>WXkI|ee5J`?pSG`14c z6+(pw=F6bq0*#~M54ygW$OT)W`iZ)if@V4?x+gPb)#=CS2|)>wt1r+09L<#R zmK2}ba5OxtVSrh?1-RKL7cLtW1x7DlCQ|}3MY3$*ay78dWB+dd9a9X``PU~#9i+M_ z9yxX=%LBCBBZhP8qA~xoECI+c5S57>MndMgXHjnn^Bnpm&{U64PKKz=HahA{p{{!_ zy^8bWLEfFeHys4q_-&DiBzRV`VwM!f@TYYJJ*0s;)Iw}ZD&;+YaJmyK z-|-IqdbIuJB*@0!kfs#jOCG%8LLT(Q;DG_X@^JpeQ<|ST6^7>RL93JZ&MNLzOW;mM zZ@+8Lj4fu$w`?89TcQq&-|ar>D(H}-*APu8Q+f~`^`g9VP?o#}yLarG9)x1^vkPD@Lph9b3# z)k8(B`eLWX#;66XaZv3fker}?7hk|&c&g~_PcPwJ17;1>EzRU14TewYh5trF3@tJl zjrhCX=~ELESKzLVz!t)m0dH5)M;yt2tN-={v@btr%mT>)niAACF`;c{#u!xla~0>7 z3F7h0|2V-1A0XfW)HHICb1*J(ak1SG`tGjI`1pCI*^pVek%Er`Q-_GVpy_1t%w6lP z>KApZ$m|8kmtO|EUZjau!jRdQBF29PF^(3?GfXquXq0A5w zdjDR<(mar2W)6|om8%}4YPe(T}Es|Hxu)@Zh%<#r8W`LrAX zh6D-rdSfARAWp}O#mqE4{NdrvYPF3Pn+=49or#43IZ>o04~an`KZo%U7yvxpMTwZU zS8V)m?)PeNzlZYZ=H7;?p~L)xHf&_dc`>^yN?u_yyY-5YOx_G%}xN4r%f!7H_5~L zpvVSnp?MQfQtwA#_8Fx#rt$AwKL&8OxEwLe28HGiLy;k}|1}!aI_2HKucHCHsc9ka zAh2s}Q-Br4Rg**mKqb%ee)h>fkOmwoW5V14oW*?*ThnSgrA3Lpu+qjp+AS4T^?-tT zL61vNtP57qK@?Y6c^-3z)L%YuyXIaykV(~1Qi~<_#+Yr@af+N^N*|95|Hwa8e1Z4r zEyp-fqLZC!Ht^~`<}mLo8!sy+X6TcSW405Jb2C7RDoSL!gMDEh^(I~J}ghq$Xv@D$(YPl~E}(3Y%%bFO*-ZN_SWJ`Z6?-6WQSbZp!Hcq#NS$)3dy*95q>E8M*RckP zUobrMk=Gp*Q%UgV)Vej*9B&k0sJu@aykUH_!^iqUp-9MIiBB)8BSA!KU`wzdh^r*I zKSg_+BIRA9$6#T+M{9w)Z#zr2G4~XyR>m)#2Qlm2_)oNsChsWI-YY66WpZV8t&s~A zp>xCGZM(z!Jd<4W1D-lxF_wLF_b-E5Njl}3NISImsfqVIbs2cSM^#9!o~`O9-HxHf zP)4uEn}zoFvyP}yoPN`sf0D)L(;E4-LmAKyIdO7_hlaukX|c|9!RRFwA__?denBGg zfW~^bK9HEHjFWe@@)f+Kga5!U7A>q?zte3nK>z;z8^y8pKZjG*0b7*udOHp90dp#J zC_EMwQ-zkh(vl&Fo0pxD_ z1MVYCKd&x;9XHz(c9uTYMwI}!AG)c=+tyZ1zG*79&#-t(dCFr0NWorqiihD2Jk?8Y z8b5PuyrqHH9gpqDT(v=ikR%786vLb!JTt=Zyz=S*0|~VoL2V5=w$VNnWlH$YfAgRJ zQuDb?WWBr~cl{!N>*D*xfl8Hb`GaaW2WIX`-Ak*So=)oCFW?QT{g?>{9t1&j_A{Z2 zX!ujgH@6wO=c^l_M5m0H^+Qhmlu2Y>?ak?u$k5Wztl~(Se}!P>N;7>o{NZ)5NFNYh zikl0d_Xuhvyw-xO^^bEuV)N-cH7*%DJVkfm^=amq^?IwS^PzMtOcAX|W<|kC_ibGY zJ~W5-;sZxrns_`3BR+;DxSsCQ*;>(!mh{hbj+@x{iZ5#$S$-`{uxNE$J79LdNtlPQ z@)?O5D6`nLL_QTy#n6m@Yq)c^s?8b5JV0O6S#O!T@e6w+CBtWWyZGj?d3s^-C%ILd- z)g6<*E3l4W@(DRmw|&+d!!^T;Y2r8LwEHMYkINOcMWX6GNbK*G5&&N zj)K%@ubtf~eEo6K2^??k5#E5yWw!t?seMdS@JnXvV`YBK^Nq`w^r-n>u?z{wJb3?P z9=H9j_X@ZOjfqO#^)QqR z{JRMgons)45Kj7mLGl$)Rt`NyuMQ6EQR>mfF--r88|Qoa>m^d5x!D7swfKgEfw#L` zA|fpN9bF2>*4|v<^854mpqvL~Ui(?RTEUZw^~TUoY=BnjXgS?KE&0sU#GCUOWBA@y zII#LW?M&egvHOjY7T zw>n*y*k32`HVg4TVozw-Gc1VoesMcuUiXAg^;q%zs|{%mbwSlB?XfAFJ-jhB{2NInqTA8N zwcpQ1%eZVNvHD5UtZnAHizaGn}v){`@G@T!K!4XUMr-=ep6ql$tHc97`yW zR1OSBxJ>i<07OUCO$?;w@{ul>1fW7Er~v>@Dn|}U|G0d3d^`uHHejs?W@n9>|ACcb z5U`ZHRk7{pfFi9)J6F2G&-Q+tWw^HO0BAy@?+*|oY3F7AqPJpva`a!*z|Is>>_2cav@rBE{9X7JzbL<# zYI~PDMre{+$h<(~u+WFtm)L+VHbw(%4gUcjh%FbSzNZ4c;Yc=%=P-@*4%NgFSa` zeoQo>lH*@~Si|jGN6PB^90A@Ua%OhhJzw$9YgyX8BeT|kxYpGAErObm`(+ZA>&Ed?f_=h8+ZJx{o>5_rTC!&e9$aC47 zOXJu_es>uRO^h%dCrGs^N7Ar=M~~A&(;W_kEKBx5-MHvw2DPIrc5@`v+1>%`_w`tH zds3(k=!QvE4QWq=d`C_VNz7fWKa`hZ?zK?*Hq{jf^z$O;UdrW|1<=nH^G*^MQ#y<& zk7mOxF1DuWK}jf%%?>&77da&oIC_6>&E-C5lAufCb2+PA&(GG26^8YxYlQ_nQ_NWF zt7pTx3`AUtGvH_*Q#?2fc6}=N0yA!SKaC?T^BjzB&Mw*cr%F_`vEz*5PVaA@{?%^V zZn@(nNid@Il{&Ebekm>oylVN_Fg?AigJ@s+YyVf0ShtaA!x~=6y}aNn;`yBxLUom_ z?po`PUt;jun$c|s2ge(J*iw$)aox+G-jKPg{^z1oV1TeF7wprBV{}}++AFmN_m=GMKd#9<3{fGElzvhky zSsm#>7wAKA@jmB+={xP33HQg{sZ_CHgM>31vn%=M?Pw&e{wu2yYY+F>jWS~R!`5g7 z4qqMdXw~nsr0iq{z6*^gtx6Vl5?vgkqp3mq@Sr0PSiv5rVObLk*e8b{(JaJZ5z*mv zNlGMukSYcwqmtM3NBA%RMTrpEk6-cZ{e#P1-H}PmaUq55nVFg9L3}V-x8e>WyO+Q1 zhNXY%)vu;CYqxOF__E6FQ@q%3`urLa(E6#vbt?8fMpTd4$jp^u8MW%_#UR)PO;^~m z6pzH+@3Eb1b15k!>oVkdogDRZOqNdwn@fM@(e&&4eI+`C)r%6%lrB=!ssOykKmofL zGC(r%RS*je242ERMX*8y-4WQ0&VdeI$U{1_2dV@Ie}cjfpP+BQvXueMckKHZNPzl1 zx?SRdB8P&4OS#1Z4pTQt)B>;?1c1LR5=pC!hVk!}8e2Q16g$=;qdP^Y<5&c zGmL_r%f~G$-|Y>b$L0TGGkUCAr~FnO;mo)ggPZ^>6Kn-YC9t)sS!v7qthBR}Bkm=@ zEG8+&WB$#8bS1#p{Tsn`LV_LUWNsDJ@rS-Xv9=qi?{xOd*xfgH+tib zG%-S_k3HE0S|xE9xa zsC&dyUL+>Efd3hPN(wKI&egWfe%M#kRP+s8%9%~|g+QPMcu6%YS-3@he6yU-$+rBK zNtI}B;q>Y6=$CC8H>Tyx?^ISL*y_weQ}g}Sqkl{|js^hH3vT4Zu6j4$y+`o+4a7rP z7ME@=@5@!5k3R1Uj&EG+uC)F~yP$dizL)jWx(v$UG&{+~-GSgfO^w;#nlv)iog2yp07f z0AS-(7{*cv;fl@@;TOS{jd?0Jd!O=KjLqy$Kz4pR%EM5{NmmS6ZZLem#*l_255jWmA*KnMFlrHcW1$8 zDSugl7RjjnZ|&?Oo_bd)J1# z9Z6F$)uzBBR_KwiaBU|ZSB{fC%*p@cV_uma|AB!GTcbzP!<3dyPwm%z=S3pI!a#O_ zoS)AeK@>^m0{tJL0)SP7^xtcD0D`YT^EGm$4jBYQvpI_g}7|d3flA!=wiL&a*8(|4yU|{G9CuY|G zaD5XmqKYhoy;Vp=;C8~@@3{*T&-azu;h}!fO?!g-{otHV4eG1Yh)79t&_hqX1y8ow zpZm)gvO|$piqZ3R1KiTa>D2V_-X$6RgI!F1Jr{aJSeTeW;d$WwxR`Yp$_Kr>YX|Mb>d)4D+rO6{2^C zPJ=;GO11?ULy$??T1A5zp>N9avHz)x>T9^jhkHuDu7;pUz0Ksul1*E-k@cy09Xu+@ zYMyZ4<7Iw5+I3pKj-l1#mMHixiOgu~Ln-+DVE$n^MQ;(3=|sR?7Xmv!e|TK_+q*nJ z{Fd{*hY1lP%v|N@Ix=O9oke5~GxL6P5HcoDUsNNb#d0-UmdR14=@z!CDklompF{|X%#gz< z-nQJ6VjV;H+mkHvFT6T$*~X?G#kekd;oR#1q^Gwkfc~PE1%Yj9+taA(PYbn$xr#T{ zX?zqC76$Iu_Yp;cxd7oF902A>4<3$Uiaj1uxalF^$>X=$mGckD>zWKm2F6oJHACUAO@g3eO{#LTBtt80TMNDaojJvp{! z)J_~37pVkscD7F<;SLzBRujivp}1fP8D*3dMA8S$UFqx$j!#3kD<)N~(7S-E+1(B0 zJ7VC&i4Y8>kFPTW?_J__jWMMSs}DbmR1>1N@%VN4TtInYm}>?gG+^T$*7Y03)-zeR z+xnrN+B{2Yfs<+G$cQ6TE{JR4Wklf-eMdfg zI8Ewj!OT(fR&B`aOUUUH{K17Ef4fm=WzdPRYmxgY8NYEjYs#nzovVYFEJ58MFl5UX z4}NFZ{OwPo)AG0-OJNhHjH|&HuWfU+aOIEQQk3GOp>arp?N2p-D&lf>O8CK125drk zk*`nuZkgn*!R_Mbb&ZQn^xAU>Cpf+<%V@tyg+E5p5J5>(TRo)ils;C*SefHYQ$}P4M#0uQs-;9Jd8})OGYJZ4!|?elD2!MP5&N3LD);gA`WP8_9+l`w>Vyi1>R_dQ z0$1=KxMR3%Vfh-~^h!Tg#Ty|F4W(d{v{JN8(3DRRmqiOy1j2R;2I23lZi z3t9CxGP=!G8^*gbGZ9<1{$!hev&_P9;oIoFi8?Gp%X$O1rxqq0OF>@0SSWf?Yd3&4gav z8Zt_kP&iQ82_$17>)%6QaljKCWw7jV`zv+|rs z<-lSA05jA`{0RxUh)5&B=%@68B zh_a?n&ivGm*d8${&_g6`Lpp?C5g*g8^=>#ahZ8EzQThDMYa2nH*ag4arP!j>_}FOH z=+WW;$pTRBSm*fbE?dhnzpKs4=f2OlMc@A`O0|zd`h+csU)~&h=Eolp<_acE>J#-k(Y@=u2dF`gPoZO{9;F7Avss%aXy{4r(6kWYDS?@Od z>9oM((woWqWR7rT!d4>b{Kbs&Eh&0DKpl~1tweOSIWYP3OMzkpbX)H!iA*3nc#WwM zVSbw+>kk*v3u?l*?<^sVYQkid;K2j#5Q7;2occ^wp*Orzh|Mk=v4nt>dqtl<9yv>< zT-JbQi~a++k*2>Sr#~KinEew|*~3On>AI+$5+N)oD32N%;Ps)!dVucqj~1eB+~7YZ zu&u&(zpMV|R!(45X=y1qKWki2WDPEgbEul7xeI}T{_n4+zP>&s^pv;#dK@qo&~m{- zR@>OaseR^Mhy3ymtuHgdDzfiA6ecY#of(4c>XO&cI5@yY0#pv*0RX@U%P9i04<&ui z0l4d8RNr=w-3*+JXRaYY`v4{t@K&#+^a44~L$%>-1*yqZD1_IoK!Y7U}|?;E#EUFvp!% zUWB^Fv!=S5dC*J&fOzr*FwI4!C$frIoP|sl4i?+bVpW2KWwgb9A3_^OkF;@|FFJCa_p{Z7yL=-SZai){ zL!`yKZ8v62+2}fBAVC-AYWjspKkq{c-AGqzJl2~wJJx#4j|?(PEk2Id27-XR4q%I; zPZ*b2PZr}svU-(zfRdpObg+636cyi|KFe7Vvgz7wBpDEs1`K@nnvVdYC@w1?4btZ^ zlrjpmKKu+3qU+Ck_Zay`QuwocQ%HaK+5L(>4Ft0d{0Cw^k&Rj zaEzwvJ3w)v%!~wY=H})OYaM5*;90*|Y(R?*ZUto=rtItxO>)Gh3RM1Nt(^9;xfTn! zv+i>rZoEFxbE=jVgwZIjRRohy5l(rk5z-%I#6speJJI&j){l}5;7A4}h72)-M5;9y zdjYg(fF-0|4v0)3#uP|I(64)gTx>zMQ+wC)5ji{4>F?i?AO>duQKZ%&W%Z9%=Z*ty zIC*GyN_wrTc+}4l0yw8bnQ{<94ds7BHj0zyFb1K)JLTWjM+F{7k6HCbzqvyfpa>9V zoLpT4xIYYH0xWSRtUiOXWFM=JzcoZ#SnMi2h7uG2VaG0Hd+d^#F#Kl*Z5n7-Eo`J* z;D4b?#0;`OHo&BytC9k+tJ#5Gm$EO3wH+nUFIPNf%?997(dF03XOE>N=1vpy;rzAG z4L=1(tNl6~@~Nusk6U*>uI(nWGflh5&{&;H%;`Kg0394<{ktg#r?cWORQkSkj*rbz z(Bzkw+DHbVjWFW$HCy}^f1PCkkA^=<>LCXMq>{*R#{jHgrOWS5zt&HdX}a>{Dn8^? z1~>))Ljvb%OErg@Is4ah8X1iCrCe6{o8`M5Z@PZgFs1*Pm&|p3>TM6nqDxtaIkSJ% zQP+EVP`L($8NB@2%PpGe#%2XnED*3}>Qm|wGyFjvCzL5NNIeI}`@K4AYNO{(cVrxI zr20K3Q+?_;Royc`{JvUFQYnmB0U^+EHH)O$l?Tm8l}+A;#&n^83LgMb*Jz8*w*O%y zt)_9sET%DXv=rs+=Y(@Q-_vxJ=kGU2=3C_7F8=z_7S+v$k`- zT6nbtE@CiSVjvGcM*>syb0#1=+6J|Zlt(x=Fvm?ImrKkaL{<2FILS}@iv=#&Q>`VW zrY^guPx6N?2dM~(D_4)NAHZb_YOrMP9ho!KY{{33;x+c$4B!EVb6hoeGjMXj*b9Ti z{QVjQnHwG^6wb>rk+x#^S4ia>pRq9&fD}P=-`N@q)LugXH!nX69mPjNab;lmvB2gY zQ0;Txf{6k{1{(td2{A(L{&!?s7bHjZc)bUulVJdTWIxcup|oyD~UjMC}@vIciE^j+WIeg6*8Ny)20 z|F{+a1V1lhYP3r@&sWI_o@%H*Zm^Rcxr42u?w8Z*wc}7~P5uiAd~E(!ec?)}60JKx zuD$JBREh;fM>i#c%oBYiQ*w(jB>J%!&qaS*@R-I2zHrLe5g^0l+TyYJz(1Ktl~`lf zm&299BkeW&GbE*{_RY$0`3#o|rxQ0=c5OjhT-;>>o!Avtt zpaInn;&FcQWdw-yO85j7eCIBL%3KzjH(I{G?)gx7==*p2HH@_7{+(By7AL0#LIzrw zb=`ee*8Nko-52R4dYOy2^H+ys&363WYxE2^k z-fKt9551VTfB7O|rh{3NcJf5aKSE=X@Jm!5emHzj>ky0ryaF%zME8AuDf1qr7T0Lk zqW1!pM$u!nBgvim39GAJ8y+O<%ke@M`pcEV+$c)4kqw)Om<+~+xR6G$4)Hbuv(Spw z`c3%x8T#z{b5V>;wtar^#uFb%&F<7X1C2Qt%H>b`L&MbeLl=)c7SPz?;eEnG(VKL< zC7&8Nj~9dYj3s6&40ZzNDF0xx|5^EhT_g4jjO!|I+MwOs^uF{jwo{A8`ukRfX?UM7fWQq`eM4@N2nNEkquhQSV@`5Q6>+SKGPG4w#Tp^qcgsh|KMZ12j< z$^wlE1~P~md8~}1yJPYc;F+j##ZBdP@GMq(a7Ki+3e8XPbrE`$Dj5@s)YLJC!yFu5 z3jD_khHYq3f`LOK9>`7shZVGyTwGk4oo^GNdz+hVsVL0>8QFxiX(Iq{B?i*~8S<~r zCREb@{17DD1poO*HQQqa$j+f4X|D_DJb;1#$OfsA4Vc(o%U;+>&jeSzK#MF4`soL? zOqIRuDs0pQJwI(Y3P=?YETj*>|Q__tz8@U-~MzVNPo68Z{n_N&+ch{29YL zA?uN_GU;*bb5qAcQlq!DoR2+&I)dUk)!#-wy)LOxSBC`3cbo;O^ebT?>xvBCI@=8d+~UjE94h3vGys!Y4=u6OukI;!ibiwPs{0xj=sT`*2;6w*7Yo zkwA+XPr;99u1z;6$XiS zvU=MEffSQDg_R2jI9s2Lg0@mB4Aoz*lqNy8L15memX;1SQTQ4T&+Sg{f5cSHN&*=& ze4F68OAr=wdM#IY-2&pySLi^k!1lez^9mxEp#0{ zUuy-3lai8>z%E|a4wz%zl0ZHsmK3#Ov48)uyXnS%7*t#iu3x^hm@5Bj+@f|h0f=O< zk2c>?C~6Po&vt?k77|*wlL2ImWgMbvloAT4st=YJO;;GAAeWad%lep)t~1<~o&!DW z;aUVZE1@_j36I@yIv8%@Zfz$j%6FEJg`=3&0 z=L?ELyg)&|*(R~~+5xzXfNAv?o4R+x+If@}`ru<^3|i z1AZ3>WlAIgqK32(64R9x929RgyJLk=;$uC*b{rdM-os>QWVlWcKnElrZwNi2N^%Tztz76|7qP{zx z>hF*L+Ixnwv$K;e<06EtWUoYATlQWVA%tvkQL^`**{irx_RPAn_vUx*r|<9g>%TmV zd++<4*Ez4}dTl-=0XXWrVbFi*(LfUkQON*+WRzL_ABF!<^kHsq&jTO`Nzx_OP_cFt z+?EO&g=Vmyd2vy0o&QKgLTJ5~v(W=?9`1h52gCeSZu2iMGO$wefEe*o5OT*1n4BCl zK-d}uN)bvzCq{}U)FMkj43rc3m{RZ@1S%6p%^DiW4rUCXBYh$px*HSfpG4(Qn!7cl zBYX4nMPt-ziPVITx8c(l`4dF;0Z(-Gz4dYg;Yo#ayka!z>GPd;O`$O#X()8!e7Gl! zBL8kC1&o20$Mp!nCgFNDi$M{S;56>^#RS%(^g>={2E^G}6d0-U_?a*Y>-(SMhWZJQ zm>5tpT0w!ctvkd5ctG~fRQ?B?kb-HkA@fgp#M&-*9#f)x5F0Yte*gB;SF!~RLw6LR z3VsRctHup|= zDfhA3kH#Ol&AG{oRHKw+Mdwik`$b5H3gmBLtsm}Mt3+B;YFYz7);d3|T_M))=KL@) z|FKb@uI(twF>e#wJVxhQe}3M&#&Md#vMZ_(Dk}5NK32oAtZZqgNEsc@DDC%-8exl$ zM5Q@!OKM#KXfr%QUjn7~1t5eVy#4Ax^Irjk4eJw0xcS4&wG1aP+uVHRZ87e| z!0<3Jn$SRyw95)E2L?^{OT3_fAuNOnTP7P(QHgB|Au>T!O;$lIa7{?M1jgmXdo!s> z*>2-=-o%;TG{D`y4|TNgc$_1stACD@d=VaAL^E(J^i&dl&Xv+KUfWlXbkKHnaaDb) z>T2bxt)s17`%L(iu*$Fd+EPVz8>P>jSbca$i>LFOBnk())Bk8^>_|HBm9Ff7H4iSc z6zD+b^A-mrNv;_=!*TwJwEt6>B11v$#|=Ky+9Fn*R|}3#jCQBi8y? z;BLUb#kNk04nv)g6k~ZxB$$XZ4oeoDL%8f8o}K)u(6XuYiFJR0bT9H8e#> z=%b#<$7r*#^QsRN%*E4a&~{r`lis}B!+L?zx=-3kIdv&c=~o09!!7oHV{JOsor5y@ z@6g;zncdbpkb{4F>oAbv`D>kP$%y2&T&tZTk(BylHBSEYuH}q{U)(&v`a*raNL9p) zk$!@L=79k4h4lmQHXKF|6o%kt@yfWjXUlPcx0egxynO>=N@RVZ7C8SHCPARWUfDl3 zBPW5WW1|d@4jsV^2#{O3HBruJ1?_S{>DqEFE?a@*9efY+#X|`|%P8(`&(s5F0_a)y zPdTVN0Eq?6p{&f1^eZgl|7_TrfT;$cjNLXck$_*LISf9kJD`vQfeZ5}WV)lneC>N0 z=7)b2*nECfIljTa`5YKk_V znp)`6ds3p>a6WVh4Ry_=U!Lg!zAEZtwXs#Vr;?(qJ!DL0#VRT(acH8SF)m5PEM*T0 zM<*evutXwqK!ft5&U1Gjz=2@*iVT7-2gNw&-0A!Vgtj=!WSEFhX$u@jeiEb}Te&G^ zyN^z{7QIHTT+vdYVUb)e7n9Dx3nq91SHN3Tu0s;Qay1v3sIsh%kB*SaxTq<1)Ch1= z)|vp<9H_VI>M7H!5J(V2`HAccEDQ-E`0sr%bnJ)ZzgUQ0XoxdCOE1=lup`z`lpzKb z0hub$>+hXifPlh|cI(mo{*qB<5mRUH=y(s|L>!6At1(cTuXr2V7oomcW$vISBOj>o0hqz zR-N0-$Km`j#fDD+PDTKt;>gHCN}0fo0KXjdHnhO&+Ixa8Q-Ml>1HRy9Pp2akvjmj6 z2b-nakPG*d&0gP_-00lopycH0`&!X~+R=d)(SiQaw;5FJdb|PdyaB?zZNGWjl6c!z zdD~v|TB{fiQ`Bd2+V6A1_6MBy2OPvdjk!oPuewd);S(r z%m|Uxf>xN=*cX?VAgKh{_*MgN)&nnKM{US;j_O6t$W*L&)Or5BDL<&Q_bVeIsdX!P zv$NzE{s6=qccK36!OYJ)YzG>fEFJ#_8Vh3g776gsw_iu%)8+6 zJw!S#xZ6czDft`wt7@u72db(VzkjvOSASt zfeOV7CVZ~DSjkc7s!xIya=*!GEvjn0Y4ZS&)wF7`#I!RT+LQoHC9}e+%D>n zZmCGO0_2g}Xd!K`_QVs8vO2F%PU7SbBs_K;>}hUEfu|Sbsc_p?k5zxN79SJ;>`ePF z2#p3G9hTXNi@gI%JdHIU5SM#t0?c5+Br}@B_e|A`(dx z$gVc|%mfLD|G#->DVSzAAX^zCBzXq>M8LcWpcfp%dwXDD=(jOXKvp6!Xyz-Fab?m0 zGz>;mNy7d8{9q*Dq`KzE3mQjGsoJANX)fbDM#DV_NgZ9`wtu&AmnC!}egY_tfZQ*aj#$T(zIN$sG{VUd1VQBtu= zVN{VR<;QmAA%`Zv`qheTr2ev-&g?dDC`gmI(s{O>3$VoRAUUd}wS?*X^oc)(eKZS8a~-HY zp@8f77#syZajF;3K0qXxt2s@?QEpN2@K`ax#mt`-OAzi}141%sieGIhD9kHEXt1J^&rJw7w{ zG*Ms2t!n*%h+R^{YQI(1Av}QCU+Fk#0Ygjk+qpk2%nNs{8N!rwDN+){#5bneIQ$uu zBta@jkd$e=-}ZAvPv@-XExZY2>NLjV*&99A>;w<#Jo}*bAp`9jjz3+p11FRYuorVAwkLd9oYG5*|y|0ZtS=DXJ|BiSLDZeaqQ>`@S|hHot!Y*MeAAibQxj zuNh(=5FB&ucDsXYL-ozR05#J7sP}p84OOid6 zMbMNdT`;h8h)XQ(ifG0JJj=OVL8gCDJ&4T)S8Ok6mlPGli~%;dKcFLTFWYb5c5MA~ zVO^;|CxwD=m0T-XnG8TwStKpK$XNLaRHYisZbZ+?G;$i$`yN5+Xe+7h$pF!mEBz2z}Pn z$6gEsFjfHMg$R{k&kg#f`lLnAS9MPtf zd((?$W=v(>?tRSq=x8tY7i1+J?SAPai&G<1Vx01^_FfxnxFe5Ps#n!^=bDc3j`&^O@sIq3edzLQ5@d`09Q;^!LC4p4OW&I(9%9B==p) zwf1`nc=m23sV0NvbRcT)i3hT9c*Fpl!6F8BqYTp>)Rjsm7EIOwu|Ht0f*8aH1P#c_ z%3?xyr)!6LdaxKgmpo@~uSRZP;wKS8FG1CyFv#bu-XglII97B9270a1j#hUjBkZ;0 z-niO)N)>D^bn-c_E6lAEuZ6ljR&*21Z!E}cPAUNgM||$0C^_t!4+Kiy%?8dwiqSMO z_kzm&XWaOUId#aOqC!F-A}q+M1E?XH>;Ww9Y^Hz$UP$qF|8uj0atoBmk1YE?Fb13j zgCc;dj%tHynwuZH$13CrhlCgr(+AR??nKCgb1E=( zF<4SiIMJyihY;nAL}xI2L*B_}(sTuengdXbq!Oj9+|C7m2Jk^tfY3@DM%6X64l%!F z++m22neeJGNMTB&&FEIDUAIxzP!XiD@p?HStpK_1pZvDBCoM2o@}Nxrq3@2{SIz<3 zt6p#r;SR6AAJ7H^D6``;hs|boe5lTU1?1MAFut{VmPLMiCN2Y|uf>AC1=9k|+8z|} zkUgBz1Os$sNRFiJ0JU_PTndzlt6{Ib4H}hB7#|5f0@}eR^yy{>&ka6k!_%cFltJhU zK4kmA6AcMYiV3wc;8c43UlOWV2usin2(u?}T4X|rODqAf*va+;LL?8btMjOLoO_99 z%zHJqSz|L65)$%q?`@yn_aM{CS6Gre2fSh{0L=I*PVidF)%<7y9nNhkDigqoKVrvM zc*l7rh%Ko$*Lolq(f0$34IK^Cg98#SKqb#AIPiB;(M3IM`UG+FuPL~ZM@KdrsBtzwgVJ@b-2Y z!d37qj*dV_G3h%)5AB*@6=pgHQfI)SF0Ac%bFAnBU0zjPOTpIg4I0Db2&2!$;1sKz?Dn&(b5~ol-{z=bHgT*q-?9H>IU`Ky-LJdMs>I@?MSm zPpWorUxL`qkbLZOtQD)4`>C`SP{4UydhCSjfFk>K=mKhBZUbmT=ku3JI3By6GZh;p zaWZa^hLO}gfYDIgh)IQ+<9*_|@urjE)W53l`bgMtWCXu9stY&KhTVGK!U4Oz2w$v1 z5cb?)l2~CU2TQ|R1oo;LFL1BhXOSRPq-%jFe93XImUG+%^jOM#$m; z$lyW2NO{+}m(hn^C~5#uB5Wv>&`;e*XTgEiJexK$`(& z`FhT|_M{m4Gok;0#Hm9|k3Wi^OkqV-=ee&94CZsJxOMYPWt&^;Srl?7am@wo`>ZJh z$^J1mzT|2eUcIq$bAm2bgkGuRdw}kT!Z;i5;9xX zM@%>eIA`4*c<>WRRW@Ax8@~r)EYw6`DJ>W0iwfjk++`$%E(|-WaOvnzDnjOfyU;5Z z6pk`?gN*;naO6=&r;I@ijf}vQ*CRdv-DGEH*Vms$pdoU5_k3=OG<4PU9P8*LFHXFb zYKK7Nm~Cx0g`yOMh@=vrE~hg9pg%^A0!38ny9fUm4R1y<6%5!JbtHtQi5dWgXh#6n zCxtEtF8Yf>uEqY0J|R$@!Mh_`Y9M1bC}g6xZ4nX2%v$=OY_i(owBNkz)7Kxy)qY<_ zpMum`^?j{Zj7Esyxl5(L#Mx2~7l0Ma&r_VysESQAm}P&`r%~%!B_wQA>vnEwbgAXT z!iSyN*P;r@Bl3|SMv9wp#*31kfaSlCXe!$j&56PO^-{>?W81K%{^m;uf|&QdRFCK0 z3<7_RJ6|zVKtuAdh-VyVE>;>=z^?2K&kNkWoXMoFMsa=+DUj|+;j8q{tkJD8u~h2U z9lw39stw@UQd5da6Y&1~ca^&@?Y%Iqh2Q$xw#xixTcB1Ms8n_)-$Podr4j2~kE?dA zpD9b$kH+Nzm40MKz2%gp5l*6(1s|44=pC0~8C+%{@9#a4jP|n?>FvIJr>A8~CS>F&;2#%a5@rOm|)|{k#8=c$~ApXk-!btJG*8&1`t@a(clV1f8oABcI^bSIE zZw{h*RLyxaYk*&`SfzL|G*dia8VDtihbDle3aH_Tx8`v;sFOkaz}V)4aJN=ZyHJN* zUyTYzD2qJq{;G9x8YzL7JJ)PcpVY`Egg3v?;zQrY4-Dcj^+v!T^__a}x$v59p|g8{ zhqv7m51<*BD-Q9)U{6hx7c@@hiKxb3M>E7F%13kiK9(vjXf={4xqVaWTM-38cBgh9 z-pGQeRYs|!yB;>k0HEZAYaD#aGvXBn$FOwJ4PboDF>k?bC7K!mBK<^%%`89#0t7BD zDwt%iS%nnUuXGcj!2;i4*NCMUVA=Jag3!J)vOb*QAV+)K04=tr>=|QCHGW6FQYwYl zBI^`m1Q~-|>5K}ZN*wR@YhKy#Lrl!f0=anz!(({M96@ML1FH~g_w1x)-?)QwUKkxAp{W=$`g7u^4M;m_UH-Z z)-#erBVLQL;iJI_2nZUiZ)6O-IZ*Wx6Y+lu3UzFuBOy!#pezOf_153dfdTGc1>qKqDE3V^ zN)V4}ASm3?%F^)nn z2~Q!xJN?q#Y%>Uy17J2Tn(q^1nRi*FA zo(;Go=~o3#n1anovZMHdA|-_~xv^|UY}jop5l7=CWj~lq12Z}rEBNd3#+IYTe4r)l zZF^QSjMib8yGF|xnGrA zfW;`&#E3`9AhjYq+)b#V=dCrBwH>Jbkk<2ZjaLjGR90b=*6%&Tw$FiWrhv}ldLmff z`9AQ~>L$PFR_ZZ`70!5U;qiS8CbkZoO+W;#R&(zbND3!=K&Xa=;ywE*WO{t2sg5D_ zHS6HdU$c`he{Iv&!?S*-Bv{Q%=fx|mwBjH{V2a?>f8oA7=q|{Tcqh>N?kXi1nmU{+ z`P=^eo2PqfVt!)5b|$)A`<<&ntB_H~E zU&L(xncO#VFUC_ItDj=3NE5_M{fw-S($>A-y#=lNq$yK7NVrH^J;r=yG26AR;nYAi zD?T-TV>)SKknWL|S6dnuX#<>0UL<#4108Lwh(}x(qwF`E-9+c}mN>dDK6<~UqR1sA zZ^mc9vVXC2R#}qllZp$o)6zEezjmou)jym|s7BLUF<2QJs3XR;%@JYT9jm*;4&*$9 zN}jjlCftW_P$O=;A`Y=RsQJcA3dev0z-a-ux~@i|YL_&kE*sR9Hf`B}U@yuo4ufp* zC3(ov)s(A9sY#spG?0*Xw)wSabQmJ>KybGnp9!%OyaOCPthH&tVv;U@n)+(pi~mTy zmNg@zZt-c1Mw*nngj?iF1FIO{E{l>wDZA|L%Ga8D!~Zf>PtsU1o~fa_%!dfjPl7y3 z;AUbu+y4bb5BzOs=!(*3Hep~)%NZF&%3)dv9mQq&K$n*{+btOoDOYR|!^sf&4@!r| zV$woEW!__SCX-h+@IuoL{k+D{&yQGZ#fv|fP9D{@i3`iSoyxi@gmoTxU?I$za(eR= z8y%)YAs2uYViI*se^1l;qbskV0J+$9%@V$Gae3iVZyA;(lG4=FRGh-!71sl~twvpc zK-}1K29V1O17zg1{^%yaL*-r4$-yXiy4yu9sw}!^fUZXq`hV`=hGttB>}Y!?1%edj z9{-m!WLQTYpa4jD&2U2MkVI0TGh;O0)80DUU&j6S4iiHlJ`=GfrDzB(C&Mcm+OCB? zJ^w1(CcoCz#rXQaKX``$CZ|D;17&HKhd9{Vf3IIejE%|TDF1^$8@xMRdC*Wf;wZxW zx5S%%BO_H>R9oFr4@kusr*_cUgNCclf%d@oeP_0TmDf_Nuz1q4bBldD%~xDvG&ECD!k{9S$A?wHOG%CYqqZFDAV|{%+0& z1LTGnKi5nEtKQ@NsE23V$FtAip3_n?n-|g28!Hmka$3<;0x}DLeQC--4cM0|S$TGq zyO&2<6tngY_&6UVTS94fE?r5|go$SiQjJh4HyKXuhe1J?=6_1Q(^TTrY)%UFuGD;6 z>&4ES6>VbgWqq~k>$&wvfR6sndVsgqIaseHw=%x#^g2BWW!LTPZ`S681+A@iQe*eu zrMk*#k||(f4j4Rq)%k?92NDv5rlqMB$tBK>o8USuzMlCOe{24rwV7Z#-}miPF$O7< zO#|QUxg4+(nu<63hO}|M$YaPaD&QWJlokZrkBTPqB7Ci3P3J0PQsuZ8QHfen;))M&Zwm`qB3A#r8B<~u6YNj$QhVM{vzp(&%cyjdLfXC|feNJ;wGWcNzfL^mlh zi}==|CuETZEkoHbO*KgE)#lC`&-`buPGI548-`zzNlj(Duyr)eQm*fm0h_-_NH7{>MRB`sc0v1YG__4 zqy`SZKNn&FbT|b#5jQjprHAVyO4VWy$q)+$DhE;3)+6kIZU-?f60-G5z}`VPf+9FhUr*$+s|F3ZBh6DlK16^1?LNpT{Imc9Vm-^q5EY?xXffC47zB?R^-up{BHNmJF|%^iX)13(ndI6xzC9!Aq(Ft^ z1|b>(g9EE~q)Rm*vnOGZh;(I0#kY}5fgv*l=Yp9(m^+>%Q@JZ zs-W<5}-6eMZ-C``&$A}iw*CUgZ z^ucGH@#%{EY-i)fRM9~cw|8>qwbwqeQj;!oy184gO7!{)Q}&a8HHpM?Hp~nLSJZpNJ=}O?F|n+q$xZrS5kWzD`}5}ym|QnZ(pzbP z0qYHU3wG0fP(B8%2@8iBdWYz&{T77Kp(Eqo@@4CfG9rs_Dmt$)uuBqW6X16errFNya#D|_!X+M6*R?rhZ&Jd2)F3W3-iQF zqoL6*DyR$5ZplyY&5ID?+0~bYb7PC_Nioj+0-kWuCNt` z^^j+MnmG%(!hrwmMMqH9uB&H_iU)G?3*IfIp@qupY}##pLd7kt4$Z7_Kjwh_ZDWw8 zfH>G%=H6$+*hX^@34jny5J%y7>UwL5SCV?PTfD*!!^86W9!Vm7t5!FR_ky5JsH8H+|nif+cWJuIna}hks#BqcC~d!3P~r4 z+`l=@*c-XY$!7U8S?eX_riAmDE$vhCAnJspE6fMfwgE5FZK6~kFGSsQDYJ1X(5Umg z(PcIHn6^g!ljB$KVL#Vg2vUm~{uLAIX<6-C^pyyDYT;B|S@H%0CLkanE-o$+#10NZ z2#uN?3~v1m0#m$0HHAS#K82C~4(OF=!pp&n7wVzz>dR|-*30!wK`^h^-MRZ1zsH;+So&g;?&9@hENdv;`k`Yw8?Gb;&}7-N1ZfW@XM30 zEsVgyL_%C1*3BCF1XBnN6_P*}1oU=y${?vJM=w(d?RQe;5Auo~Ljh!05Y9boQWjzjIJ1C+dc#nCl)iWhM zo?@hFzb#?Zk9&BM2 z1Yv1;QDUN`myS~TtJKqu9n-Qba7fOXzIn#g3qkBfVSSNuKYC(5j3}yrYnpe=y(3tE zy`mDWIxDdDon5J%`9V@`PZzkh%B`l(wg4O8cr?rKSf5Z_k&R`(CH!xQh8un>3ur#> z#3z1y)Moy|pi}lst60NF3d-s#FMU0O2n-~Kr&9(?(9GMJXVE)k0n6JsjWHnh_q2~h z%ykE=)jvXoIE24IG7&f-qgy`KEd91yJ&Qd3b8=UclFI7TcCZ-S@XV9y#<7TA>+tKv zb*F}YPJQyByjk>@_abIB+X;9=}3Yc!6m(D=#6~@LCjz37au+a8ZY;U zjTufA8nkAfot|nEHn?hO1{#=e0G)x8u>jo28S|_y?3Gwsg;D_xki3ZWk4+JI4D@X0 z0PZ0vJIS-J`D#9>TL1O?NljZ{>kxP!tO=q~IY zp+=7q2HiMQH z^%k}t76$i|)!k7{Wla0{FL?P$z9WaUS+@!>NrlXGs6ADz9s8a9sb1Myy(2)?j^Ag7KID1e zCffcDoU^ETGYvJ}FXjlQK{m({F6=?Z&bex?Z)n$iSex`Q=`(XtzlMe#h z^b6y)AWKy1_}t1iKRqNNyvk6Kyl?n210p0O2hL_-FSBB`h7R{MDkx%$UP)aqV)lV? zEllYVac_8ps}4Ai$D;-NF0DMjbQ8nv^z;mHR%ITrGmw)KT1x~#KHW>i{Tit+_-FaP zSWR$QTX>YAoSU(#$sr8bO0UNI82N$+h*)6t&M_s7lGAnOiTgzIWss)3*$G-&hU&W^ zB0?q)IP4)`oo5iKuDdm-AHYx=I1fkQUnCw(0g(y@l!sx3#TMG#hY+2&@1KkeeP<&T zWa{T&79))HJ?P(`dj^y9VjaGj$Fu5TU4`@J*%v z0w*#c2pA?owmbvE!GSJA3j|Bp3s=KkIwxNz~0#0BnUWFw;ai8wz2|S@TVIqRkUyr2h7Fk z>S|GHj8;-hrW$vdNj{>k@={Od zP4Y7y_hXB;-}>015MCxGSr8ATjN1qXP~yVwneZ6Zy?+XJB@>^PJkmlm1_>AUy;QPB# zFH5^)zp-95H;CF3C^r|^b9SZ{|4R`xcqD_LEt=4Svmed=A#%lDDWyi0wj;5h9+BgC z+Rr85`;qprqPcWtWX!r9F~6NrhwFHEvc}^YWUz3la*+)Y_#CRcl|L+*{?TqR)O3vP zqX)iBidn){+T^EfJ=8>05fyl-+p&FBzV+!tUgxT6lk>Y=V-QGgzu{Kp4*1E5I--o1 zL%>#wH2Ec)3Hnq$W3Pofs++y$s#Bj+F%2T$7JH|Z8Yyhw}aia^K%c|ALdu^hev~j zoaK$)s}ftpw5ZPgdQfN31^-R_8<@JtnPlL_)|(iXC#ix4&TSJ%N228>B*zu**NW$F ze`>zG+oxAR2vUE1?$(}*5L1%i?{1wH6?(v28pHpFSEqmd_$hDmpH3COqat<0Uuo#!gRO z4oOsG^cGbJ)6)E>5L&(Ruwq6eZBUT_m(X)VxO=Krh_@10ozP9AuomZk_c8DoeoN)Zc1_$lv z0;7?kGUJEPaM?DHYtS`iVt5r4J!aR?5TQe|^wAHu+{j2$vLrV=aon+hlsh^?GuU|} z=QRTbWyC=$ZANZ`OM~4<%hlF7Nzk~hBiA>$S(paI%N_hQw*hp};UDElWgVdhT4dRq z;0o%iqtk;hLeUaKB2i+$;5(AOe<-SU_ud?m&#~AaBHvgL-4%RIJbgma{bNk8WYJ)- z`K*3b)$6)2_E65VHTWMUXXuqDEqZJ_x4xkKmN&+zn!@B?*DU1U9^XQx5+DuZoydb&M<)uaq( zJ-*M3uM=}~B^VZxM@vf$+A42yITzFo+1wekixJroi3_tL@7!hY#7HNEGj;q18`}~R z!;G5TaeH&x4titfrFJlaV|;w1(rc}N@othdNpT=(IFYv|lJLr%xUD064>^JH2qQ@n z4iD|2^=?A0pqk2ByGb%ff0dLL2D1SLlKKhp-usF` z^O@OS-JthSGfN*<##PdHK4KyK(b%W-1ga50-gy(Jug%w7y+#mZRap_M%kwyFPIG8y zw=dnO;zv`9{v)`h)4v0ATjvzX{v#`R+k}zz&#wq1vdD z%#Hzuy*pT1qENGg><`w@Y{@&bIwnj?kepua_C+_TM>np1i1h~ehya|_!&EU)>F`&x zszpG+TV1OE-FO(DV+slQed^#vzaX_CmqSBCLx-~5;kE4O09{TZ*+EdahXM|QnVGr& zNi;c{8V*7*Ujn`9Zo68P3&Dcd<+<+#)fxqutT`RDl4qRd;QaJA>kgqS%TTDustWi5NK20&SPFQ_`d#P1qS(jI|20o_I5aVc%{LT z(R26vN5Vh)r9`Czm0r}6{sdKrk*k>;7#zi(S;IRyyK+UU#mLe8(3kuV4vn%!H9IHY z-ShHf776D!C`{W>wsDAg5gPSt8iC#n4Ypv(&DjHnY)$(=@5OrFa=Dy_r=yN%O)GxW z&XBE;+4sh|xgYi>_h#$oom%#XMvW)l7ZFscy;r_Ja*M4HLIgj+@L%XWW}9gLnA%N$ z$F*Vb!-$bnU<0z-upjNDh^zF;I<7+4#rKgxJ0}`0MH^X8dxX9q=HL<%xV>|NcUz4m znM1nl2JH~BAIyP8+0=@GE0DyIFaeCAJkLWH{Vk*z_5@n|c3j~Fu7RdI=bHh|02nPo z?j5%Ekj&un@4EAY(1>dF7^dA%Z`Kes=oyvo;I+V zJ#LZ653p=Um}V$xz#qae#Q4RM%Ogl?oW<~s-+@8OZcK}9;X0c4+|urIPjWwEMaQS3 zr;3zx_1RZp&*ovM{Y3EFRL@{y^jB6=0-n3-)fA)+q|BI&j>~I5RxkAlXMsoJ+@HXO z9RN?xcUBM*{Ou9s;<2iMtj%zyIOxyGKr$SxA*vq(G};r!ykb`GF%j>i;|c{#{)aLQ z=8wcrZT$sb|2)a-kUdsCr9+2##U?CTX~8nJF>rJ?P>7EBU~6aRw9wR3Z&RIB7h7I` zDo+sY-yHUWf`6Id*eY$%S+8N zb)N=45_~1Zuwn8mtiB)+%wPnN*Vz*W#PIO&1N8J)9l<|YA#SIOo5Z?8DGzd-bj<%k z!S-*V&~@GJYdH!oAoV!&^>`tsYdkqIC6RQG=J1fdrfDK2LB*`+9a&zs5#1}{Ei|?I z#SiiETF;;7g6gy9etxius+&2x;cZ!j@Uh(INDV8+_q{BaeRW3l_VgG~?gtN2)6yE7 zo0}UNoNE`MHiKwx`~hE&YCKN~X$7?V?;8G$DPL{coh*J}*Ox8huga`Zli4OU@eKL; zo`r82O=)O1*9G4Sks|kAO6@|zAuKG%>6yKvsRD2Z8MkjJ<=nFJ=Qzbtx$urmKK`Rx z;HxD9Psz@r^nY8KlBnk|%%b|4U%<61sSd&U9A^cQobSwK{pfaHws=*7D$X~r=*lr&S4&? z@#xUFU%Pm4rsIICOq~;PuEaS-L#c;B9kK)C^(H1;zd}crWVh;)`3WM%z;!q{IQVBm z!sC3aOAi7EgLYZx$F~Z+rJ)TCH*IYvCmtL)I9Sxwfig0G9iP4W`FRWsO@C$aO6bM! zTxOQSP4+ZJLuW!V>yXEu&)9;>hAirT6N5=Ct@_H+&0=wCZAmi6=3z-&NPCadiCB?u zorW^6*gom|^N+{f1{W1G9+tfR;(~!7CnpEn1tOH*MrYs*=irD6qPlx`q0V6@UoE4~ zehQtQLDIzA+Z!CKy%>O$aX(LBXi><)g~38WgMk?oKEZ#lHg}0z9NniEgm#s6OgNMv zbHqLlJm3hXq&;fP|4ediUvQI3F@le0juTN~@kjr+4x{gMVe_+RsoAHCdCmTuoJTr= z`T*gb7ZCA(84xF}p8EblSLEo6Og&7c`qaO9g0GG)i*dlPv_4@iR-%2vOpx(g1(M^1 zSnvJVnXI&!YjOu^)qsegR$_+4@Q6LK7~A-_NFz8rz#>(kqWgeEAsW73Ud}N=>_6SW z*%rt^2B9&~e|Ry9HD|2tplzXsp+}NtL)lUy?SG`NV*KYw;K#2s%M0wpyXc6AaIi#f zcW-(OrcV~{6D{qBc@!h78s7}vJ?rUW)oL6lYHQGP?0-@>h z)^&1na&U0aGB;Q7_O`ZOhcLJjW$(4-i4_j%8KED@2#;(j}Fv1e4%++ap>@kL{i7;8a!{1peW@_o%K!`_qg_$nt&MK zlk*BDFg;6%RN&3k?bW&rSP6R>d$n(B!Mx}4Y_%zze$q{5KqM}4i=K%dmIfWs1%?9iny%^s0flT zl5y5f7av=yjzoQ!;nth%U23G4Z>3ht@p;OCctS#)4UAjdb139Cd}%X^l6!G<5G0qK zp!T(Tocb4;G-?5wxc>j1qZYXk9upSS$iN^ToGuKRXo&ahdFcnXU+)qFzG779?fZLb z`i<0$r;ZsJG&CH2?C!+ApPzxVND74@`8YocT9d$II$G=xvDp9916t8jyj|aQ%5MK=~c)@G+8y9-rD=?y=v?ZM=yczv&2zSrc50S%!TNb`$l`p$$JGLzxWavEeoWy99> zzp8L9D#L*hjlB77#&7KPI2EbMOF9ojHs7Eb`tgy@D2a!gemvEbo7;U+%@2#obzQiN z^GIAvEwpyr@PiaB^rCQt{+{=fAuxkXV>y`7FQSGiQRHl>0yYA?D^Mcc2#CQ7$AYq8 z3ci7S8W%q+N~09+jCX!DsA8#rRb8wMp($)#m3K4^e2KYsw>N+`?91wjXU((0c#OkC zIzP+tlt-^~sLQu9slI1nxOiD9nLTEUBE-v42$XXm}f?OH6|6#XUwlmQ!d)B@=h4l3FUNyiDLP2DPhobQW(!B1W>@Mb9>F+R@N;On28 z_BPlyhNuND*kws(MrTK-ev13&U|2%bu2>%RU>MSC0DAf?REhh2>UfEP{1fQzo%uc# zFUUE-or?>5McxUr99*#wp*S^lbs~C@?e)JZ=!oS=|DDAu10{~lWg!gMN9p6r;!SC# z?tqg$YPZv?t?lcnE_cN7?{#RPhb-TTIggNt8YEr$*@g1++i!OXV)^fo{DGwJEu=;% z<6cU?O2XR8w~f_S2amWgz6mWJTVLOTD^MZfN5*upes~e%xQYFtZ3OGU_DHSA0&bh1fXpmp6Y1`af>>j zZ0_>tLvauf{n(h{03&HYhebD2-9bmtzb#MK*P7*+IcI;(O8mqb1MyUih>`peb_>g7 z7TMO~6WvW#c8+d8DQw31EH230)GSk=rqBF$gZqGA`ZyJwuQG-Px8t_u%aXG8o7*dv z)iA?C03Z=u+8N5{a0>xT90qs{Ra0E9LEg}9lg!M!-_wSwUur455tkB0JZ=wCa1AsO zvvxGK;`8Ta0n7|I8bDZdRw!zpFQLWw?8$?w-1#jjE{;UP(W?f)JY|NpQ4oafV3ENa z>LU(87RBXJOvn)|ku*!nI~;8Cdjc05;AGFkx!;KZ6&w=|$PmO^7BCn{pwzTA9fG)2 zIKjDWv49+Teu&C_L=8;@(}dXGqr>~aGzM4qE;OOeL9_k?FN^GWi9mix%u;at^|ihy z$@uK|vSJHSk(Zyq$N-HOPz6=cg^?%rs$5@V(2E5z)Ggk-h<%kE!7G-J2~AnA=8l@0 zve`;6V&XuKKEH+NPQO22F&DPH^rX_AdE3gD0{WoUAisBxgXfEA94QN6D zJdZ^I`Ct|Eh@I8#3oxL{)=Chu8 zDJUoXzW+e#&HXE>=A!qHgRtG}Pjz1e`q0KTDpZW&Uu@96*G?_JT$EpK`^b7xg!h0~ zz)p~Yh^;hdn2Mom&c4JT-4^_$pVRzc%q9mw2cdk!_^#cJ`P)$nsY-7h>! zv=chN%8V-UMJlQ*SJQu=k6DXD&HgOjQ?fid|Pr=6&)C^4n8y?b8*Q^c`7=jM*p7SJ4twsQN%dz?gvYVgOig?IB?~{Q9PS9 zDHe3(UMy;F1Msy9r1kg=B(T|ym&j7lfut)G7fHqdV9t2J8l7_eBl#@!J~|T+Pu$db zkO#3_Aai!Fjq|bwF6ep08uH6!tzBLLCL>iyml+~tAkW%lceYLea*8hAQCd|ezM2Zd zvY!>Z=H8H(Nq!#TefO2aS^QGIQ;2UPp|5tBKYV+BF0N6yq9&>V0|ri((L<&~X=Zeq zbB&I>C_adS1omIi!6hI@cHohK-d;*1D119|2ZW2V@`z32n2lHFw!LDOWcb2H6xwF3 z7fTF}cTv4CW}aHwz&O%brdZn)Ios1UQ(^Z1jcMu91)KjqHNj^FKzL`c;Y7=gzdDUg z{WJhwl;#{F`mp>@%bx;7e|IWoO=$7U%d>)p$#`)ZEQsqLUcdk;;+wz%>20C|DozDqoVA-w`b^1>5@iDN=jnr zkPc}OMHmUC8$?n-K@jN}N?MTaPN^XkkPe4Vk>))-zyFtaEk3ybnVI|Sv-ef|qxgk4 zL_`S(=1^Gp5v%@T=2$S{z5JJ(KGRPp9Zjo>N?(tzu6nOq5$yUc@ze3Hb^4nkWbfb=zK1;nS{+-3F9y-1qEVZ8cCv5VAsBgw-w3`c4TZRGt3srM6@i)Z zD+Kno6VG)fWphW6&#je>GTg(zTb{cj$hEY9*x@$x+{k+2i?I=t#}k6Z`WseT33Ut+ z8kmASaM0grtU|!v)&d^Ka25pUrD=!(v~sU}SK#?gu2i6CoE|{a^=$EHdHdOSwhJP$h=2m=;lZLGBGVXwm ziVLH*Ci`#e%)AHB(`(T;GVqy|MJo&IoY`xD#QSbM&ikDBTpvsMB0 zk3JDlHgr*rq%=Lp)qbr^^zuu2gc$wn>mO4%Z-p<8QQsnIL?W+Br7nt#03M&)cb@_F z8DzShp97hjE{2G|90*jz0N2rW3B*)OYh-fr-Zd^wqiZF$h+I}Sw%why?86OP4$ua# z;r*{%10)_?!PJt1KsBciWGa9NKm+qXMo{3*m4wk;AlEcVJk$_5>YxWWL2am*2 zkSz;>MpF+=P}Aa!kZaT!t7K57V2T=!z8SXF(<&ATm-^2JuH!IgoTlgZAoG)F%p4Bw z(y7;y@w-X=_V%furHCCwtbcp}MFN!u$S$3)dO_7p;#K1rg&)nEdR&rKK>V@_oayr_ z+j7$%JZu$iyGLI*MPf2#Jt$98#oVTI8rm-EeaOvDtN&5c{0@?mi@)sQ&m5C1^@X3m zc{0s!1*Q88t&XUAyw>m>ceFTvFfdKb%DE{hHQ3dSf%6`q4axU&dbqIBrLXbrszu8! zu<7MQ11PD+B@48JJ#nT|=TU8)+1eZ5P&{qw4 zRnRqq=i$HepM#ESyIOzvAFq*dpZ6YiT7#Fq^kH&52^%{Y%tcSUwo$$D|Oi zDCupeH6upMA3dU^|H~v8t31>crzGl;Q9L=?srOhgjrQre%_hy~QgF z|Jj}gb+=-A`V@dIcEtXJ84IzalJJyh>7l+Y-y(-d43p`A?jar%C23Y*J_DBxH6iTy z@Q@VZ3;e|b?LjWQ;7-zv*ZkE+2WpXbU~$+824`Yo#s~FeQd-8T^QtDMQRHaVp?R^;*i* zXYesIJ(X4z{H_ExLnKfpagFdOPYl;h*1@?-I^{7Rr0iK&&@s@~xG%4OhRMU*7PPbP z+;+c}CJ=P&qM1WQQ17?0LGeHRdODIwWSkk7-WqQ=(<$MWWg;6E_6fbPI8RU4lt}cc zzQLY712-K5tS?mMn16+Seq^I3DYw9uMNg^*LTmHd5pPcQ{rmX3B4CiN`q0$`DDN>Z z>yzW6?_aYk^Uwy6OTCpnPgYo0!;=g=McqvQ-isna=;i>xE)ZPrV9scCe-M?$!YiJ9 zCxxN>54HoBhj-yE)Em;ui^?3GOC)JmM+8Ol!_)%e-He zO8jfvcc{kN6eS8idto-Rpp79(RjR#C!E-enY-3|L9?G;I-`?ERKE9rSBu+<}P(II} zpEOk5+UoO9txz#6&5Sz*WP_%A;39bBFtHs+!NT9vyjEH$@Iwzz1&2s^W(Yoj%nP9m zI-;&N7&g^47;y+*CVhsuYx})%nJEbJ9+D2;r5zx8!c{2F0CUCXDrwi(gmd1J-cp`fYSje{FH0|$c-aykbcn;*LPe-J8rDy-} z52Z;wG11CyDa!aokm%Rs^It=?(Clde+Gn4^K`M`D4N>VV5)qdEzG9h}_}K*Cm&f3^ zn6R$aJ6>q)i_O{`?VRf6=~<(jl;Br-7ziej_W@=6$tjkLhpVN4AJJm(usbKYvTT;= zR$3T_=WEM4##f+zAo87zYiO^3SH5m3io*>kA9zoI7(*wK#@&ScH+q)@1wnum@iR#= z7q>7e=ummViRc3HJSc$W07`qS13;+&m6VMHbgUFsA82W%#ZP{s#u`0$O?%NVE`dSJ zrUOa^#IO_;6xql6PoIJ|j|7tX`#25)`fr;bLlh$VX!()DUwebm^`0x&Z^jG9Vk9!P5kvv`kU>{WJPfS;se0gv{Nszu_T+?x@CwXWd9LI9|v%AFo#b5 zjQuk8+`4F|le@HxZu>$YPb)8$e!@=YvSQY`Ca`-;=GmJqffBu^N)K=RVV(OY;o8Qp z#ZGe)Uz(3_=Z2}qQbJq&y~*Ug9myc31_lWrrzZ0MC!*yc7eHRhS*?sp8i0TdY}!;7 z|Jj+DF%a-5Gn#xa=ryA|_Y0-zF{6MIvUu!;@XA4F$o#~ZnZ>c7NZ2~*fM>J~HpllL z#WH`Z^}SM(1+tPth`*h%_kkby43?`%y`6SsH}OFm1hu}9$0azGX~7S+Kn6wS<5THE zUi;hd@-9}smQH1>XekP)gK$otMNPKHA5j_Oy~Ej$@#v0U zSqgAc(iR&(Ch9=kRoo&zwQK!qKg9IdYTHZ>t)MFBf8~PvYv|}3rYYJvlb+r?cA&rL z{S`N+&07Bhpe0tVg&}Mlyp^DVD2R2)$pVrQ&>f)sG?lFYK6eueL1 z{6EzDBM70@bRmFf?sb5Rq)Qqg0Th(?X7v{3tp*L9J~|;o1c-MxDcui&P8kHWEIoNB z(0P|U%{2@O>ZGbYgUYK^V-F^YbKyuejg`!cOKi!e z%Q;Cbm)Xy=UDW$ZYO?5T{tlr$}((^gKdn^;1> zZe26JC_cnrXjA%!H<~7~U32~9$d%Zx4qR*a_P zHcd>HIf^zzS_?wh6>JdZVaB*aHAifU;$*gzOiu}poAje63jfdi*aClDs5n@BbiB8 z@%`&zaZD@l6nIeRA8;H@;4?ZPe<~!2Wj5v)=G4oZJY7J|YM!AbZJxiNL$|mF>|%nU zqvD4lD6Y$LKvMNc0cU<}TN`6RXNW?LR%Q%tteiyGgZ4-gm7=o3DJlQS{v~A->jwc= zl?aOmgWT;V2~^jr#{_L}>GHVvwl`N678Gx&zB8EtKSA9$Iv`DZqNcoX7$$Aq-)ngA z1E@0{F4t%-F8lu7nNJwgOECN35Zd9DJCu_5B_{jbRo0itX9jSwA7F$6z%Y3AW48g3 zL9d-IY2h47U~4U?aR6{sF3Jk?AbwUBU_4l$RuT)AJ<3k^t#sxkce8N>r~x2FZ&G;R zZLS;Q1s<>X`|js10`8-nrI)PJk4i_Zv+tu~wCQVB?YpKVdAEj%%uZiqDK|`PQqsE< z!zYhBmflq?{c7~!arZlLUteDj<6D00Z!LA#LiAi>q*paJ4t<_8 zjMC0o1mcAwrsaMJ?Tm^%3&;;WKTmpSMWkR(UGvSnfh@dSN=ga`CQL~Wu1CC}@EE#T z3JEk?C>+%RisRKA4KP&!`%|E*+RJoEV}5JT(cX1ZEm8lIsIgzcRD9?b0TFhdFI3W8 z4S~e_WJ#>tvYd-Q;v17CI^%+$PP`RC60VKC4X+zah?lFnsP@%W#^19q)Suz5U0i(3 z6xSXHUs_hdD2aPzVW#V+aeV+ZM~E5ZKX!akolo&$Ra`t*aS-=|G%we9J;ssOtkORM z9Xm=&gR6(iw!<-JFn2)?!s0%V_f*E~jWW$$f#fd1sB8%QgwqBD!vI+|xWA>(W@{XP zbR*zjv0=#)6kmZ8pfcJ3J_V%hXClP1Byd;&$F?iR39xDcU}Qx$NZA|qc{QUic#L&5 zH!@3q89L0yA-L&x*Q(P<6Ca{tmckOIXfKwn38nUyqgKthuOa$fo{H-@96hVj0fNw%dj~zKslC!1n zO*SZt6+J**Sa$tObMBdXsLx{pQ`9MYAJXWf{y_{7Ouhv;3j%N!I-!XUSxvC!AK*C= z`}yc$NFA8F$zK#6wyk0yAFaPof~C=>+~@i|KQa@>2qjdpl6n&;FEW*Ga{&=41u|$1 zN1wiK0xd;Lb*xs|fRp4__FUPJKs$)$$HQ@+F%LLiLaI?u$N#NJEa&x>G3cb9q#$# zq@~XFyqEf}Fp5XL=kXyCHNvs4tNW03~Ru-i;rC<;U=enMA$K#I)Ol*iFF zqOJjBY$pm$22A^)el6nNr6_xEPxG;$`EoPaRuf0I+82lV%n_Ty z|FIJf_lQBK3@2X$?Hq72)P0+G2ZTx7z_3~L#!chvp5oc%TNOsmpm636;PeNJ;Qsy? ziFEA-<|Jy0onKLYu*YtPK|sA5G4zIxHkTd13NydIdllSwT(a4Q&3J)l50zmBv1v_v zs{+<(gFz$x0lk_Vnb3v)W<$*|h#desM^PnT)uqLQWL$PIqyzvbhK2wVX|y{|A)=64%EmLeN?M zx01UFpP??NdIyLfB~?Ne`hK6)0LdHoJ>FJg0(@ai%TmAwj$0<(v1ir{QfZg znnjY4GnSQkFh7!E7nWEp9$B~WpZi&Ejw$i@adUBbF>vV~v0K1J`-on(=fAW4L@PV# z*bmT_;&F9=9Rewz4UuZ6Wu#yv!`Y?+W~akA1%ovF6)5%xu3tVUeoVzP-vb$mC5=gk zhS=a^Mbxpd^<&JUPsaY1dsS#zXm^z8lhOc`?OleScr~?3L2gwyb z`Ys1q-s*(w%*F1Rbh>V$$5V~Kfy_FGgO-ZaPhs)CqzKvfrQ`}Y$Y7}N|HXeb$_OlH zUYbKl?O*lZDn|yU4+~Qz?_GAjDl7biGZ_vBi6H{bQa(n@amjMG8#05+O9wG_n)644 ziCs;L4WI4qN1XQ7{+ZV1+c&+paSx#xf0M;C2lm>;5#6s?Htve?a9xJe5ym2(RLnnKm59byBA^kquMF)((U^b1- z1bUAT9|9PO-rjUTMcC1N2_QgwaDH|MdR!%#Fysy>1EQJmayVJ%9W4*A#c=yKZ-}ME zK|{Zn=Ixh;5%i78z5j)h!GEq?pE*KP^K^osQ}@GUSqIVEjWU6+yB#5!{r2A+7QTOZ z1MaeNhVY&2K3s&g6}4+uj6f@UI82qXTw;10kaVBW2^Q{0C`3)t0~wz;C9mn#wiNY8 z1Sl(-J0;xZzs9b5+8e#j{0nelT}YhXAsqqgjp0>egOb==t`C7iHDWas>stF+OuoIK zm_m`;(`6yrLP6mwTv2yi{7BRw;(uH`c=yH(H2TqLb;&Rg*>b7L$)EVd1H~XMwll6T z!Jcg@qEpe@mCnnT>_k9;Cg+8|j~g{!3G}LXAmim^tECt@n)s$QP3vGle zbM>!AV=OqtJ|O-`0@X1PK%@CDu;6W+{s1#>YqVXpc}Dtvax(7zETM@~gp$4hyL)cm z6fsDwsH{fhQSEbpvcaDzVPt8HXC@Q)3^Ra1#9S(M;5oJpt;CrzaGSB^Ljj{DHIuP)~Nfp*SU*&NeQ$OV>UU#ch*;2Hg_7( zFBQQk^1#pn7$!KMyYF&zcC_v-IKKlrT^1fYVml*o7IS^?+#tiIvoi&>#jeNbyb>;F zT$7`@mx)NMS=u?0poPlU=mrU0!jFMexih%wFTec+(E9XFrW-ylh<&w@=hlF! zxBA&|{matSN`4vGg6$`coFOj|iWgq$lp6*JDTdM2`D%gAafBg}+%S2%So^=S?!d8C z+6V@#UuFw6L8-s1ZTX-Gd^bEqKxY#r{rqx6#)odXddy0_DrLVv%QmQEEPI02gu<-k z;uCJ1qdNf3_6TcsSW2~b$cR9LO*OQ+O8cDDC!9gwK9m)w7m+WF;7ojq>|d6bs&{+4 zeL?7*_6B9Y>+k&&ty2AcRD^=alxXVjdUiM1QRXH?{ZEltdi{hrLSmv2;o!8Dp#DI3 zK4)xZh2I6*58|@Jn8+f4wSZRYN;&{ETeEa?I`jed^4#2_B1T+f)l6{Fw_Fg-$RI}a zyIGC^LB(&b>J9rpvYMn>3fK~5Z;xfcRt9_^M_68d2RQ+80{xWqihr;fmR%QK0#emV zX~>35b1@lseF67zB7zshI4uyecdpAPPDV}+nq&Z{`(kyny3AC*%*n|CEhY|(obf+) zqxuzj6j%xF#_@q4NN4~Q@;~NziEj(QTYqksB6)&ptEv5+eP$*wXSgiOaRC7(E69~n~hSs3#{CaBF~I*==zxwlzBbC z$dk1CJvnF;LwppBRf1=sg30ZPWuKOffSW>C;sr3X15BXC=Op=8eQ`BeuivMTsC4^z)0^!`p0YmeB04O*S~ph+TV{E;L_SCsr3wy zbN=^|Zz%qgLhI=P+6E*rSf51!aFCfFFAdOqfP1_nZ!73Ce>u%pQp`@>-t6DX6UVS1 z`XI<$6X&Z-t6LerqoGMOIAG88R^la7A1~PSb9mq}W`4(j z)a@Kai0vcR4%8rUkUmgl#(@LlQ61=KNC2eb`c~klxOAdj9eh+E zX+SDKq`%lM>b}rIyt;0&urbBift6TA#2C&R}0ot3ZP}uNp|ox zI^DY$T9=e?X7g(h;4Af(DG%t)w?nEn|3Nz{nqT}1Mz^Fx&Y__pBkmdM9TeIX3hJ|x zKf+}9F3C1{L<8&Mt~27-(R%xEu~yk&cUfC(hUoSmoyfAF9CKX1AOR>!CfG3AxqK|tyqjNPQh>4h8f$-u5RPP*1bi9m?=bP?d8TJ z12J<+KVV1m1gvZGNJrSlT>bg)qAJiOSK!q)cwBQ_{QO=g^Jay9d9&HGE5%h)SJhb{pC{kH_gl4#7w@S^2GPCKQTAQ|djr9a|-j zyVq!}cR`hLX=o@0z$85ax!hkmLR!2Jp96)@!2#d_?ve`BvhNUVM!q}D#LmtR3?cWR zEx;_XqTP=S8BNx}a95v4D2Vc;({3EAP;Oj5Ke%bY1ws>#hqq1x0QUL3Dt^4-LP3B7 zpvJd=8%I950$zLqYT$^J+lYRf!O72?lkbDq`(}{xy4K^m7ff2-kKVrg(_Qt9c?}Z6 zPMreJkZSSSZ3K`2&Jq5-rECRNcLsNlZU>fuyzXwWP1Mp%HyQ$5i!#fC0N?-@G5WQ*PB|5E1qj6uX|M)%Xb=}xn`X6? z@^|9vEJt;DLG}PAss|QOJg`eJ6criO`YQyP=2Z!=) z@Ts0C%L}#tb8@kaOU;P~)3J^`&@dE_|L7`?(D?Wvjt>BxUCT=rN){#*mZ3VVav+|f z6^dsXL6|AyTgqENLe8k^^Mn~4ZtP*P2-^tC`&_1Aql%F*(Kn25X#otZW&9;X0aPpv zRy$zJ`i*7l%dmW%lwptI!lG`K-i`(Zg}?t!-m!MNKBq82ipMfY`YZhrB7Hw^{xg9r ziy-3LgAy5!o$mD~l9)3JkEUnFU6fR`4dos@5dD6?31%pF81wzrxWqzdn9{8K|*LXU@wGoqm-`z^5hbifU+ zS~1fyw*k^SOy=KGlMX#F1iDMiS1C{IM!S?EL~;9EUHm`3Cd`8^LVzPL<{>?a{>^uY z$W|*eIAm>jcm68{Hncmia#0@uY!D!N6fx&~`SN9bs53KgP2ZmN$@cF%y+DHpKm5!k zoT8#{?S2WqoClCp z0Ifho9C1U8@2=Wr00%aL+yy0gggMaP%}0B`QTUI1n3aprczPBq@oJIwMfarmd(z+Pv6R_zDa-U+b5Tz>&tOtf}>`x1GT=#=LM^@GtvZ@PhUE zMl9eXaTA-5i9?xxgGG)y9L>>`S<)_eSkG+eHL#H__1M9GLsT4+KF56X;pP|eys0*E zK3ORsP~iA=bEK4U=s5a*EObhEJUGOg%oXgXyJ7>D3NBp6%#x>N!P@`529Oscg}V&a zjy)q7nL?*EWj&WY_=*o(1>zNKp%eIzO4mjze#0a~R!9JlZwNxFmplVeA)h*w0t^{m zH~Uq6s}yAs_Xn|-Yh1byjfmv}_aKeHI@MUVx}|a?+NdfZKwjkh8 zvVXXLhLh_Ad{t4A_;JO7dS{t#8W%m?IaII5^L z$O-U=rcIa5RoMRpgUYArGUNQOh=k9X3InyEk5SU<*ce;=d8!p*IMo>}?=fQ4?C>0G z>b(k$Urt@dAp~gTtRLPm9t~|p{`d(InLIZc)^|wcTdembRWEr;mXD8pub=W|M<7`5nv-%*DyQN-QOaxNsbfmQ3 z5%M-$C|h*s%{&K*Flxcct#BNa5}I7Ec^d)@c2-1ejC3rhGFm6pT09no+HzJt}QMCUrl-2fsw z-N}1jfOK^~ZK1{Uocp&GXDoflJcE@uoN>9{uZsdogR*#6*Y}slh|qB3g7Dyag{Cb1 z#POH1uIcpDK*K69Kg_e?6D24|2YoemZWk3$3}&S7T>{A<=!mx1PuL>O5!btK-i8>J ze54Z_=_ZHXNuU7k+nu5N2Rmyp@#vzV5qLeU$ft^O0}xfwe>cg$TnGS8@q&3A;(#dm zga2}a_VPo!yWh`tVpN?177_);k!AvJDzL~9NTMOWj~7o%e2t!rNB^Jw2e1)Tr44R> zIv-P3^ZzH1J?I%9CsTqcOt9Y`&ko&=q!(hU3?l+0dD4X!&U8b4W(XE!Cz3>L!mi4K z>zt`)^ym{ew;cC^hLMOyx-5}MdXHd{*`v(U*VHwgXV|@_0*-r~w+nmWKkbog z!DANBHCWa{=rHwW4&f3f&W;!nv6j8pC@YF$c1e9|O$Kj|G5mq|W0O%pI20)M0tkty z?-pv7S~MkAECsa!<2s$FqmKU5;rD8}|0nYYUJVzx!IMPZ^S0YdS-33_7nwQhKtxWK zZZFoY^j~+#Vcm(5UE{F{Prgki{M5jLarSWRt<3G&Y$NqXQ%ozoG$4c#p1#ZXE6w_s zQ|1Bg3IgGB;VVX-TEKu@!0F=8iA+Qq;^OXr5su#X+Y(?$m&D|p5mefl9avz(#~nLt z!t}hqNGut|-#?P{`{C)y7&*#v6Cx=o;tK3?zg3>2H13YrWNdtCI_{r8Bv@hJQiOLi zLk*s)bG%%9gND>*G6fwW)&*938ca!0MaR1k+t;w}QSGJ$a=OJ??YLjCt0dioFnfcU zr{Bs#ja@>N)Jc>9LVGke-RNwfDGkhaQ7Q@Ksr0k>GTB7q9|vI)n+1D zEux(z`8DN>r2Ck)Uz$p6HX0BGEZJEY-kt68Z7b3d9&Ag6%dxb99W)*mj8D4%1O#6TyN)iA!)*hQU%tO?mSt)=iiN)WLErXhQ(BIG^JF#kQTBF8Cp;z90H3Ck`V!U3QSCky&vfS z^P~#eY=ItE?srr^w_`63IOYw~hM{AQ2+m)iF2!Ju(sljJ8s6Y_vIa*pD+txI0gs0-C#N)>hnkuouKZ)qS()Xf4NDBkGN&`KHy`mnhQ_P35-&En)n!Ex zKlcY#DF88P5Ps}KM`W4J?fkA~(4rLVK3EbsQv-BN44Frnee2&_Y=h=w?W3L+hr4nEvAW&biIja!Kdf+ zb*R&?o)LDn0L}ihTJkLEC(*;6Fr_6|onVCZ6Y;RmDzW4UDPeX6E3=2~|1=dmLJmC? z;Emugzzx*`zlTTBR+AJe6!P#5>;KWt8rB-z>X|E!O{1y??7JL@@C3P;%FVe^I z_?-Q&Mh=|$nSRb7ziS)lbT0Jq9LxQd$F098M2^v??erx+)uFC;LAF4Q2xsXMpdBxf z4CGZn1l;xL@9|0458M-c@tm(je2YghN??qZ?0#Z~{Xoz~9OEX5c*M-yNr~{ti;);4 zu)d4 zE(i22vZfc4V#u+-m}125Hkb)MUcMn{az@nbW|ZzNFl}ow#bRP_oi9b#*NdawK}{hG zL>EsiEf+{B=^KsiT=AX2&!WJ}1`(+i#6a|PclQF#=ra0e2y!aq^g(IG^NV8HQh`y< zkbfeV@tvC`)W9F$RuW;`@lNK?aGJ_p#vkz1e=uDhi&8EFuS)RVe+rM&SSO%BW|qqZ zkw}dmLP1}FjVSGkK??Dc*DMgEu!6ZjRYA!KM02c(k2pGl=%|AU(9~G?U&Zd3fiQo+ z25(sH_R~^&LNIawaKQ3rF1|!E$-%jMIyz!|0W65fLLi?!E;#8H0qq-rX1;B1vYwfx z8?mvv=o}w>N49?|)QK_ME6#5Qph*liOd-YV(5cN|O^g=+suM##rNlp2aspA~G7LCsqwx2u-r9ok zkrLQ;e`R-_iay+GNV#YC)kbxPieill=7uHD?%-e%RP0u%#Pzv~5ECXF0Oxzajb)S# zhEzOZLCE}|i_U|eoG!;u2LNc;OHukUQz2&^SS>xsBMf-?7ThNwNUYXtrT1im$)0gX!JK9W- zp~G0k|ISzK0O*PnNQcoA_;TNUap!g5^rsXo-T1nN8=!+%xD3_MBiCb`e~UBR3lc&b zzqn4g#W>K9Nx7bsjiybW-MfQ_|0Q|Gght~hSnq4e74nF@vi8xX5nN-W-BH;?!e(3o2a-4pE=VTL$G-v(r-{ z+y5w}I4tMwKO^6)g}sWGu}t8Boy?5$BPkz0P2G0=-gF112q2sRa?1bYt0$fS8Mdr- zq;Widd1sapP7VErLLDC*e856vGsvgqslXJD6<+*&06}g(3h^BH)$~w*?)osSrBT>> zU(w2xH-G}@vjbnpK}8NBS3CfO0ah#!(546kQgtOpG;|&^xw{}BHjY$r^l10nrR^2 zvC*`sf?{B_%L}L)-#)Zby#54sC+t(FsYOLa?kuo2s{BIDe(X$_S7gjS0PF^yUS-p{ zSLZBH%pwFpjM}%7QU@ovwAWE}QMMo+Renj?cZ%8s64Lnwr%O3q7vbDFz(FO}KNdzq zp0Ne0Jo^Grd&2eG(FLDAC6}_>+kGI_{rNlD@2|s;{j{|1Ohu*qC{>l6FJH%!jdQ>M z>t5*jrb{|m$n}d3@6;02;9`>JvQv@1ghUjdVuL&}*MSUeC3j`n z8~ZV#bM>~L zZwywPEN4Wx*$r*I*?#usrLcQD!oti;UZY_N%hS27Zti`Y^Ml>8(q)1ySr4Ljyy-sT zA78VoNZ>?EDK}-x1nTwwrDUR2%shPj$a<*$#`BbDT2wzU)B9STgvCI-8Zr28fREnoS^Aw4(h1=3qu|y{!&!YXtho-IJuQ?Z;sN9L3TqW)9qJ8< z{1}EbHW;*~d9850Xm12yp%CA~V?^XC=h8z-Ezw$s#4->8*l`>wt2A`&bPDlPsV96E z8*zHs9?9Nj-5uIDlqw4L{8^yz^h|XsUv_PrS8X642QM8ISPv#$3HFc8WM>hY`^tow z|LQ42q&d%$mVZ72gl3l)NldDL+Y)1l;Zk62ZAIwd^>+6I=RZ~;#%hGZ+(q1|H6nK0 zs<-apU4nfCZ&0rs4oGdUz*OnPoo9k~4BQWmA&N=TwzPpX;;t=kX$c`-;ShU&j#n#t8%W-2*4?sU!^ROW!klPXP1`x*158oSm!s~JG11zC*{k} zW0df0MHmf5%M4F^4p%=Q@%~my(z+Sdb}43ohj92CBnr48QPJ=~%<7~JNsq1Ze0&YB zonK=^lOKFw!jBXI(-Kj~wF2cE4)Sz$Wx3n43EI}fw_s!7FRz|)638{TjFHl<4d+|)ZjaIeeNqni<=nusH|03qpc^Ct`-E8b>e=hpM8s3tve(tXDRw~G zSS|n^HA5)~f;AexgLeO*U}d5)kcdlz-Ev=ejK(3p!>Ny)wZZPp<_J0}n9;!oWCn4y za|PBZ6@Kdfu;$*WH+cSbYxD<&p4XKxxs!eTK;@y>?B zmA`W4-!{Cc%P?$H@nTA(7$Al?cV8YPk9{MR&k;;9;m<>H^s%diD*}bndq;LeG2nMA za8Bcsz9gl@M~*a;pikswR&o#UXvI88F(RcWOUOiBUezqARQ~a=UWC zY75*H3P|-T)&egJ2ZxlTC=2b+_}5H^=|<@!8349au#YKP7r?G1_>#c>lLE~*O7*4HxtQs0^)@ylIECou@cI}X zY-4;Gz@^7EzI*0Xfw_qyB_Sw5D(EL1mr97q2oY_ikY$xCx!R^4P!1RXE@G5iZcO`o2bdkraf-7sM#xjUvrz0~|Sc>Et;}Q7CWaF89~A zS|GiY{@%=e3&X3Y@rFxz>v^)|4C19|f+#u!qzto`6bblIS*D7Q^+eQFVj zA^zt;I(QHR+P}TL)?U5bgyJjIKtm9MW#9Mf`-aNVr+g+i7etzm33ewymNEQ++MkP_p#h9)QrUJn=Ug0CZffKEkcCVT4HfP zmOat$5?=#pq0vRto|jP$H>sNB4cE~;M`=PKA(4?qY6kp=LA_|&S~CQ23?wBbCDIw} zQ@`CqW~2Le6QCHSee0X*!{!O&WKvR+w^-sZRr+EWvgO`Pd?h>#Vg$<|e|+Hq3pa@5 zRng&&9l%*c{>6wG>mapRO*Tt1U}Y_9&I@>r{@AXCN)a$hyPs(@%Ep(PnfCbfkciq= zZ#Pnu48WYLD_&Rf4z=f)vNwIBgdK;Fs3+-#kl3mx{ZJRx@U-n>_f!0v0B8N%Bz>a# zM*8pYpO??#jImf8Eb`tIi7X9Vt5gMMxGbMYkor9QNfY|1p#7rOWSen22kUj-yOK8D zF$itiKC#Rh3O-JXZ3zx0I(b9R55B@fg9v%?&A$J@VJT#~bsr zxIRyv_PmihZm5Vd`zp7HgtG54^cq@LLf3&v~%hIs9Yww!@?T?`=L0S4l&{ zf8#YiU??gVFZaGKt`SXq8j_LD^t<)V{f580@3D~M`8Wu%V@TsHRa((ZF;^YeBWBEN zd-x&b;^bUcAsiQy$_|^fa^^59GoGq-GDE++j&Os*De1A9Lsc9AhJzDiOM}$ph==lF zBKi6G&-P^l0|Vh5-@W!NPlBfL5%|&e$ZTq_A8J;C)jM0|&|E_Gh&L-kWG)2ZV~116 zq$zQRI4>u9-`A<36{=>;tD)QE>qiu)PC4irW`tnUa!E)W#?2(-zU1^KR^CPq2wz@5`F(~F4&czG1v_f+&c5lgYjh&OJWdoF=q5^ayunKTyHw0G=5-wfqBL#l$EvrdkG{=n9vHF;g7JI!h)1(G~>(Yd9DldxqYS63M@(L4tk6MGGu6NWHtn zfmn!dPZR|*`10by*UxVsL=x@J*6fP}@$+yG4)puD-m0~q4-&s#1k2SDYl^)s&#r8j zKI*sL9O}AgYGv_++DAweMG{3P(5f5Y3>_ZMN8rAVEf#vzaKcVxmv18zaKI-0K=U-y zt~i$jwq3R4?BddK_f&#RkzPuAu;VcK85%ZoHvxPDIxphNurALlegmLP)}ZiU$n5-l z01_bw9@J!@SVn;ghM+VTKglnSRQ$k>`-#-rvhmnsOD$KBjJGaP{DWfD zO1^dF6GFvlZrvVQ!*P65R_M~xKAb5MY#naO-~kbJ+NYYhYEmA_;%$=QiuPg99O2w5 zO(7Msr&R%#A|JjzcKGI(cOUoHlx`XHFA-&^PR&?PR<&Nk#V3iY??&X7hcpv(yohD8 zz~7x)E&VX-T|@FML>9wD$Lu>2j}Z1lHiT_3Hc}4!(HGxtbL~jv(eAD=##)kaMkE2~ z9nHZ8@;zmEA1O>hKL$c;2|UN!>+4Ep&i8|Q!<$?nB83&DLcAZ3TMA~F3TM2Osvg3s z_Tz0Am4+9NQ(NpF`HjMFr1H-vtd0w^Hbz%drTawuV(d?^@@E2!t1c0?b#=D?pu^v; zQ!V@+HQh|^{4Semcv9sSVcRD<98;FckeSMmCNd{xUt9ju(W+pkR=LXQi|w5H@br3W z*;{z+&9|9G#j2NawuAD+iRZMVKD46}w4)}pqbaGw!Xjw}4x-u>@L$ttjDG#I_99Ok3tv$N}~O}I086$G@&A2 zH|6FC_dfw~xp}L<#GPsG!eTT?x#MSrhQP~2ewN@M(-#Y02_BPCTmIbun&3E z(X%~M#c9rnhB*9bgogOHJEwvUA3qzgfkoqdrM{;}Ry8tf;PqojCGox87KI+)fWM2= zD-7kQ3HXVGB)j<=2b;ssgWO|8^k~1nDU&Q7DfyHdJretY1Pzal>S4S(K8*{7!gyHc ziub$(^?gZ+9BMiDy()9(VQ!B>uMMy3i$sQgGbOI4+>(}U_A#oJs@xwG6&;MH(!LBO z84f?l|1-f{pNt_fwDpDIh(vjuchhmLpUH%#_m z+x2JiU8ts+GZN%&qa!swvS1*y{Eu)&ew3NkfWb1@?*kUn)6)~Uyg4Dhm#4cJu!;Gf z$`E8Z>tE)#!+RkQ^((#Ue?wX{w0}C96rP&ivXrY*WA#;ZPdx)~=<6IlaaH^Uc?gn- zh=_$4jv9^;(`tA&ZpB`ZW1S|AC zWcJ4ob+E|duI_|0lBdD}w%IKYB7=}+W_96vJk|aEj4J8SdT_=_7C=Z!zruSc)kr{8(3f2~W4xHe|s zFv#V|#6#i<7Sg}$6@HLtp7$YC0IzI|qWANwS3yLdD98v>h4BSI;Q+Chm*2Z z1~3d#2w}cTETeNQ^BwZAyR-8i`)*M#iU8htc~J{Jk&_*My`NMxGp0q^1MQV|poNP~ph5|xMItWrV3uNFima%|%J+8aM+X7befwwU{G!4&^2sh~T-~a}a zwEq0r-X4UAkdu?^mqBRX$|wH!2SKVsTF~i2D_(^%f_eouQzb*CpS43wAoKE<#LeQ_ zFFLG~l~(j{yAzTUytgJCm^Zh)PZU1!##1p{O=_gfMhT?sDHAAdnM4yOVog3yj`?X( zH^$zQsz-q@RhRh8rd2#!8qbA*;ltddw7m;;O6F9$(Zc(%0298pPCq2_<7`#!D!qPsQ z^Qs8wfw3p?6~v%fb5KU+4Kg%1NS?MuX(Bhk3lNrF2L3!Om{aSiAjQyf4*eNE5|>e_ z#+7XdimFY^gkP>q3!**;OA+-+dC)04>sP#PJMKzYLTDyJnVFg@2gV}oIYM5PPuxbp zD@%uF34drsq$ikq$HvB*nh5tM!2KfwDM_PzmH?Ytez-Bz*3XI$C_c-fh-v^Eh)_q< z+(&fY_)h105Cfu14s*nuE`hmEr@R3+NQ<+xY6$r1540#v5oz};C0Bpz5jKz*HthD@ zCd>)z;G5djvw9$TzK!=}@4d)GouQKI96e^WJUxb+;S+4v?p|5#OCY(@s<}Pr6?5xG z_ErCPkzVw?T1vO>Bjl~UDBObHu< zR_ggv!+Z1IDlM0q8B~)+9gIEB=o*ME@0cIx5+#<&nJ)ZRy6sL5n;t`6Y*B#~T=;fnB*Z0?x=};(hUf z#a#~2yT6z*c~(7F>by_GVy+5}7Y7@5|C=2gGp;4M0F$kySPl+Z?3AC9dbS zSLSBT8LVm*X5gFk&_CFlXE3Id#mJa6To;^je_(RY_|lWIK8X{J)nF7JP0pQX%^uC# z0JpmM^xD2m*~WO&;F(j!(rR`|gKw~A=7_|< zF!{~<<7@ST$F$Rxp#%l%-`*GeF6{{EO>;*{IGnLKJr*>5Yoe^7yIaJp{7lsN0)c%z zG`L#SEJYKamz#|3Sl#Y5Whn6|rK_9oas~%}-o!vmY4CQkk zM1RH7=A1?!!aJWlFXv#@*xT^Z#7#0v&V1AX;e6*#pW#^|R8!diDP~3-LrL78ODbv9 z(~P*5FG+%ZDf-&?~X|L_P%<3raIAsk+M@$ydNe1Q7j?FOI)PI@xiJrJ0r2C zVK2MzsOqMBa@g5i^>?_pS9@Y{`YR_K&qlpu;(G2CaFKqtL6rQ}xNvu`vNhEyyK5X; zsuT^f6UH_D!>64>-V+Pt*s*oSWX&6jobw%=DJ*Lx<4tJ%>&|JIHtAvECQ*A}`bE9Z z<3&pNe1h~_j9c|rK_A|-hDIiOLbz{$nmABCFY+P5pI}?m`IP#2Bs@H)hCjP--~|wD zE+zO~w?{f0$kO28CP>WINOuNXRPe1|jD}%qhNE>KD?QAxB44_aB9f#Sr3!>xZZR;v zt33Ik^1i|S=?DzsOH@b1LL8%%s9=7usQzfB@yQ2As@GH8ry<*D6~_?R`%ys+l}4;i zNplVzc55N#6csreE9&^<_It5OF>e#^y$dcr zdOmvh^sWUwb=Q?A5|Fvbb5Zef>K_{Z2jVGwt$a*!LRceG|DbB;@lP|2zt@eAN<;L& zd)0p2`?TV%_MoL?<6b;wuIZeHrk3`T>!=0;H071n&-s(0u$u1Uc7DQ`z*B^z93jMB zHk1mb=w&hQT+m~jECN?S{7omogu{|u5D64Osw6^9hkSzt1j=WX zI!_E=6}xiqa;NCsmDRsh#ko}P=nfqP+MO7n-oX^KgD_3+T9fEt zobi(@pio(jnD-j((#UBDcM!PIzD9BX(~|9dCg(zP;t=xQH=$j6W^Z!!N=yP2NES3| zY|M4pvkyMV_a!EH-3fhVUhBUYVV##asA{KWcCy#fG(GbSit!x9#KJifRYn~mb!Ta< z%erZFyt}H_%Dh$zE-w^QEB)oI8f|w=c&aIe4RGsEr>5_hR5uJV3=rp#zhEJsh}N{c zAS@`-uQx&R@mJMaRe8Bh(AP2Q0VO)}rmJ$~#eKK363HE&N#7DWoL*lem2#!!y0DTF ztO&Ugz%q}8Z$v2A1{dc}Qks!*8t#2vUoc%c zmcahg;X9nHzE5>L9QWD1Btx&@h1D9GMmY zGg4Xi7sS}sXl_NXl~aJ?9vke*suPomje^N0_-*NKOfE5%xc8d zY0ucr)jVgFah(NsZv9?f>CVuSxr4vcJ79)rN-HCDQAkWS?M#7j_0=3Fq>@T9Y0BE> z`Ob6b=!A0#pxq1k(o`2#=`}s?aq`;lP?=E8S&_F24vzX)-?@LOCM&}z|cpIhJ@xbX?JoVjg$EubxI(CNKS3ftBh{c4k}S$-lc zHVv|kbHn4KrYpYid~kR+gYr2)TyrR_!}dPmX`?s74}}VQnF|oZ^kKX z&$ngV)ASML-+e=RdiP@d6&FU$JbxWhBQ|hpO>>>`35hRwEqvzo@;+-Ctra`&rsfo< z7mxmYR2j{|c_^7H`c+!!;(GJT=~dlTvOrHS7j^|Vx0T@c)}#9sOBOPLCYR3Da8)zY z4UB)AEF4mjdjXEpZ43b?FWttLbv*v!acZ`vd%moNH8{NS&i%s? z5VcbIw+hBRLZ;;(;XcGBs1|TnTgpCs+-(!!ws45>Z7u6C8n1h_uv*)?;t4OGuF7re zQ^#wop2^Y<6U;1Y*I!^7G#3n`MF+kb-y(-*A5T%$uQ)w z@q6*tuXnT%@gVwjw1Ueyn<&7+!E}wu{IDGAsVctB1@9XHL?Ywyt4(~`?g2O?>21me z!r_L7$JVeyZuGqlH?Gdq*ch7l>H@f*pQ!-0NSGH%9VMNRr&|*GOKw7eA*JE4mnLL$ zolqmft`N6rbbWd-S!_};=3Bn_j5?YppV3Cu1}M|CXk}g%-gj-ibZ;1w7}qXH^UEbZ z@_j*IZ_LKY#`Jf>LD^l|;)6Z$k}S`~U%GBP{e^Z8KhC^j*@{Vsft8RJuwR7bBqb6C z#7d(`NJ8YvL71qeqrraBI$i-mZRO@(DXM?b;_I$9_*go(sDA-Z`i3lxHO-jm7^B0w zd+6Zl!APUx&_pyCO5IMZRQqK!lgXFGG`Aj3BE;Xiw#8B?dM|KyYJ72TtHymx`H`ui z2|ageY$9<(q2-g1yCKOjH;rmJ7teu{G3Wyx?}4qsf<#6oGu`*`Z->|bE|lFFyUu;Q zV4zhZ;5|i(fxs0bvN_A|*RO)|`G=PSQvba3OyA6nT9`YXn1mD1jH zyDMX4+bUPwq_tST7Iyb^CrKPsv?(6kv9qbYzbX5j#bjgRo4?&<(o}!awc?#5ic5NL zjY@5QXvCj%I~4yzR_fO67dLqt7!Ouy*~(liokolyuMTb2wwcYqsgNDS6@;^mjjA|Y z>7}6p?(zvqbeMwlr5P%eRKmneHiQ7~z`yrlutDKq<0h`IoSx#SsqW*)q$GC9fB5Izu}Yixo*Jnb<=?P(cqTvIpNHdCq~BLRWuSfNi| zNpfv)S(J8aUA^}1#VH5rJ4*EE=h4rSWj2k%1Io7yzm@yvfemMDO1!OfY~_XbZXg)} zN-O!^A7|nH>S*_>lU{^v=l$f=`Fza9LI-HmgL%y2y%_UyJLF3*PE&Z#_J$GAo zxfH_MIx>kfe@Zz&7Eupf3uA)7962kBb9JI6B?#PJ9HyKz_hBSLz2|$Ezjrq@BWkfo zMIHBc=E=lLm4t1>W?9Mn9Ja>?_`bILZG{K%E4Y(4vrc+S&94j&8O}0amak|6GM?@F zPBoL$n@%%U7Wxj?IS1Ca5t-{OQJ&n>_RjsS-#6m!E6RV`N2Na93O3s|4~vqn9Jl+C zp2^Vi+}CeetO`elp9+pk6ye zWAE(xUf~Ce8D>-pcoum}`t= zq&ZFX1$f;hF#^CPJHg8owknZei%()*1L>6cK~Gar@L-h6URY!UJnBw`tW>~tz{)s| z*U4+41l}O*-{5;?@8vb|C1)z_OQvq0_jx{XoWMg;yaF*+F(i?`NFy?pJWrH+U?|ybjvSo_~8py7hH4nELCLJw-ew1$b9Z`KQi)}$a%qFLaC)O!sn|~3G1{jqp6Ay z^F6pbptN`>{s1x&7%Bg_vrLZ!3pewo6d=t=n~9dp`X!FzM{u0W*pC%@jvc9^Biq8>yJ)AX02Sts;={+fnHK6kS+V||& z#yN(7$D_$|vn*@4?Co3U)t!EJIeC|ZWeg)beTns{2DnD!1d%``J_Wx`aFF2K1UF1HOqZjIS)7iY%+BGPmyAawV3cCO;9*C;ZKP{{JvSNqW-+FH?^a(XMzxMi13e9C`5(FNI( z&T~!W{-@y;+}}4BJ#Y6Mf{g6Rgd6l3n?ggdp13i6F0@C7V|CGPY_9WZKO_uDpV81v zTu+s}$frQOMNq&IUh7A2-hxk9Pms*leS7kY1j{MbEURgdW8N=+_=M^yIvN5cJXG&b z`^GzDk++w9J(o`6z8`_qvhb@@kAj)zM@_r)pSP@ZeeMk3m{Tfwf5cCTnd^G1LTK+R zwD6II5Yt#VwTV7eQ)j5|N7K~M2;$xqj!U<1e9gGsImv|BhzDE5n}|J~4?M(}{S=w| z6xwo^3Py3(cWKqH*#BOpWUir^LrQk8j`D|0My`<*$NAjJ5cV|yq%ht|h2K4ZSoW>ii z>6xcVX=^>FX*gIqe-v9i3^d!Xky@HayN1}11Bk%gZMf7{#qPxs=#E4# zN8EK(o;POMo{0?9d9K~w_Vsbp-y*kbceDsZRS~uG(M;fER1>%`*7b2{d+GZkwuh~8 zMKBVvA#)@FNt8Im0#Os@yNPS4Pj5<(r&pJtr^c+F+-V@?MzyL_-~|v$;uv6;qsgJ9 z4Ya+3sBV*N=^_NK?hUOdm%F6{g4*UY8d;1;bhk|N+vru7W#*8jO4RdMDtV*5jy;Ji zz5bxI_|K?jgmoyBVNRr8w$H8xiInChO_t(Ecc26R0-k84{2EDZF(RsL1prADz9j}U zRI(i#9LkdWXmJ?$l=D`XE?p`{REMqqrB)t^>2rTG`ogMFh(J|<)k0M>btAhj~`9`gD0wwRi(%jel=X+Ylld#mW zz)hJdvbkz)nUgY-=vneV)ls&! zJ~|029Z&21taNo}-z%W|lsS<(t_Y15x%{9nBN z9xSzpG?7rz_;ajPBiP>fhOIQiwyp>^(TCNwkn|iS84#c?+J>R zP-LKAmEZn0lE*Gr;qsk;{c-uh&Cv6x~sCkqqXwXL$f zXr|L7wEhq3TMnl-R$meR;k>@LHyt`w+)z@V*L0Ay?UrqYkbifCC>Zs-hj+0pJtusyebn-rc=w%DH8;bK`sd_JGc-smipbgcVpU%|#cX{8h0yYY?A$(CrT!QM z&a>a4wUC&!^byt$BZ1M@((>6}(k8V3OM2^x9S{_cm5)D=1Pj_+Wdy97(xwGPJ}_!G zA2L&8t^qg78iMWZrRPe*x&a-57xwW0k?r?){$s&#g=-I3bhDi;oj3)rPgr`w=EN8e zJ&L_>!hUrYxskk3vCo>sHAn6J@n$S62guUeu^B%93WiVoX}L?v3qReD?fLm7Gn+h{ zkaMr#@UH43)AFx`)n_YKrV=Pivbx;LAL5)G@ozDHg|%s8J4rnv6QmSvPS)i;0t8+lw#`(#Oz;XdEHU?Qs|9vlYAeb0QUW@j=%q^ zf=p-bdWr|mZXF_3ThTRGJ6V|gWu5ui$wfe3o;8zN)Xm?si*6fbDj>&%%hIk4mz zVMF!2m9+pVVm(o3va92O)3eB*t~UdTtDdtC=5=^pma9mMx=4V7iYQ#3Jk+sCNnW!j ztnBNfD~Rg1p3TqqAGW4&TgdMvn0=0w{WGI-IqE{~I1oWa#77gsv>5IIu+HF739GEE zq{H{&c&><=0ZSTA4x#|PJ%l^x)h15dAsKIbB|wcwhgWh73Yvq0!#X^Id-?d_&&?Ckd*|GqNpftB(@aK&BP#Uy$xvms-+P z!W;eVot^zBJ|mkDdn!QD!jV~jVTDJ8S}2HN+yfnUNKXKkii=BA%sv9fd)Bshaw5SA zRhF_rt{=HaLvqY~X-<%BRWE(KQbIm#zvm%go z3Ez5*zKo02B*ekOlFrx9{{HcMqNS;|sW@xrY*l5uEBIq|;|8Di7pP|rdb>{ZN^@js zQfh49`)T7kSRjh<*^N;o+4iLIJrNc;#)$52XJ1x$H0D~uMuSnZJLsv5Vx?wcotIl_ z5ABfdoG#Zk`;(XJN-~D-K>k!};H96>qeGOw$~$QAAM^hELv*;jxBpvTyVJIUUrlf= z?SnsoN3-(9Q?L(=kn?SKs$ArtF9SgBDU-or@X2MjzrE#KXGSykBrjXv-Ol)^jyrwG z!HaGoT7Q6i-T%?(Dnc@(ftv6=uc8p`r8@V+DX4sj-xeqsX)V`MA%LDmc1iv3JuKoT zymo)7!W%}pWLP{URtL{CQ11?t5ks+pd7(tMy*%!UKn=MxG<+=o1vra|)r`e?A{6_L zYuQtyq}X?>{dNt=htHy-e7F8wL%7d%Cj;Y!+=wC8j8SHIr(?^XRSi31s@yEoh)Ef} z8crNzP=|yC6%|tdswR_viN^vFwUL0paR=-m4|&mQb5R9#dlaxM;-l~PQM!NHV))u7 zZN4>hz9z{AOkVRu2Z?BRMtgCKc23G;z_2JwD}E>Aqpy~id%^_L|8SrxV3s*RT?b6` z_`mSea9{9RdS(JG-AvHk<*hC=XOX-hQPM_9YRu`NCX4XsU#s@auB|T#?#j zfXLS89pqZtNz$R3dZ|6QSpTk^TcUS_QICQ9E?oA;R07t}20rr7vqo;bp-xJ^x5zc- zjk@rW45c#K^6XKtV-ruSeV0l;F_EnCk9(sN2?;T}JXEziPzZzT@!at1hrDp}u!q4r zH<52AP5N!A9?b{ND5LJ*x{u97*AA+_g|82ebN-km^E&FRm;%m{-IZH)pi#{bXRS3rSI3Df&d~LZrULBr4Zg+4! znnUi_y8_FXx4%bLTdnkX79D+&u4?WcGXen1+xG(`#2>>Lv*OQmZe8(ZQf8Y3B6Tqa% zZ>37Ec;}WjiMvZLbc8$)cBd3+{{DvhX|Bo8e_A1&GGzvMMDN8Piq2E7zdtcf{5c5&2Y=bh4+VYZS9?Z!>=a?bFbY+u#sR-ww>$`NT8|-7KGiM4sZ9ryCm13 z+*Dvx`pfo;?t+3p)ZUz4s~Q29EZ2kgYx6|*v{L0fVCG4t-)`&TMTzA>GiDU`<(;_L zsxKoaO9;9x)y4!tjUf&@n+7u$Jl#@yZ&fL;h?rD7h*DAf2_8Z|i$5wJ{4VA>NIrPZ z6?ei6#ukUeUMQJFu+bnzu|Q2^C}-e&8ojw>tZ@*4CmZD}Jqo}?B&fo=YFTV}1~4mF zI{#<5n4xm| zNo`5gr8$T&@$*=%Zv_(th(&0F`ER^N%EOL1Hq`W$_cWZF#%|cxCZ$)|OmffKAQG7j z$5!=fh}EwR`X(Z&^OCI)UHCdf7jSORVHQh2Fp>TgVgg!=CJ-Mn2^r#1(1~*AVPGDb zn>WTZDKJH(kqDpfg;rrmz{+nsUI8T+8b1OtSw_d^&W4xQ{RJY}on#~Nq7#T|q}&#C zOr=E80U*oG9shl8S^%&y&em-qk+c4O%e_#a@ju(W53_6AizBaCUm>hmEnl0ti=47w z9U%q~lc&4gdP=m%_8qpUfBh^Rr*3!sy$ugn{QRlz- zZFuG*pbfX_?+Ne-2K;OhfwEO`Gwxa|4QHqY$Cm8b{hWt8pBp%nDs0cJSACz;NwKJZ zplyCdIPqqyYIE+M{}-70BYWA;&@VUS%(1LMvb8Uq3{%$B%G7YE@4wxT-~9NE<9kWq z;BtqU8HZ!BU)wUMmDPivQN-o0PA$#4Z>QQcUVKW}1|H{mv|5Su62gr#Q+Gusv#b zCA~fk$52}O3<(IFm2Cpnc6xmaSl;%PHV;sL97>kCFD@lPI)4Ft``%)U%VU)^tB> zTMqy+GCZMshZQA3`Mf?7lmamJQR)qZi<>u)FrUJI{P;nSaQ;kKeKY(y;NyCg!pN?R zeHO!&%p4lA^O+h3S$guWR1J?XjuflcjjckNl6euhob(f_FXJymF&#yMnRGhT7#}ik zQ$(_r!RFLQ2r63T?;nlMOGuP#E&c?B)eTSvIWmgG%X2RY0kikKDS2xq&Jxhfv1&5( zr3vI{x%SU4_DdaG?Le!=kFf(;t$;AYfj(VC8g5!hdhi){Lm;nrps2r@@uVB=GMHlk zIX_KFiVAZ)74%*^arg;>ZQ~P0Qt@*Agb7mlJH_LD#yO@rySawHeFQ~FF=3H*k@k-E zU;_tAz#aw z-H+)ChFDE;%&OQ~yoXds7#DyL^;owIVp3}SoQ#T#V(h=kDk3aYZltA*upQ-xK4MQq zNI}pATEwGsqijJo zmBM7dMcZ|mRW3m3n1p$0agGQJ;U}MQu$+k^R!}{&Dr>S&dbJ|6KDJnXd&!U)@w>#9b1~E#wt}6>1mH^?(wM z=$cdnaVur4ta0A+8+-s({cQ zQ!IkPwEyI)E@`dcvj+2=pwqDme1B+k-O?66=Dai&7EA|0^SJm>!L#M2ZeBh<-@t9H zHpS_g^slvK2P?M>V>iZ}$_vjm{cobM3$s1%@ehI)8@Bn;^e zlSF{Kj}Fmr%A(Yt;t^^(&`Q`KOCZVXr(PSs)On7P+qq~!4)t4eUGk@ zp8<&lk=_*qbzC?J_S?5_WH2pf%8hnGL(GbIVZ;O6CtWG%9)`Y^)jF6h?*SO-QFhS; zc27amLOMb-Hi{T?-eE_H?6kglZcJqM)E&X9N+a{S3tP7x_*mB8MhZ@*M^t@K7R^CN zw$JfCtoq6!%9|AV^%t*raH4s63i$7aS9H51t^tTh1h>bZyYhd9|FoIrTyL{ByOkiHUR>(VJgXvn$DnS#;Y% z>!;Fhxm6LMMe~30YE~BVik7~h?3z=4ScT;fJ(EP)_Dfm3azav6I+pVKYzqGa9fr#H z_ec7Tm##@}pNa83(I8KyYgwCC=b_V#p|(TOax1)bw**Fg@M9cIt=PhN3g~4Zz_FeE zH$kAbI~}da3^|Hi;^M{88qf1ctTkO@AcgAB$2R{CmvR_Pjuc%By8wYo_6p3s!|0ii zoGCqA5%*{=`4KgkX8v#d-HSG4OsWm!sHHVEHFA_WlY9$oJYH z+?Ni37ol4xxUmcQoe8Fs{eIbet^PB@oxwhLpA}co2aEbpO?)BS7bUR zUO|l3`TOqd3>sPT;H7+8)V*nn{uA;b+dg%i^2T^TjBJmnbs7@=mupHe^p<6JVke=m z-Q|*U8TtD1bY5<5z|JHoehgS;nO*%p3V)^(wcueu7)DB(%RugaHv@J+dUfXNXW;LQ z@leblB9XMqAgFmG!LC2bx`94->cp24n+Ro-sCSkhU&noP9fd!*41&U98_hp;${lu} zg9y2DaL2td%9osz3fFo9QET0B;uwuPp3Q_=0XQEJHsBk&TY>E@Xlc)ioO51lZi6uy zUJ}CB{5j>W`pW5bt?tYI()T^!)E&+ z93mCO!Q&enCiuY?JO0w475mUJDJ}Sq?#fpg3~;|rA14p(Q|^X9g)CcvE&^Z%P|kuT zkFHS}iDJ*{lni^L=Kz!%L?fS<6%*L>IkobM8*Wc2R{eCnbu*uTomuPnvhF0p#58}o zqN>@;hpX*4V;yen@x&rU%0OC49c@U2l_ukXA2*5@bV%DwE|=)hOFt_LAd37GW+z=G zk(9fDhpUs2B2Ep+QKKD7XDI+K5ThCDwD`*egG11SE{Tbg@qpA^An@qG^Z3Qa-vC9N z_9M!6LKyY65s?O?4E#5=uY5`>3BMu#Fl5v`Ep6?e6rt9rpTol`()S5!3LrJzBXB~1 z#I}F8Td!G|iTv!HdGs+W2}fh2c|eD9IN6r)1$lzk$hl{FK!2$OuPu!AhJLDiR^Nj>lG@K5&a}@CW9T zl$4YsgwAIQXif+e_{pd4W29e#zGwmjR1PHWaD|G91-PJl$BWrt|Fk!P>;H!KR^9}~ zQ$%TOER!u>Z+UOG`6PBvpM~{cyKurQQ-8)Nhr+#u>*G1dFhW8?lxyq#{e69UH}BrP z)2PyPVv1qnuA!|h`CC#Od11mGJ$-#fX12taFL`c#rV!G9%q}b?C54+G{QJpowU~sN z2%G-eZtZ2IvXnAOsouc`QygY4GJ?2Hop@&c<9+i^iLoEMWfZiSf`{ZqcxG^#@CGwT z(?}U$bcO&YYEg|!BGtYP0Ygh$3qQp51XkcsZW};ZU9|6LYm4umKvZ5naRGr@C2?su zegNxq|ELZclnM`GxUn%E1P?3ri!c_^qmngi9y2Cdv?r9PEh!Mz~#7ZYt z9*{|~>YaFrN7nd7r2h+_fS2Q|YoEV6t3;p}29`d_wGOmT*sRO4(#1+-NooLN7?I`M zgMnF%$3hk@ioJB=EFIm$G#;#0OtQ^-#u3R$?D^Q7aK4=6lkEbTYh;y02=@mM*3x&^ zL7|ZEJG5N4{5`v)Vlfama8f~b_&e9eR(?*7NWo3BTXlX3Z(lR6Z8%t20d+J}_W85Y z_3P~4a`X0?jUB>fzC^Mh<3un2_>n5_Vfrce@s}6G;mp^ho)d@b9sDAWThWk9eXT(p zr;m|g&z9lLl3_@%V|XtZc<#B_4Z-%oir~r+d!Ji*h{W;i3r}dr36EET$r~uipLd#gx1R#?5ELo|cxj6V0XISDBf~S3UtVeq30ZEgF!WMUkP^ zC~3ej0NNgJb93_v`CP~YL?~ZxZ>S(|`R@G8R%z{5kDfPn)7SaT@mO8+n&f1!^*OEA zj8e`d8Q+I zZayl3dHCRgoRl*gKxMTxo>qBwCMHTo1#0T5Pp6^77X;%hmhR+|rMti9e9hqjha&7d z-I)pPm7-#i2k+i$V%M9|t~UazWG|#>wj0&v>NCB`UT*%-6tjyYUoiGU_{VBucLm{R z2ipiqd=P+m0I-$SPw-jAA8rP+QL2X$4?%(hbt9F1=>(8^aGzyuJ6Z4Ey$cJw{rs*V z5OP54GbbkYK7|_7y@rxK`jMr-v*9qnJ7HGi5vw368>_cB9KHD#GKg zv9l+sMl$~<#J(eTJ-D{u@G9#+ObrA=--9}ALCtw^usz<7sD?3^6_)Dj7gBAG#ed{u z)hq9fHqelVAOr*k27(XBTECDjNKprUP@3?H*>p5dCo!VxZ+ze)-`K4V*voa4L*(fT zG8q`e#>OTjBsdx7mo7SaOpbW(7#o;m-Z%?~`Q%CZ-({ZTmvnlBkjO8ps)g-f8g?iB zF3soA@0F|XQZ0Q;Z=@6o-{N0Wbd&7@q3&8yAz{_gQt<$fy3WJ8&4 z$gIvH+&$__&`G=XQ8XB)d4ZlPBKe=$dT!aF^GW16Mve6ZpIcws%{!&#w96jZp;Qz0 z9-)zlC=n<~@dmooz{+%Lbs6K^v(npJew76vYKHg@A>biMO&mxhE#U9)Y%A8u8~=82 zW$DDE?)IZMB zHVKOa@uU#!pupvxpoM4-@N1OoJ!6GET*h@y*_6#qCWNF2xg|fMnqSrQYYhK|y)HAi zPx?6;Ir_0NXRdbokG;vK64p1wz3<6sffMjc&bQoU)6wi>K-~FTjWTeujYKWErsO_n zxsLO6cY`p|u)sJWDam*4+oBaA>1IU<_rmPbZRhocUu~YQ<71UBwNG_>y2t$%#P7U2 zBCkI+7L;+6waKobsd*&p{x#RA;PHx~yc=Efw%DcBkxKGQT+D2;-FK;SFMg;md6g`$ z_3XZf=C$kJ@>qnH&2$B0V+(G@QV_cc95D#wc6QNn%RPD6o}w7IsZpP-I;ttc%t7EU z>Ht@`@k?Cf++BD_zeDFS_6DJDH)0LU{i^p`77(~K@y$F{;~)>T9HBj~Km&!S=V_S{wFlvXljMo!M{#Y3T z8D8K|m<0rCU%Z!@BQ;>p0cNfy*08~Jfd9o=L-!XBg4JYM_g}!6Q8Mun@o8co=1qx6 zkL{ca$v&^I{!m{jv^|b7I3W9mJhNYF!Jt~Ifh#epwWV1rS-Q=C04EU5EpX<{J@Xou z!jg5%a9Y>R4foQr%br{J9zD8b9y^|;O%W~jGMFnl8-|p`E9K7G}G2o5HH1*f^Q!tDN>}ge2DGFMEQ=yG88-;wiX>FWc0tR^PuRmuI)y~$t_7wn8s@YbRSC5^K2 zGiHtxd$~5)c6^T=S+yg+>L$`d}xMwd)3f|GnAN$dp~$NL+JQn?5~Uq%lEqZ^^e;RBMTr5&JkcA86G_6IMmG6=Rb4iudMgl zlLnO_0z$j4cq9Y;RK(Mw!+M@QtO7M(79~))Uuv+;da!92!R>R=d)4dUf%}uw>AN%u>v;#(5 zIjJox>o$?fY3)7JF;k8NkiVWs(q?2#2t7PH^p8PC$s5z7TUvC+PldRX;LB0R{~9+M zuzU&Eu+c0+j0@{D63;(^SpgJcFWr{ZRw-cWn5%TW18}^lxZ8C;u zgGp(j*d-e^ia{<;&UeE|!hBw^@25$5Itk42n11-m>c5Ih5{+k^BnjDE?n1uALqz(9 z`amug(IKd{FF_`(YmH(jwO9k^{Rk4C5azemsLL|477E@k@r1OQ!nn+b8z$x^Msw79W0L5A-L;v}61ynh z4cut$J{CzBM$I8z85p>&n{g=Xepcf2^o!`|{SUn$O@4l<{HI*Sui4qgdG>F=iLqc# z7|`ndY8>`={Jxn*!!37aVr|A!KzqyWzEV%ruXpcE`t2?tMmg}R-_3agRd1OOg@r4x zLE8Q>@^m=O^xKGt2(^-l7f5WiBM0Sk!Odwu(Yh;g+?qB_EJ9d;?2 z1pAa{^*0Bdp>BD@LH zfF~q3u!`Whpu9}8#xy&ocArGXU89-hKa0B#n& z6!;P!-*iGtCQ5~e?QskO*D=T4HhVoAEfhmorB2D{tk06keA=yXjP+oTAdTZ53^D%wbrP~G_(`{+)oAU#N*jqF1s)x2cLrs&0ZoFn{KE4L)3q>KBW2DdOE}!u z7XuzLKzLC;k5<_G@UZo|oj+iaap#9#*t4nKylNVfra68BZRl`v;}H+-UT8{Sdz=U; zepH@DNA7#9G1~cpp=Y=CyZ7Ut0{oB0YNZOsjZ5xi{`{a@;WF0Q-oCcFHt%W|c>CyZ zWW>BDD(O$|Uh>MO$l0?Wm{8$Fq)n#GwNXO_CP{RuZnFdD78KqlHGXW7m|C_C9hL+L(PuDI0CnDfg&Q4wxlTQ8 zsIo7<<(9pA0x=4B%+cX?J>DwnO)^vzVPC;`@+QMgcml!K5vAebr0gLtp29!OMH8ov z2-d)Wz6k+02Yj65ZbJrx!U2AxOn6hWADuzS%r@49NnYRHZpCv{ZeyRkLHO}e9z#jV zs2X}P=b9h$OZ#)rzO{T(MdY1m;S$c*uVwZ(tYtzRtj%;>u5dlVExC-;s&g|iz@ws^ z?T(CkTI;)CzHc8_XFCfa=fcA+*LpsF{x@-PsWKkzjo+KwNA3)5aT+sZ@(Owq#0Jcqs{CieK-Qb~`33Rtw%-TA*v(wRcL%>+8Lq{Ybdb*I4I zVvqPCR88T#H>JrYVU;wf!H>I_0gjN9*jEDA`Ge`EBmiXr`2dZw{V`i4j{yUKk9aJ; z1D{FQctK4Or(%x<%Bc-~tHQ;CyGn`d-#wuLr>`SM;2wB>J%)ne*r*_lc)2%29U6IX z49AmGkm6j#0V#o3ONRHyAVRtRC%3KD*)<`S{LAzdNN^Z#(#Cl~-d_}vHY@vt8>Cnx7N)Bz-& zpV;VDpihPC5vrV~FQ}=hp{$~uPfE4X_iI&fr-Lzn&FtDwg9kDP_B4kzx8OPi8H=thx&Y}@Lpa+ymIIi1?7sj{ z4)zd$;nle=G(W-z{E^5oW@Pmouh?OV9UtjV4F?6wA1kRzC`Z6^^uXF*A zx6&wo#TNr2cm@=*Rh&v?!OBrH=$(|v0Lvo)!>oieh<^t{>k1*{mk0zPHSmK_OX2(4 zE_k&X4IK2PKaK--}rRAYpNJQau@8#hGx1~poZ>1JS=esvLIqsd+Ll9BjP?4DKWp6+Y7Eu3D_ zk(xn**%}&yLoN?q_T~f;Z0?qrXZ@Oc({5z093uPGk`!gRJ#&Y*<^qy4#BwRZzVGDIz0eHyzKTrg}Dv@ zrn2II1n}U8-0a!#yksvSzWp3DgP!!W@2QQtBfi(mb^A0f7XX+X=hJ+HMfe=-ZGsB@ z*Y;iEf9NCw2npRk96LKYIXMyHRTaPSfeZ?4$tb{W0ghFc#M^@`4;7@6p?Z>}bSUt{ zPiOJ7qawQ6SrXcr_Z5hTMDsv)U9~-{@sP^HYIInoNWmn z2r{v+FNG1SXYT2;u`~(n3^8Wv#Tw;Sc|~`e`xVnSXteY}FhpGg(m^VQrZQbnbT&m! zZ@jKsy)Tp$J2{VGs7CCaW!Zo7oEKs0*kHwqQgI?(v;n~cuq1ea8y%ccU}>l^lbam_ z1B~)83VEx{F_sZk@&5xZ-l!p{YX|{l#oO?C;;>4Phe`2Z7hc@fgrA;;{*xC`>oO{9 zf{=Ia(?70!#(aCZux0qx1z;_&(g1uO3WC`cb<$Rt8?&^IyT;wU95H5qSiCgMG**rI z;WU^7-yHsrKXpLJxD~YpA`VK1gQm{{VF@ICuCQ8PbwcmpRa0Yqz1-KF+<(fzMyo6q z0!dI%(1)*I0T*e$qRP~;D}aq+GGsHRL$SPkZ6|Y)0v%xRMb$cc`OF8wTiJ~5jUlU#T(wJ^VL|v`rpx0*+Xp1 zr3ShnP++jiwge^;<@@o5>nFPIw(zDnb#-Hz>A zKsgW$5?cF)w8=05k&QYy#N>fF>Hia*ipzF}kSM6>U7-9q2;Q+l1-HUG(=y+00J^xT`VlsQwp9uwYOy^4c# zhkB{b&A313JHi=MY8@QeYrpmHTne_n;rSyE7tj-N|?(U&=XAYrLlr$ZC_~ zh?`UL`yii7FzB3_EUwK045pEwuH z%K)m@J3)kn3u{*CmIh?{|LSiHy*ffWK>1r7lA5}j5$~L2Oyb^8b}I!_Pcdo)wG!S` zauj^e=8+=p=r^R;K~~f40{wKa|MbRp5P6Ylkwh0GNJ}+tW0?x{z4=B;c$Z9g;$D8N zOoOW=^qWFe`RG9JbHSBf0H1duZ#vzVPXb`wSHb9%DTsS0g zIAj!TDk#N1f*XccNHpVbG^T_i@VG#LkV=o5rY$7H^z3QKVVoMeP8>x|0d|(g5x0?r z5Q}TgPW@2TDOKhV8juRj|Hso;M@7|re-DiyAW8`c(%s!9osxo-0Sri|GzyXeA|MSz zgOmtLclXd8l0$dbd*=E6*82}@$-;?y&pl`FPi=vKAMYhbZQ>q6wc}Jw!~Yuupr}`T zfA7#FRquEEllfcF!jtE&*v~UPUTAHynwIUF&i;80Gm!82Y$~(Ka1zA$Oh!7~6*W{E z`_m&MrFr$~`S;hC5*y-m6)u*8;2%O5iJrcu*P>#_A})h}`K%T^kG{4UYSEX8exw;l zN@KhI-4>s=Vol4NV%&vaO|a`uLN;GFQ8!4bzqNam{ii)XdFRf~LK@-=?01O?-($F* z2jsa(<3c!y6bK=aEW&_;MMbM+3}7S#=D1EmV+fRnCiD75;^&od|9YHk!OS56R1^fr zj07n@TVYJ;0ox@Ixa_~jC~$gI@<#JyNb(CLei_$`1^*$ds_dj(STkl*zA(=E=M`>5 z$@G_rVpN(;8z#B(@wb*umE&5DEX+Ldufo}H{?P8U5>fsEv`i*4krfRX641yk7g41R zaCumS&9979Sq=`(aqurzu>(x&Kk|SSBZLhKg1(Ms@eRN5!{6dbFo_z0lR(&mulVoK zUCT#L6Z+f+*D8N=ykU0F->&WRo!jNbfpCN~8-0lk$a|XsI;!WX5b}tDb(JQTUGb%U zzS{3Ywf<78s(CUvV{?r(cBY%XwY#;>Ee#AUhQn}49SId916 ziVsa~Z0-1l1*gZrGS*F!$9@wvoTL2YpsigF0tE+I{!)Mw!1V{YVUxv%6##e#NdLAX zgg-1GxW^9flr{)e8u!72d4en#>DU@JagfPvz=fe`Ys-!b{f$jyEXzY00cnAW#JP1sxIy^kQp$&>h14&u$5w;aGl?*J$Gg1^vt(!7&jbu`0Z^zxdPh(iFdLz@DT02T?*I?sSo2^$Ta|mGOQ5 zIMgT94Mdc}pGPBr*^;ufk~#Rf^r*8Qyl;!Nk|Hwv!@EHn0S2%!Qh!`R zxmnD>@?{ZzYz^6+KFIwzc+RPzRHEJ8`6A?j^emBr&)9D5F3z#$L}riyQ=PGYO)BNg zV|k*NtF5R|(|@WhGNct9zBgaDPs|4E#m~=72K&_}0&=Unea-8xS5d6|qP$;!-d0G? zU$A#sP;zoe+~l?F(|qP`rq<#VQi2ba&>Pl57ZTTq%=Xp_?&--hljbln&q*1 zP_KHE`flP4m6*wRME;9^T;vf&73JiN>On!)LoKT$J-AUz0_XuGj~~}cwL_rn0h0QOJ4(UBU4&%6yZ*za*-tq~x8< zn$$rzw&?@NjQ0ETAFtNr16##PN=LM{w$uy|#|)WuiYy8nzPWuEgJPCeJti1w;69a% zF}{QDsXVR)I%T?QDxg*X`x!YYO*=NU9Q(~U@|}Dw!0<(9;UgYMa&*8M1e!C14f7<_}6UOjyrMqfz`_w!z@5eG+ALv z5_OQb)J%(p7~NaM2YD$T`}6yiTQ^ui16yjEPE5BuqSYM@Z=(3NYpYuRu?yCol{h9U1FB&S?0H ziXa-*z!}{&tgzj_E+5VpN1KR4RN<&oAnQg0(gva~9laLPafLimYiiftZ>>N1%K1rf zSd^2#iRpSM&vKp2_U8Unf8}k}tSU$Dk5=xDHFIspo2Df&{b}--YAmBVc0jNf3am(t z9;54?1uXOvVi2~wl*s)C)h8895PS~tnkY7;_B|o=={JgabOotQ!~eWq)j;KzjBg=k z3?Wwu8+GejliYQ`|M#QN>6L3MNB$2^ec4QTLV2PAaD8Rn$7N`X*_j{uqgT%V>+kb; zCblW*HJ23I_jjb@t$Qwg9sa(fNgeYsRGZS>N~UystZdKjcutJ8dT_@n8ONstIvgHw zw|IZMh(JK8r1@BcY3b-*vwV3Wt$Ar4uGB)KYY&{GbQg5d;;2HeKDB!RYoqDh|jtnemGR-S( z7qqJh+U2n`n-g$Q_?25wqLDN>uy2DE$m5U54C#JuS`Mj&8{4qNKe3;CojbKvuh0HA zgH740f_?UTnNLRb@t;j8Ja0GWgqQvfd>?I30yd0Je1r8}Xngu2l73Gpo7mVI0)iEQ zR#GjIJJYPm&kxY2oAK%`GF@Ut!xaznHoZ7`X9yJ_yK%z z3pQ>o1f?<|WD!n1dc}k#ned~R;x1x-z48Z?KJ14#vzt-4MNj#Vt&{}@9K0FX?$TRa zG%9eybiGBd1l#Z0#Hzo4XvCwpH$pdmmzhIGM$f(40xQUx&P zE<-BE-@2jKr!~&1l#eITAY5`0T1JDDeL@7jr)>z7?Cnmx((%mwm0gf!KD%8$^)d4| zYnDz^*uJ07y6n%}y{o`)ZPsjmzQo8R5KG6(V}pkiZB$GE(3dX=bB}OQp@IiV=1{ekmnadB^i_t@;deSfmx5HxCVoa9d+^g?@7NR}2Mujx zPPaTVCTeHe<#4&f6(8}G&$5|QpkS$xeEhNW>mxM=q454o#zti&C8Yu%)+YgsEXe3n zaNCWC;sd^>~4MgJ>OW=A*kx<-2Q_^K=e!6!xt}LdzFAw2P)Uo0lS;86K zyn`o0X8dvR$)!OG20mwndNRKZghSg=H&O|`k};sOsS)!5Oo*v8lMc2^UYykXNPUXG z!bA()ROYO?c~DF+Cc#*!e1}k=i3#`=f@%cPT^$|Ps0i!W{4h$ect~Q=lCj{9`)=nb z(7?WRFX`Fgu|Z& z^@rr^gSkJnU1+@1SVB%9NZHRV1WHy01cUg{$0!^S*YVIn6tDs&v~hY+)FG}wG>!^x z>0vV(!M7MqAq=cOSVKvW@bP1a5z))Nv#ef}k~UZ*aqQ>po0RvH#4?N7#rI{EQ0M%d%CJ!ZkMoYqF8OM;O z=${yqojkL(cFU_g`cZiWe%4m9w$-dyZdwFRGiPOf2?~UKD+D`sJle5_)*|s-J8@nuiac8BNZoVEiwel zZ;<6^#C)$sL0z9};k@VQ>gU%F)01$%$b-|krEl87=hEf4aY%fjRER+HOKX1z^bUI*MlVfD~ z*MP?J?+&ka2WKrOEo3s-)WB5_&L&O2o2>M53Y2e+4A872Yj^&gur5OPq5UNeG^;fg%9v0+KrPzmHh3&4`xX}aBYkU@hM4_Tp9 zmZhV@EnSu{+QIH0XY;yP|EV-7nMFAw=`Fk?ukJ7bUuX@$j)9&m#<$%kdJcqO=D^DG z@+0X$yiVD~cg?}zWF^YN4#=Z}o&Hy+8`=v1&7O<3SGkKvV_YIfN#lyCcb6agqH{jk zR{6Md9o+9C%6q`VT0Xpzx1&a^fnQ>A)XN`wooDwh!*ee-IxiWu#e@6(d_Suo(Xl!> zEG)SK{C49fxr2#tjnTHpi}I5`X9KZ~-ArW*Hnh63^_1lP6KQEVEk=k|sF9=;${yPP zzAG*4`gGeM6LPhH>;G3Q)niZo%GlRAEQc&D3~TV=)wMTa8rDIjZUHUPaN)fwwcnkU zO7iVql8V^Q8|=>t5I`W=ssDG#mIGdz`*WKG$^8#@u+b$gtv^^V53;dx6L&=T^-|I9JMMeB; z3*m!^GBO570mv6G77J54umqe4+;z>^$gR*sBBj$T=}XXO!X9M94R$vz{6$VnLSQ76 zy1zLFa;0a_o|$k!Du<1o8>VU|nHknpiYn$mRO~1oaa1)R40kK%SbtI1Z<_kPH1g9h zavLn)P*GNJYk?bZnLHKnX?LMh$V;v3t_m*A#U&964fXNr{uS`vbM5=uv)OjPlLaiF z*l*vyP2XGngGAogELZZrE?txWZThcqH+hHLI$XZZVz++LX+2f7KDkbDT0fpdrYA6}AzPw+yz?IAX%E2i}Sx`@QUcjzZe zGJ*c{)pEdh3%}r5$;!%dyuy)tP5@Iz=WoEK!GmRfq=P-#4HmECS**Kx-YNFPlda*~ zOzG$0xQbuRFO7QrEI|1gSC=(q7qv|LLtr$kpfWorXue^FR7wQqL?}xIEH3dmOQB(5 zpLhr?NtgCXChdB$bY9@#XF7j4YLW`tCsvS_I_jna1=fFWNUdx6E1m$RYM)GbjhmAr zZtWH&#xv_TWnPo}CEfa|8pC8{)MA-3+n`FHhANw;n4czFP0Y{?t4W3BU6srWdPGQB z)5>eP$?umDTjNn=JRhN8OJBPs*q#hSP%owkAMdS}ysEdo({yn#ZfLn~V@M>RFHsB1 zHWqeCcOZWJQ*xvarQ`wZjanBa9Go3Mb8Y$NDx88lL`Bl^dlN721B~pT8r53&&2U1v z)<=jsEo@UB+ZxnmA3vg0{%PN;S9R2HMlGXj8gpAq&mJno;LIN1byc-jX8m0=8u3cb z!e+atFYx}*Z#U}pqwLSjsf(_ev!BzYLo3g&rG`CWT1s2I1#ik?sE15_cHJlDKf~;D z1yx@vL5#StkjFI|B8E2+X_v@AT;UL*jKbGVu zYwfk)CI}JY0mQry4n8W32NfK&zyD}s2avD`2g$~mB7X^98#H$qSpCjCwm6ChDwuGF zDzzxNFC#{Qm7+swaofUB<{CX)!C!(VYbh$F6qMd0ImG!nK`SG@D^X~L3_?W@N86o*PWKR<6MMS|%P!J_T5vUOUzD<&BJ(|fD?!2&gBOBmkX zEOpdxzf+?|J*9#xFn#GgdYQ}`vOG8-1nu!C#OQ@I?iX4~j1W`wlUlcJZY*R(+GLf3 z+0F5Tr!8&RFpe)IDW{xu9OpVXs%d(-R%}XD1NJGZt;>$edWq(%s{^f0)IP-HZjW%2 zMIEiQXWUvHZ!FkKUU6i8J9VF9qvo2aGf|EpzjOsE@#44+6>0VDy%b$_8Df!$CR4Z*6` z@}`G>Hkznrl2qx#!;xh1Ef|>#i z_78Ug;2Rg1ttM;v8Gb6XFdi(|FL_J9hzxf;#wBVp-u@Ng3ojCuke5f)_SiXfmk;H< zqTFNk%-uNN)!8VvnXn>?PO%=hT@<4A(_P8G8}>Pw<>5050?lnb$pS%Lby7pb~lln)}u|$*y7oa9>7B2vWFoLgCtP`V5*R8c9-o?kLuGRMn~6=mO#h`^KfHe|p{h*O6# zocY|OeD;|o!&wr6%X%iC<(D&Yj$fptV#WG@+qR4Vs6}~mM;-q;5LC^V=2Q_8Kul(m z4^);|uIKji7y%?W$ZW5t>;$lX3lUiG1H7C~m&kA|I75=<_2FA2qHKfuamXsR=ytfbZ`e^36(N`5QNztOPFJ#BjNUfBO^?#hk!?zDIN zM*EYYP{rBK%`SWa&2iD^s5|VkVuL-s3jS?3Y$mw3Nh9NRgY8=MqMy`#eofQvRGN!e z%0e0@JYguGvGmpLqC=Bet@&Xg9TORSn)4nlCF11p{S=s=Om6F-HuGqf7jy7Y6t?D2 z+EwgXTcPRAaclBg(cSexKggz{T(}S6QCyj4>*f%4M?hO!861s;ld`e!DO|*hsm*5g zcI#?Awony8v_eMP=#!A>l@vz?2E6q2)z4+4I%U0orNjl{)3H{WjJvICJFllxCLOL0 z>!|T}rpp!>d~cKgXc6o$ESR0ITCVf@;yl2h6Gct_x+D-sL@5{iFcXEJ2ze^sRs;Am z4GlmS07ONDGM~@}(W4?+&G}z%(C}bb56K{Oev#oQaE6X^B~*lV-Em$|ypg<93vvF* zTZ5Q^-K@h3`ZmPdx@#kz52a8BD&bMz6SnB8-3~dcEF+T;eoE28OGFihN2zd!+DHHP zIO?CB+MzrPh#iXn>2HJdC3#wyG9{TZ*uN3Vv5fy{0omV{`^Rae6R7?hAaFg# zYR^_|1Q-uMCYcB@(Q$no6nG#e9&#;0$U%qHt+)|zw)75d-RnngPSAP{A4ayGVdnT? zD{4s3>aQQYJm0x#aUML-6PmVl22+S->sklBAeF8?!Q(;6}yYqdutM25Ew6Pk zbuFkR#PX7^lHDH<^G_8y&3iqEqHY{~3bcksK&}d9Mn%jILMLLtrd`BDgJ~$&t zBFUTh|6z#pWNlkNEz|I-u~=bLA^45=_x|oCVv;joZaW4oX zCg>ija7fs@P9814%VqQefBSZ&%1;Y^D`r~9n`4>^(LN-COUyb8_m5J{7eR=R+xApg zDifvC>aTwZcPg3JM2~S4yhLEiI8ornzrj={L$+oz&eCn~;{hu6yNyz171@L)%47e# zdjzcG5WMqmWXR5XFhk0Jy*~*XcIX`;4}s=Qr46$7tF$ox(UOe)6~vTJY7Mty*D`>* z9a5_R1B8Q$hO_j$sF2P`3V``w1eB_PzRYFP=#P!t-dqw2JQ2-nzSa%!=c+&0 zlO(*)Dy>HWj`#=S`dtW%UokaC(L1K{r?Sr1nq~wue=oO@4hF{WmX+bE%l`MI`+w8b zr@tkrWZzy{dS}|^1-*}aoE8BIl(x1Om6(OX@M#>1#LktiIgYL*mhDWLk`1MraIK!_ z2hE;rFAub9Qb}-qs~GmnF!U8xCwwh!WjIi|sH1}*-k|r(VEXp-w$bEQo|fBpR^r|) z?@sballl^Jjlm&df&R*jj|Bx*tuX6DxS{3|E>|V#%Ph@cLc8PrlfuxFH)hW~vBH@P z`vu>%{A=*eAm@!k?$X!+e(OnA-H#Q1p*)!ZglO|Gtk@~gr^+)&JVFla)N#ZHJQrx~ zf(a=*50MXS$?Jr$|JbCjOQ1G;@Zf>VdjBPu&Sg|(uMW0RR#fTNzX$%lukg-RR$>3~ z7&omBS9Mg~d930-96}STq2ob zwQfuzaDxnuGK0E7w%9xTjpNBpmxv9{8?g6+hYmk}RO-%kI2Gf%{;BK|Txa3>5&nFQ z$#oK6pzTzqr~cjz9$i1h_s9&Fu6Y|IJbR+Z$Jz7FlxS`5!$!ska>-0mAdP2M?)*g|C0G z>KZFC!}!680M3H2jL(Vy`guUO9s>Ysrz=(@X8@cnijLJ%peE=+X>i{)>PL}qSyxL; z#D(nUH&1WG3y=Q9@@>>c@EXnMY81j*6`2z#$ps+;(tfFo|@dGsC zbQ~`p@zHd9(WZ(nQe5{}En^ZoynC24#H$)MCMf*Sh7isEgQU&nE^{Cy#NNOZHV?BU z6CRGI;@jJv)WnzRgHgsziJKG-V1$cnhD9belt7P@+@cCtF8RlnCH!vcWk$m^J)_q- zeSC#2P9(EF22#5;o5blKd09Li-%mV>+l!QMw&8Pu7Qak#o8p-*F;c6#yRA3WyfDD= zYHRZGpZS+uskcO|SLpP!UEiFKj9`EIdh8pG8ah8HZ1E@*z`=+E%;-)|PGGin8zq?1 z5&@u2ns5k!5M>~)$Lj-0lt2XJe|Nc2)^t~!g;L2dWGnW;$)Q{+jMvwFkDXPWFX@;S zQ(~02^(Brfm$8SP@Np!M}p$o)?JX{pBSH!MnI)?Rl>R;L zSzXn>%>?Yt_Bw|KrKASF?_IwcIOhaQU+*t1pg~_(*b-A#sn+2aZgBnEJ4kfrDX}sZ z`j}hvgR?8U`Sq|=qYx#7b%)IrGvE|Tk_8t3*yYoRQE&15zU~j>E9c05&2LlhwnE~Z z{?z*Et=E|ikshf=^q&5I3*Hrv0Rt;6z*5_>IS5!Jb;h8-k20;5CTW6BmW zpvwoqQFSxW$vaCMAX$Mlt{Yyj4yQ=_?7h=cLCT8++}_yeN`M^kT4 zQdsOJwa9M*>Ct6dgzg)ty3}G$s3e1CZ-6Lxc&xkL;sKu6Z-Qi05$;Cd;_OW?!Q(A)kL-p`S5h*`y(b^ZmsWD=o`b zSPkXGTp=%j6hDz6(S`pYgL!}-qkyVvGGyNmvdGqtg0~|4bqU}gJt)Y@FT742PU6N8 zBZZ+2_Pr7Y?JTv7G_eR(9d%~_Un&e$esyf8-8M5Yp*T~<6;z54tbXkAN;5yPEizM+ zTGJk^q-%Y<5uLU7M3$Z%O%!P}e?MrK`5l$(R6arBPjs-F%iGTPy@>fPcqJeji3z>m z^Nrk|h}fT)|HfhU9>7pAkBoXT&q}+q{`-j{6RZAiD>c(45Sm>)4DbYeA?w!T)77|v zjA6r^H)VzUn!#5r`#qanIL?vT!I1&^xPHm1Pu`2LdQJ>!-Os3Uz4I*}qzwW~bHCvd zKX%+}CPZh6!^>@?kDht9IJLQc+6Cs<>hkVs)3Xcz$88d9%PLO^$ zf5yhIw}|lopao9oUD$vNZ3~FHZvbrpS@j$ID2Nwew#0;NNg=g3{PrhP-Q7xREhyA# z#>SLrNKiz>4E(@@mH&byCq#2mjD;q-ylucypc~Soc;&gZTby)QaQ3^%W=cPUC~9ZZ zFj^p%aSpq+7%qxQ>GH}Djo##V6M2inB*}A^x+0kmQGc{{aW8oByGY+-0HR;h!HUsHr_vZlOVdm|v+tz*A=q!~%qXhzP-w-bg7SRWTM*$)!({toxgys>8~#WvHnTD^k_$ zB{&{msblnwnM1|7WY%6H!A3uOLF;7PYLt-r38oEi@`9(FY3#u$3-zc5Ivm7Jy_G(0 zmh^3@XKi^Rt^U4Ske*r$B%41KMFqNq96J@?XSI?_kTg$;3YXb4JX+c+hnXKPVj&Zt zja<^r)I`wG?HbJ@^wqb8gxyZ)eT^$pZ$yvBVq!^$OxpARp~CyGG0EYt_uT)bUV^bS zjoxM}1zu@yXTMVg0fZP2)`M*-mxh)c6|j!t3bfat_y&!BC=sRXnttmXgNdjI4Pd&( zFc;Y_l7S9*{~rj5;Kt|z0Mi9Fl=m|(B(h`A(NZsEY-m%SGuFhpsHJ?^Xnkr`tzuT= z<<9enK92eFYBofP5|5~qS$(7D;!ANaKV9XZ%I@G_uwB}mqD z2t?2I#<48@L#brK2$6DB6DS033(VuV!mbAXy4(-g8@V1E8JN1ync5PbLe%A~9y6%# zE1iPz&oA1lWyol|;tV}o3T_Y#eZ?WaJyT7krsX@5Iq1HJGk3 z9Anxsoo3w>P!5{+lk;jvd(l$SF0}1GuFOcS>357*G(1sV!RDGiJ2b2G95@+PjvP|k z&)SRJ{qbbf<-k&kHdI6juEz8W|G61X6rD3ZlpvsUsW1RS&R9-{@+_MO&{NFp$yY5z ziDj*kAWOf_brVFdn;}U8B%Le7oeG&T|C<+A?LL$9N1vs<{m;N#35QaZ6E$3(lfvUt zf!8^gY`GY0#@ki#=}oryBDRA28m7^MCfnns6(45HTyOX5&c@1~5KflsOboDV7XrMu z&h7XIye-og>+()r1s`v20u8R}+zq&c(6@uppljvZ6lCk z2X4froMY8BTViqU5+4&z*R=$jAPzZo%cq2%UgbsI>s+UNW^?w1?KCDrHGSlE&vG=Z zk{Nx3>3;V~r%MLfxILX)-JCRvBKObFrt%#$`EIn%=bb2!L?QW*Ya8QTU^l zP>`%}cmC2NLI61QqeMQXf74F~A(y05TakdmVUZL}%|F#56o6nr=l^>m9VSuvsQI{_}AC z^!7=w>bEtO-z7f?M323#!#ZQA95;6}1YCSZ^M5DzaQd+MGM-!(Z41aZkw{r~t}LqU zcNp|O|6ax(F=hW?aW!>Du*p(yBQ?ph?)~PHiKc{=9Mf?DuZv*3qS;R7ZMev5^_Uxq zmKPEU9kzUAQ9JWps{w$~QxH=}5_$0dp~cMLOR@-4d9D&ZM!{PwC8Seme)bAjX1S3z z&_$nPynbh=i%vpuB8Z7|L;Ih3&XNk%F#XBDkGIV%UF=V#!BNcU5;g3;tU37;Z=^nV zBOn-nt8#{GTwhf$?H7@sB^zIO#-)DgG(TAE zLw7A!h{<3KNd|Ta2sH8HKm>NH2sEH30-sZuz9QMXQ3G`dULZ9p0=SjI03IZ}N)DM( z3}N9>5)G(_8FobV&{+xEBtIqKQkN2W#2}j_;AL)8?-wkTYK)ep z0`J>A;W7us!Od85v&TE3CNcJe)YlOn>)-h8CORQ}Zy}HXi1G^=-LvC(o0!BDxTM%x%bWEb^ zLaO3IIu*rqoc>(Tmf7!i&0uT16wT%lVGs7US@H#H%Rn*+(9U%7Y+n4kzf2&5Ttq4= zMgS<|pb!%AWuH!bx2gwY&q{RW%vEly4#NGbUbt{yG;8pA+W6EK4A)!qE(nlZ@(`6B!dT#Olj}dF^=sU{*u8oriuLaU_!b*pCk~Uvx zeiHAFNg_A>nzS-}q5IFv)cvc{OTX2g-wDq?Xj{sLUz$LhqD@%iU90$ICgl5V=pzRq zevPIaLt;zB69*Gm~ zCGA@X|D1VCz}>}4G>Gb=gsY*SAoDaJ$=p!pHB9(lJ_cT2(``dHcthrtU)I$3!mLQW z((kXQ&(ON&RP}pKJQrlG?_{k9jXxY2E?lYra3}r8(5bS0UE;CqEfDp(9)rna`hynn~O4mJ5=QnDPwFTO4glW;xc# zFzZwP8}G#>@nYEZ6$d$|H&r~|!X_VI8r$*!)#3Xm9byfZ{$w)_RUhA`+xhftsYvii zj=S(;E~=gt@g@nRDoivdN<>5DsCuVg@!Z4-AuekYI)VxMU@X zI}1+i5R1I!#u3F0888>Fp9G@fC?73zR*GlO)D@-MmO#>&upeP-Vj@{0i2ahVJE~-} z;ynIOkO}nIKwku=GJPEc{4N%fGW3L~bIFEMWTGG*ckMebSWQm6wRQt!6Ji1Si<;%v zT%p%P6KA&B^7CI}Zz5AY-|f*FEPHKF9}k)ds=BNPp~6T947Hjx+Lsz{k1LMURaoB} z0hC1!>tQj#4Tq%qWt*r1OdEw!wn9!QzJZFqbg_PqlpCZwkk#^rV8R?s8-_t4RUm#C zLLe=-eeKYM8xJNn2)?I4Nd61Ox%g4TUEXjyL-9~1{cxHTw6OOFY3Bzlsm;v`N1wx$ z*>qocA77~-psuXc4s$)~*O5wmxNZ(PDNefoa>Z2FZjoc6Bk)vRtZIko0qjdJ>ytm& zG*4Rqrj91mso5f2n)DfsvjTukpcBZ%c0qQcW~|jB?;$5v8NQuJv6U=k%loRn&eU85@QwKf%In$c42JNMbtp9{wJEKS-7K15c_;bFaix_9*ICSQU5 zzEz6UIU|AGm!B`nxzz5w)_%Mex!iHcQ&A0t)K1l5(_B6|y1yB^Z*C6(kIU0XPf+mc zfLc|-5sA)3u|7fSW}qLzLH_Ga+egSVKr92Ph4s@02J1);sRTzkfi1lkfhHu>A4Civ z^-m{y;kEaFEWk4xs(-XUGJ6r{pMzJAN?yM_&0nbd&|RC(q3H5YvU;CJ(kP+5s@(;I zpXu{6iPab(<|A>v3RP-_oYZ7klEr`x!OGYH77g)4j%ge|7Sk zS@j(hdaa{Y`b@#vExl4yQKi@YCdR;-ZEWqXH~;%rwXVIuk>&A`8;g;f+(EY#6)t1J z4dUcT#*GQPk<^Uh9;=In&o5={TfX^GHTIhu(yB@DzznGAbG(2*`ruQ;wIGo7Z2tlC zH*1X&4H8q5>OO1_0!0FUcyXQWOVk-z6!T*cxF`fNv`Sc z+<-H^0mAi@y9&a(=y#i;z9sPL;8?uUr#N-4W;!DjEo^km7~70na@=*i(Kix>5$Z{PBOG81(2fIIR8 zk}10Cg}0c>F=$52t}*i14+4VANWLxs%8~Nsct~mz9WGEHMI!}vn!cnADAv;mQS}xG$yvrEq3P zqQ}R_th##P_md}ouA@kj*>|||w^TY%kdKc9(DZ!-y~Kn6sUyH>ye>d7trqDOk@&D4 z5RR}22NO{5VM(uaE7HOMQ`%iY5msr=-_pz4s221*{#eJ`Q;dF0Zyrsx)SAgc!AL#h zYp+7;3Fg}m#Wc}(#9zDEB3+)V+f1m*S%s@t_&GEr5PQ+^dgjP)`NE&d1aT|DXB{-qX@-aVeI=WsQ_+mezjG@7Q@x1STgboKZSm31%_zBSXa_me%9{|-q z_8lTS8i+qg?0+c%chTc3EcgXRDWNucrJ>O~XUZd4>FnuLD^7J5=iTmD{rMPui`vNr zu(xy86rz?9GiNI+3^h^3{h(JlPEb8g5Set~Xh;l3Je3$Md7YbKWf-ejagCWzhlMZn z0sbh?ne&T-d~SLZ(R_||tk>!J{aKwMwR9l<{(ZKI+BOhzn9Tg49?Lfa+z`NrN0@)^ z`Aa5ScAo{E2cyE?tfUDo1gQvn?e9rQri*_W+n=j1F;Qa^b`6=Z!#v%@RSdxsK1qxj zGHzNnbbDmmN6NtOFhypn3L0&!^IcNvNxZ-R=o2`MRGLz$n{KI0>G)4~W_IIA&044I zxYh12bP7W3-<&r}tcZ2|{ZdtGHe@P;3KjkotEkcLhM0Oz%lp^jB*3%*yw+l_FP5;~ zlq5C&60NIQ*nhI0%okug2J)+atT^w4jJbiTUHM~B5nC)8`MMS`ImN$zPuQv$k81W) zA(DI;LcYG#0zq7hpw4J*v17I2m2t8a;oDet9+(;17dEeJaCu+28)X(XGw$PetjF0W z&k!D%Btv4gv(v ziQl`rx5E8Q8+eAQI4}=ivV!;Tq6XN<2o{#gcA25ul;@v>FghkkW77AOf45 zdRW8jA;>I?sqWw{pZSLChJol6MwHuXIgM?H%G`5JktTw{5zAVvk!VXc&)!Pjkq;w9 z1oY%=e4$BY`O5t21y3vbPwPMRKX0$5N-idm8A(?pS8>*$UL9X;eWkp=W;YV$q3_K< zAlVdUsFQB+ES0r&bI5kphF{*cU_LVa+%=={UzfeX$^r`YYa z1x4M#bB=o!;R{OSKqoM=(f2=~vt^N^bT*D44^W)C_HWSnzs`_Jb)Z2L+i3%WH@87b z1X%Q%Hx;~}rO34Lp|O>DQ%*|H)@}Jy@YYAhWH(A}t;f}^*W9e#f?dokd;Xx-gl*G{ z^Cqj5&AHm&n;2CpBsXar{c5eTFi_qSsK`u&S;e{Zk!)^I_u;`3xKuuRAr1%@eWROo zOyT^yZPDpeq7UW5h8XT2)P1G8d?@#Apf~LVOx(`*J$QM4VLC7B9u>WP*E)3wMuN%( zM9kDWRrs`fEWFF|tztQ)u0M9rZnFJ1k{|N$+Uv@oa@W0c*JI&gGS*}{eP_h&iYa3_ zL_;J2bwlKrhnX;cWfY~TPmAWUbNyjoLDo$c-8Df2*zT`R5Dx@D`W%l>M&CPq{j^z= zBx2?(+F(!x29|nUZb+HZZ4gkXu5)?W9KiR|>e{>9D8#mE+=?cV3{vXls>dQzT7T-{ zZYWI~$&iWCdD!=`H#S#7X8mL%4$|iuCb0X=TdcvGtrT!(gdJFA{tk~0PzcIT07(VN zOkNNlfer2N;PLAh2DAd01q^`7@$6_x9J*?MNQ2Ed>wjW(f`u*-*npswLOG>xzsrb< zj#o^ddHf_MJDYFk@^|_Qxmvxm=X(!hi(beqTu!K{G=8f6=HS0k_XW=l8I~va`QU)M#m0MOufgka6>D9O#5Nb*@#22qLFao&RWcj8U=s9&E>YfYKz#oB_k@i)h{3o682?))B=|! zFp#g(!I0uC6KvRw9Cw`?>4x>3e*AAAroz7##1J&Q9QXQ8U0ND6%%u8`~ zyF8d_May$#D-sM6rWjL>Z3r3sEGPHD-jb6#+fLv9JTs*K>uWFZ~)<GVRhc$> zsTb#ng1`bj*av2$Z!w1sWF~YHQd%wp`z~D!HsHPw4!K2O0!a56C@!_?3E^R9J~o81 zT&1Tf&#+2RvSSooxRV)&b%$nfmR__Ltr+~_)!5g`h$RzNP`fGC8Px#M1Drm=d)nlsm zgkjyMn{7Fb+^gM#!i z1PJcVtRYPUfPLAOnMXCm6^|9Q7N{9O3KH;^yt2jnde~2)e|k%u;s6=OMJN5cG%e>^c?45M~810gL|9BtflsKJ=W&AwdTG4 z>iO0Bud&RQlWNc=IOz(diH&_n!@_*m2ZFsOD8C*>6qAWtoYxK0@$>LNvt>gDlZc!im||2U0>rU~k&H%2QrQgCTM=>y8WjdMJMK zEl$TO^HGlFRzIgqMoNBqo3toF5Oun{X30l#BT-_W3TIWin+#wwLEuHgXw!QV8lRo= zu8)vNu)y5ggaLH(GF!p*Kl_4*{S+sVy#t#ef`}5h-Q^fWU?F%E!4Od%o){q0V*hsx zxSZO=_(!khZCpc-vaA>-lMkStZSN*_jonbUTwr*Oc7vUv!V(1ue9%zH+X1fy>2zLi z9?OMJgP-yNywi;BNk1$3$dU!MPED~xa}xc2`Y^BZS=eAFG1NVZ&Lfj%anMQgUR_Hh zXAvgLpHxeo@vBu({h6>M!6Q+qA^Gj8gp6pI+1glEbFFM`@8pM>&-{FM&pi(Jx|^z! zg0nR)qlkJ-q8C!;fX@>X z6p``3PzMoZVPT=60i=!3`CVQdHv}>IW#p%Lm(1?!<6>^|tJ;?G`{c^y;!1Wyqx79Q zuLUm}zUKmGJzBQ6d;@=+$||9OmF6YhhhEnUD-2IPKFbU-Z~TY^xBHc5+A7kQwP!~Y z;CDMd2_*lozy;(R*VL?Y~r;!I&i;%!j>87H~nL~Fku;>af3jX~$TnD27M6+x+}MXsFJ&`_KJNT4iL+ zFPVkur|voBh4lmep*Eh6_&(*Q%8YIvUr&GOO0K8QU_B)# zOFlb3_0sPD$#+upTQradYlS6anu)F|lZj-~8B?OEHvJAEF=F2Gd)4cY;%Jyax_*;} zS(TACASe3__7FxmEtCAp{NFy1%)+tYZTvu64CbGl&#wMdoiH%ouuJ^BXsWd?F+_y+kH zZ4jtfsHBB##;^rNT@etMf>ku8OSXz{THHp04%Wt#!igR$ysg~)e8^@Bd>*LR#lMgb zb6qULDm#N8^b&klzCT7u)6srO2p3YfCq&`UB@9nGxO*+dso7IKaF@kerAvu)=K{R} z$c_MTKCqyc0{}Sj^SkTX5^!>VVvI_WMnn2lB*#GL8eIT>B3f;*5UQ8UGCAfUDzg3NW1nIZh|h!bY32roea-tn5{G^CRq+eqJ`subAA9w5KE@y9`e-=wOGhaNE3_wgTy-hugJ+yr#Q)37OuWjY_t#LzJ9R+94JFip`=%i8S4ZGO;(4MpmH2$3rq=yqG5N3jS4 z(=iqtneNdZ41wY1=uJlj{>blnz9gB=9R2aShSzJo4v&6g{d8oftT4}}00-T%13%+MDA{RQPx;^#o%`OlD?*TjeV)R#f{Q;mP*vQARH z$R)1j<*<*Svvq>QHDl&|M|DrR2Aa?V8jHpc*9ukt-rF;?TKXHrzhcFf2Jr!mz}ajw zRsbI0#3KMDKSOZ^Ko6MINC^iwJ2H`o5=?9Ny*caxHZgR#ro<@`(ir^znEJ|~DBCyQ zr9-+wLRz}JK|xxiqy?k|>267B=`QJ3N;*W4PNh4S?yhsM@Bhp>GtT&N*?pcnu3z%b z7lUb?-y1TEB7bT|67`iO5I48h&}2ZW%bPIHytvlzbM2zqd))E*1N}u!7aN?4TL< zMDx-4hvPvFRjFBbiKSmG?u^G?_2=?jWy@F9l@d?`(UfV)kIVd1)F{!dhX`AL_`SM? zK3=yGkf(^mAp?pAw1xuDIY{(d08l!(_cKre*ddrk80oiZj2JSl;Cwt#@Pp%;M^hYy zcishjD+N@@?DLAIHNlkM0!S=@eU3#Pu2nuq&LRGc&1C}DO ztA;gtx-Bnt8^&5cgzoodCzX3oN9;3N3JFvtn)_Laxn$S@FL$Z*{aIHz&;xQ9H4F*_ zD>|cNaRYCda?$cT2=Au9?buf&eRHsXvP=KlrU63iKh^@ghhU81L;=-7!kd5+_XN2B zz+Up^^n2PRwm<(&#JGaWC+zN;cb^KGHdL51*d@w}fPLod>!XzW|^ z?ghounO&XSel?9l3zW8#&If#pkNhIH6Q$*N?2ssJ3BavG(o|rMG@z-48NT6Q7G6yT zbKIZc2)RN_M%X_`wza;#2sa|I!EVnzINx0MJGL-=QPU93yd8p-1#CAj*@$F z9vLdgcaO|Go|J4X><5k^9*-BYe-lz?|^9;+28e-GQnz78{ z`v>FNe))H`SSFL4WprEqi(A-|swtc+Nc7hP;KC!61H#rMQB5f^KB4}z&cEh84`c%2 zMI^02!P550eMuJi785TArVI!qDkH~l)OWh>ReSw~vl_Ft>SMp0y^n6Sn76)o z4)uul+EAH0K1~t{c|FS0-zX%XCT0NgGjewd4=uc(PSolEK-pWpfdE*OKpZ4`G>Ag# zayjo~%m$nk?B@USKd0BrLGU=!1T06Ny#kRYdfWj^61bzTp{LP}p53TLL=BZhjgE@* z{K*-ejpf~&j#~-6Vj6yDk?2qTDK8IuRPSj^N1&gxXoH#6qi$lZy%$f?b%ge+%BmHD z;i3Q7GLWs%F^x$pNCAf#gPMbaP1a(1&kxRGNkmETR{=ot1md{{JOTVR&%t&g9#+_W z0)2LI((_{Cjb%yNs}HiWWkW*VhUP;<^g0_KQ6!4(Xydv5#0`jP5m?(Uhb*ft6o&kmrNlEsyzM zX2q*va4TGBoqV<8p3$N8{~(FdUvfXU5N6%@0Gz8dx0#0EIEM-1HC}Ioh;ZI zi6U^&gNp${VFlLIptkYAqL1KT zJdv#f{r>kX1+FbZq{g0il0pKE3N_+2S;9R6zy+Y0YwmllOb>xtTTK~yZSW0#ji7bM z#DaagpicoU?1k(77j*;l=gGL>Hmigl{RsgjpuNY36wbh=f_-Hq65Ok7(-#Vcxj8NE z(Ih&wYIb-ppW6xk5F@YnEd2rO5$Sju}GF_qA#8UIo#C zlbd6dHMZFrTZT_R)!+EWq&l7W8i~c}`*H-|og|VqKU*;ytW{U9<@vUEVpStKQzK;; zPv)6^pwOBZ%IKL=PWC(=J3)4k61TV4*ens09I%Qt7Y|W-tS~%D_9&te_80cgwmnzq zmT#@f3#)smJCt*aIaF)t#O$$j|+@#A!n^@B^Wi^rqX~GQJBGk!n97U|to=|jYB;F3)duG8Pd05O zcid^LI3mRe6*9(@`zw=p0wLdd6`E|5bkW5m}U(aY~cSMp3eWFA~u^JHt{n}d;^@}V960D z2Ea^T&cKVcDaYvwsLB5x80`AQ4=jYJK`~pfz%uK15&NBHS)?oIU^8hK8pvbd+%iHjr20~3N6|0hxfqI7gMz*nI@Oq<4Z3b1i= z<7NF!#$>2Gq9+%1x0jZNN65K;iAuZk;_m7`W&?iIV?2B}8bQZf{j=kpr;=_%U)v?! z62aGubS=di@$Xr}{r?tYVWd#c*6&EFSwBdrX?i^-&DWdm%b!JE$Qb(EcDU`@&uN$h z;o&U-7Kl%N4AK4P#sXF#B_?~l=>`W=lFp}mAO2JswTIy|ir=427+JMT%q z6!ovHUm1A;z^zD=C#>ohwTbyHR}QuY@Jj1*$i%bdyH5tDN5SWg{OZTVs?<(FaeDi|rn) zb~l&W@@3Xisa0JvSwB0EET+^*Y%6l59bfk*RA-o5SCi`Kub-0l`ZGsqxOaWk@+`5l zzda8t59>i+-fpj?ur3~4fbmo8?Lk)`j`TV`|AY}7b_A{KG6QI zI#g^CuT{QsiT;uVP8q?H{1<@VmOu1u{Y#s8n?lq%AKC{e<~!J+eye))PdyRDB)IdZ zB#>4RV+goZyjH^)U%>|C-Ki=$2+Su0eDkQj66^kzn=2!=+~EfFzH2!{(ankCMtG1L zL$!s)kv32U%_3l1(_S0S0d7m+73)X97KKcWi2K}FZo)qKl$K;;1^x+wfP5#H<#NtP z>mR5P10+x5pQorfAUkXf*ziEEBJSuB?#~618q^hl6fV=ge`Eg(toe+F*{p09{P*vN zFwXL4%A~)V=~hUWJ>>gaRjSfHDGZF;Q4$^18o~^#Ew1Gd*WFF{vw)l=!I<0np*{Q# z&+0}VlZ&(2GVT6q8w(-4h6_Wt=C5h5w%Eo--Z(P0$OW~=gH!%HUgM!OU#ggkdOXhk zk`+($Z-vMv3|=0XXCd_xUqrWL+tGcHtW58`eO{KZ_6kBw3iSecoz71NicGWn)K%^H z16O(%Tg{^U4;EWRNS00JbeUkc>X!gsZwr6yctQ(WRAIyhwKt>jGKk%~1MWFa6kZj5 z2imVHFHj-E3l7iX?adrT-w(=8sFsC`Di)Th~Y2-gHb60JVpcr0VN}=|A8)qPm<1|iy#aF#*c$72;7}{ zEQW(PnBxQ1d?BL@dM?<0g)Zt6RJDKU7kCpx#fz9z3$Je!k|3j(k-{+^A5YsPm?cn! z_aMS4sFo>_a>Tfw|);^Q)Y63MXD z!F;`acZ;6QB_-Dt7AD-cdm{99QH4Z2xQ&N<* z0|JQwxzq=TIi*Je%Uy_scmg&T>d&?#36 zajPHNJF4O@AQgaxVb2wX>D_@m8U(}w_j@3Sh=Ac2VAnDK0(y-%0gZ2W1|0)`)30q7 zkeW(L8V0z{MZj(5YK?KtP11v~N6)|<9m$ecoh7A`R$?@JQXS!+o>__2D0I4eS3B`h zs$rxd|0dA;(>ZEL@^Kmg{Ja-2RRHdy94>E?4FLE7Etolz+~> z2xY+0JiFzsdOEAuds>wwDeGIIKy7#NlRT5t%v>W6LoDqorjwo%ki3wM9-bDB_oSw?MBI=}H$!2f$0fLUC64vsi$e7_fW?z*6`eLC9anHp@Q;_;|iN z0CY6K6->n_nZqa=7@~nFqP^+uyXP^HpIJHlhvSlr9QWG$1QO+wZ1VPRGw>^A@`w&_rW#w`g#tz3=HS7z zc<>RD`LPkahG9TmqE!?lE;2vPR>M-a$FZ)E3u2vQllBu#i_Myb=9uNcWl%AEhwsDe zUiTDF%}lob%cO9~sQvxkLi6QkTw35vz*thkf<{w_{7fWbuYiru+fZ$r!X}ya%JuEYeH=tO)?rf=K{1z z-?)-^&oPUZ3hVJ<{y~`_h}pz?;Zl4suc%QsSg!ti@JfeqpYd#R?T@(Tto&X1r_60IsmaGnSpdgNkG-m~rnqX+&gRJ^=+0cqYZ|)(`&Oj7^HZ#dS#`q>y@Sx7)aaL~1UVSRP9g5e)B!#eL0+skx^75W81SW!1?b=oh`4*gA1 zhV)#Y;z7RH_$u3YKvboshz;Yg-od(vD|y0ZRsErmO=G6Di05o8t9;rIjkNY(i4DW9 ztF;Aty@|co18=t54|P;2SJMOjl*K<}HJI?Jr^Y4$x9wC|S62RCluJtJD8mJaR7tJn z9xN*!6Lws-2STeFyToe_6eI7G84yVkf=P1rCnwjgc$Ppbv0U0{ic3`sZ==s-HTYUIPM13Dk36Ji3zc?rW^FmG0kh+u@J@89Gb%a(mFq zHF_!W53$35p|$p%dt-Sh81tMGKmC>q;A(pT@NPQ>Q<`C2h8`iALe8{}e7Ye}Ag>k$ zIa{Bzjzzrfw*1-aM0mn=Fg&%Pj-Liz@3?{;>d64%gLlE}zi0%_iv8unG#rpKu|h`1 zmg~7#b^hke`xVW%C8(e)eAKYjlMCYcr&tZ(_#kX30GAxuwqczA!yljo06`&TvKX*{ zetgk?MxmqL{N)s37iJK{mMsQ6b~0bCHN-IkVuWIT_g$T5Ru?bA3%2^!Gq__^&>kQP zn)G&Bo+R)hVZ`<*EIDA#Zb{aQ8BkjlxM`#ldSI1W6$fTwvEl=vsN=a)l&NJD9<_lwfMcC;M zNNp0x0szE{i=V^iz(zYfIN&6LmHXHW$Ra>dWcuNJn6NJ@H%PGd+vM0fo8jW z#1Huh{zg1EJyj#_Es`N*p=VRyPyKoQ3VcS4YsPH&3G}KlC)X_W%i{7qo)maInIF)e zj?Vlx-?!0>`Fx8*G5_&FgaES8tQV8r_842jyGfGFrqDZhl;8E>J?qyaA;6IGZtk_S z`yab@wt!yJaa0kPDI$fH?pbu#hgkP^Ht@2__OWm04q@%A>nYV`TaNb;FD$slU!c?&t2^w+q^0>)QC$Ty(vfmyo4WrshUPMgU6V8!WX;sN}ld1-PR2@d0i9AMAgBu zZ=IRKMxnRAE+TtVkbVn~BMoJ|j{&Ovufw3{v#=VFWZ0m$WCt;i0%T(1N)N)Z0iR$$ z8(@D0Fm1nqZw2BHNX`OtAyD)+G!2%rNw1z?2}SYL2tPybjqdh#LEF_Cd<#e0tsJ<;MKKZA$M1*FJbMj+ zlkH-6GBcS&U-rR^Z=-+XwB(olzT-_nJNrsK*Khmvj+KQuUuD(Sa6VE0wz#-@AgTu5 zw!6SXzZTBzAz(b>CkR|7_g!ep^C_FOXP8E}i1QRD9NrlWn_%F;QBqYNc{Sj#{rz%E z%$`ivg`GgKz+lc7Zwm0@>q4Y4DS6Hs@<-`{!cur8>kE{bV@1z}4e0%F_tpID5@FfztuTz$N) zOyAB@;(qP4d9^*Sw3IEdOtDyV`a@>k!fo})VFOy?eg*{EZI3t27ZtM|w=rlRmpA-- z*?;iZb~d}&kNBQca1MMwodTbf=Eiu~k#&FTcT2(lD*p9!x18i!H;$9!E!-$z!+@9f zlokMZ=1MTLJ1#8D7a_-Z*>=7GG{IN=KwT00PdQb-V|FR6p_@AxyYgMBil%PVWp1xt zaGG^IUvRQT{#UL(Cqu zd5t9RRa0taN8Fu<`uXkRGb00}#)S=VO8}P06E221BJ|Dj4bksBT={_*1s1;-m3res zyX*JfWva-Dq}eCPf9s__n!8db<{KW@AXh8@5;eOqPJ2$RKS^MP3C$lwO{U1gF-Pac zPb+6hTgN*qH>FLOI8C_mTsEXE!L31$;WlEfk|Q=&=NI!(F=Shmz4hTpwca>?oDtc* zdLDfl^Js8eUuD<6F-7!)NCA&d5b+1%bE4-&ZoCdaa@hEr&=$}B}7D6W*R+Ck0Q^_t)qvpW`4q7bMI@s7*_z2 zgZ0r?FEg)1I*50Sk2M}wz;ADr_kBkWQB<1E z(w%Bjig_9Yieb=mlW48W_fgztc{#dbPKD&Y2ECu0$L80%13v0tFv9ua{@rDU$J>$d zcH%m#MU$&%$*x!xg-SP?95fF?6BZW-lX)Y6JU!cfQV|?NZ94SF;-SVkLS|x91_kS2 zzW%&W~e@lUQ)P zgBS zo7GaTM^_K_A?gnfe$k%A`UAcgmWGJi5~n1usS?G{k31`^(lmZM8yH)H`l6t$NO1*P zQ#5QjH@?!$thvIx&_pBJ)UKLwHWy^{4j($*No((xBk$96=`R~cK=ov6*zI5pzmi!W zr(sVlvx#tpLoGfLR3>JJ$Ky!*?eFakLZCn`@a~QPZuHwfkYBW6XQ(}u&#GFs`Nv++ z5+ELpKZU}C?W2L9{A3ue)odV%kVQ*SNC*I<4GAj*$#D77JsgKr zU)av9pc}LL3SrbtwJrnMPSl>8Z(rzk>(Vs|52h1<(6zM7AS7{k?x1``77ps}u5{Ky!Nj^SPkw(o! zA|@tAmYkcL6R=y%fGHm8>+1e8Q2)_T;sU+p@q*6Kqi-PNVFZLz4yZ`K>Z!~oWPukR zZrGJyOtklne_<7}*YKx>rOocbi_~D`sawNVcEiIs$M~1K47rhFQ8(4KB!k9e!qo)h zD!ThJMpYxKdDHoZpA8PzPp2>&vxpHfDqd5oJ%oMi`5Ui5E-4o(tI1}x()rOYFeMt` zbPSItHU6)8&Ql#?9Y8F`Y>g?gcT`L`6~8^_CQ_D&sq5q7@R;$~4PEP2@PP8poWzAM z!5;DZ(}l}d62`5z`&0*u4G0nqj8PO4p3|ts3dzMHUaQWhAyI+eftC=TjX3QIWXwbT zX3P+rM~jLyevzg})FpQUgd8cJA|u!HG zo?@=H(@%SA@Akh`eH(g|3x-K@S&>7pN=&HPLY}$1Ns@9^$AjqVx9W zK3J2h88D}xjmb^#`+P_ZI+Cn};(=S94nOh;ND|Okkubd+YQm?Yw9ydyl`I z`OU;Z!QMXBtaQ?oOOBYHK2kVIisyK&(3>KuoPztW37VhtjQNosn{?#B^~R+%&#LY! zb#P=nLyI>(x(cbzO0G*A+6Dl70@b^C|=f7Pa+)jTcX@H+J61(|D3NdJp9&$PjN*eV?qhT$CJ6rKV z0p_uj>08{z<|ymQAGVX^2L@o1!QK~pCv?*m_@H|C&gZeRRr%?3d>|gA)%3J}_~RU7 zMD7f-L%+h@p|yu$gAESIdy?l*BaI%6fEd~m>{poHsgwX<8kctfyT^Il*2tcrIhr24n0fNvwdE55Da!mjSxHXS=At-<1TX8;w0`BWr2f^M z9vpif;2cJRZWT)&$Iv;J(C#mDgsdY`iJG6t!)bnEMN^aUng?!PjoPjvJ-L6U@@Bw4S>~uDYLbtB(k3}@8_;{t($5p$< zZ^uWSGI*wVBK5Xj?n_dC+%R1tP3D`hBt ztX!#?uI8<-IA)4?AcK~%rH9;2H?Ebj*S7b6X(Z)I9cz*2JU{;;xG zS3Tcc&qlGlI0NDdlRw9#=CQy*L4ES$pE7JAq6FSjy~o}*8Dw0^7-!Ou=H2)+u)=I+ zWIs%5RQJchTVnVkqCGB9Og_PdrFnB>HfT`+I)=lyUS3{Tpm^*zd$jHE;SZ1|0$%5%FU*>y z2`t)Jo^2q_5v)Xjz2i{9!Ae#@IXI{%v%sQC0P0!z=f1hJEPwAzHL>(m`c8srP?x2K&~gzmo3M(n z*>_38VTA&*W&LyRgq?%Q=>>7H$T0>;6Hq~q?h6SD;=p2wYAwf1Hvgn{V#8kx)G#Pd zeohVg68(>uhPM=lC$o9K7v42xvi@&Xec3WgHCKL}wqj;!^3Yw>Bc>fynH(h|cET<` zh!rLPMgQzsn7HNJ*WjU7DTHm;8Ia~OVuXCPl{s&%FEQ2NTkkN@(&BV$6!Nw(UuGkF z+D4!6Uk(HU*c%px}4M2{lf_>T(iDCQ1Bsr5QMT z_|cy=7(H&cE9dTZCJy%BluzJav&#;X2AF-Yd=gQ~>aH=Y-Fbq5>i-dtE@;_=l> z2}C|v<3Jv#Sww^)d_M>%C$P>KlB(N7BXl{WD)Cy$!mDmUZ0sU8_&M8 zE!u9VW&Jizhb7DNPFEUxd!SoER0Oe3qf9V;IiX&QW|;N!kG`9i_F)_I)PsmKFWlKw zR1nd3QE`c^Clq({r@tf7JZWAgapkM=eP*BBvI-Fjexu%%I}W3x;;6gDdeoi*6|Bt-i8WsPCJ%1t}{JOH?2e5QN!*;z?Oa?UFa3NO_hnC@q{-sk2iR7GNa^F5U9Lbq2jT-<>$S zR_B6m`Ye=lDEHLObISv5q8e@7qSZSoE|41^a|QXL}Z%9z~ZV0>fODndbAnERXBa$(;|#tsN+s@cxVM_0LaP4y7lR zO1?pEj$7rxn{?9TPTDRT@~3O7rxX}knoTUY4UTaf1fG^@@l$TUR|m4yXh%^XyFh| zRw_fSx8oyMMg*QeKf&hC7&EJXh7r?5-&0aJd2 zP=keE{LO{CD>Ay|Qu~H7-kYweJd|kO8ao0aI(=Sx2%CAKmLfx53F;e^QJe_Vr>vxm1+u}rJlUvs&m$mYw$$^Y@HyC2;(I$gO|}b7 zLQb0uR&w72>kv>Yn6tE-@XG~-(->*K$UwR_!)D~z)YmX8ZOjp- zXH&yz?IV*gjXz)0UZj0Ke@04aC>b1pPsot=vb_L#QC7Y#Fn5GoFmcr@{UGVQL964JH0+E&4i+gQpyBp~g zu{NU?WaHDVr|b*Fz1y3J=Fa9QRaRg?DRD zqgZ}}3-{x6x7E)2Qkbo~p*kEmQU}|&2CZir`aqnwHizC!g?cjR0g$?GO?LxR27Ggs zQDdRoB^5YYDisNi*r9QA-8+OV6$anQtRWtTN0y7<#>z`3rdW+I`IJ)6^mHA`fX(Ov zlR~gTZ;RbJxk^{i%@-gQ9NCwj(W7h@%DdxlljbRkxw>Q}g~&bcinE(*cSpOv?`B&6 zIC|@V`~BWaDJ)xXz9=pivR|VzwJ9y5!YYPbCxMA3QkmA5Y`Oo2kY>4 zy6J7S{RgnjM@vAekop#oqI5N5r}0|~+O9(rBa*v5!7i9^ytRI>9;Lvltu*-l;nTG5 z$dhDEh;wcwrJ6CEvzG2=fW%fE&cVW0z5y-Q!+9jVU7uab`PU6kj_On|DQQD7y7G)J zTaa&uQ~6K9HUbu+gsP7?sPk}Tqe$Y=MaGulxeXC{bm-n>f`bA?<9v4}omW*otXBah zgaTe^m|)4_sua#rxqGT|sFF>uHb_d~0iRn`12AWxOd?B?O!5$hfF-e^=5#)mIOF}~ zCW6Ccd)3EY$BKVg__Zd;d-RA@zcjhv1(@8z_jw`rSS3q#r!77ROBYX~18a9>goT+uKxvoM$Gl9Zo3ex90HuoUf6ubk|4vsuP#S z()u^<;-vj1W$dc2?wK6;Nn@3nvwkr7)%+RQu4>7);WIFv?b1g)Fic^mFi0#-wJMUI zSNp~}xKa)a+_h*(CVZYy_I z0@V@hYFi$QrhRw8;ALE1aUCO{%GiGVMO6wGz{B^zP<&IoFbP)9+D}mi9TSi@@SDFE zW2RW~mru6y7}eL}b2(`Q$*~kxy>mgVA$Fkg#;O_i!MtDAjp!(2N2S*Ow`ZlC}q&C*oV5^a1$6i|Nj*#WbYD2IMX&D$Cq`r3@; zh4qH@HI$eDzwWOE09pIACJv(IYD}lV@i&S?jN9yR?kOr&JhZhkK^T$5X7KImAWGyn z7CA%7%MSbZkGa98K^GD&r;r_aMU}bhk!b&-2g}diMBg2TZvF&ml>Y`KNkUfKL6eIJ zFJy9M^{&R4M<_yZi#gX&pKAxA2UL?4qSIK(uGt}MG=yRGeZ@UIP^VF`!Vs7uo3|_(qG%mZu&UfYJd37 zXCeHr;1I3txCRX~@agzT_sF9fFN1~+5L60qv1sOZL{0J8^rg*H8e(Ze9%y$5|uu(-*F2u76* z|6x@$Nxu&&oenpna8LaCU(&M#GdjIZ{l!lK3_HnEVf^$ ztb+pmMhR5DH=ntymKkJ!YR$^;52UmCD!lC#c|u_IG542%zirq{@c^Z*Zu#l{zk?bo zZE5v4-_2)Zc9WESk#6bDPng&eF4weZnu1Eyt%%LtPD)rM5;)GSi1w*f2H4-=ruRLg zoH}Ew?CsAkUyF7|aF3ahkA7~2v0=fk;;*wFiO8ig%sLZ%k&@{cesLLtiSY^pv+r}n z&{zSHv zo$Y0Nf{pc~O!GFR=*wuJP4&a#3R4dL)BCAqQ5}dRN}`^M%${S;a#4CG>F7Qkk^jQ!#M11;;5#ThZcQS8Np_h3!wY>7 z`3*R)l_9X0fz+?p_2O)X%zskjJ!rEO^xlAl1S*5pBu0?Tryq_5W)czuI}(Gcrv_D< z9@l2SQFBY^zlsV7to67wCWl9d(JKt}V_^@8)O9yFCOB-MuJx~U!;RW$eiDa^|NS`r zRn63m*}tjx#N&#$m+=b+M?i`^>XI_y<4&fSujj92Y5+ioVQ`t{u@iQ>w0SQg1$-dS7+0uunYuceQSH3wirSKT;~f+E$;cPU-jk3>6$tCIZMe1J+wU;(3#ezf;T?&swr zO+{_@27~v~=@AT91%_{WuO|PdYqJxIIb5{ots1qKCAVmC=y}}E4#hRuzD%-t-&AO# zzzL-}6?-%Xv!I~Y%B&Gv-}DpNKwzoB-M*9oKaD}^hE`+*ne zE*qEhn)2ezV^qm2pIDB;DD-`DN(aP1Bi~yKDot&EHsN&)0s?LH5qa6c$(tE~fLse~ z2_THf^)F2hU*c!;JFZqx0|m5OvN%);V+dGd< z@7Yg|6k#WGGwMI}&Y;NrCHy3>#mOS-srHs(Q-@u(;Y@C)$CfJ?thg&Ft--CZZZ|{Q zjh!q`9n+JazPp)LY3~T@r<~=u$TYKTce`iG!&gB*OV8v2#2i3pdt)X-*b@BBL%>r0JkGnE6_D@as$s?&S3~8 zAl%(tc1mIUM3{dF78nEo)lLW^rB7vnI}ri}Gq@y581AV1n(=d%%%Im?oH{D3Qd&44 zt`7QUh2fP{1*%d<_x_ppQh=2kvrrw&$I{`?OwYPJrA1FLQ+s% zdH0Et{`2ZEYh+Kw9s5`G;`*zfPO)1l=qf!NyR~m>b$sN4D|odE73rq6JLT_qpAn(= zeQ!|DJFN2#t~NjY^p?jD^+UX<*`^J;IUh0`3kxof!zy}vVjLt#Ob2q`O>ER*U+Z;w zPz`AU>O+tR;Oqr}L*CJ!%|b+D!V8Q2?4=f5#u zj(hm3cPb1JjGk`q_eA-TOhxik-dvv#dsH15dBmo?AMNcR{2}dJP5Ex*WJl|zsFmu z!syO|dF_qkK6aDM0Qj&hl31f=h!)G($B3P?;jGpk5*5KS`;DCqvnu~0T zE5{Db}R|mi*&i;j$fttLNfqXwz3PT_&&NIJ6y>;a5ZEit;z~%6LJC9dprBWmNU|%h0T%Fw zB$tXZYQN{+wQE7<@2gz^2j#Ak%`>-?*e&qO>U(fV8ht|pY4W~4dH*br7cIA@hUaVn z>{O9$4rD99IcO!6qo@wd97vJ?Tr~qd5ZQhYjlA$_{q58Uc{(2kZ**!hviD4mQMu{p z=|Yg5yi;*wy1X|;Gvadu&dS21?j=^I)s~zKLNTR8)!8qLE z{KZ;Y*fmO0>sh14D}}$KfU!w?T@Ao`W&~J7S=EqT`+Ysw^Z}$#hxB_H4$xu%E|{&G zsWXd6LWBvJ5n;Dwu(5g`Rr8{)l+EA0VuL#qVFj0FkC_Ig%xZ_n8YtpLOifS{9yl)$ zYtdmbYl3LT;DE+~eG|Z(fen}fsF!@r!QKMg5P&-Xw`{uD^*8qRDR04Qx>4RJ#h5Km zE|D*ZH8xqaNJwC+F>b_|j!UzW*yW8_DMd;Vk~joJ*3T2~=R1sBwXb}vsk=vI)7a8P z=Mxi{$KQin;ZV{C4;m(Gb^8h}%Dm2tjqyF_icTC^YXaZLEn3dJ z?rx4e*KU}4_~IkW7&obOZpRNlQS&LwjHK~eeWibrBf+!fuLTe4EN|xQ+Ji6I%3)w> z7%&%d(#gRF?-h%6fNovMqk`r+GbVUp9!3czMSy}SB8*Z6_-3@N-o$sz|2SoS?g0A& zEO0Q}s=+dawVhoIgp85;55#%f61q(Nw^XwWBM$ISRoYdQ41r*iA%f2_Ffc&#Pl|y7 zOvV1@v+s1|`dNRcneDt+w_gYMpj8u-z`KIIw`h%yIWzDw9%|-iHOMtebi=|$VM{C8 z8+nS7l>1v5EvbtIuhBUpmVSw#(X3-vOe6mvp1v|F%I|A?=mzN&q#Nl*P((TeN$DKA zy9ERUq#FdJK|mTw>4rg+P`Z)shWCuW|MPxxv1IAYeV={yzV;P=hZ1+H0_eXIT-mI1 z7wS<8^Bt{zC{$sba5uGI(|C?2Ouy{qS9EC7iBc6dani6LX?v`W=cKz7lu zvci8TBjD;dfeyL}E*rq}IRvL7o$qa}DE7?v2hj z3%7(;M%QSRZZ>=f8`%;j`W?a-E4l%M6H!TZ+NuW~&%X9G1(Z3Dny)r59>+Qi;hs(q zI6#5+Op6Wjdt##6^I$V zz&7yLIo~!s3AzW0(P0~8x3Uz-^*p%qB#{Lu1bmBc>Q9xBZZ32QhW{YJxDS^R`0r_o zz-gCyikI&Q-(vry%T?6v)_)JAz4UPIujJP^5Vt~wWG{$609|^Cs0chbn0H2bRS=}D zn3*Y3`KErq`msVznu*T zn1-U!5X%buh*o%pRaWz}V;)rjuowNiNg$d8j49NZD52*TX2p}gg& z&uZzYHJNep&#tKq$}ofWr>k2u!67`0HPQIhWwc87f2{#AK+qtStpnZD3y(}uR%Lh0k#;C8jjHzx9|jL#TZ1ta}N zVHQ0yeHQ6>nCy`}7|lIz0%RHYW@`543=Pa|l& zxOuw(LZBQ4s6<6!mHL1)R7xA74}xHW+2LX0aOo7Y>ZhJ%AQv5lY(3m=N;bILAww!w z)t#R3rl9n*C8ZyoytRI-$3}JGt?y=+OLlK((jQSyrf!FtO~On+W{2;nb$lY&H9aCL z%Qf3@3?pK@#&i6CKlI(U;# zJp559@|(WXkGJx7m-2#x)bU&lJJDptHPBq8M2nipqr(<%O?hlnKJx?CJ53!Ek76Nb zmGpBBft#CGXqSxP;cY*P^&oYot+hn2hWlm9d7%m-qVs#hsbIC>Z43YsYN_c`jbfMe zA#R)c+FE*uUS_D8hVx5Vslc;e+90j?ANEfh`kMW8iQ8|!)(UR}-ldupzPQ44B$dkV zDWIA)neg5xU9|h-FxNWU!?T$!VWZ#ig|AzUn;f}#%l(`c9Z<~Fb{;u~51Bh*?sU1hd&0z>P76XT%20OgxF zU3$c2TM`Oja;4>zv&_GDYG}{WT@ErmGk-dA0~?4R|Gh$}Qf7Gf>0qz}ats}0dc)hm z7T|dK--iO!G($=sr%MZTX%`)^EF%dZcmV`DNcxtLI(P+11r_AcS$f;`#$@i?TtXma z5-_Eu))z#~KmZIFgIY`Fts!}2(9h-nH>r9&AQT?2pr4W!em+)@YLcvtQ3;O(LLM}V1MaG4CSH`jBLeZ`j4sv5@W1Kzt<`9rRIz_66IF<{BBgne54#XQ?fUq8OB4BX)qN(tATMy2oZJ35T?o#JR& zUmN$Qb*2Yd%Jk^#FpP>+D0T*CgAY-poca3?aPzBtQ%W$yjaC;EgM+vgC);_Oshh}T z%kMgb4X8)@-&|lJKq>qQ0q(4(@?rqkWT>@w{noTy6b*V6IRTqBdF@TgMJD9P@1SQj zS95>X*(P#vKzT}1lHqwC;XHpk7gfw5R#db(*M96X&bE3@-dC>?y;HRDN%BeVW+Tm+ z(#~JTs`no5-S1u;?bL)RmT8tWxp!OMUiaJ_0p1we74o4No3&cUebmO?C{d+BJ4M;v z@9J8v*Rq()Ru`?huDPv7RnNvXa!xd@!4+cw_#o}5ASp!RQq39An#dV|$J*)qVaDBl z%fZs)a`>eO`1|WUgxkh>&Rqcvr(4K8QVELdB)dqiGrk~*D@(?m1LgBMyKQM$UCw{>Ard6Sbo;&{^ zrUGv!0D&uP0e7Fu1)hRS5nwh8|K6#A`w!xlbT}>;W-hNbb21_PfYlNejg`=WZ(Y>Ym44`P3licq(X0)n{R@3yE0k4S93W0rp~TCD+QPkS-_cal#9|Fy4IG zCZ-}Rg|oSs>wT7ysRVlc4fq9RkqsGzUE=r#arpzcI{9cT0nj%*5pgd4CuAkkGX|4o|ox@J!byfgUQZr;gC&@sG&KzBPO6IEVB0GRGh7}yys z+m>rpEY)KG%&rBXo?zs~#8vJEDVceM;r~;eOanr!MzKoTI1YVoES1P-Ft}KmVt%Ya z$knJlQRG2zlk!;zsoQLHlb_aDttw`kn_`qy8OBr^U(Kee0lVVhl6}~=;(7K*<*Dkx z!d}A<7`e;+=UpA7Kr&3N?*Sld1QT2+nS+?HFu%hbnMbK%n<&%73&{U5aCtFkPyM(f z>KhwDFOCnl`2b7n_f-sV4iSF44nRFfnF@4dYRq-DS|{zsCK!wRU-lwjI&&l>GT5aY zDjW}{rxPb8%5{$aCc0&_46d3`mf4^$JU!+MGT4<9fygovLXE5gFC2woocue=}7y!&A)laeFlbiS)jYm$o z5-@wuhxNT(za6svRw8x@I5C_+2#Cz1ty0(Ew9dfLA~_b|i=UvfNa=*BGb?{)h4}Xm z1E~2mB8*!FG_n}2D!^j$BZT6a2|rf%w5a>ve~b+opg3mag41sM(6``ug_8rapsk=l zt1g7(zP8py_3w+?n$eFvacrpMsWdX3YdRg>j}d9C+@M(mt(DNhY4Dsa>Ef=wiN55Y zCd=#0QCC+9)wYO_B+T5mjo{^H=d_i|X&)x#3_CkqIs`HaiE&>zzvnRt3S-9u?^R=D z;`hXiIME*#P`v(1uwdr48TdN3_xncN&*o9Q^LXXFSfl;oaOusiH6J!nP`mqCk#wRZ zn&-i|(y)H5ohHz*sQr3s)}M$x3FO7QfK}0|8wi3UjzuOdMH>#9>^fIU69eHCTK92V z<4MN90lO$*In170_+k=zwkZmr}mmQ7hFnb-TsG<^>Rn{Dwg&B!^Lh-sksG z8cNqx~Y5WZzNilvi5JOeNT;lw6!$9c{tS%Sj1DK z2)cLTx12p^rhUzL|AK`nNNXGcn9@Q2G*nci9VGxiFG(d>vMr>UU*JDhY#f|53z$1B z2>-k^b#||Qsymg`n2{f;FxGnSlqWG5nCsL*3Rsp((CLU7%;?pk|CsZvYGvd)TSh@M zn{#-%>r@_DLyR(iN>6!bE)`(A-L-0{*AlC+TWC7fz44$>*kYa-0@bAI~G z0UI1!JFli#1NEJZJrrs}g`+f3)VVV~Hee$h41gsm$`l&v{a`&GPtEsm^XW0b%S8(7@3yb`SpK zYx^kpqeOS28uw*6D~-67p3ujL*_--hCv;>O!wcCO7{E1#0&EJ>r(I+NBm+{7IZApQ(G*KpUm>P2( z;gE^{WiD;{wbIMK9m;9Q$x`1I&5T;~>SL*evC-!1Ed9a31H^Erh=I5P%X6H0mF$qj zn)17D(8Q_}s@E$$$yj(ghzQmBmttDOD*Vri4DfH@1th-SYKJR41vgC?%g4#91bFm5 z2ZKk@1^`li5mAYJyPD8_ut9`&)KOLa+`>6>(4Z4iiqLr`=yx=}93^GeMf%RkU;i>8 z5`Xw1V(u%?*gT)W51~Cqqj5Aw9H~HIms_)KM#mg&5s}?Rn&Zc!|e`Oo5>w>_M#2LEouk&-rMug3<(t!tLDta6r}d zFbqjtM9s79YU-5p*m@Hat^p`g9rKcQQ()3?f#WhV+{t82)gxZmyW`u-AJ~1W2No%6 zBE9j9nPfd2cOMvA)4kBuHpU~elA?``7H4vUzVvuuaHPaRG38Hm(my6x#_>A}Dn*|-V`ouMS5~&MCko5iNhK(M{|XyE12Q`HR1Tp6 ztI^D}&3BRyn8!GF`c<8vJpnY+kU$Dy#| ziH-5}D7oKH5VwHhH*qx~D{%Ll^QaHYH_sCXpecTL_wM1|l{zv=MOp4FaK&?fE!_<5 zBev7NkmaQuVy>qn;jwQJqCcXoW)=Qn4~-DY74j#^J&)Zbd~UIa8LW&l)gOUI^}nz9 z_P1131mfI>0dNTR3dSZQl2;@U@Z^9tF1$s-Q<>BPg zcy;HlQi#$%1uCYVs@|?!gN2(c2O~^ZH|o2ffX(XErQ)>PQNXr{Up7qyXjqm@mIriO z=Bf&|^H1a5two~0sp;ksATDEsEO+M0^{WH(H z0f(Sz%Jl@jh-m-(<&Z_ziZ()@e5`}@`#KfWWemowaA94^sX-Cl%({EJ0V?vx*J~3M zillQNsoVFQCst48tN4oZLIntqWK*pn?#^EFTuo;JSY&mOjxWknPfHUQP_{Yu%*Bb8 z87=jB(&h8Mr1O;cvd{{XFcgl|@Ge_w@;(1?DbE$PzM^(~5`%H58XFV;N_-Pj`I zWqyqL-lO&(kc^bAIyw~D;D2~mgsrVDR=zGW3`TDQYK(K8>5+?9R{PZk0%d3INJt5os zr7?e&Z)+ZTZ;QE#W3%mMo2>O*^nfS;6hFY_q-&Y$*s}-HS0JB5&oyXtV9rE6+cBzj zNd~g?rd$3XRG5L7$9tdiZ-B`KV}+Bc$!q&#s1i%ZvxHo65uvaV$s%cctd0A6%h@4n zmH9sGS_l-o2NmT8^;enJJfKj&=Q6wcTxjsyGfm7@@Dfe*VeQsTl_fg%LzP~8R~x10 z1l}*fx^hqO-ufrBE4JWPWHyp5&5^Fpg1Zaf|>);1c9q=9q_de>50*)p7TI@-1cT zj~ZO2g-ptIQ6AH8#9Om;+^P{eg6!8hZ5WNMXV$^nSAOdjhVY)ke3jSYevEJ;vh-gG z4kU*=&cZyU@j!A$z}+>dyaIPeI|qR5*#l=|;=>n(;Czs^6F>|AVhL0>=q(aWM-Nxy zfjSU-Om8lRSj&;W0k!>ck4V9)E{0R#`{y?wERCiHGdVNYMtWk|NtiiH(<`3OavUA1 zRL5Btf9?8Ha5{;6vzFDWOoCo^>8<)4)Bkv@p}&`Xb1d}c+0jM&s{8q=gla7MV)1jl z*0wgT#WugegZ(`@$sDJ};`@b*Pjk)Q4}X(eK2hIa?7#fLOnto7iKH<&FK0v(mg3Zy z{LSI^*OO!zaYmWU2feu2mAqN@#?-;5^F6za)2jTv@+NM5yev_^Eygu;Eq9|hhn z@rD<8OX>>Qn?AKx3hHw%vua<&ohfo9XLRD$p`75)IsX||7mV1Xi;_ed(0UHc;huFQE~g)Alg@Da`_JLf`x z)}E4gQH30k`Md%R2B>!@vGN@a_7m!<1$+^5&F-}ulYyDM0YAwuowG{EsRW%4v#j|B zxq#SuHb5I|(%}%mgs^2*8gc7Qm<{M8gwugtb6rwhPg+mk8AX<`U#q;oFW!aXSL^-g zS@c{-gSJ^9$6>ypi5w8~2Wst~2z3YaIell8bL~D@ckCojr6D*w^|n7lNj@7P!-~+M z+_wTZs!$JwR(b0|AMh&r1Oje=CfK$35`*e$u>9-yR}*Qa&xJB@fK-KAcz>oB|C7XS zCxG;2Ai&5FbfN#!l|b?y#&+khzh)&i1nPgj(hQGkS!2oscxUv zLp+4SJB-y>mQhP!y7~@j4Z;;p#ArN`DnJPL6;QB@%IOQ7<06&i&>SeCHVt%L+; zVg}4HIJ;0setSY0hQ-K;A|DZS-sIK0$MGdx!ryOvr)GL~vfb0sK-_s3yvV+vsI|wk zkJ?wrk1v;Fu=a~_cRO6K2)^hG2k;->w^_wf>q{PZ{JNWa9IN=rO66w0t-C>^9cP0* z(sR;fBB|=DfVPwesXqP|+g&7k>&WgeQ?rqkX1}oLbR+Eqb&08gR#NGl$TtvvN2W6! z4<3WKEl40Bn_zP^gopnXD1*&|3^#X zytbtkf2|;r3p%SvIKvMtI{-ZYtZ~gKo;|7Ra13F~^DV%l0TesBE1 zFbJ$M1|Ai;@<&sMQiX08I~ui}NylW!p40H6i{uK`*-!A!s0w32X^Bv;k-_CMdBbiC z;l~AzDt*f!!eXl*cmN~R4S(tEvEa!x#w_~?fS+&w9@g8}4Ifn_Y-U%+Yr zFaJzPYA`xf*!)LSqZrb1%+Ju6qkRo}p=d0lF0=J68@tODBl>BMC=nl8#-C63hy$By z*g#*aW^*%)i07CyN8rzVI}BzPd9Z;6QRVrL6jEX$qCigU#_upP14vW%Il?yxE>?i} zgB0~CG!7L8u)<^{(exOf4X2 zu>WA$g|_YyU#c}59Y9{(#l>bx$SLs0JYz_BG$1j(b}+3vV2s|3FUl3*UYht);Wy&n z0>Nc-l&`kpea`QPbK-rw)mJ}Utcohp8o0B9GG1HEtwy2n{p$2w`654jdGca^Z-;cw z(NNf^PEdynzY3A7%5F45!&#Lj2m}f|C{x-> z+=u92O3BJ(RPz#VNB>Ow!u>@z;hl6dmVJ?Yorr>{Y^qN`FnC=SK$q4f`&fpwMH6rt zj0)4kg)0rZys_-;?K?nAu+?dTtO&L%F{ccnAUfe66q<9OfV*`e3ku+`FZ%1J)rke> z{TucIY}%dCR8Ra90)AHo0y7#ulhbjDtmgB*3HAY@M?)3}r=Pt8DSKe6#8IhWiWBAM zPC|tNR(Yw$Nz3StAl)t#L{xybFz}!qFeTlutb@#MR3xZc&Oe$>yFwsA5c!wS-)t`c z%7b)bUkug!7nA(XJ5*u!EpX3|dvLy`bqjDicwH>G2M`E;(?b|w>4rQE1eg$XC0!Ch z1I5Cp2m`5wa#a_By95Rf_5=V4F0{pi?v=3fO~7o6hnoZFwt#Se3;lQ5;~t34RN9Ln z!@ho(4uilW%^2Wo06@h{H42cY%avpYDafuT$MAjAB4QA((s*D}O8wKLv5}IBRr(ZS zw#`?;6r}BIjRWTa#U{CLBOgI(qXP4N<1xK5THHVNT!s%plNsNd)$zqv;9`v;XUemg3OCiUtpCWUvEgt zB`Y3NKw!ez{qsMQH_LssWVOw_d~vZS7QNw_J8r&^IjHc-9dB2VS9SZ8gxgs|J(A+$3t3k}x)@iBekBaefH>~RDM?=FUp{(xH~Bb{WD zps_(fAN6@WvOH$`*IMs9-TXm@2aQSQ3y1EhlC59Q5AxS^Fx?hbceyxvR9W4*nk?tcIh$ensD6vaIJ@F7nuFx1OaKe~)+L+oS z4}!tQ>`KEu*bcfVMqcd7ePp+0+a!AF&A^aE_&ldb+6mQ^P*R#kve|!o<(I2f_ort8 zPJ2UFX0kMfEtu@2DpXkh$1Jf})#r2!o0&Uj1NkHO0Xf0tj+KoE3$%*%F@t7a~-G65+1&vO{V~ z23Rrz05k6-#Mus{6m7u;v(T+u?tg5kI&?V1wsIA<)Cj^9b#l>|!LnK`dJv%kVJm_7 z^IJNGj#g&r)L?6_trtE0Y)0w7p?I|zJ60acJLb30C+py5SEUh4C&)?2h-(gm6#Bg(S0~X1CU2ln)X&Larql1?`5cqW%^!%TN#LmFJw1KE+ zsd^#i`4Zfr4$6yR5)8R+`xq3Eo=FowSTnZ5!Y#4LF5qK7mo7;+oh&zo<9UmoLnw$K<-kpQ z*IgZz4|++_Ym3{LTZc}VAfOiLyAe*)c+8v#y1K*h2q6aGVvhxKZ4iUr?~BJ?B#(YJ z=xxpV`DbahzF%Ey;*mz!#!zh{K|=Qn9rOsQxWeEpS!#;1Yj0Hq%Qd&G^rN>!6^Dv; zWdT?$=H~Uf#!1gMRGUj{RP>ZIyeYNh%+w-9P6zWdNyljZv<=^FEk`kbTu3`ESYX-${b|{H7*c0hym1 z%=>Vd3e2xyMMV8N3P>KPIInzp#&*F>6bXcGII$~$3kgWV;4S;=&vakqy4$&YVvrT8 zHrY`Ergc$|t(msk)mVe93?aMLX?G#KNdap%q<7V}FXfQ&fLP)5doU6?WE8A2L~`r@ zy`B>i;ea$=rd9F5*%g@>OOnMjKFxQ2O#(NM#WeU zh9yJ@^BsYKU_nbE)!med3WGU=OM7c_`K(+?|U&+6lA%XiBeA!N|oG}!H84VXw0?y7`qHBk( z8X#Y&75*Ni1!t+}=lkLUO1WNzo&dF!=l&ddpnRoaTShuyTH6F%t)~_cKBa`f$$51Q z1X7a9zRu#?gNqY40p6J+LO%t#{03>_ccyx?&y-@=d`}2%AlK3wVEZ0x)MhmhFnB*f z;?4?|GXI<+5+9v|C=bA92UH@EmBu6NwvG-(v&`0H_1z zZ2G_7nqRO28UTLeU z%y;Qeg_cFyvl{VTgIi#N3kQnzp^cFQUUU}R{_A#4kyb@)1f%f*&*EQDrYXOnEhVu{ znW8EENoI(kA1UxTcC79t-4Ov#?1vEpt&*$?<>$PX6uSvk{C^9zx2o#M@H9;zt4Z@a zoN~yp350ujlROd8Y=)V1jml4ahnB7w5{pk13uQ1^gY~0>R4xAjuG}Or;lc@D3UG z4vsm1I#Z>!)d^VDaNB?|d>CL58tDO}Cj`LnN6($EcneZ2S}#)M(ZR@_@tpm&HS5=n zOI}h&&ipT-GnY$J81t*WOOl3l!TrD;&8~2p)-fL^I{k<*(@Xat>F7p1b7U)SQO4AG zBr69co9Kb~WzOTxx*1`~1ELXA#%QlhztOUdM%w!=H%f+>yeb0b^N%{OMV{J<*H|Vl zj<+ToJ;x(3aYzg$%~Vth9%)THAKo9HW@TaGe!?lLurw?ehXPY#h;&N{o?zn@QPveJ z;eXtP3Ba1ZO7vXtwetgX#OZqp@pTvAdjqq`e-ks%U@V%f_k=;9UNeBC3BLFkV3q)! zC5_=z%a4L>=|@Pp)o9uXFu;#wU=;>65YJyII`)5jN>bp_QK1L;D8M#~Lck^to)Qb# z*UZetPdjc2sP%q;aa$hUefEl01_cH{O3%~gKmsn+$T^lGU#{%$R)!IIR{WZ?-f?ERP`a{duMjZIWHcq8>1^=s@7gT^k0mjPi=GWTkxOHuShM>= zII1Nob0io!8-7;4OIHqYjc~(9EF4_MeAetWHDYG$P2km0C)jJVeoIoz`?tO>g^VbR z1Rqa>^B{@1wk2cbT}UW0Oo@Y!a9W9szsUg66;3Y>qR_NL_?q>Xdqq@bi5F_fklpbr$!Fo@C#V~I5m+I zM7-t;BchVsfX>9q%4!5*zD$!Hu%)%x&zFGGs9ZxEaN$2PML$*r;3V@Lwtg@; zkVqLSoy)+u1EATnwN~0?Zz3Vk(5ERxR48#4B0Y9(>5LOhWZC74V-YbQaZVd^MX8sM zUQh-Xw+8d@tw<=05%6GT`sp%vL>0ybNshrY-%UubY=}o}RBAaY)&+IN)dLZT)zvh0 zUUL&>4MlkB(Z4IedbIMU7EnTjq{J=mdDL2L_3Mi=tQ*)j`-v4r_KH2s%h$8lH1uEB zvC18uXgUkl{>PG5S{_GHK#_8NF~t#YUcO&RE|vMBxX1GeU|}IbS*$@}1(qbaCm}*$ zE(X59@Fy&bwaNLNMpM|YmrMc~2CRltxD52F3?+D-dY^wGL8y>VEW&#ZkkWK{bbx(b zJ9wEiSWosXEPO%*^neOD_iSR>01fm`av-_SA8xJ!0JB$8iPX3LK+)K*$RZweuI%gn zjM3bBH{OU|D;CFSByrJG!K^#=mg1YG=A3-&PxQsQ)Z6XWr)=P?b@o`dsf<6~Z!~T? zSo|oq`IAN{=At#WhLWd#_~WcJ^}Ph0@$&=MlMJP72Y-IIMG;$vE7Z*tSY{rmw(Sr} z0VJp;!3*$AU)(aU0YYFG8I|GJnGo=L!?nTS(K>?Vkz^V85>%VW!MVkShfc!10{d}+ zew7{Q7?9IBwQEX+N8c8biHeEPGII2km7-U~6WpxYv*mvMs#24jR{hfB>F@3VpW@H6 z)3=fAm@PWub;2D5YzyP_yyPKQiS9$`gIr9Ml}@OUF@lpp$-u+xH50>VR#Oefn^e(e zCCUP375R}cPEU?6!KG^LE@RfmPyRAepNJaO4vvUeOSWOXt$owuSUs3#7J^tyup(3R zWmu7r+pY3Y-iyBy#z@l6@x;npcjDbjC@M*qw zeg^oJTyvm?FonxjoG&r& zKnNC9`-9;Pz%B2H3HOl ztG(ogXm4?HktR<7E6XmjL-<#cYe-?+!IwT6j&zE8Yuna-cZ1eIAFe=~gZ3fuAO}&` z>mbULqW~Q5!^ZA+>4I8lSRKPQB7qx0J14T?n41EZ3x1b2e4%G7rFUy#r2EfC2L~-4 z+@k7|goExcS7QMy5+~Q>G6cRO1b=R|t43pH6&|A&0avp+>@ugnGdqYz6L!S|(UU-= zNXIHN3Lbw4;Wz0IeNz6!(ljO6FYMcOQgl<=%o85;W+~QH@u^omj+#8>H{``1avBFS zyhAhtkiE0g7kW+USF#AIlhoWv7q*85HJ6eVR7{Jsg);}`Va2D3M=(ntLL;l-8o_57 z1e1_1E4r!lyPsxi@V?LO_n-!=;?;e)-yJFp&zf!FJ?}P&HLEk^4n)k}UUWPZYB>E1BZEOs#qz521A$vIP%<2zU^$@5qk@*) z6q#QFV;Rr^!B%F2h-z@?tBw|%Q+jP7pXJm8ufS_kVkYG0ggt|+B8F39)`7t-a&qNm zIi4g_BR63$Ub<%`USwioY^;v-JgsKEvG~gYCDpAh4cj1Q%v>UpC?eL^cEaout>9D4 znwxqts6hSriA~Ej}!nEIV1!L3<`$d%n7EMyP$+&QhJVrd#__le_@KMJpN^Ai~)>ItX3LAd;qZ! z$kmOAwN(4^L6}*DzpZOOjNmEj4Z{+qV-Z7XiY?@zPCX^+m2sW=I>Cz4ppYQT6TW9E z3R&rD&7;nM&cXPPBr#0JKS_XR>-_Wj?qU&ew*R^P08#6| z%#(xmn@ZQsG4Y@UVCDi0GcbafBrb2BVVF1=2E0VY617Gt*ffxj(IxdfzZh^gTP)9_ z{7XUE?xo&SW>MYGRSjc&d$>}zF&AwsEH*V)p*|yVUWBzuT=>%_?hJrpn>5? zC_`g#xrWU|Ih2u4D9PjcHnM+>|HeBux#qp@i7BNq$pM4*r}#BG*W^iJwyBXT=j>jP zH!*z0NKGQ7I2us>9Ko9BwaE1wTyl*hU38tI&N^PT6q89d%jW>W%gzxEYG`b9oULKR z$vx^gf-_8bz;pb>4i2h>FcSP~d5qBJwyiFTNO5xnG9GMzw;aDU+sVJl^B26B0%;v; zHM~sw!H?nE)|>oSIJZ@b^&lihubvIKgoz|6cRmM28|~rxp*^6AKG*g5xSJRPA2t2` zug5}d`93#9$Ld@^+n8ek09xuT{x=8d)<2pCSw=o%549HyN3Y-P-8^)3#Kx8w(PT(L z3fY1gh^!T=>5w0(eP9T(rreDsKxCkeL*AAl8qUu}r;`!=@Z)t7E*@fD81f6%WR(|) z9lo0j622RAR+d&mSQu*~J3f21yso3Ov-7hez6*2u;q4d}3hM|`LYR+_m3|!FzkMZJ zI4hZZ_;W3_{R3W|w;Hd$$4@V{5k;dOyt!4DKVB0-;kiScld;K!wyANvF}}* z+yqZ{C*E9O>pkjqRnMFJyr^(aU({{Z7}oKM~N7g{%1?EH>qw`9rEx8g}3QxeiDDkjfO4Ii*`m75k_j*7%TT zo92J6YRvYZKc{=@F+iQ$>06-UkU#wNcQhRc+<1ZlgKhEvkPy7U)I4sXh%g01+c)}j zk{Ee1kjG?X0}y^Lws+F<@}=SfC5RNL&(t9}{z7=*qoE;g!GvBA1!*1YN&4}HYf81C zz&PH8puw8vcJQf$Fr$8$Lwp<;k_$=iRmQST9Dpu_K!UHc+?U;d?vT*P9~@yx*Bac7 z#e#!Z$n_d zT^2dw6$&=`xQ?Xy#+pYM8B~!NA#7pxk;Aa1Ja=c}(O~WXghB^a5!puDUw|?+Vm#=* z>}7f{(pE%7#Magph+sj7{O(5oD8?-E{{3W=pWw+{bvN@Kx~g&N{>xJR(t-TMYOiDJ zHXT>KKQHWmR{e3fjT{(dnGF`@J8}BaMwkA4|L4dnvY+iy-dQTreA5&MNta>MJ6b8D zyX5PeQVXi*124ywp|Zy=*dv$4Tg!2E##1)}*M7&ZR8p`Q`LHV_NItZtp-ukgDyGQ} zqtox})}_~D6ach!2UW&dffofHO^O&ot~H9Ajt&`KZe9n#wIu+!1wK+CJ%UuX4`4@y%A?0X_$fPmaB~@d z&PciRDD|Yi{xiL-RQX9V(fzhW2s=XoIjOJ4p<$uvj4#j1!419M+l1t{*#OnCWo%GG zZsld|j_QJ)Ptw-J+V_kx!M)f(G3vq}SA&L~8wt#ob1&>2)@3aC6~y0~ejUELSNpbr zb2nUI->g@3HrBIyOj+Qu`*5=sd}kF))$X=Ymw&E{7A0aB?V|aLGTy>rKDgj&?Mc+eA@IzMCWW3H9 zfjj8+pOD1>5FVh5cb~hC3HMm-zSBT}GUmuZU{3D8KvFGec>n!o#@W(^Xi$3}!q(5* z&wJmzjk0wqeOFFy1YEoI$*?7uTo=YkaZ@{uw~mo=De)+dkF}jc&PBV~Jz^XrJ-k+h zByg)(1j2BwQ@cY z1An0?i6%r?AqRLKPs@M^8xxYD@WDchi2D z2egP7k?7^({0@WY4FqiZy_*4pv_$V-NVG%(1W0pXi#AJT# zvkx8O)o2}#kkf@$_NcJ~dGV_~v2DU3TAvMKf4|*u@*E|}HW&Z%!8>mu7IZGoWEu#L z&G|lTTANw)gk9Z-L(%Ri&ua1_`SUweJpZ%e_+{bbm7}ETX@&+0>K%hCzOC8DSDdqT zcYn_)R~n~J3fCZ_jI1&P@P&_oM@PWjS2Qa~Mh^S~&RJ_B%d%qeNK0LvEyqO+ zgBGBe!NIQ}K2i^Ang|u3T*;&7p#lBAA@D2)+aJ462>wQhTl5b^w+Zfcx1}ftR!Wi2 z?s-sZ*459AxAMsO+C^(U6vx7N39t<+A$5UUap$Yy;SMx0IdU_>Ynw$eP=b96{G)lI ztSeUy+0cEbBuBh!BZ6Dq1U^Udbnc5rNiM^0YyrL!MhfV;qs+7gAaKNvHR%1bHehqe zPRgYXCwB<5WgtMe9*i&bz;^ZTuku>VEf87=I#_3Kkc@YmV^in0pw9=%R&3Bopw$(O zo5N=Ikl5LkELH{lwbRq(ko3~P9C2tWweq!`crstSJKt}PhJ%SK9U+b4$eiB=mi->6 zRLXa_#bO;hs_~W-nWcmxrIV||Xv?$S#kKwy_Lw#M44=g4m{E$x9Xu$mW92X62MwRt zPfqOKC!#$^Q+cc);kgSn+=wjS94B7;o;t0&J5s>hCHj%$w^zGTI@p9zGFjCa+Cc&7lck!yln(qqOfsr%ux7m zarwYR=VXQ}-^@8Ylbvb8a{K zUBx`sHi}aO--Ba*4u)6M^*J7E)oc5bF?RRQIqG$_ zC%-NmRn5eC9@Si;ockRS2lcg6QiE&s*}HsTUBK}!AILv}tt$x{yqnWOh>^$vixbSP zbUrIgxHe1&q3yPx#$m&fc-?~3S$8DGVt$;Wab-Fk%k?SIT2{v=_w%7|8l^+LI4FBRa6yrvtWz8y0IM0<#Ts-xpjbeMa z&T-J`gK+w6^}EgOiP^tNW>5Z_t0s9K_ed7=KFyYJJ-huzIZKN9SaZCH;CXF)meQ=l z201@*Y#B=JYFwATNKnA>Aah7a$SgysAFA8Q#wZ{zwAg}Gd@emUIy!XbEA4p%XzfZF z0OwA!Oy~GLkrWm&XrO9kH2>XQXs;nLSlE7|p8F%bxo9?6qd|SI*|Ck5smpnDlNDIL z1XLG&9ArO8uH(_9rc&UamtIV$SD-39|ccnDMsF*&ER{~Uc7JkNI4a78b>>GmLgrZiNz&T z{^rD5&VBJt%)@#NRH`vPiP zmuv{Ly%_&~(rR{6ls`$chKpQyvPirBmT3=_+N%&M>C9To&c3Rp=7tw+`B&(;f*t}0 zpe08_tpr!xyF3m=r~pQu`e3h>R5zWuRQLGPkswRRb?x{wN^oULV$gC02;3Gae=361 zB_#Z~<5UG#>?BA=`}*N|822;v#7AsbFa1#YPv;%@;6_SO7=%o2e}BqDV4CG`{2%r% z_BkQ`cN=Hfskka)d|=!!5CyqAzDas7ePR%9J$V0GA~n|Us=P@MqZ={*{dFdhY&b50Y7S05ceCgU z)FoBqNO_T(?YH=w#9-4&r6rm#$R58%d* z;4Y`@R25iS5=t65jYf%z)MhtfxU?hTT2rp8_(ZrynXHbC&yJ|PPn4-O<~!1eja;l} zmvzIm%*NTyt2XMV^TzKe7iilhOL`{8Bc{gWY9sra(p5C$*Ms$1@n^wo^Sz{(sLX05 z8V%A!Hk+cJv+KgJuNKqg^iH}PKQj`#p#J9J<+{4VDzy^txd@s5fXE^Fa{~a!_YkI0IB2pCeii?o5Zmf4)RqhY7z8l9Kj) zK`{u?A?fTSU?BgGB^(&|07CUxAQfwbcZZ`{+M;dh0C^L{puJUCL*Um3+d@(f9b=-- z*U!s?+QT8Iqn|U$r^ozq>TPBQw;c;p^G0H}=*{eI5ru*k(Dhj zn)#TV_rvbb5l_fuKe!-v%lT{{21EicLh^=zc)gyA;*Zs1>1I}gO-6oy*_X{RXubS_ zfza@y?v_#2tw!(D?``rXXaZAy9KD7T6~t=3`TRG_Fu9)iBrw-M_f1^5G<$OqhVhs= z26}J8QDKW45xvbT1m;eF7doDl2-1gpOI$qBNJNm99oO?a)=#5b17^mL5X7LAtwn z_W1k1?-vh0cpx*^zV=${taTkcDTl*k-r{?&R}-9kGpfb+HqiHRWUD))USw3E^Mlb#z1tVtt2OnPERg`LL$@9C052f{U zO~e|)Wz{FFPFQ;cR6xun=HHDCs1<2xX+2avd52$c=^y?&+^%M(Z`SejZN*Rbh_SG|Faw+&H!=m34;(CFc>9weUW=hyuz71`Wd&bK^7gPp zC;%{A^yVRvAF`9aP18qmTKQH5=Q|L{H$*7;$BzG3oph7tEw>vQ`$vH?Icf1KKezi# z6_lCw*}3b2ILXdz&BI0kdd7I+B$JKzJVLT>nN;fsS+BEqV>;K5okOMuJO4{ggXIvx zh0`woH0d+YeLBaLA0vY6H2sJnapYa(`LHOP9l{mO6g=D@uqOa+Jrtn9M@NN!gW}Y_ z28uK}2bP3aphbct%R9goF(hwxD;-z6#m~kyg{-@1UV~YeG1rOS02+m*BXvSRg)N1S zf^tX>=eF)r#Lz~q(sjle(D6rdif#&X zFnakpjb}U}*a-t%{$7soL<1)tntpErAQtFA7&QlUQ`|Z$HDJF$uLBxA6Pf zP0&;zx`~yXsdRSv_N1i+<3hp=nw7iwu%=s?cb|L&E`Im&u8_{2bm>Bp?}#e+0s=v9 zksU9>zmVGXQCq4IBYN};B-3=<0I(687$A3Gq12=mKsQ;4$G@ZrcG${0Y(lD7-@0*; zM#`&86efm#J4k(+5zELs+n+io(RFecySK(G<64{6GelG=g?iVAKZpBE3+2e0*OBi+}g?qDTJg?3q~y zxY*ch3_@;pbE*deN=iCGariutK_SW+YOJ zPa8bfy(XH9{**K4;i+=5I}W>@f@q!Dbh3I!*~=L{0uds)qNu1jzV@0ATKXMu&|pM~ zA6?;X)a(s4zVs{~*0zIIJ^0h@_2A%L^{c<8a^tRl_&S2@#u!Z7urrs0q59v7!?FLo zqP-3IV7nmNp31h6m24b0ZM>x5DC879V?e@XrRwtRf7kslIfoaBrv$2^x6P|p__S^1 z)+3l;8h8#wO!qP9a6PDPwTHt5s-nSrb=6<#h>o|6U$*&KGTBJ=&O5c||RtXO) z%_(=KuEW~QfuncSROvBZ&X=Lei>TyadTR2y!7Gzk&OEbs|!-^)}-aWz(uIm6OKEGG@sEYPtJB=Kob5kdGjBv+l11Fxx_*P$1aS z{0D=WK*6Agji^?y!yij^7*kdApcOOGX@Lu8ZEZllg$pu`L52=zlNXrqzB1D_>ARd9CPZ3UY&2&)E4MMT+a;&27v_AM=6zZ; z)?ljM+M{rw5}a$Gtgz=e_Z;Jsate~F1efZGDm!N!SYc4W9TO2~UcX zgSqv0Dm;qhD0z8Xdp{z5`HserKOSQ!6d0|ZO%}E;(3fU8rr@xYleNftBo@{t%Im6x z*Ctue^Ltk#dUFkrAdO`uezxc`Z2JED*0-6mSw)!&Qjx55+T;5(`&+O>vK&%o5-H1<`xVHe3C0#&H0Qgtn(a{1i@b!ob zxUXrXDiMze9Tl~0380Su=Dv2!O^|@{2Gs>nu)&y{pfaJrBS<*1$>BxlT>WwQc}9a& ze%Fm)Di13wihr+6x!O0E=`$TZ(cNBNBT1A=J)0JJefH{|#P4rB8@n0qz+XOxwAmf_ zcIFAT_g$^5!Y{cb-3-^9bQPNQ4$RHk`~i{A>8!Ahe=rNzUt=Xjr7wsB3DB-GAS{QQ zbkI3enjs)-z2sQXgJ7D2tz^liAgu_j`?@ManxSd?NDN1M>V^@Kv*$2YZG@R<1PheH zTPP^D+>9F0L!QP_ZBV+<(66dLN=c9He`Cr1#8Ak`$}O|-FsWIRlh9U|4lnud=#^`u z3x}rUG~?0EtSmBe0by$zTf;!pDJ*gD_sf*Ovst6HrHc`}qt(GZnLPQH<}q&5y5FLl zx1ohC{LM+8Q#b$3q^{V^iOSm~zgF9`PEx4#s@ys2Q%#T=9oRzY>>NnN#oYBU_BN|3 zk(lXCuC7h=&-X@02uIV^6W7ci4K`(TO27=rpm$;LI@EL>v=mj7#wy;=2 zd7yg+b+ioI5)FasU-Eay7_nOt!`YAlqPf+Q$o+`!d8og$Z z+uC?C$^8XlmRKsu;lij_8R=;z@|%@=9!f6O;kMpyJG+;4cm(G#0<&rvrBlqlV^6sG z3;;y)*5&-b*K?9p=scm1&i@>bdUT~@igS@U$WA$2=xNKInGTq`&~{&9rpLioa`Yac zD-p+9hfGcUp6ef1f%6=^{pIMS^g;m0zrseGDJi@XdLbnfa6lP8F0+H4(a{Rv{BMHg z9Ap&~xb!Q6v=MXkQV$01?!#+xcr*rX6t(hIg?|i3vZv%cV*=P?FV<(_%f!CN8x;P=!))#WUbRuC> zr+LWk22OplwyOD;xJzyq=IEj%w%7;9qcy+N28O9$q!ISoTp1H9?U+83>E_vD5Pf|% zf~GxM$k2WO#*p`oGu#00=S2Gj*yoj^JyE|d}l zpxRrEKy~&)gz*j;35jZHS~x(P7=e)eeO`q`p-=|?07kIa%b%vRWYGV`jbXZ6U`rK( zA5{u$Ye3wfhmNL8db+OtQ_B>9q{>d);{_3j~lE1>{J3CaHoo2cwjQVtV}pR+&N+{lZ>h-9;3JzY}dy-0*2cqrW^ zo=hv09^l&m8LQn&WC(6JvW?tdhZtZZK$*b`GKS9j64+0O;p*z@(kKc(K0W|oTIwKy zRIvxh1oaQSu?!Cr*4sUeYu0MY*yrc|a2WAcpMI^(rO{je!{Tz4hr~c{#0;Mzch#50 zdgb@g)32L((Q|MHn-;CiLqb)XJL8_9Iahu`;G=-X(P;f38t~$+IV>$IQNesg&{5>S z0)F0W>K)aTyO-|;sDoT5^HQh0Sa!%nOeAG89gt>(e?Q|hAs?(E`(g>;R-0jeV+&j$ z`Rbz=T5=1AQ0%9IZ0%4PsAVpp5(EwkVqE|+e0h1|{s0m*c{7X+n7zL;Al04#!YA#16?!2JhY0~$hiay3RW+7!;!d`hUZ0#5nUfOjC? z4k(aH^vdZU)P9@s2CVA2t^dd|k;_kT(y7?fQ#xJjt>FMYZPVbKLw=}hIjE1*=TD}i zLx*AR??nX!tTzTeV%40bCr^7zPsC?%*-QGyRlLjiaSO40fYS{wQqKIn3HsO=yF1;t zX4|TZ!YpZNqEUPGh~wQ`O1#G=d2*mw##dv41vYr#gO}k(0yeZ<1Ayyb$1WD)i2|Y; z%&^qWW|RX84k&17(!)KvQVR0&E0WE}1XM5>U|Oa}>%Kf3)B4pVIX_=(B_y$dDxR3v zsEVKBH;klVr1B>!z~qs)I2rN{TbKCG7-GNrTdk~JU=~eq5+*Kp5BE0cJ0#x}jCHEn z%EPEP`M4`xohv&6SJJYRv=j~92`f*6Efa>?`xDaw-w0GVZca=Wy>Z5*tg7ABvzVKZ zlF#osvfKzSd7;lN9y8?J_Vy$7I|ll1>tFbW^U|~oEK_5a-n`S*3n3^_L<3XQ;l)J= zVqZ;a5F9ttogH8lxv>gN<$wik1ko7_sbCsCC_89U2i|tR_dEG`}Z%r|SZ(O}; zNwo~a1YX2UEPgZB)&7v0Q1|&oWSRDd8yKu;^72GnVrc&v)9ktD!gin_?m`m%CfM6~ zhmLKPB2+Z_v$G7jH`nRxTF;7gIVAR`i1N?=>at3EGi&fUUX-UrUoHAr|HPA^Dc^@3 zlZODqZ18bz&i4Qw41RMmDtSerM_K;|a!M%ENL_4=F^h?bv9V!3Y$X7)d6_e6sZ3XD zWzFI8b4PJ23>RkjyIPnFly9jg?~)v*Ugj5JaVE0_2#oG(Wi z-@|>vs#*^9Iip|a5HZeRzX#|i%UffZqBdi!)=D5vTXX8l{ur7cw z$)8LJvysYDC} zULE3|J1SZk8%umd4lhGNMFluaYe#!~`x_Kd?{k|?aI|}-%HNeEC6{Js{NI)QSZeh@ z5~xe5aWlYsf!7il4q#1}(+14Vd%D?4`&@T(Mn?7(1WgrU@(I*gG(H^=R~k(~Ma1+H zAQnw7c#VOG|OGFn*xH+eZb)FF7!x?2qIq zWJvfP4)sF#GN494+?<8v)fHfd309z@DaduGv6HmXX-O%_%1+q`0Pr5-)fq~#1mgZc zFsh|DDqly-3s>?$H%DW;;QU|F#QkSOb~wf%iB1LV@qFOKEn~M&nah# z)KchJ1XSGgIJmfgxdpt7h$N`R*2HWG{_xlUwC}H=)HF1>iS#;Bl^D@L<=kHSEM0;D zQKAqGRdXa5282c3_ao!*mDs^F4lezF+#_3k5C$$7#UDuPN1g;-_7iy@@&HC><5!k| zIJ%DA_3N%oTf!_w`q%3W1*18F5sB^OM z=2@|Am2ZTsH)_uZqO6#`qMLugdB=WVk=CZxF|blyi2LJ))67_z-}^f=Q{U^swVtp8k4!Rr&6~1E_po> zyf4*^+n@vZe7ZC49e9HjawHa&Jv5 zA^iki<7yJ6T{WkG(@E&&d`?cxrO=lSw>Mr>eXhQeYCHV*uklI_lM?q%nyM8rHBMxG zUOUY%LK*;2*vLV4wcg_G(DHmoN%@iJx7+QNFKT#U)kB$gGVk7+4~Qmv>fHYHZn?yi zTE)TlIz*@OfQXz%Q;UvbTTX?NgQ*j!r#RCZe<)%oEBu?fBMlG)1HBMEJv{(gGJ?1{ zIZJ@G_t1H7IfS;G0B|=7XjQ)wS=auwnYo+K)1}9Lc$YG+cA@lFOfA4HOe|{YaQpyY zl&CiU3BIEB8v#K2i(X)|j4>kR49b>OAF?QYDxOa#boH_(xpgV^c8=c6f+fZ!4sHF2 z`I@3wS>k2gZmKUz2FVsROyb3xe#SM!^kE{YY1#U#h$l*h&^0zy`-cYb<$(ppX!7jY>XR zu5(;PLPmBR?;~lYfC2UaG0>1k8jZ!|0g8>hOavqMKc=}Ak;IGvH(9s z^vS@Rq6fuc2W*x!#Fp<7zzShMULtKeW(*gd*px{zv-9s=>g|xGZ_iiWxIa9a6`iRi zn{j)>=+*P1k>FxCtm^8~YR(1YbaXiLZhiL@u3Grqt>%M0Zi~Rt(~SD(f9&554Wrw! zKx~cfvt-g~2xmXYz4h4kCAi*IT@H!!E_q?Y|8&C7|5E409}lUQx06_-!>{pMx6`>8 zQQ(PAT)9tj4ESl06>zQbUNTJks=DP`G2 z$axKWZsY8=Sz~|QMW#vmOt+L7Xp*KsmKB5u@e5;=$~Lt{O)oM2Hk(&`;ZovD*xvg4 zNe~`6LKN7IflFra>y-|81SVmCK|;hbU}S;{yCec=9-vPveJ0@0MeFc?BEe93hoyD} z2Y~GYI~jm7(!I7>5qbhf2>>5%f>EIo+Y+!yY?;h2za4_T0Fu|6IoMLVEZ(4HS%WV zN<$jL0alO2EG>cN;9wnKq!ZvqPWmkD9~~M>1{Q52ZC;&h00@{C9L)(8=};e?_tinN z%2r&+jVpAWtinNJ{0Sw#6^VTfV^-^jw7FF+u?kU!VvGyx6E>|zEfGBK6Ugt5suv+O@tcU)ETj{i}Z zRg>P4mbOW)R0+rxOW+IXW*LcA6uXl zv0>eOs8ooDc6wvx@x4~F8BDR~`BV2)1!i{m$2&=H7Z>@~TW@rWhhNURO1PU$g<(sa1xQJd7|+6HwVfsvyx{7I@@so}6x)mTa1;vXSbX z1MF}^#5EiikuY9@#{XSztJv5)ctDmWshKo}VavE+u-IglJzFt8|7^r7U%%gS{eDeN z+l68Z5Hw@IU)qk!ILudLP5&5pYPX^Pb92L?(qAWRnvtMg$t0p#|AwTkK(cT7i*VAS z_Q9@AQnI3H1+?QJ5 ze?A`1+8!I8^kl4ir!?+A$dDt3S@43A$d{$7=A9O3mdD(PI$Y@f9xF*ugR38IB`L?`QQN5Q#yuK^!5FA0N z-4;M&x=e#b>dVY@ofy%;{K^ZNFVg1)xW36_DcvGHf=?CLQnNM!n3-TynmVb6@Znjo z@(a+l%fq(Urb~z``-fA)6!zWm-wR5|5HoK~{-*d_DM1i}x@F9eUoU)P-ty+Wol87u zw!bV#Su9~9W$^aYvmlO$KjjiUYc=ul$er^jvA=xh$^+f75k(u3-dVnqmO1(;8dhHA?VMinYz3a&td2-XgGH@fjMy;-Wy>)_r3nDUx}J89 z#EhUr5dCpFRP_D5oE;RA{J@HM(E()CMhdy!zA8k0U}u?mrPWk%Ik93`3yb~Xaa5e$ zRf|cw*igPUamH9%!rAQVxmB#(Z+BO@tFv%ySl@4N7O3;sL{HtvPVQ(rp(|gP#G>S> zMEy^pciKls+Fe$Xq_n7a8a|haE8~B<&~-@<9;!VSOS>L!sy&A7yBcBa3-x&(qL#Kt z6V+XQB^(PCC6^bjT`3c!_A`1-X38T&M!`MN3%`e3l+=v>r`0?KO4)AwK=kV44RkQc zrv!bLL*Sr#;8D%hJBl{*va{-cQAb=;!5Fxpq;OoY_{(c!ZtE4FMc|n19F30GF3g#- zlFg*om!tCvDyasAM9qo3J1XB39p0eoYyLQ=4_}@OXeK?@%{{pB*cjM!J*py5BQA&O zjnf{Dc*iXT!*w@2qO52Y_AZA2^V}PjzB*?CdV;;QfCY*f+vn0#_fAR~>dPU!&V)6W z+%;d0QiC|!S6hs#SszA;{~a?T2+)!MLc-3U4>?&y`Zv808AxGIRgtdyKlW(kOUtYNZ~! ziWn}zw;eCc`><3$jr<(Pp_i27S5by>eGPHE&QBwc^_!ateAiQ4ZyxXR6{W^F%xFk1 zCToqNrDea=G@!S&l$YH2B4`KyuQCjVoNs#5tva_qA)m|3K$Bagb>N8E0h{LoK~G>IO2V*urNj|hs; z2iieQfLJ3sKSe$^&T=4v0HH5J*e0~zyU*$xmdZiOfx|}t!jM(3947p`sA!c@GEYh# z?{cvitNVB_@6BS_&FY_k^Z7ND&Dd#Yebg{m*?wNnZRfheP&aYDp=oy__irsHXKO<1 ziq3wxp)k9>S?SZ3vWm;wpDUGx;c5@BeYQ7N1~MYlZZ%Sml#h=7boJ^nkB84g=~Rplu& z(j6tYBk=g4p~d6u(+Z9sNiKD3*3Ybj_`duB_DnFI%)J38-+ztvZ*Anf;Q7)8A2`Bx6Xgc8q#4_@ zg*UadpAL9C;Wbt9Z8vc_HJyoK&d96jt!hTKXS?-*!jt-cD!<_VU6^vFvmYt9?RZEf zsdhuLh4Wgq!PN~3v+%&sok?P;F=^{wI+p|#K8k5+g$CF(0QsJ-0wn*ukPU2{ zuL)(LL5!oP0T`LNarhOOmTO!HmC!>z#WXYBQ&SXlrKQU8U!tBfA6D`YCtX7o%o7)l z_if+0U8RM*3jDapX6E)7by3*NIcD8yL=g+tX0zf>A-n#gSuVQ{O|Eju-HwmX8Fr+F zxG(!}-=|9n!baY_b+b{>QW^-z$kZMgxRJ~MI9;wfuzPxW5--?~yBtlJ{5OoZTZ}D0~&!CnYq`3_>(-EZ~0??b)L;ipIRx-rGK?nC@{YoYmZ?Mbgqe9&g8>CoE z`Vj&ZFum*pWE=1Z17_N*dfQl4`kQyIgTnHjT&?|Zt5H?nX7@+RNuE+8QRlrGeRbXE z8@mnkV`d>G#<5!~o@w`vY>RsJsZK*i;(qJfPXuv?U z3*d8eVmQ#%@!bsY4!=PImW-*)=g6sD&}&D~DJ!x38-f5`Lgt?rhkr~AFCyal5Qpyt z%~VfF5!cO`S01#vGr6&{yu5!8#hQu!E_*;mTyF|?CggCxU7Y5&-cG-wLZdoA_ zKT#U2zn`pkuEf0;IgJTZmq^NR=s5f#o|Ae6v{xZj15run#wi}%qNkA>keOl%yl_ub z`8j{1a0yX9OOxY%lP*;G9{2_3_;T9!1i$@y<5&N|X2nf>Fo3ITgF#3SoPRN}vJ

KgwL*~X0}e;w|GH0VT3S5n@2{YH4_Y~9 zC+joNs=!>rpX^E}n^Wv(4(1a@^%)vQ43cM?15FuZYoM{>e{tv1Sb&jwR*XM8vZpm* zwZBnMM^x8^5fxzD?!3YD&qF}qhO{{)tF0fDY78j$%yT`sgtpbt@n zy8NcR`-f`*N7Y7xYAH7af#Y2!uxLqX0+BAi73%37I0xDWVkS3ToW&v7+czhnzdLY6 z%tceF&Mc%m8)8+_EDZ(e&3XjcM=$p4Kf4Rn`qP`&ip07*gT5*%f7D{v@cKUQF)fNr zDXsaec%Pfczwrn*x8OY!mi|tBXbvCT6!o_!w^54<3N%E*HdopPN}J~+dp)@J zVlUb=MSc0~R`&xLTLh;_Gav{d7tI_70zgI=0E|#MAu13SHjD=m!w6f9GVH`&h0=}zL$@_diG~+I_0j$gpJS-kHxzVTW06D(N^ z_wLW*TsN9_zwFMA>gvB|k?=mJ;AdfFo$tv;O#180bh}_9aKFFZNH!{hntyk5UHrc` z%?H&5AQ?f}n{fE6%}zkUJO(H;ECae3ZouvG=j-s~)?D?wa1NJ~7v6g(HJyZ`8==)5 zpX`#vE)MhdHaNc<{GQ{U1dX$=exi;A)vd=yQLVre`65>6r+bd`L2cGR5{?7WRm;+& z4P^~*{X;i*Fr_HBw&==BOI0IfgZ)arsK!`lX@hQr8U%1C z_z-~C(CJ9YSm1QnlCjev#G?QpecQ%^5WuJ}e*tMikp_UDMgtTfg7^c3D6Pj5RKVwt zwv^^ucDP}~$cuGzSgDj%!Spio4_%81%I~kH+9LRQ!4-B&uCn%Jnl-ARKDU7}UV+2# zSq{2dx}r62;zt!oycIW`DmkOvCL81Zv56X+naB}E%lvbF5Mykm0v&rk2y&@}H{ zOPP_qt6Hqu#|!MI6a>qYXn(VWiB9*37{W9 zc}+lvjJOpk$V8<6`S8|ZcX#Y*#sy$Cr7FV!Tc#((Rtqsf9U+xy)b}+8F4kv2_%Jt^ zeU8u4+cXzw%APXa3I^D5?94|gW*ivSY-xSUPoi8Gi8m}e@fpf~XGl~Fvoj=B$e1i{ zhlL$n%#Yi#IyXeUo@DroBG< zQSlBHB$-&PO(gOKFh5)YQs?fbL+CkJt4u~l77El)a)>IMt?n3hm;;jV3}UPzs*q-= zq*lYh%dIK2HSk$_wO#P;pjje6M`x)1vvfv zY#^0FSYadxL~4M{mUzC!m1K(l{)U+BMnrWZl_6OF&{=53*FH!fL~6NXvcdiZNm zpWUGYoeZHm!JUkb`rya(iLVrn?Pvz-Yxd^qg+l~X%}t zJdB1!7~flZUZ@v{cckSI;?+uR;991t9aew4_e{2LcHpZLSZdutSWjDX54C5#Ak;{PPHk zIKcqovqZetw?t}U&l!Yt1~N8UkY<>jzUWujoewY|C>*?fG5Kli3dvcaJs42Pp4fjhEu1vl|=-BSU!DCUyhW_7HFbunV^KC&# zimScdgejED4-CV$j4-=%Iq2~UNn$-*opI1jy){Qgb-eouHGg~{&Qj%^h-s)jb+>p2 zNJfO*{z9v&kgfrz@Uf8{o8!$m#pB08g1%jFCV;LD4qS?Ct(^B?rhV z3j42ydw>waDlXp>CDWd&!8F6;a5B4s{Mx3Z-&0q|rcv0!*|ED|$E6fepxNki9lsf1N}>iA&jH zwjGe;w=b6A%yNNd)*~_gr6~p7spQU)$+^3QaX&E2FM_(tXM88aZ-f!HpiIl*brhJv z$AKF?dt`k~t`yh&83``$<@LhmfIsX@v_7r)*zDG-eA@MKV-c~kli;t_O-+;LIEm;P zC1s$kXL=929}LcoaGo3KvWn_|O-aJhbxOrf7EWWCUN-fcp&ilO zlri41CM9nRNR0=E!G-~@&w3#p6kKm8a| zGCeryz%~r>ExwBR>i|=YC&z%l9Xt~XLSqYz8U<9PFWa%W0Dg`|$_WAm%!-k`$_^kd z3BN38i;Qm`3UA3a+bCcO6oS~8zRPF!Xd%VX1Z|x84>s4ADafrh!p_@LL;SSncHed! z?3Nd&6Lm9Qq}6#3iBifd24;1@!gen9s!DpDjidE1SN!nBMaNw`X~kpJ)RT9EANzm( z>8SVeFg1v~v|Ug_IBB4FSJ;y;nMarmH(G|_^ewAnws%nc@n3#8z%18G}yL_{F2 z25u%W*!?9q+(s7mEW~O`eu3xN)vSdw8IGnBzt?wnZIO8Cng6^}q!rdB8y!bC8?}~c zKaDbU{hA~rp!`KGY{3c^TEm`^T#zve6zxLq?z(% zx_T1VjgfFrtSTYN$PY6}mydVlWvWQ)*t_wk$_r(Z4IWj#5g#=lmrth&PyI*QMqmTz zoCXoFux0r<5NZN$1n9eRV=VPJ=RNEno?J0Ua>BBJ~`QjMD6N2HHvo6FCTuyDl2w zk7NL8ngGn_c2i}`KzL-Ft3+JnFCWQc*7q1Hl^CLk;i-*ddGqEB?6rLUpqo1r2!m+{ zrd!|G)e6FV1b1}_WblkLxE(L%s+nVU`&(SraNpb2{mGgO5GOtUnzyGkcOA@0c3nI5 zF+$Tz^=ds~`FsF}MqCtfdKe`h%gd^AE)59Tf^-$~g@@7+;~@K{1PQz6L&;dd^qZzgiH*|D4_ZkgZlh<6qP zmEkrwOmW_QtEBnaMDt-YN$a*TM+*|%>D&QUg88q4; z&yEbRYK4%@<#&O2TtLIZ3u>8KhJ-jB9aQ86RO&|Z&u`RB_4wtl0c3~7+~rzSd)1N} zftsrR{T;76@;`quk&)!5tX2~zl%$b9r%0}R^ff_IraZX*edCuRQN{`LUC?fT<%a z_>OAPeWGe<#MzjJostKCl~aTA2rhxKnG0?@84h2+4p5=s`@!^8lc6vldp+; zoOv7=595fW%+R8PODCv+>YGL1<`y9qr z-lY{oh!OCTkwEzF71ls9GMFRD;Z;Zm(9O{=pcw;f+`F7Od{ywwB_vu@(?kHu!j%2{ zkFHahR)rB8wKt=;QEY&L^%%wX)XC15UFvU!UfMXd?oQ*}b#F-Bxn0XI7kzAk4u&Fa zxfPI!d~Zadv=@++Elc{A=I!};`!gh`npmdNA-=|LqRzOzKqK%ALd<6T4Yl<{V>FWT zZ5@5Uo5a@%Bhlup{BFX*?-h{gYWk|%SSrXTsA z9aHg%7Qzf8bpe!Ci^L9s3PG-wtfmaw*&M0(Di~B4T6H8_CJ^^U{Bsi_o_1##5y%Dk3E|uR zXwAf$sw?AI%G`6uBqV0yD)y|3JgX~V6_S^JHzh-a^5Fc`KUdbiqWu(yh`e2K1 zmuyu!W2r6(x$m5F9Ie?cwrKeftKQp|R{TWYSN!L@DEsD~2lM8>i@y}VaH}Um*iPOo zjpeJ+K1GuGx8GL+86l2EY~}=J{0|P38GZ%@5EoW3ijaV-lNb)9i6A-vegcBuVgN6z zSN5iDAc;2^+wyiP3#$q<^8h#U{Ds?;l0aXVqp@S6u~WLTjT-@TU~5y)?}8IiTPD>J z`)L~sxA@+^_ajUM(ozlcFLVYrmuaJ9r*nI+gf7A(HM|pL)$z_&!)v-!R)<`V#0vDe zc3|6lJfK7@mK(`-6IOm`M0u7&l`v8td;H!FgLIS5HZJbgl^|tIA2>*sa6W5Gxo?dI z$1G(M1BSE^8x#dgt=Dg7Yi!GrK=l6RU>3UqcOU^#^6(e3 z%_UpR(xG(ZLU{ay9?2l?SL;1|Qtv;sFBmHf=1ML^-3ZG1YrLV+Tb$c2MW5s1`;=19 zU{Mq5vL84jLb&Z-xT_zfezDCGXzQh=zf5a9whFHr_~cZfPA?wjb|5H_av2==rAAG> zN#9}n)~$?PX*3TRN_ov_ZoGzHuUVUj72{?vU^ixE&TM7U2C+;8!uRqM@89}RThPp$ z5J3>>BL6pnz}Ay2fS5b*OcNdmZY%(aiAEwm33%N-&Q>&V8H6TiS#GVBM^wRB8s8Vk z;$N~<y4}CeJ=aT#oTOHEu;ZS7xBr#KFS_sOR^X+PWH7Ua3P?D$Cm=U)<1PP$hRSD zqe}~N0LFPnRJd0B)z`0|8%Fm;2$a|+Q2q(wkzeZXn(K}&K5{7!q=o`ZP6M0O&66NE2ykoRld?k$DB8fis-XyO5^RuI z4Hg5#j7(7xQS|>vZ{!m2zL~c!SZkF&vpueILd~3{X1R1y9>M+JvjPgj?;bi3M79E8 zy<+V_qlzunfr+#Ul0%zMN0ov62f>}oh&)=pv2S%>MB0R0KqyYzcj!`ZQ@`KVKHbc> z-MEQ1RtY<4#>&jFoE*F#;qzW7J!5yBb-(!VrvS*;!p(@K(3^7;Bxy;ue!Aj_3j0nb zj7#hPKBi4P?=~CC44G5G5q@?yto+cZ{#r`Sej_0;N7Yvjul#3K{Ew(O0qR-ZSFc!L z!_7uMsF~#lH5i$oxd2>M|7Rcy1(WUN8?cFm9H{jGQu&^M$_MpSW~R;|Gsl`9>yKr{nan{` z-Or%g$PzZeV5N>?_%7wR`|K^vj(H_7Gg>VyPG(Kuo!(RTe1UXhHyrk#+Fth8Zu@-FD{rKkp%*{rYQwQR8#el}tSe!bX4}phco> zI$#hgf^OO&=iCdqB)2bCWNLd?F21-8I010GzA%p*~PD9 zKadtgn%`=|RDO7L&g+4;!0$dbIhxlBGr+ z8D2l_S8O;|X;=%)?I?}S=uv=0ONCdMDHHvV52Xir002V9vqQ;L0hSA-bNYasHx{Nx z0kf#H2ilP4^*3!6ek8UCdqsiRqwbO|g|S7N+jB$=(|qkJjpZvSj&CjZBU7LSB=e`i zC;SOW)+Q1l3(%ILgj&X7;Oc>_w&OeOOrQ|8gv`|B79nkBT$o?9g7Au;;O+T2Xma@B z&sKqM$K8$J3swhKw*Tn!cAA39kd5;sd7I;&!A7TrDLMClKNZSw=6&dls@%DsmN**N zMF1fu^OJ^KtKI48XNLDC4sWLgA9|Y{VJBVlV?%d`ux?rF^B26ToFa}_sh5mgZ9p96 z%X%^TZS9%EaA%_lD$u5bD-Ut$&*wTPCSWBNVs2`D<^US+CI1Y4cww6e5+cYA_z#%r zUcPwoLo=j1p<)F@{*xE*Pas?H506Ao@##HnFkhw(*evzP$mVwpD5dwh1k=ZKHxFoj{s3|gri(%5F1WvL zE)IbCM+Y>Nh`o(5pe((D7!*8NVW#uhE$>;{4(I_J+UWfOZcIckBms=yN2@)6IYIY! z;{=o#r6^Ve$y|%$Fw*8CE{V^z#YoNS{}2&Vgo?wl4RbSH+`Hwdn-bidMp{3>t4_0% zkA#Gz1uSik7-b#!Ea9186%n@7sw)suv^?BlyCKYZPt0LSF55eo1H+O7-;Q;xCM8ZNQtyvKn3_lw*Yzuh;u}m5KG0oAh7h2fbEf#gt0L83<+GB`X|uVXgK;@7_FKeJ{nqMZJLJ@7)6bu{6t zm^ZWM&7AS`@po(S$pstOa1vFcYJP^=1X`*E= zKjY@c2R>{Qz{7%=GjN9*-<0>z1Qr(ltlO%hlHViizHUN>2V>cpv|2z< zOAAmlZndklf#5Uu_(=}Jgb3Qy{nSGYclF&ykZ#GY2L*=FosU__|G&8#(4hB3PIuR5 z%ewSnO`6{~GXMRF;uIvf7N*n*8!^OaBpqs013@^mxrRb1>w0ds&4)I1w?M2Q00q( zCPCAb7|w@mU;qXCfKMOGdv9O7qVMHTpw5bo(s=e+$z8pEAc&MwxcCyavNL9<6Eqhz zBfF3J$*#@vm2#^K2&6DA%=#D&pY}T4h*&FLB!5%E>&;hXsC4GaZ5Rbnosy!R+0*}g zzTUie0V;RrM$tdttAA2WBEQ>J?@2VG(bcc&Sm!o`!lluw9szjjf5`JQga8OEyWa%k zS%+CS8_QI{iG#RH7%znl=jEFyO=0ktBB zoWe}9fGsAqF^=uW7+|#Q=#gg-%2Ugrp`|qe#!?_fUjmYHc{JNBq!~-^g7DbaCcUca zz4G-vy$%J>xiysvWxBgn6EobCE8dkmzWscYmW@`BVJCnp6NCD|V`M$d|Pv>fy{1G zTq*$xaIH?)^v%MH>{a^YrYPL6sN z%4|ET>UOGmuPkIjS-nD8i1|g7X62TjJ{+^g2*fYgOw}z!(zvB(t8g935d?;fX;zLO zOquy-;S6&6(Ip~gLn1`J!h1wgRo00nBD;kY8P0D#{%Z{f1>hwAblX6+@Nhb&mgqy+ zUf76P%Guy+*3*oc=?9KuRrRLY|Jqs)#Bjz00n#;$4tlU!5h(^3BS9D(qW*&KfATGa z0_-M%S{gvX|Ch>V6^q|?l$jj#3TjD@n)w_^=Z){}=Q4d;1{PU#y*8$T{*c}`xU7a> z;&4qPs3_zl^eA3LWyxwa2N57>7UXbtlBd8chsfA#uo}y&{xJDzQTtH;T9g;uYJ+Tu zX$R<%1Kp88)Z8A*;O}S-0#oz6MwAqnJKRtWU6bA+jb3?m)tHE84Ll1HeU3AsG{VZ~ zHvuZACn5MTVHp%_=HTnipYBCx&HmHbVK&)NZbGj%n76Tdc&O^!3PPAZ%(8m8hP|>9 z48hM&(zmZ%$p`68t`t|)jqfw{_hlEhPU)sDr?7#zt4jNj|H3C-uJfKGzP28F{}OhFLjl6Z?h@~ z)I17h#6GzloALJAe2U63Igkw#Xbu9IM)ImBIX`-$G(Tmfg*;w=Z)>yxWXG-dx#Wm# z#0PWryx^IuV&&*u#z8kPO^*~VsPg_f^FVCD|0C)v!=g~TXlLl|Q1T!mT>{b}h)634 zNDE3yOV@y;v_;1Z(k z8wmng@BnAMV7B0YD@|g0H^5=6fcj*v))N=Ozt7cpG_tFD$`fGXmG}Cp`a3VEJ#6X| zT?A#hZ{a)s8+_T9%3vI@jSF!Ox{iJj`T<5-oNPm6(sblVi5P#_9+G%l>1vhVLw{B1 z7&~;*KvOn0RX4n9Gr2#1&c@}DR3(=XG!|2;u z*@hEt!Pi&oyJq=9*%7Y|V42s5X0)Un2HrL^1dtun{*p(}kv8CXT%YI0p{MrF2&`WL z&uxq*gX66+Gge*n?A{NwmBR>L3{Xvp-4i3iFQ-&)0FHfuc5`0qic5Aj-JK@gd@nHa zvT<^wMH_64a6*h>dvdLrLWjBcZ9iR{%jPRp>nVhN>x++v5S;+F5|CgbB+*l}g;iz;W?>{N^u==s#byB% z<1>?dO~RKaV%yqN&RkO*r%q>a-dIAJm3&xgS?qO2D{U+TIN21}<&Uy00d<}Qs|VMV zeo*+g!HehPGqeI6A_6H&mRws)so#brI$l>&DyJlg(+f4&z|(W{;S$k(qfbfAwnydq zlcWEQ=Inhy76Jv^krU9~h76E;OM=mzJRJZJo~tP1XD$tY2i}XBPchKKLi2@a+8;pi zkl;?c#@`$UJ^HJF&Fsj3(exH_@$w>HGuL-GQ+0v{`k_A=>nCf`VB*PU5@l|Fos{)y zwXvh(q=AV2c%!mh${KHI<1IWBH}*Nb4ovqZBi$ogXJbU0Bl}u=Y_sL&2Y+)hgXVW+<*qZ^uJ4;s$cLg{FSesek-KPf77S}5 zuHZ{{IH>u+ql3N(!CS0_hR}%QMwIam64)`({&i4m69TzQ(mQ{9`p!geHFB(Vx+BbE z{p&?MZjakA4z`V#JJ}(00Nenxqpmmzz_)lph%v#t=9CiR!*c|TGysB*K5k@k3SoK* zy#X{_2v#tL$I5zedm{iz`}7H7oC$=!)a^)J&q^n%Iaut+zee!iP_2q1yu_YvCodG2 z_bXQ2zOKB4U3q$-RIHUh)w(NP`jV-tNLiDfv+p>rND6z;%|{04)7DScQqH>hI?Abb zv;yu9vz;}!b)Z%%Z^!1GiG&TJnB?|ns!A`pTZx(c zm&55`jMGvh#oFsuhSeo2dX&{in?u|y&m^S(+>GByUoJ7`8CK}d(C}Wi%s04I&>X)T z+dENNC$!>wUV*qO@)aYPS4JkjP#*n>rMD@hStGyxr;IYMRnqUFv&!zfu?5d2QcNUV zE&0Opn694=_Xn@a>4#Yj`DbV^D2Is>#;7=8S`${v6R7Y{3I%|{RiM{E2?1QUEAlyz z=dc40BE3=!Fmgkv1*unlr52mb%1Xiw*^L|4%CYQIZE#h&a=0`HXo)4ma3coY(^&x= zM{w7p@dXk?Pe}0t79MOcUWfAfL9hY%p)gx;Fu~MavW(xw@6W9C!qz{PoTPx88eKs8 zcEq9+wliv(E6w;ba_w8vv|67=OYP8;;lrc+C!m*p0fu|nzq*;3zd3LkpXK>vbl8P| zA|l58#=Y;Vt^VccYxD8_F)`N8T5mIBfw?^s8oG(3;8_uq8-qLwH{uDo6G2gH)o-PYv0hNAY;g5an^ z@$JH-Q63Ii?iR4*RfRgZRetqjQshhCw1YgpLoRl@g%++o#^EW| z&nt%0M$!hPG9Yxc0N}v}E>M8qb|@C}1@1k7koMvQ4I&aP>_>|tI_KHI2un~Go+FwN+`u{O)xeu%HD?6i+(?fEh zr*Np`E^X2NQ%g+1ufh%pHi5p>6_kq-92{WcP}qLD5=>iyVYJv!gXos=>}unFaPL}w zQ<9HKU}AruSn7=1Wb*Xeu;27q<$F(r<~D3!h;5r-WQ%-a%+iC1P>n<`eX|w(oa^hwg3Hy+W=Kp^0&nl7^E0m+G zkLZ~?ljej6!euqVJ&u*)^ieUlug?lh|AL(j${8@mNrhm!^*qMbW5e5tOZgOaIvKZI=uzBN zFUqyx>fGVo@n3km0&cpjTl(H#v}OMkpx$pNA7X4UNqgg=S6|@WDtb!C=6_QuwZ=@_FADjL!pH4vz{;n+qNy@~HyWvLUX8W@XnfX7!xQOhx`jiQjyr1;z;FEt~J{4=0mnPi(5+Sf{)U-;DEaynCfI_=8I6HIhJ71+K3^3=S$D` z;wQ@)Tyxx$SS>>=?_~;o&ZWQ@^(Ko(g-^@K=71^3Wa7sWme!n8T6A4&g@aJ%LSq?t zBtS>>QXaGnAjYf~{4W4_V2tCfTr9I}GkCF!_PYotBMCMdrLor&W_#w`K#|lLMo8g7 zV}C>-2N!eyt|*5D$9PS`jJq^aoEG<(wAi@#;?wDkOUR55z#dDAC9V9gcRON#`8~AR zDpyq1%!MzLVzt+g+4}1@Z(ZddT4|>1AB>c9uCS|Ld0s6u(^@bMJ{bfLdjg-4l-Fzr z=gI@Vz<`ffLNm5J#)GA zxAGO|^CD`*@{AsK*T{wkdQg+VWxTdZx&6B(Ts{DUc-)wu4M&$3>TP8xk#mcwg25aO z_@{^NYYC=~*Vp`>S{GC*CU|_EKXd6AFC^o@HlD=*O)T-L4itDt{97A}f9)Kog?K_KSL-Y_`Ptl5zjqCX2)hpdJHnQwW zna`NHUv^(gT&bLF-Tz_m&M6|$xWQC2T0J!swoHDVjH^gY(PCvutga=-{nhP$@z>Q8 zM$5?D`$(O4i*}aXLmjC~o+ZXorsLX{qA>GE2P=F_FBRF@TW$6{=s-6S-)e;c$W(OF zCvpiis)Vd!==_#&@UK9eFuIZTMH{`h`^)mN1jsZT=?+K}BK#$^J}vSFm^3XXu)jMK zv7Nnt{oA>oR@m`mRz}*p6DAhCwCR#$6-F9vKYey%yFaMpbu_dN3Qtnb z;7`FC0Z4q2PtUQio?yjUW~i2`)O?@J7UjhFKAfe(&q5}Vp(@dNGnML`>PPrA87HxdCs7ECM`@HZ{Cvx!vJbmnR$8 zA)e_O&<{(k8BO)>vT)aQ*@%KrqDr}?iHqio{|=$4UDa^^Vtr`_i4Q`#mXE=srB;1Y zDbB^i;7$>n_Psiv^1-Fvfw$G~ANZLInGia@#j!b?#Gr@Q;P{#V-AMv?Hw4cb zwYYN$oV?@iu?6r|-4Af6a*}WPN+BniNv7pN82`0~_u8DA@1?-@(hpHw+{^PC>)AisA*Op5_Ujj8vM2k8Du^1* zw2!|dt@yw5a*Gry2Zi3~G`0mPm~2j6HYhF>8JBs_Usl*EJ;Cwxs&S;AxnFPgYqC00 z=KAUvwXIC5P>XVqHAk%N$jxKrPyA8|rAFnAPoHrd30TZ_^l$qcG}(>Omp0>6CteJR zmdwh{Xv#VSWWGE;C}yG>&VG}7kl8hG`b=zQ8@dsChTMQy3Ci?J)ayHJ30&#E#+5 z_UZh`p}zR{2VA~{s1KDk^Y53G;3ZYCFT8J(+cK~r*SoZ)3d-`o#BdO?j8X>t1rNj) zn1CaFeYB+i+`;Bm?Dj;Fg>=WACA;j@=XWu!ANdu_L4<*uVobX+71UKtjfiM=@q;0E z-No2C!YR_H`=;4uY1~K-h5}j0kFK zV1Zq&@eE_beL;N(eqZlD*QbXiybWiIq1`)MesZ=hv;kf8udziS#H^mTH`it=^MG`@ zQ))&s03vnqNZxoqdGZ8kH6=RTzCfmh=pK1;NWCmm#9Im{05~67!lv5F@+Y9ggm))5 zu9pWg9qK*B%^n(cY*zWYI)Tt~pmZvu03L6f|8lMT%d_{4-GNHVEXQ}sIQxpi9Tcda zs}e;K7ABrQU}IwB=u5FF-Wc7DxUk89#vxwySk2vAxh6DVC@z04&_yAp`E(ie7QQDFP{ zY@Ys%Pm8bey3QfH4S?|P>#8RkOZkv{|A@C@o@|nx9F+ap%f5MLv%|7#uHw2Y@woX$ zwZ-tuffdfAoQLE5?o>9tFkIG_X_`z9*ZZ>1$Ny34Q*a)|gunTpu8Jb7wP#Ky_)Qz& z&ZGmB153X@w7)PL3-Y~Y;QMv@-{DQ*)FF>os)D=%CIhCcz8^1lXh}>D7x(J=%VH?|JrkGYP1NC( zwiWWxo8gyd90py&>Kba6@cW~WqO1Rq4&fp*=kJn)d0L@o@ z0M4)lOcE<1+h}5oS=T*cyMu-$xKNe(UoJZks8G_dJb_$~FPi15;$Z0AhaP2q!a`b< z*6Mu4N&O0`AEooP7|$8?i?u#~Jj=uw5XwUDA_pva))tBBgi*)Gz<=v0`s1Z}m_Q_% z&dZlnQNF^U2X7X!9rrz*^N=U8zFHQ0Wjk3~`+*FVY0rBq*0QHtHYGe#_nHT}-vi>r?&}ed`0mR^`oGPUMC>V1C)ts3; zz_b86=pgCMQpx=+*{q`0Wbo&&x}24ZB(U24uLY0g247zU1H@{+Mqk9~RG3KA4z?+g znkl*51dtm54Lv3f(H$|TMTzaMdkA)o)I0)&J*OClezo=+krye}8Xk+eYP!94+v+;0 z3os+bp|7K~-ce%FGvB_yt=?g4(>H&Pmp0DmSJ7m+-5diq2RDLnh6c5Nw@g*IrIN}j<-Am_WMnIx=l5mIPTqk76TV69f={SE%{8U%WaLA54XK`bgbFXea z-KVR*Rr>kI08lP~lFBIf(`rCGD76#?A<-jxeOeI^wBI?A93eS!XlUpPu9>RZ`WaS$ zy2xqKW;TR0U1%*$Qm&-|9=MNI%JU~Z4peyZ)z2O9P7kI_xNQCI{;H(Wc$~u)b(+S~ z{sW{d)D$grhz>TUOnrAIB27-3uC&HqIA z!$PWO(i6xr%(r>9aWfojg%m2Ye_6b*$s{xMFbChY!TjLi(njN=lA(aDgQpW-o_>25 z^0s%*M5W1%)>fM@$L>|r-r~HhwE`7}wOG%Zn`~?DLI1j`JgIbpyOpwr2BSFn&blf4 zJqj5)0l9Ul02vR7yRe`CnaYX09kjbVMc9UqR0L9{E~J}4 z)|^JuH{XM!gC}RcG1tzc3(13j&N5cy;aViv@ZI#?27iMFa_kmuQ2n>D-;PWZqufVg z>G|OmY23MokW*oeRSvCp9Il#Ast^4O|Q7}>UTHjQj_vwv z6KG36b>MB#n);HnB9;yaOS(WR)Tz(5(sconzqsaL+$iZ?MRXbW)lss3zR zVaZu#Ti(N%uXm0_+Jk=VE*&iK_(#Z?F8jj*#g&}K@q5?C&8|P>|VN z0dt1?EJy#7ZX&r-!#bLIlNQ%vUC-$MO#Q0^SombcEYF^u6)jf!+;?4t9yJ^LEZu($ z&I7)zPufQgC->-WqGI>!YN4Mq?Dg(xqlWR+v|e|iNCYU;)fi>-{R$t66ow`E%Cx>N z+*1tnm@Ok@Iv9qcE&xuzvyf zA3@wBkWqI|#h?j7I6%ZxFU`YYwbs`E${9D`|CgxpqpX^1z;&Q&mk?%%-(GG9XXu2v z%D+E<5Rs`(YP$DBLGxKw{i;6OecBW9q3N=RNWT=wi19W-%|o=hXOIk$&EiZG}xbN$B@@yx;$0Vz)BP$6(u zM#Vs@nVRci$;rv;?Z4HRn0UwYyF75u1&?+N0Pf#l0e=PO#V+!zySZ9US!rC2<(vBr z?8MNG%9L~VlVs8zj`^A<&%u-BImt-U9ifHhbj>u29O?u@r8Hqj4+1%VF`snPRjyrw z>T!c$vYra9idPpamv>K<8jl^05sMqsZc0tkSCO%_B}R?DW5aQNCR?jCkZ9{O@bo6) z456y?-HPQOGaA%D(=^MoVv!ig3BGLC-BEGj|9;p<#%p(}UpWkk7RDF7s(Y)LSs#z} zp9JJ$ZH)ef*%JCSjxX)Hvots3F+osDzRZj|Xe3?Ay?nhzw6U~OM`&#b9y8kn!(j)x zuS5GWsKOoW+|O_N%`ny>O=d*LK}EQ8E0ms)ro#zF6eafMc{}d+iwaWai$|$rj)pL7 zdS4Zrnvq~i0SrVelh`om4XX+s&q;I+CO>lN7M1;(Q2YMiVHDU$({6EKlYyp|Rcsy; zbYiSxjbNtkMG6Qh+1MVToW}8nm-J?r2w53eE`L4T5OIbXQvGEI6ib`#if4taaX}l6TMz{SiwX@5`f|;oY9|UVRTCUiKu|zKOScgYHRY-qxvo zLlN^cEX)Sdhs;Gr<=+cp9X*|X*X!7>Oji=3{>~rIXiU>|LXMIx3V*!4E%AHY3{$6j z6@SmD$&Nbp)#<=NVtX>i#&yd+_>c2-SeJc=y)Lwa9^UjpW?H3j1Fx=F3q!8GR$`nm zfFB@jH6tKL9C3YpZ8pxu^S`}y@p}3aFnvp`2u6$za1zW2NLVoHDIFPOBMgwLJ zkUZEx-gR*6UT8?m@(o}ReDC^~bFs>?eouhvWm2inZhtr3?Y@YHF!%SnzH@>|I^J1K=}hcJDmz+16Z%c z2P&{*fGRO`pS0Ny2Vn-xi(a~isusAWO29(c=K_+v$m-smQ8VRyS>v*7&9@6->g6tG zvn=cQm}+aG2H;11I=ok(LTbKGWtfIri(Ch*+^2vc=h!*!Q!2 zb=CE={(S!Zn-l+20$n8tN3L9cr&!DLpQXh;66uy}`xm+wt!XC=$g`tTI%qLAVktf{ z2_!Cl69;|#P|+sy&k-FbCjkvpGpq?H(vG|hxF{{5`qSrAAxQrRH0cX}PwkB%*Lv;) zQ<*u}GdD8jgWuu`ApKLDbw0NO*NqitNav9twKB82)>Es29vVq77Xmo|e2clY-3KU* zfpAQn*KyAC29Ndht;en4?eeLC@*wbxG z@xF&mBs95T_N9Gd;c@#~G#$VM$HJrPUFK-2)j$SkA8u*$?61KuiI>!U68)~HYw(l_ z$2K@sW@2mTUGYTRhc)aZiu%F1Jb^?AO=*r2y($;%C{Q4crUo&(}3G@ z{f*Wdfad;tDt8!32D0igMKRFB6z$eAkc%3_fz?}x*b8+z4>mC*UNx!D|^(_WJuv8p(lut8IujQhyReN2TGev-i;}qi} zL%-=Yjtfjr#ekvdA~qJ*PiY!7_FdYaA_^C94@4K6giv8MeX}#rznf7I28l^If;zPj z2%22h`p6-bF62lL3c^AA^UHBg^?!S9RVd`LhW56sHx*{c)_1;_Hfw*`mjdILajyO} zF7uAJ$q1$UeN!(N;u^!oeQ+F8W{=U>*xN`0b5atoh0 zY}QgG6?7e3qy@**wb+IJ&0jyW-8_&@?pFi@ibx(@VbHUF3|P}f=k~PQ)9jVuAy`>i zL6Ik3!;DNhT>1WsTCPQC#~urrh$+Fv1bWtP3(NpId`}DwDR-_61*1=;rcbP^0KI4+Vl!R~a|Mk@flM>z#Yuzv zCY_Mgd_M#7ROgn<#7rlMZo(D`D*3lnKMa=0n;K4!3XRxG)FuD4m0(&U0fsD5vwvq} zmy%kyNoT|ou$~b%WQ=rVlSO7LnYb|sC2F~#0l3UWy^V`MzoS^wgQ4ifmrK9G?Z+_) zc=67f@Y{yGjAcCX^(OXE6^1c0S^7YdbOM?v67$74;Uyif4O^hryI3Gh!rgk1cc(WFt zM+by*imQEo-54q^Mzl&K7nYE<_;LGAjaR=WxVYu^iG0w+pXN(}f`1n~x_#CGCdXTl zX&cTveEHdylI>&1+;*GZFkLpW{3%PhgG)9xf{KDL>i8ql%SRQ>cDZl0_P?r#88Y6j zBoBA0j>>-9OtYmTt7LCOVBO#0X8=^z-w5dOC>2uI_w>ai>oW zwW*XL0@&C-k8^E)J-4^4jvL|lZ8tDDvXqKQ-2P%U=PLkW=uUjNSI0dfoA*XC^$H(= zydb;LYQ;j)3({8&zQ=PZ=5!xGCE$NEWQEVToGcm>Za=>~$I?!+FI(xjK5t^&KuU+Y z*tM;BUu1Wb*4mEv^Kku4*xU^YGchtt& z(3_>cB`gC``}vw*y`b4I|C7Gf98)yf$E;VhIkwAo#1$XXOe`F-v+Bs` za6#tswb{Yl8rVKFL*M0W)b{azkg^ScQ2v?lgDiy*24E5boMsD?12L7Hk^(VbW<)sN zlCOBc>)cr?K5D&=-7t?o--w4@fLVM{797Mv0kG`^0<8p|g8SW HUMszp$7 zXn*6!)~wZ+LNgYuxj0u;)dd&!A)`fWw8ZZ$8}gJ;Bl4Q6!4(d1*mYmzsReIT3%{A) zN!WcJt2q9?%|+y@!%~zx<#}v9TvCBIuBWg2?e#cbs#^lb$=GM|S{^ZMq?)3Afn|wG z@X(|C#@~|Mt=HYvT0h*@7m^}uCrXHGMgWAASlh;c*(K!}DUJZo4!YwUpFLgw$*Ko@ z?*AdRT^j>wl7O6DIRj_pZh%RxQ%1vkxdjPhPw(x8i7|+)`@6j|zqO{B2u)`0_lXPV zFx`O=4|>uKG|uQhwX$ybfv}u*ZL&34!*o9XE;eCmgVrLFqq8*`D)N z_BR&lq$|hbHMN%Q%{SUg7uwd8&JC#aFMkk|EJ4y&_t&R*aj(({2kY74$+Dg;y&C1m zlO;ZbmWd0ux^%G)Yp;gLHoOkdR6a(Y1rcth55e`{--wnNg?)V?eUGYb9h2$oBPys< zC>Wk_id0azMa|7MzB`95%~YBnw3KV{vbVFo&wtO2-fKb8i-TeqNO0U0AjH~JVAdiu z;ZMNc#3^+Wra_NQv0-(!Z9>V?IJP`$3q*rTJq2GYE%azOTlN3)=d~&z%On^=r{si> zcyU`uN3r0K`fGX$Z$6~$Y_%w=unD1$&560$a$0vzc@q{{q_4AwgFHuH`lH(}%`(m` z*?D=-u0&vOK`$pfE5QBg*7GXrA$AxjwNHpo#~!FBgFx0zil{|jk_}#4QBcz}AyG98 z#bC4EV3z*CGXn`CuP+EpmqLl@0gS^WcRND|HO}-FtHEPY?qER~>16b0z{mdj#!v60 zyRvn&F)2FYX)>PgCh8Q2PxAhHOHCYSsm{K+@Zsy}$a}`PaZ~Sb-*NTw=XzRstn_(o zs|4ZykFxyJTfn$=&RF(F(%gNtqD`&frA1YKt3I(fv$8#kZ0GIKH5K3X71cPG0;gmx z7as=5&}Fz?WV%B~H{I;#!w4aEAp#R{)GmM<<6Vtd>q{lpBRBF9@Kc0EY7x0XCc52);8O;4R4#Dg5lJ@*^c%cznREbCIO4w{7K!;v-huPCez+e8JMSTFKlTsK;=jR%Son>A)l;x z?|Rhp>BX$Nwlhq`Z1dd}$7N+A7N2|G(+-w7W-;Cekw6{e+-bIhcCaHjg0S0Cx1=gzaf$B=?B5mf*Z6Zo={7L ze?K3@&5Y)2EB!|Q2Drfx2@qy)8vFwojH8Z^Hiq6T{``QV9tMdb_rNHVZDejsat>%>Jze|fJnrO%Z={C?}Q zOhv$uAml;JfBgF$Yol*O6OJ?s^Nt$c>reZRXGGO-jlJ;9ZHDjbZon7HR2Y@H?G*Jl z!`$;B*0tOPz=|1eqF+Uv%IvvY^HvB?C(*vczl0k&;bLfrKJ@c!VyqC zhbaPa1@SXc)BlU9r=h`lBcW#PY=evb<%VKaCthO--;h!o>ER)OgC<(HY8{Vh@T~QN zUMUu`@kXbthYEAv|iAfU42w|eeZg%(@2agDue)w)}k*B?* zKpvCSrK&IZ{N0&y*!Lt#5$kiCxDvcS#|TfkBGw~3Iek?sxfw%hi)_Ye3)R*StZ*0> zsJ8B0fdP@L>uaEy;S|dg^$fvUhA&=}jwA;0|3B^B`zrN%syfUVe% zSvKVK%3l8MKi6C5%j&p!v&@DY@l`9;=o8A|-Tds6k&czMY+3@x-1Yh10q9)!@9PWm zrG{L!eRkTpz8^vdjwLii&mP);h8U=9DFa#G)Y0)>TLKb4h;faBaV?np<^@=NU5Q)o zxcl~Waj4q|GC)?|sSOGYbRw4r@(|9ykz_JS025FW;i3+BDs4Q~@ZQ>UWPsnV_UzZn zLf^taqz$kXl~ZfYAVmOFC7c3yfMb#Bt)XcMOgd?EDk)=~Vgu@CYEx6w#Ae+x z2O>GrI|8r4ytu&M)}uJ+#=EhC)|F|OLFq7|R}|2+g5PZ~3~ZJR*6sR=1_QBU6=bVy zl6Y4)*-F(qVlSx%w$2nu1!tZR7d+hKp?vXV`;pCmucbFdIn8Q+#C{ydanG;l`0tsp zi*bIBMp9j-ZMTE_A1cr*s>gRwh2}X-eUv2*%gu^O9D93;B1hU?5M1(L(B+m2xCAhQ zhI{>vz}i@mK4nfRIG=5J8;8HXY^Ld}^n9f0OJ4xm1K`$tg=hDs*!8;;fS;pYLXSwF<+l(rHGSWyGa#z3lFIfH~**DX^ z04V3oXMa`znSM{o14ROnSsOWn3A&e^uEooUjU|nm`vJ%u8fxkgbgv}OnOkMnS-&?| z-;N#X{2KM`4g&)~qd-g%Yk*0!uQ1ln$sai2VCT!)FDyizlg$xWI1Kor1Bv?tKR8UP#bLEKJ3E;^IdZ+GdBMkC`m%^&4i zHCV zqg>?Kq?Iky*V?T6p zK95q_d!uyR@0Rs18?)F*>^CvQADHCxt7Q0rJgrk7m| zG+_;z7oHOb6<+5SX}*}Ev`}F{(SGW`2XH!2`GbjY;0;Fujqb$*>0-0_z{T3(-|Hgu zUYJjQ!)opoi8bh8aRCJfV9%unfSB49zL54kELdIZ8#RwmA7krK(GD`q?s2Jl^0}no zPG1$&)cp0M)}j^K&EoR#4XQpP${{uTEdLq(7o>3mL(=y@*L!Qwpi~GH(FSE7`^(^B zyRd<;7SalgaS;#cJ>t)J&n2RsC?}+$-bSTAPmk3S*@j+oKaqUYqNBg5gz=G{yTz|M|1Gueq#h>_u)_rg#Vk~Agf!!1W>Qbz zpUijrtVG#7E4MjKyHe!D_5(oC7wk0;!-HBXC>sN>yVdr@$A@uh3wp3iCV)N<>}5MISGPt-TZ zNBb(LPyQ0mG69F>`9^UyUk=e_ec zEnj+$ya`GjS>LL@H0X6OcmGy63_wT(RRiPd#Pzk7zpmleFY6StKB|kQ zbFt}PRth9SZqBPmyHciPM4tP1Hxrf(IwaiLSL@`L|E=XD0GX?@)k|z9h$J(|a;{GCg8e9>VM(t#GN%rBahIOZOf2 z{p&ujprq6SPpi0jdJ`a&W45kF$xj2mUAE(_@Ih$*Q>R|$B^3yu-T&<{vqlF1)qr3I zv^h{cdK+4=^c>ICyT5_ZmGC9T9&)0isThzv81?3z5!8S^Sk^u0jMyjgyJRK;Yfd}% z=loOh;LC$sf4)DvA4gPrd3s}B*Ie% z>OMp;HkY;6`W=jv)F#NV0|iNT23={?-NTSyUmO?LXwa{Z)SJ0~KN{q(gd4?@n&ehl;hY*q=tRV#?VROsq)p+el~T6 z)SzLWcrl93+PyC!-@nMK$354hza68*hLH|Q*Mp^)sBsU(~b6fqx3Sg zEOwuZ5i`pZKLtrobWnRTxiG{3HSOPJj8XW^P+o}jomQWd9Zm=UXj|XQNfIOY;heLl zGYd+mDJQ#JH-1V7afIg%8H0JaQ{uR#YyPgk8&Mz6hZ*~^@k!@@!`+9aHiNweqkY4U z?#9K%9iEQ`!mQN)121$|y09PwT!d*5z_J*iH(Hg=aaTfpOBNuE@9oUg0J99V9OqxZ zyGkiX`d&1knxnj%aETaBSaegWGEc>wprYCI>U?1y2K(&hO+?oW8*~l|&-kiENP7#r z?#K3#Y^j;*OrKxx0{FO*nj}Fzw1zfxj||P z`*{zcN{Ben{QVGPx;+^+?|Js15`qq%!zH@&6LJJ5-U2wq7@*eJwh!(ntKjG8I2XvX zA(F~p@(O->*D;vFcoCh#D@A4MtTf|TBba|~9}@Ug=n$qZG|`b)*RlT-t$`d2*D}zV zLUC~F#WCg@oaR3svuiKyKx|Pt7r%a>5dyEU5!bo!c)NC8*~9pdBC+T}5Ny2Sv%+hF z7)D=$7=m&C;6K_vv05=(q318BH0HARf`)wFPRR~R^ubAtm@?@OF+%nm2m)oaFR?yEI^62CDakxH6dk+COf<#Ar^pYu>ueiy$E!e;zx=wYJtJ-+b{-FP2b))W2r7uC+3#*aH zM~s?`m&czSzE)Q=E*T6&drVX@*0DJ(e?Hsf#23<@OFT_Niw9p8hqbhr?SIAV006oI26hMoCpg+KeXVw4=lex{&05uH)NundC278|m&l_z=x0xCzuq0JGx@-?HG0-10IV;v$xdO??a z&nKhb&w9Pkoo-E=p;(q^^NZ~_c0*rcXcK-?w5XP|W}`5~wEEo`sHOqmk+b;fUp<`! z-PqVbzYJhfdC#8a!gt5%b0i_@J5Fgt0^yb#mPj-&Sla<>S>$MWgZ(gY8`Z3!5+^Uy2_Iw}z>U(qt8jau&k5MR8Rz^^If9jh)FAW9l)(U%H!r`I% zN2LW#=>nKRb^%2T`MaH`2jYmS-@yGfJ}?Mqb|T5-@ePBY1I7RUA?my1vFzWlZ!-}> zh>TEX_TC~hdy|ow86lO`EiG9n6 zb$!3*IL_lZ&W234kNdO?4Ks-H$xMF(-2pwx13GZgV#(lr%l)n9!{ajxJ*7gm$CdBB z1cmorQ{0Jq1M&G&=gVK((F)nyi)a)AiBQu3fr!|E}Gk>pZWt?{=}p2MP1wi+b+c zzlOuKT9{ZeC?i}BVN)arcVk;uhs+jyl4~ zh<3{{foXV$aBOjqk!Irl20|S1%2J93U|l*n%{lR_yY0|&w7d)da* zyyN=)yYqy$3Hy{M4v9(Ai#ozK4LhTA*)@ejD?KHdw!8cnu`L5H6-8uy@Co4FyzOGT zZ@gi1zUFy=Gll7GJK0i#NCW-CzCkBlJPaQp@Ff-H+Ad+U0OWRbbkvr34p}^qr=G}+ zP$v)F2c7}SUiq(gAVisVBkR~#$uQIdRKLGj_$_+PT4wh|KO1;`f1zLezRy|WlRq`s z?5h3UC&$GhGEd){d5wiMF}&$H>k-iS_uaNzjL4_*nt%m zG&j^OXPNqXdx@a3-lqI04}tzlB>MD8Kc}am=>zXZ14I0NTaK~0Ue0inD@sL2iV>WJ z>ah;T@4Qo!qAk#Sbnru{{~6=7u2#bv74z?GL@L)q z^c|{#jI7IVe||Drz&~9=J4%^0scpRdnq>6kx=4_{X%1J!3-dP$sFHXv;mDW`h$O@C zrMQk3#sf3hLs2lV4@@<&BGI8_bPVMe5za4R#!_DrSntHl5M;<6Y`oURTJEJLto_3- z^RO`7u)zq5&|Qn(bdSE{)AL&ek_VArs5QjyzfHGoe3h_Dc=YyZM=ZWi*e+ohfXru7 z;xAl68I!Y1>Z|W42I@$}bqeQijA~ z7udCE|0aL6D_H(prl)R_5u|hiCkDxQsI=jrwbUAFB361)ElJ0>?ybkCj>8N3Z zryK}H(rZdX%?qq^9)*3_3RaSv8r^OtZYkljv$ z5r|k;ebfpUj2HW`)@k5NmyZ@1X@Or5oxOPw1{;x5@Cg~RV`0Q_m4e5{o1DbYW#ECE z8II~yzR*H%p_FMahX`3xv2VxYA~{Ec>sO7OFdhkCi|6Znhv@e?94Y&b?+g~WSPO21 zeI<9pJkotCezBweeq35(Ea#6Pk$L-@Be^!U^dXPPgB%Pad~ju*6`gBr$JcOUbCD?Z zXc>dWl5xcGPc5l-H@OA1ePHu>d*H@(yITM&=ay{<;j@UD+3@)&?No73K5T^Z9^?xx z9&i%LnshtV7C7;gUwz*G8YeC@=*p4dx9xN|9p3pR>}%fGoUj%c(0dz3BQcz&pp3Q=Ya}I*8jb_SG2^*n>)GY1txoDXF1;Ui{1zl$8B1D zH}WDOGO0N_IA|fJQgW{!7C?QlTW5um^D06Zn*J52OG?M1UNk_3W6 z%FUt!P8&z$`Wx8c#ra;Zy?ABrSr(1k=p|~UenAue3C9}+nRESz0ofJu6i)N~BEOOq zhYG(pWNOv0hW53WEnP~+co@X@ti`dnJ&bgTijOObXfX`pOMZ99UzVvM8N31hn7yH$ zI=-$^9z3akQk~G_#1lA3^4LqqezJugDMB~NFeLv}R0=BwP4bVwA9RMac zqER#DSupJoA<`J1e(~UNWqrZi^dCF&)x6>zZz@J{1AY9Pn2aLFhGBAzEUm;bvkG37 z<>1OH*8@=*Esn=3PC41xr!CJKoO^QOn1Vuqy6!&Z0zO%{!CTJ@40f#of|2vp{6CbI z3VXS{yd1d8^^K7GU=G0wSQAogRgpC{0nY3?scd;D`dbdmj)tT17m+aS37go^uXcEHXbKhY~oGMSwClg23 zj|tQdI3>vXOaml87)TUM-;CSxQ z{b5z`&0K~dH86=1!y+&C5IAs*3HuKTQDM2#$px+dCn8jmdn1B(Zu$3mQ_1_tx?_t} zua@h~F4{1;6Ze*M^UFN=aBJ&riY5=kV_wO7zjmITe$KtQ6v30bq#G0$HzI2c#C8NG zA}*ts^uG1aj~U3f-ZsyX>}y{1(Q>fVRWb_w6&oY}FZWrwm%#$?Ggb$-G|3&kzVWFJ?%H70<0yC&Ad6wI@i!L zuyn^J)3hu)Wn(AVbL>7P73K5h)VDv(&S4}t#2zC)c4$P-4N5Zn$bVm))ETqt#*Dx} zm*n>5fh&)qJ%&m3aS(khj;TT8-+|2jR}-DDb}m-wjuZ^t`kBXReVdjRt4ob^p^C&V z`#Et{LO89NaGvA_msIziniFr**OLeAK6;d6J%NI0s~GeIYmmsj>zjskk<8|WBYc^_ZharlVNb&ix}K)1UR-@v*!@I%Xq(G zgOEiM`(KuIEIGa}jt!IV51O)IK2yShw8SGmkqP3lRK{n1UHdPKd`!{cx+T*&=j%p-tjq;AIgi zQ33;~QymoXv}H&vP|-*88Gc`uWBFP0=5j_KVM?h91-~A7$%4KkbF1D%j`^%75rsV0 zo4nU}EBFUZm-+}cWm;Z5e$hp$}-kf^C# zT5UM`YrL$})8GX0(}l*b>&5jE)@0TAWc8$9VUK>Rgs&2io`^jt$@oBE<>KN3CaHH* zouP5R5O{ieTF!gxAGM|0Ui~czse${t6)qCoqESdV*=!S)YI|bv*8^K_$@uxkLGQtp zz2vcVjvpS~ejDn8A)-p|rzZG{f6u&qy-_7DE_v?=!N5aUcrJZNcJbLV8;p^Bvd7@xT^kpt z|AYd28KUkd>6g(nz$l@(-`?K-shWTVsKPzU|9xWEzy%yo8(bkXb8PhQsXAUf%=z=@ zL4>hXjB2FIo$3DkIgM{mP|JQ+ySq`ws-}_B@7dcz2X_AI2dMAfKNISoE0gEuJ?2}& z*MpmCU;6a%Oye)I5ZUxMsK#$xnbV0(L?2~i{jT#i%N^I;U_{7H>QBZuN^lUGlc@3I zkU$XYMWIVAn*)|K(*PKc0#6G(yn~~odFEia#)E~(DmnigGR$i>EdbGrK4Cem6F4Z3 z7=K^G@LqK^Xs*$|hBO)`@@WyQgqM4oN8fO2j>bL^^qiFAZFA{SlWlSaz32S4K{%R9*L|e&{$(scdb=UU)`1!jczBwYvze_h zo_SIPN_bH4qm}u=-AgCx97a=FE(<2(X769s%_lmJzMV7hjWk;4wRrNWX^wQOQnv3l zX)-mV(9@^gnQo*>%`z^hE9FlHt+uGc`iWj7%1T?G{>(qf%336SkxWe|_(jtGt>-tX zqxyp&ip4#x#CxeiNa5=>AJCQ~-yqvv4k&Q{yz^|npuy2ZTwp6S zZiIsCgboQ9a0hUf-B+1|!570Q@p?yld(*DdQ)KW?wTSo>z9k3C>hF!h*vn5~g^Xph z1rdNRq;Ks6W)m$W$)uR$V@GBPYT@J_^4fa78WWiq!FE>z_6g(x3jtwvJw zLNcE*iNhu{5t>} zAqs#j`|`gxLR&8%XZwjIL=phU#~K-Sd)eAv`({5&iM1VfUXSOknAV>@U0o$1&z>kK z1wfnr3---`bODfc;E%$IG{zN@dI+Xj&@6KUIH9Iim>T(S#Ce;+kC&H0uG#uKgxdAE z7wFK~@Nk0q3He#{X&L>rZ`_Zhoa`uv9a1jI>OUxI18_RDT7!BD)?mz_xytW-dCO-D z-allRzkmPE%$|i6fDPn0!)d(dzU@#VsZ1f+)cToIe30<@CyMRIbv_@Kjup-fbj;GV zDdp;DDhlTJasCeT#J^6xk{`f$&%b`BEbR>;P<=olnWo!)0k~56e0v^iomE`C?TEUl`lGbEf)xO!+Xg|oSt3%0TDMFG= zJSlYRW=R5jJ}_UlBsRIk$`k~B#HutY$Oa3OD3$Yc4|h`4nvF|ybdzrLk`4IiiwHW@G43Kf#Qa`M(wfWOopKRz}9v%Pl~RkkV>>8Le8)pob#96L7QT`*zgy?(yK# z_w%RG631m`c0bFDwZ`{D$|cTr3l2vjcX!U?A#jC4ScT+#9xGd4y}72xeY8b#%E6D# zqgBnHj2~Rp2FO+avcz7&@~W};gYQi{GnQNDwrZiPS>$x|u}s6leMW!N=4N_74-PW= z!f~KQ>|OA;;c$kAguosRm2d