From 1b0cb5594ae652a10cc9ed7d6a64d47dbdb30b46 Mon Sep 17 00:00:00 2001 From: Dinar Khakimov <85668474+mdrlzy@users.noreply.github.com> Date: Mon, 29 Jul 2024 01:18:28 +0500 Subject: [PATCH] About module (#102) * About module * Sample: About compose interop with xml * remove unused color, fix visibility * github actions * Replace clickable with btn due to weird ripple * fixes * add previews * typo fix --- .github/workflows/build_about.yml | 61 ++++ .github/workflows/release_about.yml | 28 ++ about/.gitignore | 1 + about/build.gradle.kts | 90 ++++++ about/consumer-rules.pro | 0 about/proguard-rules.pro | 21 ++ .../about/ExampleInstrumentedTest.kt | 24 ++ about/src/main/AndroidManifest.xml | 4 + .../components/about/ArkAboutFragment.kt | 60 ++++ .../components/about/presentation/ArkAbout.kt | 256 ++++++++++++++++ .../about/presentation/ContextUtils.kt | 32 ++ .../about/presentation/theme/Color.kt | 15 + .../about/presentation/ui/DonateBtn.kt | 67 +++++ .../about/presentation/ui/QRCryptoDialog.kt | 273 ++++++++++++++++++ .../about/presentation/ui/SocialLink.kt | 54 ++++ about/src/main/res/drawable/btc.xml | 14 + about/src/main/res/drawable/eth.xml | 30 ++ .../src/main/res/drawable/ic_about_coffee.xml | 15 + .../main/res/drawable/ic_about_discord.xml | 12 + .../main/res/drawable/ic_about_patreon.xml | 9 + about/src/main/res/drawable/ic_about_site.xml | 13 + .../main/res/drawable/ic_about_telegram.xml | 10 + about/src/main/res/drawable/ic_close.xml | 13 + about/src/main/res/drawable/ic_copy.xml | 13 + about/src/main/res/drawable/ic_download.xml | 13 + about/src/main/res/drawable/ic_external.xml | 13 + about/src/main/res/drawable/qr_btc.jpg | Bin 0 -> 50374 bytes about/src/main/res/drawable/qr_eth.jpg | Bin 0 -> 58570 bytes about/src/main/res/layout/fragment_about.xml | 12 + about/src/main/res/values/strings.xml | 34 +++ .../components/about/ExampleUnitTest.kt | 17 ++ gradle/libs.versions.toml | 13 + sample/build.gradle.kts | 1 + sample/src/main/AndroidManifest.xml | 1 + .../dev/arkbuilders/sample/MainActivity.kt | 6 + .../arkbuilders/sample/about/AboutActivity.kt | 26 ++ sample/src/main/res/layout/activity_about.xml | 11 + sample/src/main/res/layout/activity_main.xml | 9 + sample/src/main/res/values/strings.xml | 1 + settings.gradle.kts | 1 + 40 files changed, 1273 insertions(+) create mode 100644 .github/workflows/build_about.yml create mode 100644 .github/workflows/release_about.yml create mode 100644 about/.gitignore create mode 100644 about/build.gradle.kts create mode 100644 about/consumer-rules.pro create mode 100644 about/proguard-rules.pro create mode 100644 about/src/androidTest/java/dev/arkbuilders/components/about/ExampleInstrumentedTest.kt create mode 100644 about/src/main/AndroidManifest.xml create mode 100644 about/src/main/java/dev/arkbuilders/components/about/ArkAboutFragment.kt create mode 100644 about/src/main/java/dev/arkbuilders/components/about/presentation/ArkAbout.kt create mode 100644 about/src/main/java/dev/arkbuilders/components/about/presentation/ContextUtils.kt create mode 100644 about/src/main/java/dev/arkbuilders/components/about/presentation/theme/Color.kt create mode 100644 about/src/main/java/dev/arkbuilders/components/about/presentation/ui/DonateBtn.kt create mode 100644 about/src/main/java/dev/arkbuilders/components/about/presentation/ui/QRCryptoDialog.kt create mode 100644 about/src/main/java/dev/arkbuilders/components/about/presentation/ui/SocialLink.kt create mode 100644 about/src/main/res/drawable/btc.xml create mode 100644 about/src/main/res/drawable/eth.xml create mode 100644 about/src/main/res/drawable/ic_about_coffee.xml create mode 100644 about/src/main/res/drawable/ic_about_discord.xml create mode 100644 about/src/main/res/drawable/ic_about_patreon.xml create mode 100644 about/src/main/res/drawable/ic_about_site.xml create mode 100644 about/src/main/res/drawable/ic_about_telegram.xml create mode 100644 about/src/main/res/drawable/ic_close.xml create mode 100644 about/src/main/res/drawable/ic_copy.xml create mode 100644 about/src/main/res/drawable/ic_download.xml create mode 100644 about/src/main/res/drawable/ic_external.xml create mode 100644 about/src/main/res/drawable/qr_btc.jpg create mode 100644 about/src/main/res/drawable/qr_eth.jpg create mode 100644 about/src/main/res/layout/fragment_about.xml create mode 100644 about/src/main/res/values/strings.xml create mode 100644 about/src/test/java/dev/arkbuilders/components/about/ExampleUnitTest.kt create mode 100644 sample/src/main/java/dev/arkbuilders/sample/about/AboutActivity.kt create mode 100644 sample/src/main/res/layout/activity_about.xml diff --git a/.github/workflows/build_about.yml b/.github/workflows/build_about.yml new file mode 100644 index 0000000..b9f052d --- /dev/null +++ b/.github/workflows/build_about.yml @@ -0,0 +1,61 @@ +name: Build about module + +on: + push: + branches: [ main ] + paths: + - about/** + pull_request: + branches: + - main + paths: + - about/** + + +jobs: + build: + if: ${{ ! startsWith(github.actor, 'dependabot') }} + environment: Development + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - name: Set up JDK 17 + uses: actions/setup-java@v3 + with: + java-version: '17' + distribution: 'adopt' + cache: gradle + + - name: Validate Gradle wrapper + uses: gradle/wrapper-validation-action@v1.0.5 + + + - name: Decrypt the keystore for signing + run: | + echo "${{ secrets.KEYSTORE_ENCRYPTED }}" > keystore.asc + gpg -d --passphrase "${{ secrets.KEYSTORE_PASSWORD }}" --batch keystore.asc > keystore.jks + + - name: Build about module + run: ./gradlew about:assembleRelease + + - name: Build release sample APK + run: ./gradlew sample:assembleRelease + + - name: Upload release arm64-v8a APK + uses: actions/upload-artifact@v3 + with: + name: release-arm64-v8a-apk + path: ./sample/build/outputs/apk/release/sample-arm64-v8a-release.apk + + - name: Upload release armeabi-v7a APK + uses: actions/upload-artifact@v3 + with: + name: release-armeabi-v7a-apk + path: ./sample/build/outputs/apk/release/sample-armeabi-v7a-release.apk + + - name: Upload release universal APK + uses: actions/upload-artifact@v3 + with: + name: release-universal-apk + path: ./sample/build/outputs/apk/release/sample-universal-release.apk diff --git a/.github/workflows/release_about.yml b/.github/workflows/release_about.yml new file mode 100644 index 0000000..2e4963e --- /dev/null +++ b/.github/workflows/release_about.yml @@ -0,0 +1,28 @@ +name: Release about + +on: + push: + tags: + - 'about*' + +jobs: + release: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - name: Set up JDK 17 + uses: actions/setup-java@v3 + with: + java-version: '17' + distribution: 'adopt' + + - name: Validate Gradle wrapper + uses: gradle/wrapper-validation-action@v1.0.5 + + - name: Publish about to Github + uses: gradle/gradle-build-action@v2 + with: + arguments: about:publish + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/about/.gitignore b/about/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/about/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/about/build.gradle.kts b/about/build.gradle.kts new file mode 100644 index 0000000..1131b0e --- /dev/null +++ b/about/build.gradle.kts @@ -0,0 +1,90 @@ +import java.net.URI + +plugins { + id("com.android.library") + id("org.jetbrains.kotlin.android") + id("pl.allegro.tech.build.axion-release") + `maven-publish` +} + +android { + namespace = "dev.arkbuilders.components.about" + compileSdk = 34 + + defaultConfig { + minSdk = 26 + + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + consumerProguardFiles("consumer-rules.pro") + } + + buildTypes { + release { + isMinifyEnabled = false + proguardFiles( + getDefaultProguardFile("proguard-android-optimize.txt"), + "proguard-rules.pro" + ) + } + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + } + kotlinOptions { + jvmTarget = "17" + } + buildFeatures { + compose = true + } + composeOptions { + kotlinCompilerExtensionVersion = libs.versions.composeCompiler.get() + } + publishing { + singleVariant("release") { + withSourcesJar() + } + } +} + +dependencies { + implementation(libs.androidx.core.ktx) + implementation(libs.androidx.appcompat) + + implementation(libraries.androidx.compose.activity) + implementation(platform(libs.androidx.compose.bom)) + implementation(libs.androidx.compose.ui) + implementation(libs.androidx.compose.ui.graphics) + implementation(libs.androidx.compose.ui.tooling) + implementation(libs.androidx.compose.ui.tooling.preview) + implementation(libs.androidx.compose.material3) + + testImplementation(libs.junit) + androidTestImplementation(libs.androidx.test.junit) + androidTestImplementation(libs.androidx.test.espresso) +} + +val libVersion: String = scmVersion.version + +publishing { + publications { + create("release") { + groupId = "dev.arkbuilders.components" + artifactId = "about" + version = libVersion + afterEvaluate { + from(components["release"]) + } + } + } + repositories { + maven { + name = "GithubPackages" + url = URI("https://maven.pkg.github.com/ARK-Builders/ark-android") + credentials { + username = System.getenv("GITHUB_ACTOR") + password = System.getenv("GITHUB_TOKEN") + } + } + } +} \ No newline at end of file diff --git a/about/consumer-rules.pro b/about/consumer-rules.pro new file mode 100644 index 0000000..e69de29 diff --git a/about/proguard-rules.pro b/about/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/about/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/about/src/androidTest/java/dev/arkbuilders/components/about/ExampleInstrumentedTest.kt b/about/src/androidTest/java/dev/arkbuilders/components/about/ExampleInstrumentedTest.kt new file mode 100644 index 0000000..cc894ed --- /dev/null +++ b/about/src/androidTest/java/dev/arkbuilders/components/about/ExampleInstrumentedTest.kt @@ -0,0 +1,24 @@ +package dev.arkbuilders.components.about + +import androidx.test.platform.app.InstrumentationRegistry +import androidx.test.ext.junit.runners.AndroidJUnit4 + +import org.junit.Test +import org.junit.runner.RunWith + +import org.junit.Assert.* + +/** + * Instrumented test, which will execute on an Android device. + * + * See [testing documentation](http://d.android.com/tools/testing). + */ +@RunWith(AndroidJUnit4::class) +class ExampleInstrumentedTest { + @Test + fun useAppContext() { + // Context of the app under test. + val appContext = InstrumentationRegistry.getInstrumentation().targetContext + assertEquals("dev.arkbuilders.components.about.test", appContext.packageName) + } +} \ No newline at end of file diff --git a/about/src/main/AndroidManifest.xml b/about/src/main/AndroidManifest.xml new file mode 100644 index 0000000..a5918e6 --- /dev/null +++ b/about/src/main/AndroidManifest.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/about/src/main/java/dev/arkbuilders/components/about/ArkAboutFragment.kt b/about/src/main/java/dev/arkbuilders/components/about/ArkAboutFragment.kt new file mode 100644 index 0000000..b99bfd9 --- /dev/null +++ b/about/src/main/java/dev/arkbuilders/components/about/ArkAboutFragment.kt @@ -0,0 +1,60 @@ +package dev.arkbuilders.components.about + +import android.os.Bundle +import android.view.View +import androidx.annotation.DrawableRes +import androidx.compose.ui.platform.ComposeView +import androidx.compose.ui.platform.ViewCompositionStrategy +import androidx.fragment.app.Fragment +import dev.arkbuilders.components.about.presentation.ArkAbout + +class ArkAboutFragment : Fragment(R.layout.fragment_about) { + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + val composeView = view.findViewById(R.id.compose_view) + val appName = requireArguments().getString(APP_NAME_KEY) + ?: error("appName can't be null") + val appLogoResID = requireArguments().getInt(APP_LOGO_KEY) + val versionName = requireArguments().getString(VERSION_NAME_KEY) + ?: error("versionName can't be null") + val privacyPolicyUrl = requireArguments().getString(PRIVACY_POLICY_URL_KEY) + ?: error("privacyPolicyUrl can't be null") + + composeView.apply { + setViewCompositionStrategy( + ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed + ) + setContent { + ArkAbout( + appName = appName, + appLogoResId = appLogoResID, + versionName = versionName, + privacyPolicyUrl = privacyPolicyUrl + ) + } + } + } + + companion object { + private const val APP_NAME_KEY = "APP_NAME_KEY" + private const val APP_LOGO_KEY = "APP_LOGO_KEY" + private const val VERSION_NAME_KEY = "VERSION_NAME_KEY" + private const val PRIVACY_POLICY_URL_KEY = "PRIVACY_POLICY_URL_KEY" + + fun create( + appName: String, + @DrawableRes + appLogoResID: Int, + versionName: String, + privacyPolicyUrl: String + ) = ArkAboutFragment().apply { + arguments = Bundle().apply { + putString(APP_NAME_KEY, appName) + putInt(APP_LOGO_KEY, appLogoResID) + putString(VERSION_NAME_KEY, versionName) + putString(PRIVACY_POLICY_URL_KEY, privacyPolicyUrl) + } + } + } +} \ No newline at end of file diff --git a/about/src/main/java/dev/arkbuilders/components/about/presentation/ArkAbout.kt b/about/src/main/java/dev/arkbuilders/components/about/presentation/ArkAbout.kt new file mode 100644 index 0000000..41d8909 --- /dev/null +++ b/about/src/main/java/dev/arkbuilders/components/about/presentation/ArkAbout.kt @@ -0,0 +1,256 @@ +package dev.arkbuilders.components.about.presentation + +import androidx.annotation.DrawableRes +import androidx.compose.foundation.BorderStroke +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.foundation.verticalScroll +import androidx.compose.material3.HorizontalDivider +import androidx.compose.material3.Icon +import androidx.compose.material3.OutlinedButton +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import dev.arkbuilders.components.about.R +import dev.arkbuilders.components.about.presentation.theme.ArkColor +import dev.arkbuilders.components.about.presentation.ui.DonateBtn +import dev.arkbuilders.components.about.presentation.ui.QRCryptoDialog +import dev.arkbuilders.components.about.presentation.ui.SocialLink + +@Composable +fun ArkAbout( + appName: String, + @DrawableRes + appLogoResId: Int, + versionName: String, + privacyPolicyUrl: String +) { + val ctx = LocalContext.current + + var btcDialogVisible by remember { mutableStateOf(false) } + var ethDialogVisible by remember { mutableStateOf(false) } + + QRCryptoDialog( + visible = btcDialogVisible, + title = stringResource(R.string.about_donate_btc), + wallet = stringResource(R.string.about_btc_wallet), + fileName = "ArkQrBtc.jpg", + qrBitmap = R.drawable.qr_btc + ) { + btcDialogVisible = false + } + + QRCryptoDialog( + visible = ethDialogVisible, + title = stringResource(R.string.about_donate_eth), + wallet = stringResource(R.string.about_eth_wallet), + fileName = "ArkQrEth.jpg", + qrBitmap = R.drawable.qr_eth + ) { + ethDialogVisible = false + } + + Column( + modifier = Modifier + .verticalScroll(rememberScrollState()) + ) { + Column( + modifier = Modifier.padding(horizontal = 16.dp), + horizontalAlignment = Alignment.CenterHorizontally, + ) { + Icon( + modifier = Modifier.padding(top = 32.dp), + painter = painterResource(id = appLogoResId), + contentDescription = "", + tint = Color.Unspecified + ) + Text( + modifier = Modifier.padding(top = 20.dp), + text = appName, + fontSize = 20.sp, + fontWeight = FontWeight.SemiBold, + color = ArkColor.TextPrimary + ) + Text( + modifier = Modifier.padding(top = 12.dp), + text = stringResource(R.string.version, versionName), + color = ArkColor.TextTertiary + ) + Text( + modifier = Modifier.padding(top = 12.dp), + text = "ARK Builders · Copyright ©2024", + color = ArkColor.TextTertiary + ) + Row( + modifier = Modifier.padding(top = 8.dp), + verticalAlignment = Alignment.CenterVertically + ) { + SocialLink( + painterResource(R.drawable.ic_about_site), + text = stringResource(R.string.website) + ) { + ctx.openLink(ctx.getString(R.string.ark_website_url)) + } + SocialLink( + painterResource(R.drawable.ic_about_telegram), + text = stringResource(R.string.telegram) + ) { + ctx.openLink(ctx.getString(R.string.ark_tg_url)) + } + SocialLink( + painterResource(R.drawable.ic_about_discord), + text = stringResource(R.string.discord) + ) { + ctx.openLink(ctx.getString(R.string.ark_discord_url)) + } + } + OutlinedButton( + modifier = Modifier + .padding(top = 28.dp) + .fillMaxWidth(), + onClick = { ctx.openLink(privacyPolicyUrl) }, + border = BorderStroke( + width = 1.dp, + color = ArkColor.BorderSecondary + ), + shape = RoundedCornerShape(8.dp) + ) { + Text( + text = stringResource(R.string.privacy_policy), + fontWeight = FontWeight.SemiBold, + color = ArkColor.FGSecondary + ) + Icon( + modifier = Modifier.padding(start = 6.dp), + painter = painterResource(R.drawable.ic_external), + contentDescription = "", + tint = ArkColor.FGSecondary + ) + } + HorizontalDivider( + modifier = Modifier.padding(top = 20.dp), + thickness = 1.dp, + color = ArkColor.BorderSecondary + ) + Column { + Text( + modifier = Modifier.padding(top = 20.dp), + text = stringResource(R.string.about_support_us), + fontSize = 16.sp, + fontWeight = FontWeight.SemiBold, + color = ArkColor.TextPrimary + ) + Text( + modifier = Modifier.padding(top = 4.dp), + text = stringResource(R.string.about_we_greatly_appreciate_every_bit_of_support), + color = ArkColor.TextTertiary + ) + Row(modifier = Modifier.padding(top = 12.dp)) { + DonateBtn( + modifier = Modifier, + icon = painterResource(R.drawable.btc), + text = stringResource(R.string.about_donate_using_btc), + ) { + btcDialogVisible = true + } + DonateBtn( + modifier = Modifier.padding(start = 12.dp), + icon = painterResource(R.drawable.eth), + text = stringResource(R.string.about_donate_using_eth) + ) { + ethDialogVisible = true + } + } + Row(modifier = Modifier.padding(top = 12.dp)) { + DonateBtn( + modifier = Modifier, + icon = painterResource(R.drawable.ic_about_patreon), + text = stringResource(R.string.about_donate_on_patreon) + ) { + ctx.openLink(ctx.getString(R.string.about_ark_patreon_url)) + } + DonateBtn( + modifier = Modifier.padding(start = 12.dp), + icon = painterResource(R.drawable.ic_about_coffee), + text = stringResource(R.string.about_buy_as_a_coffee) + ) { + ctx.openLink(ctx.getString(R.string.about_ark_buy_coffee_url)) + } + } + HorizontalDivider( + modifier = Modifier.padding(top = 20.dp), + thickness = 1.dp, + color = ArkColor.BorderSecondary + ) + Row(modifier = Modifier.padding(top = 12.dp, bottom = 50.dp)) { + OutlinedButton( + modifier = Modifier, + onClick = { ctx.openLink(ctx.getString(R.string.ark_contribute_url)) }, + border = BorderStroke( + width = 1.dp, + color = ArkColor.BorderSecondary + ), + shape = RoundedCornerShape(8.dp), + contentPadding = PaddingValues(0.dp) + ) { + Text( + modifier = Modifier.padding(8.dp), + text = stringResource(R.string.about_discover_issues_to_work_on), + color = ArkColor.TextSecondary, + fontSize = 12.sp, + fontWeight = FontWeight.Medium + ) + } + OutlinedButton( + modifier = Modifier.padding(start = 12.dp), + onClick = { }, + border = BorderStroke( + width = 1.dp, + color = ArkColor.BorderSecondary + ), + shape = RoundedCornerShape(8.dp), + contentPadding = PaddingValues(0.dp), + enabled = false + ) { + Text( + modifier = Modifier.padding(8.dp), + text = stringResource(R.string.about_see_open_bounties), + color = ArkColor.TextPlaceHolder, + fontSize = 12.sp, + fontWeight = FontWeight.Medium + ) + } + } + } + } + } +} + +@Preview(showBackground = true) +@Composable +private fun PreviewArkAbout() { + ArkAbout( + appName = "App name", + appLogoResId = R.drawable.qr_btc, + versionName = "1.0.0", + privacyPolicyUrl = "" + ) +} \ No newline at end of file diff --git a/about/src/main/java/dev/arkbuilders/components/about/presentation/ContextUtils.kt b/about/src/main/java/dev/arkbuilders/components/about/presentation/ContextUtils.kt new file mode 100644 index 0000000..b047fac --- /dev/null +++ b/about/src/main/java/dev/arkbuilders/components/about/presentation/ContextUtils.kt @@ -0,0 +1,32 @@ +package dev.arkbuilders.components.about.presentation + +import android.content.Context +import android.content.Intent +import android.net.Uri +import android.widget.Toast +import dev.arkbuilders.components.about.R + +internal fun Context.openLink(url: String) { + toastIfError(this) { + startActivity(Intent(Intent.ACTION_VIEW).setData(Uri.parse(url))) + } +} + +internal fun Context.openEmail(mailTo: String) { + toastIfError(this) { + val uri = Uri.parse("mailto:$mailTo") + startActivity(Intent(Intent.ACTION_SENDTO, uri)) + } +} + +private fun toastIfError(ctx: Context, action: () -> Unit) { + try { + action() + } catch (e: Throwable) { + Toast.makeText( + ctx, + ctx.getString(R.string.oops_something_went_wrong), + Toast.LENGTH_SHORT + ).show() + } +} \ No newline at end of file diff --git a/about/src/main/java/dev/arkbuilders/components/about/presentation/theme/Color.kt b/about/src/main/java/dev/arkbuilders/components/about/presentation/theme/Color.kt new file mode 100644 index 0000000..a5216d1 --- /dev/null +++ b/about/src/main/java/dev/arkbuilders/components/about/presentation/theme/Color.kt @@ -0,0 +1,15 @@ +package dev.arkbuilders.components.about.presentation.theme + +import androidx.compose.ui.graphics.Color + +internal object ArkColor { + val TextPrimary = Color(0xFF101828) + val TextSecondary = Color(0xFF344054) + val TextTertiary = Color(0xFF475467) + val TextPlaceHolder = Color(0xFF667085) + + val FGSecondary = Color(0xFF344054) + val FGQuinary = Color(0xFF98A2B3) + val Border = Color(0xFFD0D5DD) + val BorderSecondary = Color(0xFFEAECF0) +} \ No newline at end of file diff --git a/about/src/main/java/dev/arkbuilders/components/about/presentation/ui/DonateBtn.kt b/about/src/main/java/dev/arkbuilders/components/about/presentation/ui/DonateBtn.kt new file mode 100644 index 0000000..a8de45a --- /dev/null +++ b/about/src/main/java/dev/arkbuilders/components/about/presentation/ui/DonateBtn.kt @@ -0,0 +1,67 @@ +package dev.arkbuilders.components.about.presentation.ui + +import androidx.compose.foundation.BorderStroke +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.Icon +import androidx.compose.material3.OutlinedButton +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.painter.Painter +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import dev.arkbuilders.components.about.R +import dev.arkbuilders.components.about.presentation.theme.ArkColor + +@Composable +internal fun DonateBtn( + modifier: Modifier, + icon: Painter, + text: String, + onClick: () -> Unit +) { + OutlinedButton( + modifier = modifier, + onClick = onClick, + border = BorderStroke( + width = 1.dp, + color = ArkColor.BorderSecondary + ), + shape = RoundedCornerShape(8.dp), + contentPadding = PaddingValues(0.dp) + ) { + Icon( + modifier = Modifier + .padding(start = 8.dp, top = 8.dp, bottom = 8.dp) + .size(20.dp), + painter = icon, + contentDescription = "", + tint = Color.Unspecified + ) + Text( + modifier = Modifier.padding(start = 8.dp, end = 8.dp), + text = text, + fontSize = 12.sp, + fontWeight = FontWeight.Medium, + color = ArkColor.FGSecondary + ) + } +} + +@Preview(showBackground = true) +@Composable +private fun PreviewDonateBtn() { + DonateBtn( + modifier = Modifier, + icon = painterResource(R.drawable.btc), + text = "Donate", + onClick = {} + ) +} \ No newline at end of file diff --git a/about/src/main/java/dev/arkbuilders/components/about/presentation/ui/QRCryptoDialog.kt b/about/src/main/java/dev/arkbuilders/components/about/presentation/ui/QRCryptoDialog.kt new file mode 100644 index 0000000..b48e27c --- /dev/null +++ b/about/src/main/java/dev/arkbuilders/components/about/presentation/ui/QRCryptoDialog.kt @@ -0,0 +1,273 @@ +package dev.arkbuilders.components.about.presentation.ui + +import android.annotation.SuppressLint +import android.widget.Toast +import androidx.activity.compose.rememberLauncherForActivityResult +import androidx.activity.result.contract.ActivityResultContracts +import androidx.annotation.DrawableRes +import androidx.compose.foundation.BorderStroke +import androidx.compose.foundation.Image +import androidx.compose.foundation.background +import androidx.compose.foundation.border +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.foundation.text.ClickableText +import androidx.compose.foundation.verticalScroll +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.OutlinedButton +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.material3.VerticalDivider +import androidx.compose.runtime.Composable +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.RectangleShape +import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.platform.LocalClipboardManager +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.AnnotatedString +import androidx.compose.ui.text.SpanStyle +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.text.buildAnnotatedString +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.style.TextDecoration +import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.text.withStyle +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import androidx.compose.ui.window.Dialog +import androidx.compose.ui.window.DialogProperties +import dev.arkbuilders.components.about.R +import dev.arkbuilders.components.about.presentation.openEmail +import dev.arkbuilders.components.about.presentation.theme.ArkColor +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch + +@Composable +internal fun QRCryptoDialog( + visible: Boolean, + title: String, + wallet: String, + fileName: String, + @DrawableRes qrBitmap: Int, + onDismiss: () -> Unit +) { + if (visible.not()) + return + + Dialog( + onDismissRequest = onDismiss, + properties = DialogProperties(usePlatformDefaultWidth = false) + ) { + Content( + title = title, + wallet = wallet, + fileName = fileName, + qrBitmap = qrBitmap, + onDismiss = onDismiss + ) + } +} + +@SuppressLint("ResourceType") +@Composable +private fun Content( + title: String, + wallet: String, + fileName: String, + @DrawableRes qrBitmap: Int, + onDismiss: () -> Unit +) { + val ctx = LocalContext.current + val clipboardManager = LocalClipboardManager.current + val scope = rememberCoroutineScope() + val launcher = + rememberLauncherForActivityResult(ActivityResultContracts.CreateDocument("image/jpg")) { uri -> + uri ?: return@rememberLauncherForActivityResult + scope.launch(Dispatchers.IO) { + val input = ctx.resources.openRawResource(qrBitmap) + ctx.contentResolver.openOutputStream(uri).use { output -> + output?.let { + input.copyTo(output) + } + } + input.close() + } + } + + Box( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 16.dp) + .background(Color.White, RoundedCornerShape(12.dp)) + ) { + Column( + modifier = Modifier + .padding(horizontal = 16.dp) + .verticalScroll(rememberScrollState()) + ) { + Row { + Text( + modifier = Modifier.padding(top = 20.dp), + text = title, + fontWeight = FontWeight.SemiBold, + color = ArkColor.TextPrimary, + fontSize = 18.sp + ) + } + val emailText = buildAnnotatedString { + append(stringResource(R.string.about_send_email_part_1)) + pushStringAnnotation( + tag = "email", + annotation = ctx.getString(R.string.ark_support_email) + ) + withStyle(style = SpanStyle(textDecoration = TextDecoration.Underline)) { + append(ctx.getString(R.string.ark_support_email)) + } + pop() + append(stringResource(R.string.about_send_email_part_2)) + } + ClickableText( + modifier = Modifier.padding(top = 4.dp), + text = emailText, + style = TextStyle.Default.copy(color = ArkColor.TextTertiary) + ) { offset -> + emailText + .getStringAnnotations(tag = "email", offset, offset) + .firstOrNull() + ?.let { + ctx.openEmail(ctx.getString(R.string.ark_support_email)) + } + } + Image( + modifier = Modifier + .fillMaxWidth() + .padding(top = 16.dp), + painter = painterResource(qrBitmap), + contentDescription = "", + contentScale = ContentScale.FillWidth + ) + Row( + modifier = Modifier + .padding(top = 24.dp) + .fillMaxWidth() + .height(45.dp) + .clip(RoundedCornerShape(8.dp)) + .border(1.dp, ArkColor.Border, RoundedCornerShape(8.dp)), + verticalAlignment = Alignment.CenterVertically + ) { + Text( + modifier = Modifier + .weight(1f) + .padding(horizontal = 12.dp, vertical = 8.dp), + text = wallet, + fontSize = 16.sp, + maxLines = 1, + color = ArkColor.TextPlaceHolder, + overflow = TextOverflow.Ellipsis + ) + VerticalDivider( + modifier = Modifier.height(45.dp), + color = ArkColor.Border + ) + TextButton( + modifier = Modifier, + contentPadding = PaddingValues(0.dp), + onClick = { + clipboardManager.setText(AnnotatedString(wallet)) + Toast + .makeText( + ctx, + ctx.getString(R.string.about_wallet_copied), + Toast.LENGTH_SHORT + ) + .show() + }, + shape = RectangleShape + ) { + Row( + modifier = Modifier.padding( + horizontal = 16.dp, + vertical = 12.dp + ) + ) { + Icon( + painter = painterResource(R.drawable.ic_copy), + contentDescription = "", + tint = ArkColor.TextSecondary + ) + Text( + modifier = Modifier.padding(start = 6.dp), + text = stringResource(R.string.copy), + color = ArkColor.TextSecondary, + fontWeight = FontWeight.SemiBold + ) + } + } + } + OutlinedButton( + modifier = Modifier + .padding(top = 12.dp, bottom = 16.dp) + .fillMaxWidth(), + onClick = { launcher.launch(fileName) }, + border = BorderStroke( + width = 1.dp, + color = ArkColor.BorderSecondary + ), + shape = RoundedCornerShape(8.dp) + ) { + Icon( + painter = painterResource(R.drawable.ic_download), + contentDescription = "", + tint = ArkColor.TextSecondary + ) + Text( + modifier = Modifier.padding(start = 8.dp), + text = stringResource(R.string.about_download_qr_image), + fontWeight = FontWeight.SemiBold, + fontSize = 16.sp, + color = ArkColor.TextSecondary + ) + } + } + IconButton( + modifier = Modifier + .padding(end = 12.dp, top = 12.dp) + .align(Alignment.TopEnd), + onClick = { onDismiss() } + ) { + Icon( + modifier = Modifier, + painter = painterResource(id = R.drawable.ic_close), + contentDescription = "", + tint = ArkColor.FGQuinary + ) + } + } +} + +@Preview(showBackground = true) +@Composable +private fun PreviewDialogContent() { + Content( + title = "Donate using Bitcoin", + wallet = "0x041220", + fileName = "1.jpg", + qrBitmap = R.drawable.btc, + onDismiss = {} + ) +} \ No newline at end of file diff --git a/about/src/main/java/dev/arkbuilders/components/about/presentation/ui/SocialLink.kt b/about/src/main/java/dev/arkbuilders/components/about/presentation/ui/SocialLink.kt new file mode 100644 index 0000000..1ec98e9 --- /dev/null +++ b/about/src/main/java/dev/arkbuilders/components/about/presentation/ui/SocialLink.kt @@ -0,0 +1,54 @@ +package dev.arkbuilders.components.about.presentation.ui + +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.defaultMinSize +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.Icon +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.painter.Painter +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import dev.arkbuilders.components.about.R +import dev.arkbuilders.components.about.presentation.theme.ArkColor + +@Composable +internal fun SocialLink(painter: Painter, text: String, onClick: () -> Unit) { + TextButton( + modifier = Modifier.defaultMinSize( + minWidth = 1.dp, + minHeight = 1.dp + ), + contentPadding = PaddingValues(horizontal = 4.dp, vertical = 4.dp), + onClick = { onClick() }, + shape = RoundedCornerShape(4.dp) + ) { + Icon( + modifier = Modifier.size(20.dp), + painter = painter, + contentDescription = text, + tint = Color.Unspecified + ) + Text( + modifier = Modifier.padding(start = 4.dp), + text = text, + color = ArkColor.TextTertiary + ) + } +} + +@Preview(showBackground = true) +@Composable +private fun PreviewSocialLink() { + SocialLink( + painter = painterResource(R.drawable.ic_about_discord), + text = "Discord", + onClick = {} + ) +} \ No newline at end of file diff --git a/about/src/main/res/drawable/btc.xml b/about/src/main/res/drawable/btc.xml new file mode 100644 index 0000000..6f9033e --- /dev/null +++ b/about/src/main/res/drawable/btc.xml @@ -0,0 +1,14 @@ + + + + diff --git a/about/src/main/res/drawable/eth.xml b/about/src/main/res/drawable/eth.xml new file mode 100644 index 0000000..4a5ff45 --- /dev/null +++ b/about/src/main/res/drawable/eth.xml @@ -0,0 +1,30 @@ + + + + + + + + diff --git a/about/src/main/res/drawable/ic_about_coffee.xml b/about/src/main/res/drawable/ic_about_coffee.xml new file mode 100644 index 0000000..cff5abf --- /dev/null +++ b/about/src/main/res/drawable/ic_about_coffee.xml @@ -0,0 +1,15 @@ + + + + + diff --git a/about/src/main/res/drawable/ic_about_discord.xml b/about/src/main/res/drawable/ic_about_discord.xml new file mode 100644 index 0000000..b41f6cb --- /dev/null +++ b/about/src/main/res/drawable/ic_about_discord.xml @@ -0,0 +1,12 @@ + + + + diff --git a/about/src/main/res/drawable/ic_about_patreon.xml b/about/src/main/res/drawable/ic_about_patreon.xml new file mode 100644 index 0000000..e6aa6e2 --- /dev/null +++ b/about/src/main/res/drawable/ic_about_patreon.xml @@ -0,0 +1,9 @@ + + + diff --git a/about/src/main/res/drawable/ic_about_site.xml b/about/src/main/res/drawable/ic_about_site.xml new file mode 100644 index 0000000..8a2bbd8 --- /dev/null +++ b/about/src/main/res/drawable/ic_about_site.xml @@ -0,0 +1,13 @@ + + + + diff --git a/about/src/main/res/drawable/ic_about_telegram.xml b/about/src/main/res/drawable/ic_about_telegram.xml new file mode 100644 index 0000000..03c2dae --- /dev/null +++ b/about/src/main/res/drawable/ic_about_telegram.xml @@ -0,0 +1,10 @@ + + + diff --git a/about/src/main/res/drawable/ic_close.xml b/about/src/main/res/drawable/ic_close.xml new file mode 100644 index 0000000..676a2d1 --- /dev/null +++ b/about/src/main/res/drawable/ic_close.xml @@ -0,0 +1,13 @@ + + + diff --git a/about/src/main/res/drawable/ic_copy.xml b/about/src/main/res/drawable/ic_copy.xml new file mode 100644 index 0000000..9675918 --- /dev/null +++ b/about/src/main/res/drawable/ic_copy.xml @@ -0,0 +1,13 @@ + + + diff --git a/about/src/main/res/drawable/ic_download.xml b/about/src/main/res/drawable/ic_download.xml new file mode 100644 index 0000000..cb59932 --- /dev/null +++ b/about/src/main/res/drawable/ic_download.xml @@ -0,0 +1,13 @@ + + + diff --git a/about/src/main/res/drawable/ic_external.xml b/about/src/main/res/drawable/ic_external.xml new file mode 100644 index 0000000..b05e5a4 --- /dev/null +++ b/about/src/main/res/drawable/ic_external.xml @@ -0,0 +1,13 @@ + + + diff --git a/about/src/main/res/drawable/qr_btc.jpg b/about/src/main/res/drawable/qr_btc.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c6c022979b7429136febe5ac8e7fa9ecfdb57040 GIT binary patch literal 50374 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 literal 0 HcmV?d00001 diff --git a/about/src/main/res/drawable/qr_eth.jpg b/about/src/main/res/drawable/qr_eth.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7607b3e85659f16360477c5e727a7bf1f746bded GIT binary patch literal 58570 zcmb@u2UrtZ+b%pYK&aAt2}o0E(u+W_&_o24-l8JSP(-AcASftRKtT}*2na|CN|W9R zi1gm80wR!5BZP3q_kF+r+k2nuod5hKTytfOnOQT>TI*@|{VY$$Pv!xpYdZQm00aU7 z^uRyhWZ~8aZ9f-B0MOSz4^RUDKnnm63IGDON>72!|Fl1W?Nbma00sX&0z6p2_MdD1 z96S)pe|^V*ZQlR1UxDqj|G5Ud6_ACT0vN#WH1LoE+ic+XNAPfo{P(jOz;-`)Q2*-> ze6fG^_+Q_;`i91Wa?-LFq~+zn`!C4JtI5i#$tnxV%Bx+FRa2A)uZCp)_Zxw?12g~` z_;=rb-toU=I{DN5k4%3a@n14s2HVj8ye}1a4b@-T?Eh*1ksWgC-+k)+x%WS9)0^NA z;OF1(e)88*{v!r><;fIq1)!#)f>BXY!(cEP8fsd4HU@e+I(lvvRz@~{9=HHM4?YXYT?VDn%Qp+;6>!`Jqn|t<>2Jv<`ESW zKYQ-Hf})bLimKX`tJ*rcdivLHo0yuJTUc7z-*<3ya&~#(_1N3T*Uvv7{OPlZ$mcJj z5|duNPEL9AHuZgWPVR@i{DP04%gQS%tG-m%w6wOhci=j^z77rzkBp9uPfRW>E-iom zv9h}Mld!$BySINp{C)UGE(kcO|MmH|VE>Sd8I_D3$rDPQn_GE-0r$x^Xg zx(U1M$$Cca2{qg0gse}^G{W+?@a*><4bXCkC@hE){)qN3$^Op-3;Ta1+5aWjf6Fxq z&_f~MlhDm4(JLo&aUpWbXGyhdi91Vx0g-YQWk*pGtJb z(4hN1fL(>8oB&ZJsK4KU_*-w8r~mQv!cnOe>u9|aHm1*l4;gKkQ;C7?sStc)ls5y@ zG+nrhppk;u%rtaJoFBDOeAY?(GkkXoP7XT@?U6nKoEd2+W{pr%CD}i&2%UtZbB$$5*qzwQAWJOq{4c$}8gFzjA(0xXD{?ELWeIZjfU*2m2q z6p}fKF!4xr!@PAk{$Mq^|m3a*1b_Ukkuw-1|`DK5k-Y%%nZ2NDLtiRanBffNA|e40H*GKDd0aaZ6(P%J+>XTtScTD@dzf z-{OZC^TB3Ph}&Ts-;;&TzcFTxNtiw|zqEj4nIP7-jvkJLT}vKHp%n#`zqT70Jw!bx zCg5X9=o0In!WPy-^rxgE7=ACOtvuW-scLHA(4@!5et7EMK2YVtn8xb3(QEy|s2F(c z{ljVt$H?G^wy7O--@x{?7iCz#ioKS!(G%e2mlqWR=~^^m{mFwPiO|6&zsva}9cHRx z>@P+H7*pk9Hy{hv-JMeJ%ZG!yaxBJVOXP0A&;fgQ9zpi7k#4T&GIei;CrRIqq(78y zbtt=~aO2!xAFu?s9~x6iIhjOW9q{nBe(e+1%aN)TE@`TBL*fO#vBQYbuL>EiJG6mK zUcA$$kbf$a$|zut_~HZ*S!%=VGhj{tEyW%4rmf%S1ALFY!1aDf0kQ{+A{jX?Ff#TO z&E;U-=+2iuKQ$){cpoUPVDJN)EGGcQ(13g_a{{ni&GDm`lYS!iMj4N}Dt1;{<0Cf+ zuv>LywpT5KQ-#EqIN#QabNxIEo%;V*%l<#=c>P7~kvn6L4W!H_Z12=QbBs}GrM#Pv zN*uz4uxQc{)Kg{aI30w|cdiD?XN-4Yi^zQFE+zcRarnXs(60@6BFc?ONk<-sWTRus z!qnqb#3(WTcpR}Gu!eTV{1)Gz+aqBP>C6?66wt*4_)#hP*Dhp+WK7JGX|3MvTpCOy z+7-nZ+_0Z0#~z8R&K#OUK&_DVJ^?P5BZxd`Vidw9o=65C==Fu{ITmgVt2+T&uiK*g ziy6sO81k9=vX+2#zm%3qpU-$YpW5eo_ZYrN2RcC&@gu<)JeI5<8F>P%k2phr7)7JE zP1P@*07xh})mDcmz%`Wt*ZAX$dE_vOWyb&cSMGtL$m5H+6Cg7RAmpQ+>D~sJ3xMl| z`j?glzI>-))UW&3Oe`i&-mbgQE?rr#uEB(b*U!rM>5>nXrwu)tLR~_jJoR(M)@1U$ zP56puozmu;J?!PivUua6P08<)!Wl}jQG3l?pdA8*j(Af8T4pOai2*^D(Ru`#`=B|a>I67A0qu6N4Wm)vx&2T;`;kxZ-O)k!x_Nn$}o86ZZ{;d+a;*((P^*nHRM&&1!AsD+r@ev8iiM% zI6Sk%%HArwi=ZFd=lU77$WX0iC=sMaB0f59->a0vzB;<$3pqxuo&Z!qDg)|tp1w*i z-IZ<67iGA<`*KSU_rn>A#VQjq1RZ2#O2A{;wR1r-%+twfxH1>$QJw~BP~s&4)0)nT zGv`Qp@MFpQ<7eD={i+DTH1g$8^=vZFy>;?4XEa^`w1e!w?4Se#VqXhK>iVQqwv9q~ zm-#Fw>h=1QwT#yt;Ph(}*vxx{p`=|%X~!(99^^-v>$uSdo1Q6pn?_j;~(OEb)i{U<97+H1wpA0 z4E9808bo+#l9rt9qBn|)Hw zii+mzAO9HE;=V}(vbGeQ+!#-ee(?KasK(0QCwrX?5bTL#Eyk!vmc`iy!g;Sgdq7dl zW6+_&261e02&k-G=RbjyvI9;L`Zv#^`~r@Ysor#{ZQO1LF7J zoB;7#r_o~<<5&3o6ob11D_ZzAjwf$GQMONr9lY<1rt2T z*Ycht*5}cybV%eHVw(z-8tZog>@p(-gRD=0#DYb}Ln8d})Y#Z0l1D1#I1sd4XHT^c z$1>y$%FOCbLvTsIiNju~-O-B=fjI#nDRGtH0t z!oJBvev(Igr}IvKTZo{+eL(pxdL-ZrTlZ_?!(BJZyWe$ZQT$2>uRkRZTsmNbd?G~SQgKfnA1eh5 zT60#vPG}<}b3xVbM3v#u9g|gYK^np6!e~zg&X8-=O!-rvj8w(bl8}midAM0YLJS9f z-CSQzt38{J%Z5dEvc7xY9aJ27(-WZd$q6vvq6KT8i_#Rr>%Ne3Rd`)?q1#o|L-Pzy zRXB`#w`64j^FpT1dftHF=@v6x!KCpb`(&eJOg2=!ls&81Po_2FOs#b>QopJ$o%LQ_ zwunrw^O~A=L}Z?B-dggfDJva)y=*S1xcHt}sHV<8tyLjO;siL844N*x1oY~e2IK#m z3qm!6#u_dXTX43+yTsdu7n;2!sja4yDlGE*dd5!GEwv0O;^NCKF}%woff(sG*8(ft3w@L65K)5pe1h~tKKISTi?8DlOev1o$2}Y?aXy72&)CL&3>-JFN zdRpTl4Yp{@wRn%0`&Y@LWpUmWzE4#;w=P^Nl9FiB7>Rtuk!$C|O`ul2mEU!`jak7US9%u>GQhlYiW+1Z6t(^uF& zp4LjZLQhr%2Fr&ATl!CcDfSZ(`S}ecbIipfR_}vhM8oY9;6?U7&av3u*B|04Il{@~ zSfa5)vBGX?`3cY{L1u$&!$?w%0_grOaLj{1XUMAik8>mvOq|vlcNr`GeFyrlClGu? zUcoGiC+09B>!OWq?^Mp~Psu7ckKEusFmvo==_c1Ffg{0&c38vgEVzKlq&eyQ`1nV5 zpJ!0ubXcgSSQJ-@rkDt;&S!10Qs#k(E9c%(Fs~s^e$Jl8kH%)t{R$E~wq)pDn*m3Ib8G64zeT95G`sZUN@`_2B&3$u9g`3_x{4XJw_sc-1v@i@yV;#{aIWLOEI2K?TcXN)M< z2s9Xln+>{RGgMy++gvU&aob2R*OYxwg+5*KI2s94bFMsakxXiLVmZ^7qa`y*MssX|m27hhQREE}Q_o4{C0_E;d5lMJcCHFn`>L)#8E*=X!Fa_C?<* zkCM#ZTCN^EGP8@VKUF)2;v4;jq_{jE@`d8(j+!6f}u6b)E)Fn6k5on zLJDCNf4w&G;ziShyFO+X!%Uacm^?>AC5V&zD~5Qb+CV3XD_$PTP=uE@^I89w1y8eXK4Fi zD1Mb>60`EuM~8H3MR+shU^ANKkPXaVGsNx9@Wo(MD<@0e`=2b9-RGbA#6Z6UJYop$ zR$#W#u}>9AV8qviA%so;t+kkg@936LO)bzMRW0=$a!WUEy#f&)=YO1|)(N>TdAZNB zPJl{Kv;VHA{|9QGE_0pVRSI_e35m~iv2t0v`)_qU3ti}OvL3Fxl&?rG^f@rUo^`#1 zN{?U7d;=7l^5p z*3P_lzX5C^?lLo8??!9|zJ z1AIMx@9jTd4~BI6KG`C7voYw26=C%c^5w^0RR@3BF031V;#LjtQ+l0mdpVpkrOScT>F`)=^ZSbnd;FYh!^*74?Hys<{c zW|ku&`r;2SF@#ZzHGIS~KHs%QN6rdFxLJKwy>0Z&mdAlo@6t;h)OR?CUXow8O|r6i z>>ka8<&8^JI?Zg5{b}V<$6586<^x?)xxnkUi>i_z@V$9#GVa^;MNimilf_+{0AFn6 zdNC2S;iB^30>WmIVuAah+a^XEQXL#gm{c%@b)d^S-@&|U`OLFO3?rMHA!l*|;<6P= zgA;F8E@vt$aOody8mF zRs!AaqXY79_>x^Kp0TB7D^gL)Z7)_XP%)M3siU#xJvyh~QNVuna^>~ltVNsM9cp-Q zqL9l4F&Qx}710ZxcH&3Z(4D+jz?X{zBW)LiQ@#E5p*o=gTp-%beIvxu%<@#CdihE! zu>T`tbo`h9-RFCg7E(dQgnf%2#N-~fsP+A`5hlxM_QxjxkNU+zKU~|s?=0Wvq}%0j zW8E&r&m9=Pq&aDzde95z#3}N#?zy97bSw~j5kDD7NpxFS5UFf#f8|f#owis@83i-$ z=5sI-484GwKQ=I|8&srmRiyK+s(JcE#AxIZgquW-t*ZN5z!s|TV{!I68hrYBVxY;G z;@yH-9Yuqg46l;8a!uK!4tb=fA^E-0fzdWLyu#==-7Fa0_=1wg0^V?%P>-k(I6Z`F z9*>@Wa3rG5lUC%+n12(=OA`H)H-P5%kcc>hnvaihUYOL{nZA~AHC%FY9QxB4vaQdj z-=J%PG*e;!j^?jGh%f9P@ops1<>UJeBXF9L3Ujdmn@Pd=M&qjT;bQT(xlfsw6GwcXLN3C&f#uQBchE8L1( zx2CT^PFZHhYbcj;V`+&(*>lA6D^@9Oqbt|qz6)7ct%0mVN+;ibXVKiGxarWI%rAK9 zY_nHc@62~SUbt_`S?HCezWtfmPuZ1EjuaAO1G$6 z()_)PLGcoM5^t{@Z^rBHAjoKWJ)-Hr)9wMs=r-@@ozGv{mLBZ%_#fbE*A1^MvfZ|v zZuev=jrDC?i10;lvq8i=W*qk!UvQqYFPPS4OyF)~Ew!0H7x7jcA=%<13YHMG&3P^oH0jc2w|_JYl%G-~ zE5_oT7WS*>T@<~FiobB)lac94LC?&j5jM}BLOyBW7_F07n7J`#T^gvGTg!5$tkB&y z)akqU7wqj4uQsw8{vbT3((uvllwzkn#~G(-PVS@3!>A_EbpMe3j}`_+WI*Gt^4yjvg#e zFahcA%tL;+=q9FdTR*MONmwrD8SQd-c=Jj=mYw((AKk7gL1>>X{*a5AxPR4j$7yn! zUO-k$!1gX4+cEh8x0(6CO5EVim~y&P~Tq(>ZEJ_uR9k&d!HE z2^s0ApXtJjGSBK*-@A~x#}pCbCPPy1E30FL5?X39d#P=h?NGsZWP1%JYSX*c;ggcD zd5^Ea8oop6(ULI#LuY85$5TypipK6uJ@(&m4`g~ z_f<@})RT}-w&!fc95k-dGam0CDf?lgng}qLcv=AmP?bI*LPIOnsXc=#iFYi=;{f(W zG^Jv?@?~OJRci4sC7(Hm*Xk4R9xN|G6+8UUm+J`9wW#d1MS0&x*Kj|SMmlfd#8(-- zLqv#|7BRG|Uh6!G6VVp5k=rZN(=TCMdkT7MK4P%!Vec1$xnwNVq1kOcN5_{EA2%pH zNmtE#GtS`SY8O=R#M=zb_H06&!__M1Wid5I`Pfe+!zC%kW_+`Bm5*DZj|4Y!*>W8E zDbF_YIgffH53kX15Vxm?7b@?CVET#_2Y+QLz}&|M@tViQsw-xZ)Wf<>Mt>DcoB3O` zD`Z)mn&vYvbxAFbsJN3d={9X{_L+sn`Q7<(6%~XrYO#;gPuUD_mdhSdBE)I{Pi?sV zu0uZV%Rcr)0~Lt#hz>Tc=YY0KaTU6<6@%V3^WHjKgOj7K9X7T!Zl803@2zoyVC{Ft zzy5ZBU?kngE2cy~Ubl|5O>}k};1B5&YNmydd4N5dOU^csM3X1TGf0vUVR+A-|9iY z2@qD{cD_xhx+WCINY zL=xrkTef(`(NAKZE1TU1MdLxEa^6~X={U<~ZUe-R23j6CG+hl%I@8PAFjt@&${d}Wh2YO`M&aM5c%dx9+@G2ivh zCGuV^t$*I??cv1ts6$WG;w*({yFa$IF^YV;zYdn`QWKXyVB5?w!P=Qn`Y7;8)ZVfD z&5DuTZa1B;MslM+WF>E0;(fJ!no$Arpn8jgIHrR)&8;6T6ZzEcDHKcZnescd??H42 zS@APoI#wVL?dIvp`t1xI)lAdN8~(zB4Z*}u1fy#Na{OJVyz$wo`ikb)sq@m*=XJTn zLb(ZfxBz(UX1R-krDKBIt(!7$nXhw5#5iHE*qPf!<98M``r7!VHxK!(B!oN=i8mKy zYQMwOnb&RON%DqZ-bi0LN2Hx2nF5wXYl2ft0~?+_BjKZsjp+2PYu{L??nXS)6&@e^ zvRc#rp)q^%XQgOQ@mG(SnhlX)iDvXdst1T@I)IbYWCrE{g;ONqtj37Cb9v5#H_GaB zF3X=U=^x*U8-^@pC=-Pi8Cm^?Oh(;2T!q7a8n1qqcZWLj%?Fx;;UHaJbBzq?8dkdG z*+|NvLbKa==-PHAqvy*92$mqP{yN!3i5ZUd>%$Hi1N#@-SY74?qfIN0St zGR{I<>tJ{TB)%%PyywB@euqJzxubXNJI}9jgoG`-YyxYmZ-^A$a6j5Xah=dYce?vF_lL0Q z{QHr-aX;uf^!P#hGe>knu%Y{P!P#nfN0J!SWF{$$)IkG38Wz}0eyj5AC|G8BXp+>c zTki-`5_&`wIrOmVI|zw!>XH=VBN|s33qx*#Y{p|qBf+DI2NUo5cs*Dt(9f{EXwyl= zNto}BY5db!*l-Xm({B8M{3V5?8UL^SiCVlSca{UqWkD89cmaC|{Wegj)F;vfs6qg zA$)$0TP*_Ap9eg0q70t%T<&2Oy|LoRA5t+gpd~=JG#3V1si+{gf_1Z$O4+Fywa=0< zQxVMOX^an65DRG}P=rhT%H%^2Jl2q)i(_DHX%ML!klyXlvD~mUofUj{!$g_;P5@6Q z$Y3Sl$BrR;9$yh;=}?UTl}Uctd#>(!m(v2CAXzQ#TJ!w2XAkESC@Vjd>1lP*eh%|H zq&++}w;zGu%<^J?6>uZ}vyI9N18O`SA3bSCwFG(lIDPAR-7sR|OckzAsjp1A*8XBX zbV$J{CWM(lRffu0JK!|(eRL#jR^>pkq+v8z`;$1dAVYd>1cG>D&7l9}Y3R;mR3WZ| zh#ck?$RU)XSKG1j$M4X~4x@TE)Hn)-} zU+XR#8Z6<|gk)9ddoB<1BbK&P?-X^s9&-MeNwWui`s1OxK!UI#5xp<7L3gn>zG7=) zKe*1V!z)q485)ak$j&1%^>;)s7S>JMT|c-`QRH^!bxU}LiYoguhO^E*mx$}Q`7_{Z zqQ>Wm9Ffjvr{}*J!G50ih(<7hsRR6{np-c%#oN8|liGzZbcy<~7}hm&5;OkRdPf6S zxOKF3#E7WxCDta3*y6Zqfme|4ulI3(gCwzub)F07)L9oT6b-cVqYO7+mZe-=u3WvAMIx|kt*GB0)DsSgEVE@~dJ@U9L-VlKs6@5F=n zCiW`cJiLg+n3XQp@xy;%$I5VL$;YUl7Fb=yiV))oaqCSPXL+t#DJVy|4SL9~oDI3B zBOAVE6Hij8KRBjSnj><|kqiOvjB`X*heb3ia{bo2IaB@gyKgRBLVnOgGl#}sOLslI z*t)UP$+4}W_iXt1MwS0|b1Q6MDX~;J%{N`OUV5 zW=~e#TJ8=Vc{}#}kb#s@wbvt=`0usP#r&#*3nDghVwOBAka#SvyN{WecVl2qD~z)C zm5u`^WfWnIH#i@PY(YXL>&`7k^FNYuT=Xq>yvy4GxE3JSZC7GQ^6(gS8SnQ74@cKP zikSV8&M3q2c{JO)%)%DkgMhY&MSV`t>%xvru0DMa@N-0$z^y|Lw?@2FBQX`|B1Yox z^)+jLI%$^0RjyBsveWSp47L z_E4-2heL8psWUFhXZPjwJz8W-`4*=|#jEbMTN1yp5}iwEd?q~lq1-^n-wtt(uax(O z+DnO*tw|X98VWu33UQP^}c#B4Mw@FWSg8yT+W5J`SGbSf`-L zjjxJr66bER%-?rnpI1E4eTH7XHHcUrlsTp_h9ymsdq;VKr&+hgODkSg7vIhz+H*56nvwI4lNw$sq>6?>#?@39nBT|n*& z5x8K7Ot&`KQL3Br5|9t`JP0s`h5KE!i*FT>9`Y`@>oPca`G=y4R5N_EzLm^#8}ve1 zAzNf}v0qBq&%k3$ZCm-bW1%+v~aBwT^(Is@3@(EA{A~eN8NAoh= z-SbAw>Gya=YVDy{zSlj2eY@1FrTO|-jq;16rS|%jNN)qN!HtbD8~@5O4GELoN{B92_3<8*QC`YDPYdGDz1Gas2KMJ^%36 zH1n@ZSa+;Cp{j)ejBIn z^m%)wQ@s1e#8Hk@W+tOO(Qv8w3a&=#cr%-VslLAHnHkeVo&HCUg4cN$``Q_hO;+{K zN-!vtf-h5fj3Z1iJnjMthC9qAvDvEOntkxr)<4B8OE{JuPdJQ2DBlT(+o>)w@~#Ug z*HzVw(o-2cKAUkpkcy^Hy&oFnvP3t>yPj><7{TSpRCMt!%pD@$I9fe<$h%TM=sSF5GZKc+lWFC9?;2TPpXvBt<8T1)C&q7>(A&mLM$&G&Qxf_v>qS#ORtt=cM9qdP?BJ5y5fn@ht@*WmtiDfI@-Q4vQ_$S4@@Gm&cuB(s9NS;398(Cam)@1F ztchtqYu0=|V8<>Hj9wX==62To!MYJc8{O8qm<$Pma=bz@+!!VEdAjz6`WL0jQ}PeJ zeo_YXwPBg&{H&W&4m(oqIgPpY{iCb>AD-3)3v(|1tsh;|Sp*c_SG+=|RJ<1?M8qu0 z@DNjfwwj}mXC&;;KfgQf>kch3Dt_F^Rp(OZC)`@8JgFLLs5qBMejL~_6B8V)mB}bd z?7?qo;cujWFv`|e(`fsa=%1L<3DsD~trrs_+kyje9Q*w!s`1>~6eBUIw1hbSl53%w zr9>DQ9W_jm8^AcWzp%6MuLRFX^a46sQw$#wm3kxDwf*Bom7TlO6ZT2HC|JAQ`QbYI zqI7f93-6M6+K+N3zi{K=vA{j^83A^XC^paoSG!&#SiC?t_K$zjg2QJ)Vi>eHr9thoKfROw;;KOFd>kB>i9h^wO*5=4MHhD0{aw7wc4+2y;W+e{Q@u zmBt)z1+)=C+)DH|NaF6{(YsXGJk4{Un#mGi#{r5#PqI+vA^f8o-hm952Nl7D-_g}x zVXE-hKzJBg1l7n)(#hZ;uuSUb+O@5#U15%W14(m-3F9*v=}HQlX4Qw)VQ4Skys4>g z2h7jMub&2B>UYLUf=r3l3vl`%ME%I)bjA6)D81Kw)15^6c>(U{t6-(1#QX+phuUne zTk&K?o3R#_%hK|KJ`SItB~Xu#Uj%D$j?&FEbS5X+%kgj$ zw}rkV7&zLQQNR2CmsL2%R1MgywSeP~lRrl<%xV?a>B?OGBDXSw=GYL04}DQ@>1 zo02*WYYAyiJBn>V568TX7>RPTTl)3MgYz>VxrNnVpPx2kY(lWDXNaWOkjIDf>b5!H zGCjiIdr3>%Y>=O+eb07fnAK&9T+FI^sL#l&xsRWgkM9gI1&tAHUo&D?(gkxcZ*Hy) z1T7GZ+5^T~=h)k`{BGb~tgI$QS|+KD^L-qrbxii!1C3fYuI*UhIpXt?y-u|m)9Rm@ zAolA|+EI4SRyVQ`82>!0X@gMZZYKNq>#0?4Zj|XYm)uyiY3a|OnP<$*qz5s4h~I6K zhUEPtt!Cy2eyfdzhGGey-tp2e`PL(2NKl60N*kVd7V|>=o=~|ibxco}8 z`D^%Lqq6(-M&AvIH5oRLT`wp^kAX}z&Bq}>FKt6jgV%#aqu$RuMVLzF$9uivsme$G3Oz)W9bFy~94?;<_wa{^sa_5)FkKyb{hTGQ?Czb;(v$Tr7Ub^)#I}3Z87`@QLGPN+;sLo^f>QU~i zn7Ehu=RJq{%)4rIDhixATMn+(B@Qm1Gm_K%qM;20%M-*6ONsvTh3OtGW@eK*xj%5A z?Ow2L=dR`pqsC?gU0G^m_50W>Vd!BR*m)-D+g0a*hvUMCv-~fxCPdjq4P=Mi*}75! z|ISaJ7Z2`RxNAAkbI~vH`xhHcvg!;e%u%}}j<4;H4k{AOoZr*xZO_G>g|1i~Y=zFU zfOO&WpmPN_4-U0+e+|sB>84(2H@}z0*p`atnHmVXy9hsRt?!oepo-&RC)qyd{+&vo z&q(VmbR9!93!wpHFZ=6Y;lrthhs3dLmm1DCsmS1d+g0P2IdW=n~<6 zDrd9|Rbg&L_Sey&mL~><(t{7PKcLEp@0?ulE6v*vW|_*X2DX+nR5DP`DUwfj1;ZGE zCbHK9Fp*mgQ@M8fE?%X1Z{fCi`Nx!jzRiY#w+SCA3MT!MH!2ML?wH3(yr%y+^(oE1 z7%;*|o752BNn_oXbmA?;I=0Jn#Dc|Qr-hZMtbUTHk3zAe)qjkI)3pEXu~T4W&BPe_DsST< z8GTHN8ro9OkTAyd)eRN9i+0Rxw{a~Ef#pC#qk9`hZ2?IS)ar+9Z9hMgllzzmy8)bP z!2Po_$f;vp!Wtx*m@KE-DK5{-u_)5YhmV^NqW{LJhpL@h3e!III5tI{1`tNX%88bR zCQ*l}?~Ma}-|ajIlS8-b@P?mV%nrP!>Dn*4-F(|LIdN3C*x*fWB{UwNB7vM}=nncB z5L{YNxJW2Si8KC?3X=*OD+ieIdX z^Jk?8MxuW4D|^NKs76mRULC1GGOfwvx%gH+PyWVTyfLel=Np{47^jO7D~dU9A(-~K?T4gE z@f()hws+iWgNDLR%f^6MXj{5`J13f1u`pH|XOa3<|4EdAMXvL>8(+cAF!_wvdjjtS zW&{Q-FSN`+C?1_2&|>(KD)Y-<_s!cQRkG0WBynfq1sy>~OC(ftSQT;Q7AjRH=0-(< zLV#oKa`5|Gxp&^V&)~S0xY{2jC)gVK@|oT25$)#FDGjs1+)?cTg3}3H(eaU*f)T7g zuI=AC|NhZ8&wj{g9p}7zg0~xi9d11IA&T+yHDwzuQ?CxS7{~WS%N*iI#uovSHF20C zobzYIn**k=!th$x`=vM=^NJuBpYR38LXqqC4+rkPoR6QC2>=QSu?|(l;EStw7aMjK zX-Bn+-puqW?ZlYF@%(#%>AF?|XHaX#+RRTMh>k;(duKpg&eH-}HZs#Q77K2DShO^; zls%;@75_FE)j&LO_-G3j{}~EQZo9POr6rdf@6_^^%zA=FLwUvN;m1=bN8I~!SPa7D ztWfxEJTXEfhRdKa0unES`uCZ=>s8e53d4Z z&{Q8=*4=lS))BaG4X+?mB$|jGGPia4fL7oBTYqng(IEx-Ho~<=fBtKwhv8;JS4MKQ9}jL>THKeLs-_4roeeU< z?^hI%3`VgE8v^9bK}%uTJ`dMzou%%Zt&s3e#odF5yRv@P*WxUq^eR6^nAtG-#8GF` znJw|CYwaC@u~0v1A^ozx(3o`YiwO~f6bEmW^H=zo0(p*VJoZ@7HR#tt!f3Xn^^}|1 zy!yh^HSYzx?pcHao6gWLMC78zgY`wbXOy#L`G(NmD>$j4&!v+ymsGItHP0FF2FVcs z79qracc^*S0MV%Zrk+TA>)}_mU5Bz)%!el1e&~+GEPaL8;C{Sm@drWjE66i9l&8PU zYZOIUSIn;$bbJBx=2anmO3DG~=X;Lz6&VwD6PMp+pJnWsQcTBR)E?eN!s|gg*3M!o zIO^(7$-Hxtr^J(Fz^OREydyc~HeMzvE2XxM^X!zQm&g$+L$Wk*VY;F(2`cQ@cosa=n1QRN{73z1>-?_@NAIk67ORPs_2rooaLt#Z*|ZR zqyb4F)lhk1B)y?b*lPAgt`z%{>&sIs6cH=AfZzY7wi27BsbywUc7fj9B7+|E=6PTe)6@nQgftPm z7J{wY8<@k51~%Hp=pKJ&mu8~`c9Qn6V0iG1f2r}1O8W#rkCB|AKa0g}1}nzzztbOf z^LQUySv&QW@7#KrZa_a)mUwP~->I1lA1+pW=Md&n@-&~l)xifcHEo_}4EuTll*^D_ z<$#G3b>pr$_AE9_^8!hcfQVLiuZc^zpJYv^w>Ulck<|1_9iCqTCA0a)fkY5D=P_6w zMaX3I#>>RjopYF%IyJi97GR^yG=4czTXaxDm;wl+nIF3ZI&#)#%&x*3oXCY)LMozL z;s|rc&@*6YvrblkKOtX)A|?{hb9hq$BD*wF8Ory^`#AyM`g+nt@}61vt>ebiFA*zCv~ ze~B8Lw033_=}5ME|!|#x*^|BTej%IN%ZXy;2I`rWTBK&Qge^XTHV|eAN|rb>f~8y zU=ETe=sr__RFhnMFTv_KRqvqa<8+$+lif_{d}Nrq!2*_JW(K8pb^oD8mbUNtOKwd| zVW_$Mq8^VnE8R$`?CMdOg|Z0U?Sbzql%LWh};5UsAo`FBoq6Dg+4oz(`@ z?m@e5r$%@_N|L$fZ7a2rs8~~(z@y|K$py`L=!a#)mi&V_KZT_Bdv^(s3*U`pwHYlx zM%*r|&?}L0m%eEyhPy0pjmCdc=LXT(8wntO@q(paaWjHZSytT`m7C8L0ADtH9F=MzPD&Uvruo!B3WH-x1$Ig zUl;v3&fXiz_UG?CmH&!G{}+HQFK%3BU_1`QlEaa7KQY^!V69!r7N}M{z!8GXAs&uc zbs0q9Wf2|!lfDs?%Xj%<#sq0BM@nv+XzeSOj}|hQlDaY(-#5tl;aaU4TMdphly}nr@O3k&oDsOQD;Ir#|!M$Id zja!E&KrH<4r$8{6%l%bBtZHu5=B$6xmrg3Mn$zWV^R0TNa(j#-in!DcXAIJvKT>hu zdv`U0J7>GU=*j2tK99S07!YL@fa7PMd~7ayP`Ur8`*BIM#GTS{Dre|w)NiMK5HU+k zVmuCi53Y^bhF1gL#}aL3@!mOh?f$1UI}(Lo@^a(Wk&5JhFy%?+Q-80s1b4<%YW|&% zu_Yj)cH^mCy3j?v_$l?U3*EekZf3x3l18LmOVV|n9>Qfg8FD;D&p@Q`C~}( z?o}Wo(=BtfKa6fwT1W5leFm+Go0h;^a4g4~;JfS~Z~*~}(Ee4ax<1c%NZSX7qlq9f zs`vwq@2QzPhDkPVO@TBc{S;W?+5f1Ud|UwpIFV$K0J`4{O`-rp_ZQg9areJe=x2-M zJm=Tn6+Y9zOVA9LiBQ)Me%~i&D3$%oh3SqmK=?g2Rb$Z`eIKzlg8*x=;2iJ1xM~XX zc1K9i^HjYPhNPYENy7D;4<-ef;^U)=fAl|2zijDEN6esR-dNVMDCp4VVqZyZ{Pnx2 z&mWzScAfaxC6e@OdrFYSntcUHcLFSbaE9;gA`&tgjflZ``*uw(!e~m-T*Z@$3SSqB z+sUqM4)bpOo!EzCdmD&WHTB7o0tsy=8sp7;iS(b?mUC4=@i@9{vcnQ`ymvV-vfzT_70qBu=wp75U#oZVY=d zU^^F2=A0v*8tq-&CeyvHeiU`)mh6*^y%uAb{{r%9h$tcAd1~dG(K8b>Fa3wuT??9* zT(G$z+(dBKON$-Fr-2G#=9(wD()ZlDcl5qpczBW7P8VOcI2J(?n$LfnZnS}P(a-Vv z-u~rooUY<#2p54rK3aiGG4|rOBgytK|LAg3kqKdsDpYmDYjG}|bg^i9O)WV~(mZ*Y zhS@DWROFN@6c#4YRd*8~*fuLekUDt&xT^H%bmpR;`b1P^3zeJ_!J4c> zQ5B*n%x@HZs*#m=YPzzGy+2TdF&vO|&2ez5dLry-_w-2=F#m(tJ)f?msxVc2&7r1} zipIpMQ_K6eUMH7&)NePpIV%EJW%+r#{jKh&jZkT#&7n8@1`qDnLDA2End3v0l5>@^ z+;z5&wtPo%c(L+zB4weoRYk@prB5y*W~{kG?>i>$#Be>?Y6l)!H8yQ=I@f6YDDXM- zo!Ag^$(c}%si;1A+1R<1M9NL=_)bkJM-A;vGL{t6bKv32pj$@a2%Oien`hJQ0 z)wv@f#^z1e+=&$@wl1cNx04m(Zw=(R6r1&`L@T&PK6Dhh6LY}6)*y~Q4DvS6aB4m1 zMxpE*W*SDA>AyXkhD_Gk<2323@zM>chBL$Fatd^s#Nj7ldN{;pKTIC!`VaJyn9(r) z_gtI}()L%QSc2LI3+t^H5eFcBGqIlgSDwda?AHLfstvu_4E_%a{jgj=(6+g!gNzpS zR*`#&;bN^&D7L$byH}5lFHt7*7_@>U3B~XU045E@kFCca5KBj`n7!Vm-#9x4E%-GM z*46hzlS5N6D`4#iyIt`@&m%aCUqH7-n0S=Lm$s-x=ITp(?Lp^|PJcFdCEi^Ci>dak zfZs`rb6}wZ6MC!(w3-|Zjf3cA1~A&NBmCLy*q}uO?Xu`?5W&GCb}6ygUCeJN=m5v+ z(BQ5k8X3@%@q^f|4dyowF}g)~gYzpjQ`*bz9@Qg^Y zLD~!a95T#)Si?cF*NbtRcX`!-YcT?EGZ}-x@b^pp!@Z0QeQZud03U=}I;@kNRxg#vNA(dftL*jd1O-(>OF6k z`Bq?qm1Gf;6)3@z_meK*RKxFWORFD~eMqES&lpB4AZ4+tok4k#G6Lgaf7jb}bg=AG zS_!o<-<{NA{Q83A9Mj{#;>#NME(&>gF0-M$#I|1j5B9z~tmu?nXdDke2T56a?u85u~N1yQM)I?-$>5-n!@f?sJ~!-uu`2`Uu0!nl&?P*5sP` z45xF$E1KR09HlM>uI^=!$+OVOQ>@eZqrzL60khllpvP*&yBrPe%$Ri zw~nJN46C{eSbMVVsn(hrmgID`)j17)Bd^XPIj>w9S*NZra`nWkgY2>~)3v_%5&)V~ zzPEHfCUl3BaPIqOb2vh)`lRnVI$#hp0PLUC?x)zu#Sooejn-Dq-1Y`vq>|htVM%yL1=mNH>g#O-W zgjVufgn((Ag3`mekFdi3DY8Qr?rZv;OrcR58ylCKX7l=n)085H0L~cy03U0vm65K{ zHZsflq?p~~Z{e1K5<0Nd-y^p8f-Jn%FV%`JVI`{CJ_0BrnX7Ak&=hqLXI!RW!s7i< z*2!~g!}H7bYfv`Y;Yz*#`Vo5Y=Gc0>?l@Iv+Te>i6H-*5mRgwqHoq&ZO!T$zy`qEs z1byRWzI(h4+gJ9tbK-{B(|?=V{a?DLT(vp^0=5dOb^6}V4Y29F#k5I@16O5cyg~tv zb%|X*y7!+Jy2PgeF23|>{P68+zoI4v`kzXTa>GmIdl~A-cuT^@&O?`jOyZ*P^%Gb)nk-(g6QRv|ih5s(F%H=GA zU%1b@dt)&`6f4p`Vv~;5*aKWf!w1ZF@?VAawgHoq*sd?!EhhbsU=0vpHJbn;MHGj5K`7Mz23#Ab;#D);eaVKlZ30LY3Vd6}%UA zihgNs2rSV@4vK)~IgmhTCD0SU4L&ZqJsR^p0tVO1Cg95SEztV;*|TmDeSx!U9Bnk- zBwzWTF89?&3U2<83ruBy#8#rm(zy-q5#+weaM`-5M6hk2Z{_%c@ncgXM6`cKEvC;z z?=i@I3H>$g!mVI!OTe7M+wc0^PNvZn^QdmPXHs21LBx8Oz{(5g5o~g6ESS9gVj5pc zex2#No{qf5yYyK(d}2A9Kf6%#QJ|%?Dn2C+6!C-O@E-TbEpmB)u)OAlX&7?BslI{e zl?^yO>m@Dhs}|o?p&q$ISda4UBTLQ;l@KgLmJO&7r$-0z`nveJ5*|`q=%12GUwS&&UzqrrQ15~)GhSbAB-%u-;Zr59VVh-{k8UiN(+vy5Q`g=X zC}4|KbI=(j>hvSWBm2(xC30m?8KUY4BZmQ1XyYF|7-oCdTGq=U6lK7SwfN$S*D#@R zWh8oL?hAnNpr?$`e#>4_0(A2GS@&>Ums$$TB#}w?EXS@D;ha&nwnY7drZU?w;Xt+*G)j1BF9XD=m(geMkG9*DE82-H#cb&;cX=`K|Anu2#aWz-5^yU^-H4{#Z9o+N_%*UXUMMqKd%M zQK^2H-@dLo3P6hhRk~eQnOY1x-@a1ds&tJH+U~YBV6ZyOr}Y94 zor&u?+O-h z#}Hc4^I*OY@&N{Eu+}YLkQ2Hz6aRN3qPX)VS!(K0_p(9WgSybb_}5c3mM1e}5VDq##P zP8yC3?@+Fl?qMn~wPa)RRi0bqs0eGQdlS!zD3{RVBI5#y3K1Ia{H?8No}sa&RwF^$x`7;#FOjAli@k# zkBMU^aGA4EI!aa4vNzw}tyZ74BVO8zx8SE5gqoN;;Z&xgxM2sqj`ID>4Uc+Q9x5KhPzLwgHn0zcSz=_-WQ( z>m$1j|MKlm&}Tu=hskp;spgaoG!?g~L`jw2uPC*EKCE^6o-ynQU81zF=%(7GnB;vc zNKCVQTu_RoN}x<%p{NMDUlsB5W-2kdg&vvm05)K|b80=Pq$CC6%?iLsBnuMLtM zVP?x|mt~NQk%>+XJ})oGZfPGGM3xvptkcS*H{y#so`0f&iInSXdopGJqxeD_^Moi35Syf3=MqUEI za0Kudvu#Xlo#7xLkgc7Ild6;`DF7!(ins+r1z`f+3;+RXWa8`~qO2_c4@|><@$1Lb z13n`NG|u?I>t7K3PhO8rq0S}%7$PY^By8f~AA5A7_v%5H9*};y?KnUm1vH48*bonE)}wLG~b9kkPOBpocmDXn^kz**cp&;C2EZ z7*!Mmf?xdk^OOn%LW~1}?xKJGyvh0b^DY;_-<$`5I_&<4Z=VeUai0VJ(SP_+W`RKH zfgn&__aA=7Ngz;tFbG62<6z`u^edeQs7@F&0M+!Q2n2ep4FX{U;G!tHzsU^R zO@lz{fUM+)K%kUV5Qy3w;H~#>%KZS1`n%lzN1A`g@8`;6e+w5E2VQ1oJ7*>%Q+s15 zlZm}8vxkubGYb=h8N@H-;b3H94Rs+khMHU236LK)x091vnhKC>aVS6(9K@g&meQ}B zplYua)lFVmoA8*D3kjm|d+>VLI@m&8j7U9fZS0(RJp{;qG3N!`58lk=q`yd9tOdwl z0I;cI_D)bzb|!Wv2qOUW>c&bgh(gNmWNOB%DlYjC7QkNu)=8^Gj$5}vcVrvsE(73ys7>SO|yaD&>pQ2d#Nsmbs0 z9bBDkeig^mgc)iBwFO9>feK*xOOg)&v%kl95P`X+t;4TafUy5U>0)X2hp_%qnum~I zHT&m`0MUQv`xokes=+T}fJ#AuSKQvj^&xvQ;sWFk>GPV}n^>Ci{&KRgvO!I`xOf;@ z*jc$4*`eH~j7D5sCX6N=W)LH&i7_WP7tfzq$=Er&7}=RXA6Nm*nJfW59Hy)s96YQX zjApD{9E|Kn5N<{uBQ8@$E+{9IorTTBjExQQCl*RhmVj0o+59;nT zm63U-^7}_!{J%_sl=Q!e{73TruekmzuK!2^ z{}J(jwd=p)`i~^=9})joyZ*0<3+0dH6x0rw1-S!@rC-l3z`{Iy4?kgn4-NtD;RD`c zfJXpcVL(AfLPkbGMMp(>g!Tv-`7!2WG;|CMObirMENm?HS-9N@MO3sBYR1NKaPbJpxinuGIl9KhSAQJEXJzBmaPd!^prBM!cZ!Lv zV&@PQlXNavqoS5Dh0>Vh(2A=XoBf;xAw4861Ts5swU?a>(=^eYI?bnIrIXcbo-Xqb z48itz)WVldG5it@JQpTc{WSN`8(!elj(=Y9i(Po@5zfU>!>J=5SrgMmhuRY7+EDlR zx7*E2U?uOlC@$>(j2thrxHYl*vQJ-KGxZ}>b>Kx4o+42VtiPHblG*{i_1KeGt_nF1dzd?oQAo|nLY*^X9N!nMIdTi&cApS&o z``rt9-NOCS_2J#(Vr3RI!Zm+dzx!{c2L=^2OXgMyv}q}BP%PwC+QQ}U=`lt;YRar) zURX#k#a5z9EIBAl4x1appGrAGYgtbM$2E4I;0og)Wrtu$c^7P9rKL4K)9^7Ioob5n z)z>=RJkdri&u6P226d&9I>!eMZzCPEgb~5kc6^37qD}Z*u2;BD*C(1KaacO< zCdS`JS72K)KLdCBm7F#hzJ%c+LbtBP^-eQL6)84HHO121BXeg-X_QHmTqj?KYASb# zVz6eiQe&VAd}}wBP;#l&E-Ir@p_0*;E1)l;-s7N{nB}Ft@tuK_}$QZ^)7}U;{=-4ae|NMBpgY8oti$`~u z-Rd5?0$yU7tC*fwGfj+A3MN~F@p3pyXo4vC3q_L%8WjXx$WHJ)e?lU$ZH{ftZdo!{k#-oS@J+ir``4u2eJSWl_+9 zUlcY0Y+60e*1r*|o0yCKp=MZ$bK1|(FR*o5 zXs@i30n9Xgl03`r1P{hMmwCQXa-oyKHZY}GXvdam;3HKJ{f&!dC- zFQ1PC^Y|%moo68@Gx9I@pVyBodAxye5!8GDY}q!JMRd1T7@z_=U?-QT15BLOh!blqW@ljdUGu8JWxv5=Yo0l?mILj%}I0ru}18 zmn((Od(<3VM4YG`swPNKK^B`Vju-+uJ`mdjN{@KU_s`<}BTIQpHj^LO!xnOpvtwZ4 z6 z;|WA0qS)zBJaM&y1dgEAIMhODK~uNn`52YFP0Ks*6NlD!qd-FxB# zyLkw=Xmg_1_zU(i;cLi}9%{dIEe1G2&tbYmQ-8zSl{{V8d@ch$m(!X{b98E@FWP__ zGwQt39JN!5w}=h?VMS?zChv@nx!-X&BQmx1TIiYroejJC&HG`%1}sTzCV1XHt6zS# z;Hl7O=I)+o4oUlHwIU>woaDn+E}Gm3=R^p`_#(Ch>NaQATVOue(lPL{FrCBU70}FZ z5DKji=d)b6Y_t(S-esdQ(bc1oYidH4F2 zlG_ymR^wS`oO&y@v7G|WJW(K%1SV#uEI5X!m-&xU;RYQ~+FndJ)5$j-O|@m_P-4*5&6#OlSJR5aE;JqbjsvD$ zFM>FNw*r`SYfg31s1Fh-R zx%>8J@wLHBJ9XVkXlr~NZB!M@8yN02+(}sdNxYt__~{Atfw8Oak$w7Au6>w_GRnh` zn;fvBxQ{R}0+|2EISC`))x=a(i~u_alfH+GWmvJhZQ3^gPdrv-y2&M%FjA)X1#ZZ>d`lET1ln zOB%*XgRMz{&EbxrQk!4EP6F{)IA>0vPI;M}g^lU+s&3`@kPOBb6b=;@n0X>&(XWR2 z`E+tW=WFa?^M6Yf)8qI^r{-HLX?Yppxk15QG6(yK*{-Q6Ocq%unYJ2T1H#59?!_Jl z!ftQ7&Pl$*kmUOVnp^QlI{RPs>LpKPW$n7w8%q%i-S(?OYCgR8L=z89BPGqb_}G5r zEJ0OpL%*baF`WEyxD=i;RGq#eC97~ApOrt&7558zIgw(@l8JqeV@ zI_Y!T=Nepa^9^f!4a10pZxskXPAfz+GtH{9; zV4kQot0Ga^x$_dOC<>&CH@BBXuQe@ye2$cqbUnWrr~mHiuk?`;{g`}u%wFb3WtvVZ zvgnCQ#E{khFQp~$_C~p`kJiUOP5;WBx6TauZlSf`xvo%db7*9net|| zS6kXtzsXgs9(R|grfbz_tq7efY6vr?7Szy&5IKWFeq>LHSqny_m#4Xu?)oW~bOeE; zxwkMo+_FE*h?b_{(yXRuzr1{l!1un!OD@rPd6+TMT~#qn$y7E5Ka`AG-x#Myz7zpX zxwAENU0(;MBY=sg6%l z%E^SWFZmKHE(Bo*F#>_Nd{(PKuBu4(eqN=Pf8TRKgjypGCo#4n2DJnjq?{2@hH>$IU+6NouUhh%kKEI;r=%VYNSXhr6Ft3{0rsQ>`SH#MDQ; zI##?bAKwpu5)rYtcTuSEZ4V~POqyg>qB4Im?nhpQYSdFj_B_JW2}9|pDN|Ry?-YkG1=l8G{C1UxZ{8uD)4VkKjxCeXqk-K7L3xg;JA!DE_~ z`+lA*GUubV-l;YhlQmTeM>4C!T~&^yR(dWezp$9!kL>T?eD_^lUh5>? z1;jY*LyNX1nPTNrh6|E!={z$wjRbfwJ3WV@1QFMJ8ln&@E8 z&>|K6{hL*5QTxy*!S%1F&qlrswsk}&)aA^D2dh}qzfT=M!ws$sx7=Kzq zO1O}0edas)s8sjdik0oAqS?@Ci?_K+O-7)(WQomLfM?WUR(VA|o|#&aiba}~?8xsk z<|R>c>+T*pxaoxaH6qjDtENvKb}b<_F11#65%sEWO-3wrlWLmpOLtVum}*k`u;u-B zSg;AYfHOjln8cX5A%j!7*TVC|^~3y*FC6BGn@F(VV>6dVJU!yGeY9=p+9t^yK}EQt zbUbhzXeAkYI~nJlx%7R2L>(4$lT!K!95QUs*krgcT+?#>wXcrW<<)!MWnXN2;`>>H zi1=x}G>^Pu*%b`uOqL=Bl6^*DR|AdJ&|d3L{I^CXwx7^%ldOPAT70TcEC&Afk)1|c zA#I;kG%{eF?;%U_y1a6dU_cGH3$jIWs&sEc5=`Xm@b>V-Ptfe{_H8Zm4Ln&g8lOqX zn+WILc&+n_U1WV~tnoG(T&8pH{UhRmeKqt9)hK*Lq1-?1l z{Jw~a^0lRrl(nuQ60!Dik`EWT-G(9jC>2>~M?k;h>7edmsb7 z9mZ9w>9zDl)7RGsQU`%W&aSp4O`_`>E*Z=|);xNtGWtx3&p_ReW?p#f!Z-_LR8&8ceES#Jk1G&j|9F3Kb2>sJz z!3+6KEIAefMJT$a*;No5yUS!3^@0j+$fOv?2F4}^1mt%i%67c>ZL+tGzV)bo$(x5! zXeV5WOR!g2>&ePYsbX#^y_IX=lp|;IfSUIBML4NiX;Ucyt8@A$Hga%CNCZr?WLf`+ zEdH>r9s9J}plt!uL53}dfrSB5Q-M=-->8Q-PYe&!WP8F-VzZDK!s>pHswX)vffj#=;{jRMW zGJMTH26K!wb0$I_nKg-bvD-wY`8kLPWc@r~@PS{T-hFGN?#*i1$iLM4reAt5;Ps^8 z;`4MHq3&VmFL^WllDCpUPldp->)~6?o7K!Tg+jHRyuSI3lM#|Ze3kJc1_Jrq0irIG z^e+BQY^0DV7o(-`ueQAvYvkKXA@;qvp8M)y7qi!IC)7uXYZ4|RMal|N2nzIqVB@by zlM89lWQmp`_&;#ZCJ(Mxd|0xMj`>iotuA~V+LA{uJu-rPIK0{#4CT#l`4zj`Qd^hw zmhE$ia6&Rs=%W3b13%TKZwlEe?*xQQ z`k?eIX?^q@Y%=IFOP}O`%2G>6s8Z*?RKZ1ZSm-L;Hzy@}DOt{Gt?fgvI<7DC)fH;U zQv5zmg5FbCChzT*S#x3#t{VAg1uPlgz`!}U>9 zQ%Sl;99*oz#Li7<*t#?vk_Mh~KLH91IX4)xM$S*R{5^ErlK$$I<&PYkwt1n!W|fot z@$b=o?Pk6T&6d{#hZv4e;9dOnIW;=p%LyN-YLfwGP1mle^Kd}gr6VW6{~S!JNTGJY=F2q`sqCWo!>br_rQ^F00(}@G3zx8eb>{u z?}Tr}^xl;y+$y{ntRdoDvwoe;7};KAJO3^;CtYr*#KcogL$B6_K7!k)f4O_quNnS?|DYA(Q%tp@jRQD&ueB;$l3DXD>LqZCL>mY^wR0j*z`m?UUihr`c z&nY%Puqe?-7bzdkdT~;>%QX45*d-cLC`KgW@OT9Vm>R+g6r-I#_9=~&Uf@ZXEiV|G zV$;r57}Y>_L=#6r%2yv~LS%{TMuFk?TnYTnbNhbrelYEJ;S?a86{|AMy9M{aCyTT7 z84@3^r!B@oC6o_B^#b)G)#in^YU#+B?7ND&(MvKL4A9kO@Asqn=GoQghRzLR~na0 zI*d9wo`*x8Z$`bf{3QZY+Kv5Yy-wdW-k9WmnRbv8xhI3o#~cWGYFHr^T~recVDan) zQJ}o}P*7ZPg?F>H=otcI)$h7MrlDxbwMSW&LfP5f2*tw0dM2*UYKFBAav)df5lbbI z4Caj2zGHbIsag6l&uS*VucmKpoS9LkF$U|o1B)=+Zu|@|QK4vQ;lNg?w55vA2$IlI z8LCr}iRhCp2eUGzeW15YU=|C@C5Q3<*aGelBYda0WMQ=d+~FzPxNdB672pvl*oJ-P zesYBs{_JGKL5zcx@)30kobX<}lt*U=Vtp60WV5Bq!G1rZT0K4pwK_;1PTAZKlgL*I z6%!Y1DqSTkj6+KRdW{j}TlP2+zxvJ!t*Y7Ov$G^iqPk*?ezW@k5B)j}mjVl{KPHQF zEYcC?G8rzjk(`RpiS5Nm%PEGag|6Ag;@JL$?2cwaBn@j44V_zua$@Q7fPGnW6SoR^ z61a(H4Ph$VC#OP6z3`s8+)M|}%eI>JX8y)UQBRxESFFxRbpW`CO}=3+TxwaKOjN*) zi}`pN7QulWbIc8=7JrF)$@^x61zvH)2fQFaG5;#Ds-m>X*lNs~64{upKVGjNQ&FFT zE3%(jc%c)H8|j@SD&HsP{2#_M>h6j;rpN1bDaP&x%4YDm@nqs4VLv07ttcB&7=t0Z z46ivol4SF(6+R6$b(&iKMYoAyayG<+XVhwI9tA351R%$`j!xa8$P}(9Rn1aux9#hx z=%oJ5um%b0Q(V0Sr!e{y3S_@ff)?>yvffmJy5S-0c^^{ZMh-7kwQ+m(<&G!Us<}Pu zS7^FkzVY(uwIX@c7~~?`wE!N(U6?;KR3NoR5kIC6%7r96=;D2Jxg8Sy{K;x zf{cuGR+$|{q@L@dIPH#?8?Yr#ly~l#5`#rdzmSu?@fVlNe3nD-eKmU$p^)~DUbp9h zx;}Pj(`gHv9SW6vAwKwlJ_m=JKtwE_%OUy4X*a1$y{>+_z(8fmoF{et`GEWR^P!rO z>R}8kWa`p>T-M~9GNc2)WHvv{?q~dtM;#=(wgDepsGx$mW^UI_`Wr&5&I}HvNbESn zxhN@Y1dV!#EaPe$(sOg_KUb*zT6reeFAl-kFf_^=ylzj==nQG`j z^PMygwk4mch=V%uxKtYz)6+EQ1^QyulR_*O)gAecbeNt268+Ngx8UesulR@JxxuknFBrDDHF5yin~FJhScM za6kD9uI`kro@3|ZK(;67>bxFJxa90XEiLM;BD@X~xH930pEXRPgRqH&b7nzc%y7EX zO{X3vYBfYSyUAQBeOGlNVCo2CLLgNG0#V=;RYpk*UY3${1qPv)WUw#ojri`(m08(R z$*GUw%I|mg%kd_%vJR2dD$kJj5pfd)5PgDm{Zf;}Ix>_dT@i%ISxAlk^qLW2oO(4Z zjG~2V2}JC$NcTqID*-*H@`A3TMJ-sUgvr&Cz7T3hXZ{$=oz(%U&^2hl8RjL${nz+H zB6pC{hwIC;H-}+4x3tokZ33h>tHr)3SXk%%qxZ!O43QcdXYa$yHe# zB*rz8cthz^-W-P+6BL5?{Q^~L&l@WCq2dKpjwLdYd^|GbOm57hIEnP;sL@?2`$*0r zpR0+_biz3_=9B7Gmt`zXsbhDXpaJ0AVYcaBf{g}NPg%^tzG<=x4Z+-N`uHyo>gHZfe>9xgrcu&`pOj; z$C_O0;wPnE)9$#8Y01gy@LQ}Ji_!*k+li*X1#dzC?exZwohvJ_t5}beO`OqGZAw%R zf5Waa-{_!0Uam|RAp&vhKvn7O!kqYwSZNT+0WH=yym4;)AVJw${eX>G)0<-b|FLTiR9s- zk9r*nH6WM=>7+PSyqXiXA6nHJdmA*3ON(~GjB|`Q(-pEluqq^f6mg=h-c9$w2_%y@ zBK`{c6n=iZgSdn%cBvfgXJ0<6E!diHdm?*3}zbz;Ax|QR2@@0!Z#hL5p51>vYWXp@bu?#xU0M`b zMpW42eZ5zh(UG_0@yWvGNfr1RWWn1jGVL-qCiQ@YXJ!3QOS0~$4W(|bZkEK|kEf;1 zCvT!^*!gW!>aGJax4Yh?3~z_Rb*>hsIK6u&hpC~qaU% zc%#mJ@t3k(;86U^D_&eGizmWZM7=#&5So9lI>~7#t;S1AfKn=~20}stCWRP*Pz!24HK9E3gJb za0(zG#170;bB$+WstpuP?|fKND^hq^>CZ=}d1PXqeZ>w5K@gV$Ft4}&UVC$edeiHK zhBK%-X?S#DRz>AZu^Lo-&(knls)4)eSE<$k#`Kjjv_y!69nS7#<*!i~?Y(rgI)++8 zf@(P%3Ssf)R69s{z{q^we!xRnywMNm@j4JeNF#P*#A*0a8whQbfy%71Jr#v&8c*y> z()!i(I-t^@Pm00aJb@iz2vTcr$ekbM3mccvQGdy+jy z0zz&XO_UBQpmhL&HbHM2tD2x@>|E49zu!8G; zU(O==lowfI!T?nQuxbuN=}RIP1Nk=)c&-Q`OzB&t3+L&}K7|!g4 zk~lI4i$g~j2BQ_`-r&97&V~Y$=Pp1&9WhtnHnMBt6(Z_S=1lCqF%65*;YyS;H1KXQ z)8@nrDmr4LSMvl%xH)z$rZI{bUL!BmG&*ge=QC?cxWZ#LY`(G#tC84Lc)NPPxcG3 zE4Cw=f4MpFZg8J+&KlmqdRH?tEr+{kXL=luzJ%W?N4m+9pc|7e@(qG8H!8Iv;U#HZ z(T{>XtmNnc%Mt-wYK6dp)aN?UV|ayFxxj`k7?WCDxB!g;hvR$e1)_4o*fjB$d|F#( z#SC7scC#uMX<_tB{{~^u^0S7US#RKZ)^XUK!Tzs`Gji!lqY{WcPMtKuPLw7DegOE% z0o>+hcv>`^?&R zkSQGY%&&b0a%oCb74xkONxMzh#i{vp;_xDv%&_Pn|J2?kzR;qu^(4IM!8u4qOzxn+ z`D3Kz^w{L3$DjP(`h++J^pEaKPT}gi7Wb>V>hvWfDOw@Bw9Y&tvl8KD;2}c;y<`#= zFC-=#LR(}rFKdghH?L5$f5OjU8{vbyCE)0_I`s0#JF9iwU9&yq@iJ%aT8+VXuO|kV z$YXn?x1_&)0S|QNeF98s-{mdJ=AR#41T7_DSFz+)I(%$j#DA@aIb}AiT!-gpV)MSG z^%EUxqeOyT*nwhWKUAGHxNn%;s4oK2=(hG+763Q0a=up}Q}3-}dcCOuv1T`W$?(=1 zvr7`=3;4@R7Ae?~ZkR`l1A?_a3o=6PKwELq)<@sj)6^_Yop9YP++^cjZ8O!bIiAzb z-N(}Ii=e{B#TkSneVNmd4F+wF`>@aIv+B)CCf7K*$8KVKA}=*jB=t99KSx6o#$XK~ z2RA7%V;*tZzj$O`eDmWvpsBh@4Vf2buOt-9?pU%1{!2AH?IATOch}pMqt0_*Hxo-N zzpC?dM}^V2K(jFvCnHwloUMv@I(!+}^Z+WB4=-VHxY5CZwO!9L(q}yLc6&xgIb42( zrI)d0jF0Vve~R_q4&vS8BpW7G<^;j@5QB%{Gu~Bk?kP?P>o)5?cj}TvoAmk8;FkC1 zq#x`a?7d16WlTig6}G0L8KZj$r5_NFII4D@81&B;WF`7Q7KG%pKeT%InwlkgE9k3! zu$pQz;xx{<-`1(cQn#3DJPV;-N&E-(4FRMDcCO>d{Vsp!cTI=N=M@@<4|p!k9?Mosa&R#46!tGajhHo933*PnxPGNRr~nwq zBEPRe-ZukyWZr5@3wgenBr=Z+B3w*E*-LjvD>WFb#U@6#WQM^xhGE3LiEt9wVV(du z&0*TJZ|9k_RGb~O__MnFj8%#;%q3!ST4LiWPE_~K0|9=f?qXLx2M62tOwPTSKHF*L z6bt0~$QhrVU876FA+cq22>J1kR7f*S|&upYJDG2rMu*Ua|J)pGc-uuREV47~Kaf-Kz+FA%&YTo1%N2 zRjHt2K2>dJE>$>B>DT`Js2JvEyRgEY2itBfzL)z{;>C3|=eISy*2K0)db)P7v~1Av zvk8OntPM|L771b{_qZO2%~m>j#N_Z`eUo|(%0e)gCrU)W5JAC7MNNt*V{IZ0i94)$1vD z%g>hTX1jA1peq0;fsy=C;u|&f;`{~@!or9>VUNjnM_$Eyblxcy+LOA564k{5iR~yl zM*P>(hYwLM5?XF!U3ChdBU7?DswL`$n#bctM%Ztq zy(1-xkwb9jPm=MslQwLYsHCMD-n{B)?6oI+>;8==^=38o^?urAh)I)At?Y{%W*Hp~ zbBVOf1uo+yhb=}moX@mf zUN+q+{F(r7n3|9Ns*L+6xg4@|Cnc?G6ZbS*phYy02&AdO%>2(JVT}csc0Vk8C zU&Tvl)J4>5w^9~xi=;FrULzfXzig0_9v=E5kF*cHo6xVK=m-HJMOnd1r763pf1VxG z*LVH$(G@i|=q&Pb`7;rcDds^St%9e%Eb+P3yNZS%t9F(dLL3YjR@+}_L$cy5V$FY` zfCwPQ1l++^h})DuUM)WIHLm5OXqe`8u~heuZ+jUqEW04lU8K<%B0Mi&2wCp}caYV~ zx}{rmd2&Fh5*IWkJs}QhnmgB$m(9CG9jb37o+F5hg>)(;%gvU~%#?Yh6wiekj@FIh zSM!`*4NRdSI1I69V5d=W?o7hsuVR41+a>X_VrNF|w>XQm)X4Jat-|aqZyQrBGL0Xx z;HZh?ELovowD*%|+lBbu5Us&rh`6b-OD$RYf`v|5dJP0zER&S$O3SMfQ`m&#)@n^$G4EfEDGsMQ>5jSJD&DHKyE$wO2*^589T~Hd*}khUU;wO4`qXcUwCd? zd-0YJb$^((G_q%kh^S6E!8Sj5_pL%z56poEBeEpl!;G`%H$0Y~ z(GVl_x_LEa_i-aRZK|+He-Z6daxrJ~RQxF8k>3;Pu7^(5J(bsK&>Sa)lW`*Yw6h29 z0Q*VZoe3revf8T1ue`xzjTc)11zx3R$xu076of?`dj~|4b==i1W zv+8={d&@>IUu#N|VFFYoXK??1wR}pUx&4L5v%Q zwW;Z|OSgC)H$jCz_W@RA5Q~A^^Yg~V1a!0yr(ex&T1OAET~=Io`%@1`W%{7wvK|Dr z>L2ljxu(u!r4|;XH!*%tLDt2HfDM{I)}Ia++Y3dnnBrBjc+_sntL?N0bh%z+#f zk0FomjFyA#MnDdibEjok6Z_aOHRfbl9`G`^kIThumz0K83X6yfhfbb=MVvd(4MMU1 zZ_a;4*VW~2{{$&NdDq15BV|FGzomMm?l-7UZy9cO6aFX&y*Wrxg~a$JQ7}?5yQg^t z!iaV8=H+getd3x$7p;MC_}P3B1Y1yBJYGRip(LK$G=!dSuHo?_MK@{O1o7B2l4(u) zWfhm95$%aZF9mt%cV$9`F_^N_`E@e)h-jQfh@YuA43_X)o>j5FZ|7exGb~bk)L$+| zeIBnXSLQ3KP_+v)iYqSZ2&8ovm-3Su5HObtMI|m>pa1j|bU1dB2bp}~UmDsOMoP*& zkA#FSbn-T8qkv6y@M*$0%4^dd*ezFe9a<+eL|A`N$8ps31k~t2(fJJCJNa~%wF>=G z)%gt9J9%dxN}^fdTmp|%P`FM;Gj>YQV_XcNl2D8LL|A486I|KRH)-eg+U({hkXD;C zxlDMZ$g3P6A*~}|zni(rueL2l;qX-dT-H4x9bL%h8kQsML$Kx-D((OQe@GZCEDghI z^hyegZ|;)ZAru3-J17$qi84PU8cUE<(9m&bDk&+YEzpvacf~QykyQ=Y_!1KG5{6y( ze^K_|Y$J@PRXJ=kk*t{Fm}=HJ2Ow7B zJ+#Ni81(0ykv;aY5?S5uM`V48Wm1{=^hp3|M87Pzm3^$y)6uMJGLrq$?{pu#b1^LJ%5A3mp3@Jx^BlK5e*ht zj9~Dmp8%!MZY3l7?LAqL@kmO#H=Q6JIR|8b1mzOICGxboK$T)N|EmDWCh^^5Z+9ZUFbsX z2h%CnsA~$gFbGkqg-L^wbJ|pW4IXcDq@lc90Vu)MP!)fnN;y{=XZ22kFroQo=BEfY zCb};exV8+Bm&tU7**c7~M6qht@Qgy$fI{LC+;&!@Pd{~?!8+C_Jp7zMDkR06 zC~iJ3drs-`FS-^~->Qyp%ufbM6Mx#iE+u_7KbA^lLiaZu*4<(2$49g9V@wSkPbN#r zxAZpR!Mh}v-&QA4y}r+XC_YL1n>btV3h)!vb69aHq;VlEMO(o=r%viYmyOOvH8^_k z)qLZo;!DHS_I=v0aArok85b_H@w4PeNmfl$W&~G{n*MwL@U;?~atBaAdMf&)9sqWm zn;J$z?DSBCRXyrNl{A!mEcSNa{WHn$Gn9gCv-H0X4|U`L`z1MrD?czR9OMcaqb}2K zck{KS!8ac1JD*RZf0k0|F#$n+G8BPm2lOTD&kicWtR2T%PGjziAAU{Agx}JbhSpVF z#YFA3tbm`peLz`y`YKMFt-Q8_8h|eQqGgwrKOm)p8A%-O*=_%CLZy$Sd|Ws$B%sYr zRb2FIYt)Cy3eR_>@dw^ljFk6yiJzv&o&po4es2+6+h+dm3Ya$W&gwKqchE1;*)%d@ zx={Tc&S8v>$`=(1J==dpP-&=~l4ly1Byk%XvW&j3s?L-Z%GX?>Ti#2cu+a5O6bDYc z3%3pBxRFkopuYRYnewx0XUN8-sne3D`aZa1ZfQ|kRM>lVJj-{S5Jv(VsKG+Fg=?uH zpK^%XwAFj=8UNI!n2zx?TME1W>&KeyA^e`D72J8q6E0*l8SU2LO@ANro%NTNtB&v{ z@=;&Art-y^GodWqkJLgK=$6Gp?4k`Mw6VW|XUE+!O`;=B?fFYZJIxZLndF9P^l$r# z#d`sp=2L{8oM9apHNoHaG>pbn=Z?JOOb`TFuX*H(b7frdy<_7Fm=y55y$D%>?_jNX z=|;IO6Hl2CfPP)yQR@``a40}ti0iY%Lz01GM9j<)KbwFZ3Ef;^Y|Pcx{Mn|?q-Gi|xk$wV)NBE$A4bOlwnheq@MXPUj8lU<{9_S4QNd zp$1ww88poCW75~(Q-$4UP!wCO=cQ3@7V5uT>7r{+So53HosF8y%DFVkGO`#vJyGv> z05T)6kD4Gwj7W;BV3@v9`lp}lukfxKs;C|KG9|`1+MY!iVD1`J{+O% z;9e)p?RROVI`xF~r#5>7d(AGp=fIbWkxI@cgKd(Jpg^i3sryRz%)MP{#WVE}^+I;j zf9@(Yc62z_i}tvV2KgQ3mB2%uyYtfUT@bRVlJLVkMKx$eBbBd)NdElcUdFA;w+>A$ z!Oa~ao1az6gbi64L&Vc3Oe69dpG-^%#MWwV;d&77aK2+;OpRh+#F%&JAwrZ zP?^)g5@y!C<8Q7*UusPZ?4O7$zPbCr$8NuQah+Gv6Y?z^$Np`zxuNsH;^!)412j`* zWt2TSlP$9CfLbt>SXFb&JAyf{lJQeCfO&BNj&M$5HFeVbRF3L1cQo4<3@JO>W!FJK zVifH#H%4L!uk--NUR3CvqE9Nib|}t|f4AlTbAFMk5Z(4_4ld`Kz*V6q`J>e1hN?gk zCI=Hz4pzRvb<93AC`NOAQ{T2z@SRjM`9uf2g1}5Yr<=RtppC1g6_|}A9)0&H>$OkVl-jY@Us)Qb$j8)oX zo?2w3C|?PX>SGY^2ip2CS@`NQu{J_uutZ{E{n{6SG83!ovrUZ~b$LW8fIOe+uiS!S{1D#$}QL zT1LK^yqpDM`C8F0kb-1LJvJ>lMbQM*=y`((rHjKGa+ZLemld)$YzYmw`R<>X(G>>QP*bRjq_ygdvh%&!C?@oLyhR~QphGg` z3Sx|M{AT~Saklww+Uh~_w!vAm@!*xQaU)WD};UGWk8?nG+FZUwS>;H@&~`k(`Y%s5^Q zaj|2iNysy?5Q_rDV!ifog<)nh$1)29*Wz{qJT25z+V z?jiGH=x@KeaiKGY{f4Xt6Wba?VP}>`QGINoF{XOCnIaA@1gKAP5Ir0_@G3&mF>T^y z2VLewYbI}Jj7@<)#nPC|W!3{it0oE~=eE2j7!}c0h%I0f6!n%H0(osTc%THn4VND$4R@NK<#V z2Nb`cQ($dNB?hgHgS{oU3gdA({w2$Scv_Mi5n9cuT=nl8nXzP#<*B-C7*-jiiDel? zi^hY{hR%L3;yypL`(DP*`u9%T{L?jMCY~%AIdKRjyPCNIq+MTY7W4q^~B^i*}YBH!Gb9;LK z3sNy#zz!xD5DFlPi0(C)@UTc~KZmJq}&uH84R)W4V>jDFkKUzojmL=K@v9qevMVtO3?sUTdRK8_BMx;quEm z`c>txX0A42x=0_jEbGYnoP1i9I75SVy|{4z6V~u4G1|N5?`M#|9cDViHXNRP`jpi& zdv~C{nt2St{uE!6JKyr`>;(Ec*fx z%M!4c*La0YU*0EHbA=$NfN2|pIH8}Es%15oQ3zJCzZIXQM$h0!D7I)`7)tRuRYf%8 zk4n!bWl@Sx$GMpO|2%(hLQoB_w)L^?+3dVJ(8xy{nah_vpwAHw-6sL90^?B&OV2&P z7Id>{>3>u$s`#5x-EvO`Z(a}N4oS8wEU~@&VficfOGgvM%+ndaBqF5al&js^e`c87 zs0?%LpA55iu9fD@DCSPT@XQGxE|Uoa%4_S5+E0dWCa@2S>)=xJL*mIlg&(go&Ll6o zao{|}c}kJSoDy4^y1=w8%)A&n$aA&HAO>z|Kjft}$X<|<5MSA$@dLJTph^;7knNM=@ZH=VOSlv7f|hm{1{D|U63KJ4>=evt`L9+OMaaurz82|V#2E`2n&rdV*xYA zz=!RuCEAMzgg_tTz+}ji^CITcpe9D!z>f9$e{)Cz2$Iox!A%H6<}}my7c}7|&g6s& zSp_J>WUMVFjt`9Zn-I0%QD*Y=Dx+&1Z*Rr-;0`^9z6WI;4L!@7N{%B#vK?ZB0ddh- zZ>Rt*s8{L}y8G8LgzNE}`GqQXm)p<^mhP_E+6hi**>_^HoR;-x8T`k4zF$AfU_Y5- zR-Bu=*ynPOfx~_F8@9!#ZTOr69_5u2KtZVeBLIMeo)%s5n`vl8_eu7nYp-uJ9;eW0Cv(;l*NdR!vV%btn4JHDG?376n5FW#7eETn_djj z=kq*TMvy_$i^At*99^8>1>8 z`!?1(?(9E^GvkbO<&0)i3)mWJ$x%pFKTL!oVH*9Id0HQ~xH2{eZ3JT~z2|ta;ly;y z`~YP#pKuTZoHW#i1hG4VnVacD4$#1)z!Z%HD2N?LzA<&srF_~{AOd%KG@_&hKLPhH zCg9EZExb_E<$tT95SxtBxMD!Dc`z!$GXh8|e7$gJA9FZ>&@2A^Qr!%-2CGPs+jm?- zOzaYu)MuxC&lip~wdPH`+UA5=rLDvvGH<>f6#_jCzq}}#B8^SmA>jhOK7<5&=~<&q-6Pz|wf;&cIU=Wi+!`GoH3!jB2Jv{T`t1UfKLeI=_ z`sbrsOL8L=)ec&|&iV;$t_5tyuVgZnK7h{>XCr{;>SsV<|x(42vDrDk2ys>q3@w z%$sJV;4c6h{P;?+&DDp1FTPH@buucgPT!~{;(eOh(>VOb{luJ4zGP%n_&UHz9l%H= zK=U9ZPQ2pA$I?vq4?Iqq-9N3T@7*^iW8meY&m zIVlMWSN5ce3f7#b&>GQ-{0k02LE^u02&%n1zxsrkRUe#3dbB;R>>`DmpTT#+?&BO{ z8POqB%dEG~GqS9jT{=I1l_+^PPfR}?`<3s_#|seMCz!JxSisv)Tizd7E7?4cY1Isy zkE=^U5XRVQE2tWe{asxszuI`PTT01fE3}Qox)Z#0H`AVf75FYTY^Ly1VV&q;^ju}=h^payh0g`gGkq_gh z__fYWSBPdv;->9ZKvv*`%3|MvdpLRLkT~Y2Z~$QVCjj^6q16R#P3Gw;1pJC;|Wh8T5vSugeR)O%9bh?bmd5%PQ2!n{;T2Pk@fob8w6M zAIs07!u1@w2gDpCIgTBw`r-ecZtMHA)s|3q3_7ImVZ_i2P6|W2GFJ}j8Dw!M>#oq4 zwb}}DWg?GigxY9bfhxk97+fMYq9(RZjPCUG)?#G0;>fkYFW`sqA-$pZ_RD4;8DFG2 zo82fjffq5w-ey{T_QLg!Rja^NZp_OBH>95_=JQpigk)pOOBLkfNqN5 zZKQZK=~OdOm=?Oi+QG#Dza_|7GyAj@9Tma??e!2C0lp^ zLu-~>C=aOFk)dizn3$$W7W-CFJ{E!r!UQqK2d`G+1pZf8JiYzOP0iO}jBWM2QApBQ z)5!@r%$FqdC7z|&l!Fzhfwv7u0}vB$qLbuvq#m{aFO2gp2Tl@%-#J$mS9Tng2;45E zXBa#-LyR#cPDN;CXlmekkR!=KIOvS2TW^yc=8r5ThrY;my8d3#Hfs()c?NnoYCQLn zcAv-S3c=AO#SF20d5 z`?8z|KfbvRXiVC&$+HYwTz<6>;A2Eyj_2p1dSs{B;{lXJNIh6KeN5lgEU93~$4a!O zQu9VV4C@T&wDL3)R+iN-d(!hiSlM&fPnxOcRmYF$PvH8_aw(BQ;h3m5C4hmkACpAQe?c3<bo67O16(B|eB3=WKY$cvjIo_r;ibSN$+z%r6C5=@^ z9Q1-MY_DDcvqxw|eW&`|CT-_b^@s^_MlI1W$Uz_wCN>FCE!$s!z2&~1`|Y4T=EyfU z+Y<-poC(eOlD>#6b3X`KB{G^8y32nGj0A(hfw75Fynj@6E1O+>oL>u9NF3}rKUw5LZ8JXV&k=8KEtcNn=%IQ^DTMlUS?CI)ut3|tqCsMEg|RxOu%)+1Ztcpax669&oH`jZ z8AGI3pk3Wj?h)dze5b9S0z+vPZ5H3nKe@~m>_Gh(dwzg{_8@AA6*{ZPEfDQ-le+h)9^L5`Z*yqzaW?AY$U6xie+;i z1$|&k?eNbrHui+Q>oC8396r3xPu%QxXYD90cEEU9---#PR9iC|SVTK7Ft^av!%I1Q zPb)x+K{B@AY82q2mVviDIg4Oty2R&TIG>@kh0puMv$DvS z^}M7(kt2Bfpj3pXIHs5`PDkZfe|v6CWbZ7NObUlF_2}a(;38fbb~SCgYO`HWI=i@! z)X`h8!u<-%6V*(1bry}|GzD_O6||Jm=QW}(rkDGsx)SM2<+iqNGM*U~1<>~wa*_KG zHS?)80&D`Hm%rs@)V+P;&u90;H-1KQ_b=v!`q$F(+R79okKV=k6sf6qgeuyO=Ugj8 z)+OPz1lXqxNi*}^C%e$^F_aHqd9_LPb}h>$Kw-QW@_F^c@-*1r2&pu>fUD8ejSepZ z#tar@5M{Nw(`5V*6?yBgtY@emLxouv@=m8BKet7-q!>Eqga;~*=nJaGvQ?<-9fS_^ zjjN+ZUm{-?gMnQyqZLv_tQ4;Pxk&$}$dU0~NctpwoZ_b&9|vxC>_yFU;cK4PPys%|Xr9-^uu;jk zdUb+<$3crMy90B(vtm1opDhH{XP0n41_S50)wS}6xhh%0u;qx!`DJJ4&&&H1jisaC zS(?su?1$;NN0E5pv3Jat0^%fFvHJgmBtg96ASvUe8efpyEU0btfI9eWs3-y!@6AoD z5;EhpN=xO*|Lp3S@9TTh#-DrlZ5pDXIa#^^){UiQ;g#xThM0Y(Unpd5ZpdHK33$-7 zNR|^MickFUpjTgVI~Be%qc&a=x817!wIgzrgJ`UGHOPfpyopAhK9$?<=!lqw>zmk7?*g;kqW^YfM5WCUFgASpwo^%3ICZZcU#pH>=`5l|o74 zFa82JIb$Ht>d3W79~Rtmd|sv6h1mjMeqT_cz^;d1O2Oq`sv|zl@WRA(PM*?vzMuq- z0?a=W*mwrry*Hh?B}VuMYcBu5Mz)cT_8EJC$J)}z7AqG&z4z301}G9*ae6uctcHEa z6q1>v2eSCj@J1;qVCXL#wb5w$?d0t|_>Sex53_%uWk&HabpV53pr%-L-_ zA}>>Au0E5rA{!`I4B=S>V8lB?N*HMJyX2PP>Nh;I0|lApH_{RZO7qT*Wojd%1BUYW z+|-ODKoG#2~5C1muEw3w8vU^&cvIc!e<*HZn+p~Jqp(822y zDmTJS7JC=n5C(S#vpssTYB9GzBKjA_PJo&jmy(0|f?(v19<{{F&b@fzJuc1@w17xl zl&0U35Fm95zEbhk{f3SN6dcA9X+_JzI+d1p=^kG$dI$woNzDPJY z-GR|yd(!$D0F_6)BmdYhsZ;O26;{jp>|iFPcK!+L`)0$--744@|H(YlAQ}JkDy9(% zGR9=^D4W=h0(lo|DSYaCCE8rS_SEI#$|9KE=Cv8!2KVX>ykST!rNUpLB%un8CZ=E1VEozJT*pOPy-+ijwlcw@I@<;rk5(~Z z>9ZW(b_YL0Kd9!2dl_#}vOTA<2q3i+tY$KTgQE@Ah?`~{-K zQPd#5((BFVuc;;I%s1}q3f^u_9*SNO^%^_1!#A>{ zyQo4{bDPX}yp$b5yv;ShIW9+x5sp%1LB+y-Hzeoh=6=&UW~l z-)Fz8*xIJaIzOjWRm8_fw70!v)2B(sX?{$({i9L!nr(HC@*uX$d%s4}V5DHgj)2Vm zdyMbpD2^g#yiFMvnm`OENP~ekFjl_&(8I;1OK4&LutjE!xi15`>cj$|~*dIcn`{`czO| z`D75G?(Ptk)g9MGP1qsDa@7HMr`wu-!+w$kL2hkl)&Y7#Fe~#hfUP(Z$G1cZCHv|A zL-ymv*z0;apA4dwi40cqe{C2@E+K-1*$bzqiDF;fWP^FfGEb6Z_6#; zE)5<;s`c;qJ%k(TgJZ%>%!6yXW!X$~{ri)%R1NXD^KA+AtOTIm3<^XdVhT=hzq>N7 z!ICUJ--&~)9+;MS*+9a7J~h$kso`uY08G^V17jo-gT(*ms_EdD2s%xwRXsKZs!wcu zfa0`gdw5DgA}#Rc6IGqI2cMT1tIpuTg_4wtSOLKbBrCWMPM`Hsj+pla|UcAXNvm~;KBLHZAH0@*sz zo9X*gX@0BwpbwMTCn$(hR8{$9fPa=;1ClMccpb9M5R2>K6CNp`8DCi)UC1p^oi;;K zH7N!J>~;4gjOgj?N`gJ@t%n-#61{1gEJhfUE1F!E9-Op|N*yFiMlNyz&F%%>?U zR5JW%@grVno9K9n(sXGEuH>Y0u%RIFTA`*G6(-JEF?sF3rxXy~q7sgf+lCJYHhj;^ zPwr{AZZc9v3-6~oOMfbbi+GE>E-U(f#33Y8mFM@xW}L+050ieChmCgM>QdDGsd+P^ zUk6>Ce{v(->vu=Uu&GlSa&Sdakap!42X5jEBeabElkPTMr3CWwDm!!=d}{#O_x`p- zC!ZPYXA7|3`=P%kv1=AP%?ymq4NR-O>EFYs;GCEsg(>z;jOA!VeLjWm^!RoH3+m1f zd|w|RrVXa9^CuE3y8Q8F_wdpytop@dUg-MApV4yZn*rh*ens27;EYpg&a}gSu<$x6b9&rEqX{5HWUYJA&Qb$Zet^Xc?g^_Z`miRH) z0!3j-NXZpleaiF&NLY}}D@V=%`N)8xr1CTVF5W;nrCoPkFM5o>^D_XHC!?BQC(Gtn ztwc@y6GWyRy7otOnoH$|&h@xzgL*bp{lowwMfQFrp}75bL_a1Td_TOgkI_}aa7N#O zqKtILlbDz|C{L4=5v|N0rMWQtvh;28ER71rHaraggY0{og^LpXTVTa_HY#Sp6&GgO z(C4eqIyjhC`Bgi>8gIw-$N?Bvm|=v}LjJ5zGyxt4q*OBG7KRpSIJxNZPoEW&kgKOXlV|^_ z9GKus10i#dBW3VfWds%9e|*I5{%qI0@PXE0%;Ai}ns<9C&c6 z%XLpRv-{{;Da=1nI&jQXRJ=;mg(2Q!=`ES69HScjI|V34IB0rfxx%buf3ylOkla8F z_KebUdXZoiN8+PvMx?$$0esh{!~5+!G3_S)O^?F{)1>$|WchPfg$mV)aRmydaEM%P z8!@dX)r2wp++*7PA@JK9$1PR8{nz>YrrCs4t%imiH@e9_C~9XPZ(JG)@o?fxToL!# z5~X3bG_X&HJeq=RgY1ic30oV!|yx_{Gj zU-Y5V)`wEfw3d?=P9@1$e(-(G$&$+%p#s+Dcc0}L zSu@5E`;vH=`R_%ocw93?D#K$V9N{{QkJ5&d@d32TQjEH84D-?DhshQ83kAbEOh-2RVWiazd*p9DFVq zQ}EoAz%vCX|B@HqN$+4@U-IoMQ~L~)-y8DC%Z+cH8b&}BJwTjFCAoB*8ZAJ)*y6}! zW*~oN)d@6ucu$oiG4I74xN+blZsKkt&m|A($_ttZpQ+v7wRs?-_OX5 zjo-(MO{FTbowVLAL8o44;GcQ@G??XtYN#)z>w<@StfpIgk*4v5$&XjQt1A2WT>hxm zsab3T$a4FE2DmCY=zzrriZ2flu)$3hiyfl*C!#DD7OkotgPie?3}<)N+T6LQeOvNz zYIJmAzH-9dq-mmO>2@SnZ2XqWw3h7)760w}^;CPmBwd4NhCMwf+I*my%LFE2P^Tu` z$JgOhU`h@IV20lR`}i^1bMY~FlAaXgajZGxC!VT7khan&Nr{Mv$m!jt+n(lphs{BR zcBIHQ@FT}%{+v=RUh64RF-;6WxIfCkN-rgbi%GhQ`sx5wXb%2MXhvH#v^=bK%b9iz z7I)4?%n|gN=#an^A@1=^xlD_Kah_@T7>9|>X#}V5yt$J8^jf5z`TxUg+Y0~SpILs@ zL?K-oCT^;?26uc+9vshr_yW+WSVPARC)%{h6JN(Yr2mqSs&TGiC{OnP@%iHf9QJfb z^U7J#p}ZL*ZaIjmom9pgy~HobZnAPaiUiPG$@qCGL7qz!HDjA2e#iow1Whx?qnZY0 zjM;)$+l|GsDC9r@#z=rqXL2B(Bu*21*v)nL)Or2??c;k1muv@N;W8Iv?zZ&Tg@Tpy zP_1c5g0aB%G9*fZ3(*u4Z$MF?G z1KIX*@Sf&#njWA~iyzb=WWe(zS)D|Q#yF2SNBzsy)vF|G-v@!l*&Ku*(@s9}J>V#Z zL;NDH;#ey(2PT>>hT^H@ceYQ(^5)2bc>AFSa0E=mwU~~d*%M3x97jjjhl%gtv`=7x zLy7VpDQVG>qa;$yl>q53K(g#_d8ijks43T18TB?bh0TjEM9M4~=fNN}B#-N)3p3_Z zLQo}za85O1zTRPW_SR1U2v5;$G|wS(zBop+G}z&Xf(Q73ohi#0WdTbeSGO(q?is%} zb>Wp3#>O^t)V{~&`rhVi`^#7dL7j+(B>jvs?;^W7V1Kxk4rVXS*GcpzMr}gvT+^D% zHg2|;J{@sSyuoaJ`(t{oK#dY)hL10t-%^}`cCQsPxxdcC`5bAr75j<9|OKh7fYh}(_Ppp`Emcl=cw|^ zDud}^i-W!y{ybh`4-E~C0nsWJJUUNwNI+x}6F_DR1`Krk=E$p9dLZyxd8DSgrA#YG z5HDxJk6*Vvou9?v8i220E1m4~^AqM2;WQV_C_7}X0k*VgF7YmiJFZgFO+eQtE<=|I zO;kfZ8Yh!v^0khJ^H?d?!h!3z0rJEJa7@M@^l94sxpv3^taYXnX3DW6&MLD)+bw9T zXb6h%&i%UtH+{-a2INhB_03vr>gskWgQn}Ba}s-2FMi8K-!SCjQ&p7I5y+7d!1Inr=j76-QhRk31CU}I^tZV1x;3r& zN%FfAn=2psw6eobYHd%?d&%}pqWdoH;{DhpelFZ`Ux6n!57yJa9RGxIi8fMTweX6o zX9k}C!b~##9eIW3Ze4y}^-9G4nR6ay!8kx{tC`NdwE2~jP;H;8U?(BGl2M1JfgtJ~ zi8qsPy#BL5fI`6AvDnf-1|ayHuC_zc=eh49XR}EUlAY0qNmL91l3j}Q-19(Rg&dMv;J!K$W!>)E7D~%FjbAXq;MgcMF%F?cKYCT12MhKu$WwsQ;Yt=d~%1c zpP6{(^g#9q``JxGv6jC+Es5esaxsW#VDi2)+H#CGISa<~?Gs}{#= z@>Ua(5Xuu6e1}o!XAzSEgy3cL30iOD1fV`bG`ZIwtMPRCCkU>P<(2-V_Go71i{sokH=$Akzk(?LT&Zq;Y|j5g%Y_xil~x!M!_kp&2=q#$BKsM2XMvOdiy9U4iI1=?ny zT3*2j{Frtm??m-4udjbWj(+@1H|o#yiz~-aZNiwHv6n!fvcR9glHLk!`&VSxt8n%G zHH*&s)u7$YP_*Y2LBS{2etWREUzk1lJ3l_GE)=-4uan*eWY_)$2(SohEBxp9t>j!a zc)EB(9QeTWz~a6nA|tvsO+cN=bB}Y_5{)CqQ=T^TzoEukdDUS}&1iE$#_{a*M+$y!A*=#IxyW|%rkopGLxOoLG51wV&JW~$ z3VDy;9uYD+xaGAOJoZptx^Nubl#|sh8@0C^;mKk8uE&`U!e_@Emn;&ab!g+S+fL_P zRTq?3)l&VYY0n3iqfCV5`(+ZNk*qQTG+Y6=KM5_VeuM$CXS%ur?mEsV`hTOp(mK2R zcKqYBC~e}dsze2w%ZM|z!s5%1m2Zt5FWbMEFcPByfP?_+pTzWxZ_b($mw|x6Ui$31X0g5`F(Jv#-tXjIDsB6 zN>2a+dGb$+C`|hq(!fo+kaci)gJ?yS1&`4To3n_)NP>Sa4mt-wvV?&#&nA4Rclnvp z++_`&ulk!&Nua zMskHB=Y>rq;Oq@IUETJ2C`#qKbTROzkrP@tp&V&4YT=L3E01p;Bb(XzZ80MZ*2aAW zo0++-P^L&sho+6AsAel;SZs+jbbUkU-Czw?)Qu7YkkF#ACu$JQxbE*p-dGEbetk|A zLe4&U7w7L$;|BqQ6=l$#>i-E2m+%*TnGmFC(s7h&XQAKlgpkXcD_u~$WwMRV%aG9?M7$Mrq_*EHDR8g^N;15}d&Ai|@an_K zaOfHFf%h3*4RAg-A9YoeM*BHIp3WH3C#q%Xb|~=^FayAeYNNs2%bXbZKezk&2Tnfy zA8>M;gFUIKzwyfG7!%ZE3$p(wM0_L0CfPc79<=~p@Sxvj3$t{bIFWK19lBH3p)<}5 zEb+{~>hvAU{rMN*3u>#0pYp1`s9-UF#(gRD{art;QbbUM)ZlCXG~DFoc-9uuu-M88`8(*xcM#*Ls(0W$MllP#meZ>&z13&c-pKk0t;xiRa!&k?=p zjIK!*PXVrDkmM(YUW|6qS?V8-ph{6LxkQhX=(yn_+96wyi{BsggM~i%^-B*<{MJ>O z@ckD6%D*K|XZ&x{G~PSM$x@FUjH-jBtP&4a8>Wm#o-VWZ*^^J?Fk5q&Y}`}f00NZw z?`Lf9+>Z})%02Y!4?o4vHiJ(tbx&g2WV;C8w0%FSt-h25wl!6EU;YKCdnw{0X&pbp zDdTO;p}+?MYM{SCF|ooU9br_7J3nCM_bWftKi3eztYegsGqpIVJ>gHAIrARiAMJB^ zgF<8`0K#>Jmx~*2H4mji zU;B1nbqHvBB8SKvjwteH6G!-ieMxoDga+(DgQO5KfCC!2)>kv2lba!{8||{0hnC(C z4K_iR)dGD!)%t8sQm`5hDXQl@UJUhdB7vmft=sZ{iN?-t^2PNBP`lUz?!_oq0xmAO zCos=Aw|fpqS1a#Kx&BtII2^!*BZa~I7vMU6uo8J-x)gj|S0ZroxB$49EFGmX}tcfMmRx|UP^K)0t5P3VyiU-zUYil7KB4C$%)U{>}Z z25~|XvsL=3Bc6KbE{Mo6^kk0rnDHTZ-ExK8q&#y~Sd?+lQ=>2}Q56~hAX>Y@ebYEw zRCC5TV$(=4KHWaw=%}7%=Gp78MjpnR%6n1nzW|5oQgXQDCCd8FAx(}a**g#XDl@+wxc^L82D>l&cD?KqN) zLLM!g7>#thI2DbM*mKbJGGIFE@N(2`OF6pcA9D}=6cdP3?CTL6Z+rD(e@FdQX27wb zZzZYiS9~1t$WMu_^wd-rcLb)!*V>+4Y|AJhbu=&cT}7J(nHvg7{fRR3erDx4Ud!M1 zgaoyR{o^N*%YVBQ2Fg=>uOIcfeTa#YMbg+XG)la!<#prf9M}j|2Z(rf)urvJY*6nnaqGUNT> zp}(=8_^ld?pGd{BQu0mct1ZkV*};D#w9%UN3Z-*S3mCs(ft-G3NHu*`UyMgFFZ3Io z#>6A1#C3_Y;w=#d63!gh^g08NS6CQ77cc^9el6|W9}i^L)Z~?Xo!3~KJrnhAIi}62 zV@Z#PvtT^)lcW1WvK3AeWhC|)cP2CCDyvAMj_VY>&M?0_K~s!;bbR$=y7``$({k5z zBF#(#e=7@vNscoz0M~lm=To9ieq_~;Z{Cq8x5sB;ip%>&D}Ub`Cx`3c(zaR1sJS*g zK0(-)Fvt!~F*eox1dg@N1vsU*q{7Fc-XNtO%=AYtspD93+$rlU$9LH9SJ3c89Gm2{ zG8N_b#RIZKKqCB}gp89II9X}Uaf(0Cm32Nlj+*+hDCPMlD2@n{M~+gCE+HK6Z|4w@1qK#!kMyu;7V~k6$)tUH9SCL-_mIMXvP;&Wysu;`3~n& zaFgGCXEFDTleU++D`XDy>&6nUcyX|{$QKhl@&hXtFK6y3itG-<;z!SnZu`($PizV{RQl<{Q_)7pCLvoC`kIa0XC&S0H+ITI5jgg(ih z5fUsalRY1T?aY(kb6(jdlsX)Ls98%ry3|xLGB8w>@R7{RvQ2OJ2*Q;|$JF*+DIOI^ z`AX%q|2a?n;962$i~X)C*W~KxQHbNzjyh8ams|k0%Lq%!_Z$><7Wp@J7SoeD3M_W? zuSJsoON*}jt0<>udf5s_ndNRChpUQGX|mh^*ZUGy0kva6aP%q(zYi6hD3QVY^4*VT zYnMj%v;_v*FJ$WPPYgY#Ms}1H-FY+s9~4w`XFa&c1ye4qjC;Q%F0 z4MH!XhiR7#l{0mHB~|-{<1FW!C}}?D9V}WZg7h-i94)yksdY=@`?R^+2O+PMsIs2a zFgEtOEoJ&&rt14RXO^K0gLO?4-WNF*Q$lom6%P7~>5uWJ5)2dVj7Yn{yXfKBO?uE! zhR7O}8=YIZBd=|?6MsIY;gWV&S%?v0f75_Pp2exbLc$T(sl@s2NQE&lg8ehg2Hs;YzDIvrAqtJ zS`DMZI%SNZB>dqxL%7WIMAc!h=gcm=gLI`WZ-=hC4L>NeXFg7_^MkijdT7m} z!FP9U*4f{5dq#|3oF?eM!`TZ^4v!;v_TFaW$gWXT?b75{LeaT0E??t5Nri8v)e=gz z&-~p`y+<51(w0Qa0GS-2Php3O_r)hz>&^O0dI{xhBjXPGhzLbyd)|0-Y(qIT67*<= z=H=)QKYmRO^-!kY%Ke6Zj`BQe>T4<-r{*z)wdYEjP~gk-ZwtUlp)zP_Xen_7+O~Fg zjaiE7P?tu}9r8BKJ_CXf`l5{N?R&Bho#FIuXM0L{N_m`1wLvra z=MgnAL9s3e1TKTA5RNzctchvr-v=-Fk3WlQLPa{(mmUKtQ`;f1TYqngN7oh+!62@@ zw2!zILrC_IKQ<^Ol`|IC;w1<0hFXf2ps>z;k>Q}bM=NxJloX)Lh_6Mb4BzmO)H`$m7CB5Wb z{^U}gi60HczAc!gyyLoc)0IU|yis%v1u{$A-tTApXZZ)`mz0Q*Z*9({^mU?0j2Ato z*Pzr;GW9Q;@qc;yF&}4j*Q)3+x`=-#MgYe^m6;Wb;}coZ>MO+!2?@^XYq{kyRgrWykiEk?}8M>Hy# zcKYIT6jhK(E|aQVzJqpeJ{s}B5(E#lR);h%ngoMfArF%uSWKit&fbO~dZ&A49sIUf zdO+pP)07O{I~Se?Gmd%kDG1zRF~c)Wod8c1j7Y`QqfOoiVF0~cb<#%IGm~bt{Mc>y zxdcXDzzJb#It=ku+X{g=#0&SJF9n-rGLMx<;tsGQuPGRRI?HHi>j?eVnXDck;Z`0z z^?A|CrK+tB7ijk}o``>^q?H_j2WSL=@#S&JyTHofKC!(g2e+NqE;2vU*9^4(dq7J& z-}?CT zvvKgek9v?Ooc}fT0}PBC7-UbZvW*X~dz*ewDEd^J_{ORwE0&iZ+T~PgKhxgRDumC; zs%+6x&AnnBDGY}cm_Hn@EIYgS+bQF^tKz_G1z&aQI9T$@9@O|C(BF^nVOr3G37yxs zYGqDYs+i6XJR3EE!7}*+Lw_SLcT!H1t4+{bmRDYf5;&&$pZuk{QS{FFMVosc$fPr# zz0=g3xu?t1>&3l|b1w^(8C7=ir8Z37#(Uy!5#zi?Y)o?+*mxR%H%xVKv?%Wn{|Zl7 z`(X)7Uh?+wVsG)^?@WQSKjCa~zZqmy%o|7rluXb77e@@jh;Av+? z8>ia65Y=JxQL<=`vYb6RZ>9HE=d*9m7VBHTj?l*8wEi_~D-s<=K`+zfFqERaE<9;80zvqn~DT-sS z>HB?K?)&BOE5D1uuTH5Ji!U}PnA9&;q!!~5#JPQ{VT)}imjvT+j=%cT=D#gloSC*I z_SS^eW>bu-Ji9cOeGEGkddhhM@1BWWiQlv&4CfSfE$X#ahX4C?r>e~TTMu0qdJ)LCZ1UCHORl^V zo^6%KG|RDx?NPdB1$(~WcOAWnZ^CBDpHmB~no_79S2an)&S5o zq3@2K6jI^+Zk@hvYCdnd*-p`~3~&GZD_ba9^G4` zyIQW|G{3$~ueR`z6KgkLQ41>X*q^rIyxbg)P43JS4h3r|SQt7KC^j}NV*PbG?bw9X zzqS=dUp0IAc;%j-uP(Eno>unJAh6U=9eDnE0K-l}IR=UT{u`?GZ}Z zv&;WxXK}XrXK1nub@p7Gzd%-N&B?O)OcSvgKUn$u)2F_RLBD(_sHJ zjeF-)OWA+^GAny`_XYg9aV~lF?rnXo`$Cjo=N6@E`Km*b^MUFB+cK>!p7-{CZ@*u8V{X@4q4M>$55M0lQ%_p$GWYfUirVkM`8b4^4s5bg zx;$;}Yu4=5{;oTx`h}+~+4Fj(NznsV<{52<<)N0{=bSzst8o1&$8PbE>8kf;efQ8( zcav4muibt1+4A(&XZ)g^k1sKGuPU@W!>YA_ak7Lvg9OK}oUQ%arD_*5-M_U{Ytl{$ n>(KWLuavBAd^+XseY0O}hCAN1^E|S?F;NM;xeq_({{JQb3@Q2| literal 0 HcmV?d00001 diff --git a/about/src/main/res/layout/fragment_about.xml b/about/src/main/res/layout/fragment_about.xml new file mode 100644 index 0000000..5d694b3 --- /dev/null +++ b/about/src/main/res/layout/fragment_about.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/about/src/main/res/values/strings.xml b/about/src/main/res/values/strings.xml new file mode 100644 index 0000000..289883c --- /dev/null +++ b/about/src/main/res/values/strings.xml @@ -0,0 +1,34 @@ + + + About + Privacy policy + Version %1$s + Copy + Oops! Something went wrong + Download QR Image + Wallet copied! + support@ark-builders.dev + "Send us the transaction id by email " + " to receive premium support. We’ll make our best to help you with any issue you encounter while using our Software." + bc1qx8n9r4uwpgrhgnamt2uew53lmrxd8tuevp7lv5 + 0x9765C5aC38175BFbd2dC7a840b63e50762B80a1b + Donate using Ethereum + Donate using Bitcoin + https://www.ark-builders.dev/ + https://t.me/ark_builders + https://www.ark-builders.dev/contribute/?tab=goodFirstIssue + https://buymeacoffee.com/arkbuilders + https://www.patreon.com/ARKBuilders + https://discord.gg/tPUJTxud + Discover issues to work on + See open bounties + Buy us a coffee + Donate on Patreon + Donate using ETH + Donate using BTC + We greatly appreciate every bit of support! + Support us + Website + Telegram + Discord + \ No newline at end of file diff --git a/about/src/test/java/dev/arkbuilders/components/about/ExampleUnitTest.kt b/about/src/test/java/dev/arkbuilders/components/about/ExampleUnitTest.kt new file mode 100644 index 0000000..c00b709 --- /dev/null +++ b/about/src/test/java/dev/arkbuilders/components/about/ExampleUnitTest.kt @@ -0,0 +1,17 @@ +package dev.arkbuilders.components.about + +import org.junit.Test + +import org.junit.Assert.* + +/** + * Example local unit test, which will execute on the development machine (host). + * + * See [testing documentation](http://d.android.com/tools/testing). + */ +class ExampleUnitTest { + @Test + fun addition_isCorrect() { + assertEquals(4, 2 + 2) + } +} \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 7e232ea..19dcc50 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -14,6 +14,10 @@ androidXTestEspresso = "3.5.1" skydovesBalloon = "1.6.4" flexbox = "3.0.0" +composeActivity = "1.9.0" +composeBom = "2024.06.00" +composeCompiler = "1.5.10" + [libraries] coil = { group = "io.coil-kt", name = "coil", version.ref = "coil" } coil-gif = { group = "io.coil-kt", name = "coil-gif", version.ref = "coil" } @@ -34,3 +38,12 @@ androidx-test-junit = { group = "androidx.test.ext", name = "junit", version.ref androidx-test-espresso = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "androidXTestEspresso" } skydoves-balloon = { group = "com.github.skydoves", name = "balloon", version.ref = "skydovesBalloon" } flexbox = { group = "com.google.android.flexbox", name = "flexbox", version.ref = "flexbox" } + +#Compose +androidx-compose-activity = { group = "androidx.activity", name = "activity-compose", version.ref = "composeActivity" } +androidx-compose-bom = { group = "androidx.compose", name = "compose-bom", version.ref = "composeBom" } +androidx-compose-ui = { group = "androidx.compose.ui", name = "ui" } +androidx-compose-ui-graphics = { group = "androidx.compose.ui", name = "ui-graphics" } +androidx-compose-ui-tooling = { group = "androidx.compose.ui", name = "ui-tooling" } +androidx-compose-ui-tooling-preview = { group = "androidx.compose.ui", name = "ui-tooling-preview" } +androidx-compose-material3 = { group = "androidx.compose.material3", name = "material3" } diff --git a/sample/build.gradle.kts b/sample/build.gradle.kts index aef1642..5897047 100644 --- a/sample/build.gradle.kts +++ b/sample/build.gradle.kts @@ -71,6 +71,7 @@ android { dependencies { implementation(project(":filepicker")) + implementation(project(":about")) implementation(libraries.arklib) implementation("androidx.core:core-ktx:1.12.0") diff --git a/sample/src/main/AndroidManifest.xml b/sample/src/main/AndroidManifest.xml index 8bdb844..4680920 100644 --- a/sample/src/main/AndroidManifest.xml +++ b/sample/src/main/AndroidManifest.xml @@ -33,6 +33,7 @@ + diff --git a/sample/src/main/java/dev/arkbuilders/sample/MainActivity.kt b/sample/src/main/java/dev/arkbuilders/sample/MainActivity.kt index 1ff5093..db201bd 100644 --- a/sample/src/main/java/dev/arkbuilders/sample/MainActivity.kt +++ b/sample/src/main/java/dev/arkbuilders/sample/MainActivity.kt @@ -17,6 +17,7 @@ import dev.arkbuilders.components.filepicker.ArkFilePickerConfig import dev.arkbuilders.components.filepicker.ArkFilePickerFragment import dev.arkbuilders.components.filepicker.ArkFilePickerMode import dev.arkbuilders.components.filepicker.onArkPathPicked +import dev.arkbuilders.sample.about.AboutActivity import dev.arkbuilders.sample.storage.StorageDemoFragment class MainActivity : AppCompatActivity() { @@ -53,6 +54,11 @@ class MainActivity : AppCompatActivity() { findViewById(R.id.btn_storage_demo).setOnClickListener { StorageDemoFragment().show(supportFragmentManager, StorageDemoFragment::class.java.name) } + + findViewById(R.id.btn_about).setOnClickListener { + val intent = Intent(this, AboutActivity::class.java) + startActivity(intent) + } } private fun getFilePickerConfig(mode: ArkFilePickerMode? = null) = ArkFilePickerConfig( diff --git a/sample/src/main/java/dev/arkbuilders/sample/about/AboutActivity.kt b/sample/src/main/java/dev/arkbuilders/sample/about/AboutActivity.kt new file mode 100644 index 0000000..1b9bc47 --- /dev/null +++ b/sample/src/main/java/dev/arkbuilders/sample/about/AboutActivity.kt @@ -0,0 +1,26 @@ +package dev.arkbuilders.sample.about + +import android.os.Bundle +import androidx.appcompat.app.AppCompatActivity +import dev.arkbuilders.components.about.ArkAboutFragment +import dev.arkbuilders.sample.BuildConfig +import dev.arkbuilders.sample.R + +class AboutActivity: AppCompatActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_about) + + val aboutFragment = ArkAboutFragment.create( + appName = getString(R.string.app_name), + appLogoResID = R.drawable.ic_launcher_foreground, + versionName = BuildConfig.VERSION_NAME, + privacyPolicyUrl = "" + ) + + supportFragmentManager + .beginTransaction() + .replace(R.id.about_content, aboutFragment) + .commit() + } +} \ No newline at end of file diff --git a/sample/src/main/res/layout/activity_about.xml b/sample/src/main/res/layout/activity_about.xml new file mode 100644 index 0000000..12aa53b --- /dev/null +++ b/sample/src/main/res/layout/activity_about.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/sample/src/main/res/layout/activity_main.xml b/sample/src/main/res/layout/activity_main.xml index 19b94cd..09d74b6 100644 --- a/sample/src/main/res/layout/activity_main.xml +++ b/sample/src/main/res/layout/activity_main.xml @@ -41,4 +41,13 @@ app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toBottomOf="@+id/btn_open_file_mode"/> + + \ No newline at end of file diff --git a/sample/src/main/res/values/strings.xml b/sample/src/main/res/values/strings.xml index 5085fa2..0701830 100644 --- a/sample/src/main/res/values/strings.xml +++ b/sample/src/main/res/values/strings.xml @@ -8,4 +8,5 @@ New map entry Delete map entry Empty + Open About \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index 265ee03..b7b6b93 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -39,3 +39,4 @@ include(":folderstree") include(":utils") include(":filepicker") include(":sample") +include(":about")